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.
> *
>