Re: [xwiki-devs] [xwiki-notifications] r17211 - in platform/web/trunk/standard/src/main/webapp/resources/js/xwiki: . xwikiexplorer
jvdrean (SVN) wrote:
Author: jvdrean Date: 2009-03-03 23:40:14 +0100 (Tue, 03 Mar 2009) New Revision: 17211
Added: platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwikiexplorer/ platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwikiexplorer/xwikiexplorer.js Modified: platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js Log: XWIKI-3287 : Provide a tree widget allowing to browse a XWiki farm (wikis>spaces>pages>attachments)
First version of XWikiExplorer widget.
Modified: platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js =================================================================== --- platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js 2009-03-03 22:27:35 UTC (rev 17210) +++ platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js 2009-03-03 22:40:14 UTC (rev 17211) - * Add click listeners on all rendering errors (new rendering engine) to let users expands error messages to read technical information. + * Build a resource object from a wiki resource descriptor (aka fullName). + * + * Examples of resource objects:
----
+ * { wiki: "xwiki", space: "Main", prefixedSpace: "xwiki:Main", + * fullName: "Main.WebHome", prefixedFullName: "xwiki:Main.WebHome", + * name: "WebHome", attachment: "" } + * { wiki: "xwiki", space: "Main", prefixedSpace: "xwiki:Main", + * fullName: "Main.WebHome", prefixedFullName: "xwiki:Main.WebHome", + * name: "WebHome", attachment: "" }
These two are identical.
+ * { wiki: "xwiki", space: "Main", prefixedSpace: "xwiki:Main", + * fullName: "Main.WebHome", prefixedFullName: "xwiki:Main.WebHome", + * name: "WebHome", attachment: "attach.zip" } + * + * @param fullName fullName of the resource to create (examples: xwiki:Main.WebHome, xwiki:[email protected]). + * @return the newly created resource object. */
Why did this one disappear?
-document.observe("dom:loaded", function() { - $$('[class="xwikirenderingerror"]').each(function(error) { - if(error.nextSibling.innerHTML !== "" - && error.nextSibling.hasClassName("xwikirenderingerrordescription")) { - error.style.cursor="pointer"; - error.title = "$msg.get('platform.core.rendering.error.readTechnicalInfomation')"; - Event.observe(error, "click", function(event){ - toggleClass(event.element().nextSibling,'hidden'); - }); - } - }); -});
This method is a bit too long, suggesting refactoring. Also, we don't use tabs...
+getResource : function(fullName) { + var resource = { + wiki : "", + space : "", + prefixedSpace : "", + fullName : fullName, + prefixedFullName : "", + name : "", + attachment : "", + anchor: "" + };
+ // Extract wiki and set prefixedFullName. + if (fullName.contains(this.constants.wikiSpaceSeparator)) { + resource.wiki = fullName.substring(0, fullName.indexOf(this.constants.wikiSpaceSeparator)); + // Remove wiki from fullName. + resource.fullName = fullName.substring(fullName.indexOf(this.constants.wikiSpaceSeparator) + 1, fullName.length); + resource.prefixedFullName = fullName; + } else if (fullName.contains(this.constants.spacePageSeparator)) { + // Fallback on current wiki. + resource.wiki = this.constants.currentWiki; + resource.prefixedFullName = resource.wiki + this.constants.wikiSpaceSeparator + fullName; + } + + // Extract attachment and remove it from fullName and prefixedFullName if any. + if (resource.fullName.contains(this.constants.pageAttachmentSeparator)) { + resource.fullName = resource.fullName.substring(0, resource.fullName.indexOf(this.constants.pageAttachmentSeparator)); + resource.prefixedFullName = resource.prefixedFullName.substring(0, resource.prefixedFullName.indexOf(this.constants.pageAttachmentSeparator)); + } + + // Extract anchor and remove it from fullName and prefixedFullName if any. + if (resource.fullName.contains(this.constants.anchorSeparator)) { + resource.anchor = resource.fullName.substring(resource.fullName.indexOf(this.constants.anchorSeparator) + 1, resource.fullName.length); + resource.fullName = resource.fullName.substring(0, resource.fullName.indexOf(this.constants.anchorSeparator)); + resource.prefixedFullName = resource.prefixedFullName.substring(0, resource.prefixedFullName.indexOf(this.constants.anchorSeparator)); + } + + // Extract space and page name. + if (fullName.contains(this.constants.spacePageSeparator)) { + // Space + resource.space = fullName.substring(fullName.indexOf(this.constants.wikiSpaceSeparator) + 1, fullName.indexOf(this.constants.spacePageSeparator)); + resource.prefixedSpace = resource.wiki + this.constants.wikiSpaceSeparator + resource.space; + if (fullName.length - fullName.indexOf(this.constants.spacePageSeparator) > 0) { + if (!fullName.contains(this.constants.pageAttachmentSeparator)) { + // Page name. + resource.name = fullName.substring(fullName.indexOf(this.constants.spacePageSeparator) + 1, fullName.length); + } else { + // Page name. + resource.name = fullName.substring(fullName.indexOf(this.constants.spacePageSeparator) + 1, fullName.indexOf(this.constants.pageAttachmentSeparator)); + if (fullName.length - fullName.indexOf(this.constants.pageAttachmentSeparator) > 0) { + // Attachment name. + resource.attachment = fullName.substring(fullName.indexOf(this.constants.pageAttachmentSeparator) + 1, fullName.length); + } + } + + } + } + + return resource; +} +}; + /** * Hide the fieldset inside the given form. *
Added: platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwikiexplorer/xwikiexplorer.js =================================================================== --- platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwikiexplorer/xwikiexplorer.js (rev 0) +++ platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwikiexplorer/xwikiexplorer.js 2009-03-03 22:40:14 UTC (rev 17211) @@ -0,0 +1,742 @@
Our standard header notice would be nice...
+/** + * XWiki Explorer widget for smartClient. + */ + +if (typeof XWiki == "undefined") { + alert("ERROR: xwikiexplorer.js depends on xwiki.js");
Just alert? This is critical, the rest of the code should be on an else, or throw an error instead.
+} + +XWiki.xwikiExplorer = { + + /** + * Base URI for XWiki REST service. + */ + baseRestURI : XWiki.constants.contextPath + "/rest/", +
It would be nice to have these URLs valid in the future.
+ /** + * REST children relationship. + */ + restChildrenRel: "http://www.xwiki.org/rel/children", + + /** + * REST children relationship. + */ + restParentRel: "http://www.xwiki.org/rel/parent", + + /** + * REST attachments relationship. + */ + restAttachmentsRel: "http://www.xwiki.org/rel/attachments", + + /** + * REST home relationship. + */ + restHomeRel: "http://www.xwiki.org/rel/home", + + /** + * A set of callbacks fired by several smartClient classes (callback handlers are injected by XWiki.smartClient). + */ + callbacks : { + // XWikiExplorerResultTree.dataArrived
More unwanted tabs here:
+ dataArrived : new Array(), + // DataSource.transformResponse + transformResponse : new Array() + }, + + /** + * Create a SmartClient class extending isc.ResultTree to allow: + * Dynamic DS instantiation. + * Custom icon per entry type without having any icon field in the REST response. + */ + createXWikiExplorerResultTreeClass : function() { + + /* + * XWikiExplorerResultTree class overriding default ResultTree class. + * Used by xwikiExplorer DataSources. + */ + isc.ClassFactory.defineClass("XWikiExplorerResultTree", isc.ResultTree); + isc.XWikiExplorerResultTree.addMethods({ + + /** + * Override isc.ResultTree.getChildDataSource + */ + getChildDataSource : function (node, nodeDS) { + // look for explicitly specified child type + var childDSName = node[this.childTypeProperty];
It is a good practice to always use {} around blocks, even if it's just one line.
+ if (childDSName != null) + return isc.DS.get(childDSName);
-- Sergiu Dumitriu http://purl.org/net/sergiu/
participants (1)
-
Sergiu Dumitriu