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:Main.WebHome@Archive.tgz).
+ * @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/