Re: [xwiki-devs] [xwiki-notifications] r29639 - platform/web/trunk/standard/src/main/webapp/resources/js/xwiki
On 06/22/2010 08:15 PM, sdumitriu (SVN) wrote:
Author: sdumitriu Date: 2010-06-22 19:15:28 +0200 (Tue, 22 Jun 2010) New Revision: 29639
Modified: platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js Log: XWIKI-5300: Start writing a Javascript mirror of the XWiki data model: Document.getURL Done.
The code below won't work in portlet mode because: * portlet URL format is an implementation detail for portlet containers * portlet URL parameters are not included in clear but rather encoded as a single query string parameter (checked in GateIn and WebSphere) * query string parameters appended to a portlet URL are not accessible to the targeted portlet My question is: do we really need to compute URLs on the client? (even if compute = string replace) Thanks, Marius
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 2010-06-22 16:51:34 UTC (rev 29638) +++ platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js 2010-06-22 17:15:28 UTC (rev 29639) @@ -1295,6 +1295,69 @@ } var browser = new BrowserDetect();
+/** + * XWiki Model access APIs. + */ +XWiki.Document = Class.create({ + /** + * Constructor. All parameters are optional, and default to the current document location. + */ + initialize : function(page, space, wiki) { + this.page = page || XWiki.Document.currentPage; + this.space = space || XWiki.Document.currentSpace; + this.wiki = wiki || XWiki.Document.currentWiki; + }, + /** + * Gets an URL pointing to this document. + */ + getURL : function(action, queryString, fragment) { + action = action || 'view'; + var url = XWiki.Document.URLTemplate; + url = url.replace("__space__", encodeURIComponent(this.space)); + url = url.replace("__page__", (this.page == 'WebHome') ? '' : encodeURIComponent(this.page)); + url = url.replace("__action__/", (action == 'view') ? '' : (encodeURIComponent(action) + "/")); + if (queryString) { + url += '?' + queryString; + } + if (fragment) { + url += '#' + fragment; + } + return url; + }, + /** + * Gets an URL which points to the REST location for accessing this document. + */ + getRestURL : function(entity, queryString) { + entity = entity || ''; + var url = XWiki.Document.RestURLTemplate; + url = url.replace("__wiki__", this.wiki); + url = url.replace("__space__", this.space); + url = url.replace("__page__", this.page); + if (entity) { + url += "/" + entity; + } + if (queryString) { + url += '?' + queryString; + } + return url; + } +}); + +/* Initialize the document URL factory, and create XWiki.currentDocument. */ +document.observe('dom:loaded', function() { + XWiki.Document.currentWiki = ($$("meta[name=wiki]").length> 0) ? $$("meta[name=wiki]")[0].content : "xwiki"; + XWiki.Document.currentSpace = ($$("meta[name=space]").length> 0) ? $$("meta[name=space]")[0].content : "Main"; + XWiki.Document.currentPage = ($$("meta[name=page]").length> 0) ? $$("meta[name=page]")[0].content : "WebHome"; + XWiki.Document.URLTemplate = "$xwiki.getURL('__space__.__page__', '__action__')"; + XWiki.Document.RestURLTemplate = "${request.contextPath}/rest/wikis/__wiki__/spaces/__space__/pages/__page__"; + XWiki.Document.RestSearchURLStub = "${request.contextPath}/rest/wikis/__wiki__/search"; + XWiki.Document.getRestSearchURL = function(wiki) { + wiki = wiki || XWiki.Document.currentWiki; + return XWiki.Document.RestSearchURLStub.replace("__wiki__", wiki); + }; + XWiki.currentDocument = new XWiki.Document(); +}); + /* * Small JS improvement, which automatically hides and reinserts the default text for input fields, acting as a tip. *
_______________________________________________ notifications mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/notifications
On 06/23/2010 12:15 AM, Marius Dumitru Florea wrote:
On 06/22/2010 08:15 PM, sdumitriu (SVN) wrote:
Author: sdumitriu Date: 2010-06-22 19:15:28 +0200 (Tue, 22 Jun 2010) New Revision: 29639
Modified: platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js Log: XWIKI-5300: Start writing a Javascript mirror of the XWiki data model: Document.getURL Done.
The code below won't work in portlet mode because:
* portlet URL format is an implementation detail for portlet containers * portlet URL parameters are not included in clear but rather encoded as a single query string parameter (checked in GateIn and WebSphere) * query string parameters appended to a portlet URL are not accessible to the targeted portlet
Sometimes yes. I think this code is a step forward for enabling portlet URLs on the client side, since it's only one point where URLs are generated. People will generate URLs in JavaScript, and the alternative is to manually hack an URL, in better or worse ways. Without a proper URL factory, you'd have to hunt down all pieces of Javascript to find where broken URLs are generated. For portlets, it might be enough to change this class so that it requests URLs to the server (via a synchronous request). I had this in mind, having read your concern about javascript and URLs when in portlet mode.
My question is: do we really need to compute URLs on the client? (even if compute = string replace)
Thanks, Marius
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 2010-06-22 16:51:34 UTC (rev 29638) +++ platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js 2010-06-22 17:15:28 UTC (rev 29639) @@ -1295,6 +1295,69 @@ } var browser = new BrowserDetect();
+/** + * XWiki Model access APIs. + */ +XWiki.Document = Class.create({ + /** + * Constructor. All parameters are optional, and default to the current document location. + */ + initialize : function(page, space, wiki) { + this.page = page || XWiki.Document.currentPage; + this.space = space || XWiki.Document.currentSpace; + this.wiki = wiki || XWiki.Document.currentWiki; + }, + /** + * Gets an URL pointing to this document. + */ + getURL : function(action, queryString, fragment) { + action = action || 'view'; + var url = XWiki.Document.URLTemplate; + url = url.replace("__space__", encodeURIComponent(this.space)); + url = url.replace("__page__", (this.page == 'WebHome') ? '' : encodeURIComponent(this.page)); + url = url.replace("__action__/", (action == 'view') ? '' : (encodeURIComponent(action) + "/")); + if (queryString) { + url += '?' + queryString; + } + if (fragment) { + url += '#' + fragment; + } + return url; + }, + /** + * Gets an URL which points to the REST location for accessing this document. + */ + getRestURL : function(entity, queryString) { + entity = entity || ''; + var url = XWiki.Document.RestURLTemplate; + url = url.replace("__wiki__", this.wiki); + url = url.replace("__space__", this.space); + url = url.replace("__page__", this.page); + if (entity) { + url += "/" + entity; + } + if (queryString) { + url += '?' + queryString; + } + return url; + } +}); + +/* Initialize the document URL factory, and create XWiki.currentDocument. */ +document.observe('dom:loaded', function() { + XWiki.Document.currentWiki = ($$("meta[name=wiki]").length> 0) ? $$("meta[name=wiki]")[0].content : "xwiki"; + XWiki.Document.currentSpace = ($$("meta[name=space]").length> 0) ? $$("meta[name=space]")[0].content : "Main"; + XWiki.Document.currentPage = ($$("meta[name=page]").length> 0) ? $$("meta[name=page]")[0].content : "WebHome"; + XWiki.Document.URLTemplate = "$xwiki.getURL('__space__.__page__', '__action__')"; + XWiki.Document.RestURLTemplate = "${request.contextPath}/rest/wikis/__wiki__/spaces/__space__/pages/__page__"; + XWiki.Document.RestSearchURLStub = "${request.contextPath}/rest/wikis/__wiki__/search"; + XWiki.Document.getRestSearchURL = function(wiki) { + wiki = wiki || XWiki.Document.currentWiki; + return XWiki.Document.RestSearchURLStub.replace("__wiki__", wiki); + }; + XWiki.currentDocument = new XWiki.Document(); +}); + /* * Small JS improvement, which automatically hides and reinserts the default text for input fields, acting as a tip. *
-- Sergiu Dumitriu http://purl.org/net/sergiu/
On 06/23/2010 01:29 AM, Sergiu Dumitriu wrote:
On 06/23/2010 12:15 AM, Marius Dumitru Florea wrote:
On 06/22/2010 08:15 PM, sdumitriu (SVN) wrote:
Author: sdumitriu Date: 2010-06-22 19:15:28 +0200 (Tue, 22 Jun 2010) New Revision: 29639
Modified: platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js Log: XWIKI-5300: Start writing a Javascript mirror of the XWiki data model: Document.getURL Done.
The code below won't work in portlet mode because:
* portlet URL format is an implementation detail for portlet containers * portlet URL parameters are not included in clear but rather encoded as a single query string parameter (checked in GateIn and WebSphere) * query string parameters appended to a portlet URL are not accessible to the targeted portlet
Sometimes yes. I think this code is a step forward for enabling portlet URLs on the client side, since it's only one point where URLs are generated. People will generate URLs in JavaScript, and the alternative is to manually hack an URL, in better or worse ways. Without a proper URL factory, you'd have to hunt down all pieces of Javascript to find where broken URLs are generated.
For portlets, it might be enough to change this class so that it requests URLs to the server (via a synchronous request). I had this in mind, having read your concern about javascript and URLs when in portlet mode.
I understand now. Indeed, having just one overwritable place where URLs are created on the client side is a step forward for enabling portlet integration. Thanks, Marius
My question is: do we really need to compute URLs on the client? (even if compute = string replace)
Thanks, Marius
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 2010-06-22 16:51:34 UTC (rev 29638) +++ platform/web/trunk/standard/src/main/webapp/resources/js/xwiki/xwiki.js 2010-06-22 17:15:28 UTC (rev 29639) @@ -1295,6 +1295,69 @@ } var browser = new BrowserDetect();
+/** + * XWiki Model access APIs. + */ +XWiki.Document = Class.create({ + /** + * Constructor. All parameters are optional, and default to the current document location. + */ + initialize : function(page, space, wiki) { + this.page = page || XWiki.Document.currentPage; + this.space = space || XWiki.Document.currentSpace; + this.wiki = wiki || XWiki.Document.currentWiki; + }, + /** + * Gets an URL pointing to this document. + */ + getURL : function(action, queryString, fragment) { + action = action || 'view'; + var url = XWiki.Document.URLTemplate; + url = url.replace("__space__", encodeURIComponent(this.space)); + url = url.replace("__page__", (this.page == 'WebHome') ? '' : encodeURIComponent(this.page)); + url = url.replace("__action__/", (action == 'view') ? '' : (encodeURIComponent(action) + "/")); + if (queryString) { + url += '?' + queryString; + } + if (fragment) { + url += '#' + fragment; + } + return url; + }, + /** + * Gets an URL which points to the REST location for accessing this document. + */ + getRestURL : function(entity, queryString) { + entity = entity || ''; + var url = XWiki.Document.RestURLTemplate; + url = url.replace("__wiki__", this.wiki); + url = url.replace("__space__", this.space); + url = url.replace("__page__", this.page); + if (entity) { + url += "/" + entity; + } + if (queryString) { + url += '?' + queryString; + } + return url; + } +}); + +/* Initialize the document URL factory, and create XWiki.currentDocument. */ +document.observe('dom:loaded', function() { + XWiki.Document.currentWiki = ($$("meta[name=wiki]").length> 0) ? $$("meta[name=wiki]")[0].content : "xwiki"; + XWiki.Document.currentSpace = ($$("meta[name=space]").length> 0) ? $$("meta[name=space]")[0].content : "Main"; + XWiki.Document.currentPage = ($$("meta[name=page]").length> 0) ? $$("meta[name=page]")[0].content : "WebHome"; + XWiki.Document.URLTemplate = "$xwiki.getURL('__space__.__page__', '__action__')"; + XWiki.Document.RestURLTemplate = "${request.contextPath}/rest/wikis/__wiki__/spaces/__space__/pages/__page__"; + XWiki.Document.RestSearchURLStub = "${request.contextPath}/rest/wikis/__wiki__/search"; + XWiki.Document.getRestSearchURL = function(wiki) { + wiki = wiki || XWiki.Document.currentWiki; + return XWiki.Document.RestSearchURLStub.replace("__wiki__", wiki); + }; + XWiki.currentDocument = new XWiki.Document(); +}); + /* * Small JS improvement, which automatically hides and reinserts the default text for input fields, acting as a tip. *
participants (2)
-
Marius Dumitru Florea -
Sergiu Dumitriu