X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/3789b528d8dd8aad4558e38e22d775bcab1cbd36..6746dc89c47ed01b165cc1152533605f97eb8e8d:/docs/app/view/cls/Overview.js diff --git a/docs/app/view/cls/Overview.js b/docs/app/view/cls/Overview.js new file mode 100644 index 00000000..d9a80497 --- /dev/null +++ b/docs/app/view/cls/Overview.js @@ -0,0 +1,308 @@ +/** + * Renders the whole class-documentation page. + */ +Ext.define('Docs.view.cls.Overview', { + extend: 'Ext.panel.Panel', + alias: 'widget.classoverview', + requires: [ + 'Docs.view.cls.Toolbar', + 'Docs.Syntax', + 'Docs.Settings' + ], + + cls: 'class-overview iScroll', + title: 'Overview', + autoScroll: true, + bodyPadding: '20', + + /** + * Scrolls the specified element into view + * + * @param {String} query DomQuery selector string. + */ + scrollToEl: function(query) { + var el = Ext.get(Ext.query(query)[0]); + if (el) { + var isMember = el.hasCls("member"); + var scrollOffset = el.getY() - (isMember ? 145 : 135); + var docContent = this.getEl().down('.x-panel-body'); + var currentScroll = docContent.getScroll()['top']; + docContent.scrollTo('top', currentScroll + scrollOffset, true); + + if (isMember && el.down(".expandable")) { + el.addCls('open'); + } + el.highlight(); + } + }, + + /** + * Renders class documentation in this panel. + * + * @param {Object} docClass + */ + load: function(docClass) { + this.docClass = docClass; + + if (this.toolbar) { + this.removeDocked(this.toolbar, true); + } + this.toolbar = Ext.create('Docs.view.cls.Toolbar', { + docClass: this.docClass + }); + this.addDocked(this.toolbar); + + this.update(this.renderClass(docClass)); + Docs.Syntax.highlight(this.getEl()); + + if (Docs.Settings.get("hideInherited")) { + this.toolbar.hideInherited(true); + } + }, + + renderClass: function(cls) { + this.classTpl = this.classTpl || new Ext.XTemplate( + '
', + '{hierarchy}', + '{doc}', + '
', + '{members}', + '
', + '
' + ); + + return this.classTpl.apply({ + doc: cls.doc, + hierarchy: this.renderHierarchy(cls), + members: this.renderMembers(cls) + }); + }, + + renderHierarchy: function(cls) { + if (cls.superclasses.length === 0 && cls.allMixins.length === 0 && cls.alternateClassNames.length === 0) { + return ""; + } + + this.hierarchyTpl = this.hierarchyTpl || new Ext.XTemplate( + '
',
+            '',
+                '

Alternate names

', + '', + '
{.}
', + '
', + '
', + '', + '

Hierarchy

', + '{tree}', + '
', + '', + '

Mixins

', + '', + '
{.}
', + '
', + '
', + '
' + ); + + return this.hierarchyTpl.apply({ + tree: cls.superclasses.length ? this.renderClassTree(cls.superclasses.concat(cls.name), true) : "", + mixins: Ext.Array.map(cls.allMixins, this.renderLink, this), + alternateClassNames: cls.alternateClassNames + }); + }, + + renderClassTree: function(superclasses, firstChild) { + if (superclasses.length === 0) { + return ""; + } + + this.classTreeTpl = this.classTreeTpl || new Ext.XTemplate( + '
', + '{link}', + '{subtree}', + '
' + ); + + var name = superclasses[0]; + return this.classTreeTpl.apply({ + firstChild: firstChild ? 'first-child' : '', + link: superclasses.length > 1 ? this.renderLink(name) : ''+name+'', + subtree: this.renderClassTree(superclasses.slice(1)) + }); + }, + + renderLink: function(className) { + return Ext.String.format('{0}', className); + }, + + renderMembers: function(cls) { + var typeTitles = { + cfg: "Config options", + property: "Properties", + method: "Methods", + event: "Events" + }; + + // Skip rendering empty sections + var html = []; + for (var type in typeTitles) { + if (cls.members[type].length > 0) { + html.push(this.renderSection(cls.members[type], type, typeTitles[type])); + } + } + return html.join(""); + }, + + renderSection: function(members, type, title) { + this.sectionTpl = this.sectionTpl || new Ext.XTemplate( + '
', + '
Defined By
', + '

{title}

', + '{members}', + '
' + ); + + return this.sectionTpl.apply({ + type: type, + title: title, + members: Ext.Array.map(members, this.renderMemberDiv, this).join("") + }); + }, + + renderMemberDiv: function(member, index) { + this.memberTpl = this.memberTpl || new Ext.XTemplate( + '
', + // leftmost column: expand button + '', + ' ', + '', + // member name and type + link to owner class and source + '
', + '
', + '{owner}
', + 'view source', + '
', + '{signature}', + '
', + // short and long descriptions + '
', + '
{[this.shortDoc(values)]}
', + '
{longDoc}
', + '
', + '
', + { + // Returns contents for short documentation + shortDoc: function(cfg) { + return cfg.shortDoc ? cfg.shortDoc : cfg.doc; + } + } + ); + + return this.memberTpl.apply(Ext.apply({ + // use classname "first-child" when it's first member in its category + firstChild: (index === 0) ? "first-child" : "", + // use classname "expandable" when member has shortened description + expandable: member.shortDoc ? "expandable" : "not-expandable", + // use classname "inherited" when member is not defined in this class + inherited: member.owner === this.docClass.name ? "not-inherited" : "inherited", + // method params signature or property type signature + signature: this.renderSignature(member), + // full documentation together with optional parameters and return value + longDoc: this.renderLongDoc(member) + }, member)); + }, + + renderSignature: function(member) { + this.signatureTpl = this.signatureTpl || new Ext.XTemplate( + '{before}{name}{params}{after}' + ); + + var cfg = Ext.apply({}, member); + cfg.expandable = member.shortDoc ? "expandable" : "not-expandable"; + + if (member.tagname === "method" && member.name === member.owner.replace(/^.*\./, "")) { + cfg.before = "new"; + } + + if (member.tagname === "cfg" || member.tagname === "property") { + cfg.params = " : " + member.type + ""; + } + else { + var ps = Ext.Array.map(member.params, this.renderShortParam, this).join(", "); + cfg.params = '( ' + ps + " )"; + if (member.tagname === "method") { + cfg.params += " : " + member["return"].type; + } + } + + if (member.protected) { + cfg.after = "protected"; + } + if (member.static) { + cfg.after = "static"; + } + if (member.deprecated) { + cfg.after = "deprecated"; + } + + return this.signatureTpl.apply(cfg); + }, + + renderShortParam: function(param) { + var p = param.type + " " + param.name; + return param.optional ? "["+p+"]" : p; + }, + + renderLongDoc: function(member) { + var doc = member.doc; + + if (member.deprecated) { + var v = member.deprecated.version ? "since " + member.deprecated.version : ""; + doc += '
'; + doc += Ext.String.format('

This {0} has been deprecated {1}

', member.tagname, v); + doc += member.deprecated.text; + doc += '
'; + } + + if (member.params && member.params.length > 0) { + doc += '

Parameters

'; + var ps = Ext.Array.map(member.params, this.renderLongParam, this).join(""); + doc += ""; + } + + if (member["return"]) { + doc += this.renderReturn(member["return"]); + } + + return doc; + }, + + renderLongParam: function(param) { + this.paramTpl = this.paramTpl || new Ext.XTemplate( + '
  • ', + '{name} : {type}', + '
    ', + '{doc}', + '
    ', + '
  • ' + ); + + return this.paramTpl.apply(param); + }, + + renderReturn: function(returnDoc) { + this.returnTpl = this.returnTpl || new Ext.XTemplate( + '

    Returns

    ', + '' + ); + + return this.returnTpl.apply(returnDoc); + } +});