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 <[email protected]>:

> 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 <
> [email protected]
> > 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, [email protected] <[email protected]
> >
> > wrote:
> > > Hi Marius/all,
> > >
> > > On 30 Jul 2015 at 10:26:49, Marius Dumitru Florea (
> > [email protected](mailto:[email protected]))
> > 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:
> > >
> > > <div class=“metadata”>
> > >   <div class=“sourcewiki”>wiki</div>
> > >   <div class=“sourcepage”>page</div>
> > >   <div class=“sourcespaces”>
> > >     <div>space1</div>
> > >     <div>space2</div>
> > >   </div>
> > > </div>
> > >
> > > option 2:
> > >
> > > The JSON you suggest above. However, how would the java code pass this
> > into HTML? Inside a tag’s text, as in:
> > >
> > > <div class=“metadata”>
> > > … json here?...
> > > </div>
> > >
> > > Inside a <script> tag directly?
> > >
> > > Note that option2 has a big advantage over option 1: JS knows JSON
> > natively and thus there’s no need to implement any parsing at the JS
> level.
> > >
> > > Compared to Solution 1, the advantage would to avoid a resolve() call
> on
> > the JS side. On the java side we’ll still need the serialize() call
> (which
> > will possibly take slightly longer than the string serialization).
> > >
> > > Overall Solution 2/option2 could be a better solution indeed.
> > >
> > > What do others think?
> > >
> > > Thanks
> > > -Vincent
> > >
> > >> Thanks,
> > >> Marius
> > >>
> > >> On Wed, Jul 29, 2015 at 4:34 PM, [email protected] wrote:
> > >> > Hi devs,
> > >> >
> > >> > In the past we use to pass the wiki, space and page as 3 variables
> to
> > JS code. For example in dashboard.js we currently have:
> > >> >
> > >> > this.sourcePage = this.element.down('.metadata
> > .sourcepage').innerHTML;
> > >> > this.sourceSpace = this.element.down('.metadata
> > .sourcespace').innerHTML;
> > >> > this.sourceWiki = this.element.down('.metadata
> > .sourcewiki').innerHTML;
> > >> >
> > >> > Now that we need to handle Nested Spaces, it’s more complex and 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);
> > >> >
> > >> > More generally the idea would be to do the same as we do in Java
> > code, i.e. to start stopping passing several parameters to functions and
> > instead to use XWiki.EntityReference (or XWiki.DocumentReference, etc).
> > >> >
> > >> > For example for dashboard.js this allows to replace:
> > >> >
> > >> > var link = new Element('a', {'href' : this.sourceURL});
> > >> > link.update(this.sourceWiki + ':' + this.sourceSpace + '.' +
> > this.sourcePage);
> > >> >
> > >> > With:
> > >> >
> > >> > var link = new Element('a', {'href' : this.sourceURL});
> > >> > link.update(XWiki.Model.serialize(this.sourceReference));
> > >> >
> > >> > WDYT?
> > >> >
> > >> > Thanks
> > >> > -Vincent
> > > _______________________________________________
> > > devs mailing list
> > > [email protected]
> > > http://lists.xwiki.org/mailman/listinfo/devs
> >
> >
> >
> > --
> > Thomas Mortagne
> > _______________________________________________
> > devs mailing list
> > [email protected]
> > http://lists.xwiki.org/mailman/listinfo/devs
> >
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs
>



-- 
Guillaume Delhumeau ([email protected])
Research & Development Engineer at XWiki SAS
Committer on the XWiki.org project
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to