On 26 Aug 2015 at 18:23:42, Caleb James DeLisle (cjd@cjdns.fr(mailto:cjd@cjdns.fr)) wrote:
  A bit late to the game but can't we pass a
cannonicalized absolute string to the JS ?
 eg: wiki:space.sp\.ace.sp\\ace.page
 and then just warn the js devs that they should use functions to manipulate the
 string representation instead of hacking it manually ? 
This is indeed my original proposal in the first mail:
“[…]I’m proposing to change our best practice and instead to pass a full reference, as
in: 
    this.sourceReference = XWiki.Model.resolve(this.element.down('.metadata
.source').innerHTML, XWiki.EntityType.DOCUMENT); 
“
Thanks
-Vincent
  That's what nodejs does for URLs and I will say
without reservation that the
 user-friendlyness of their their URL parsing API is not even compatible to the
 disaster that was java.net.URL.
 On 26/08/15 17:36, Guillaume "Louis-Marie" Delhumeau wrote:
 > I don't really understand the solution 2.
 >
 > We already have an EntityReference class in entityReference.js, with a
 > string serializer and a string parser.
 >
 > If we use a JSON format to describe a reference, we will still have to
 > parse it to create an EntityReference object, and this parser does not
 > exist yet.
 >
 > So what is the benefit?
 >
 > I only see drawbacks:
 > - A JSON reference is a lot more verbose.
 > - From the java side, we need to serialize the reference to a JSON
 > representation which is probably more costly than serializing to a string.
 > - We use string representations in a lot of places, and suddenly we should
 > use JSON but only when we do JavaScript...
 >
 > So +1 for the solution 1.
 >
 > In any case, it seems a good idea to use references in JS code.
 >
 > Thanks,
 > Guillaume
 >
 > 2015-08-06 14:25 GMT+02:00 Eduard Moraru :
 >
 >> I agree with Thomas that it would be best to use EntityReference -> JSON as
 >> much as possible (when passing the reference from velocity to javascript,
 >> server-side), however, man times when you need a reference you also end up
 >> building a new reference (on the client-side, i.e. javascript) so we can`t
 >> really avoid having a strong javascript EntityReference API +
 >> serializer/resolver.
 >>
 >> Also, making a HTTP request from JS to resolve a string reference on the
 >> server (and getting a JSON result) is not really an option IMO (specially
 >> if you do that a lot).
 >>
 >> So +1 to using reference in javascript code.
 >>
 >> Thanks,
 >> Eduard
 >>
 >> On Thu, Jul 30, 2015 at 11:50 AM, Thomas Mortagne <
 >> thomas.mortagne(a)xwiki.com
 >>> wrote:
 >>
 >>> Direct EntityReference -> JSON serialisation would provide a strong
 >>> standard (we already have tool to make sure we never break
 >>> EntityReference) and it would make JS and Java sides more consistent.
 >>> Now In some cases we will still need to support parsing a String
 >>> reference in JS I think.
 >>>
 >>> On Thu, Jul 30, 2015 at 10:38 AM, vincent(a)massol.net > >>>
 >>> wrote:
 >>>> Hi Marius/all,
 >>>>
 >>>> On 30 Jul 2015 at 10:26:49, Marius Dumitru Florea (
 >>> mariusdumitru.florea@xwiki.com(mailto:mariusdumitru.florea@xwiki.com))
 >>> wrote:
 >>>>
 >>>>> +1
 >>>>>
 >>>>> Another option could be to pass a JSON serialization of the
reference.
 >>>>> Thomas has recently fixed some issues that were preventing JSON
 >>>>> serialization of an entity reference. It should work fine now:
 >>>>>
 >>>>> $jsontool.serialize($documentReference)
 >>>>>
 >>>>> should produce something close to:
 >>>>>
 >>>>> {
 >>>>> name: 'Page',
 >>>>> type: 'DOCUMENT',
 >>>>> parent: {
 >>>>> name: 'Space2',
 >>>>> type: 'SPACE',
 >>>>> parent: {
 >>>>> ...
 >>>>> }
 >>>>> }
 >>>>> }
 >>>>>
 >>>>> It's more verbose obviously. For this we need to modify a bit
 >>>>> entityReference.js though, because it expects the entity type to be
an
 >>>>> int.
 >>>>
 >>>> Indeed there are only 2 global solutions:
 >>>> * Solution 1: Pass the seralized String reference and have the js
 >>> perform the resolve. This also means that the java code may need to do a
 >>> serialize. So this has the drawback of doing a serialize + resolve. It
 >> has
 >>> the advantage of being a one-liner from JS.
 >>>> * Solution 2: Pass the individual elements of a reference so that the
 >> JS
 >>> doesn’t have to call resolve. This can be done in several ways:
 >>>>
 >>>> option 1:
 >>>>
 >>>> 
  >>>> 
wiki
  >>>> 
page
  >>>> 
  >>>> 
space1
  >>>> 
space2
  >>>> 
  >>>> 
  >>>> 
> >>>> option 2:
  >>>> 
> >>>> The JSON
you suggest above. However, how would the java code pass this
> >>> into HTML? Inside a tag’s text, as in:
  >>>> 
>>>> 
> >>>> … json here?...
  >>>> 
  >>>> 
> >>>> Inside a