---------- Forwarded message ---------
From: Marius Dumitru Florea <[email protected]>
Date: Tue, May 21, 2019 at 1:06 PM
Subject: Re: [xwiki-devs] [Proposal] WikiMacro inline editing: 2 new
dedicated macros
To: Simon Urli <[email protected]>


On Mon, May 20, 2019 at 11:57 AM Simon Urli <[email protected]> wrote:

> Hello Marius,
>
> On 14/05/2019 13:12, Simon Urli wrote:
> >
> >
> > On 14/05/2019 13:07, Marius Dumitru Florea wrote:
> >> On Tue, May 14, 2019 at 2:04 PM Simon Urli <[email protected]
> >> <mailto:[email protected]>> wrote:
> >>
> >>
> >>
> >>     On 14/05/2019 13:02, Marius Dumitru Florea wrote:
> >>      > On Tue, May 14, 2019 at 1:55 PM Simon Urli <[email protected]
> >>     <mailto:[email protected]>
> >>      > <mailto:[email protected] <mailto:[email protected]>>>
> >> wrote:
> >>      >
> >>      >
> >>      >
> >>      >     On 14/05/2019 12:43, Marius Dumitru Florea wrote:
> >>      >      > On Fri, May 10, 2019 at 11:21 AM Simon Urli
> >>     <[email protected] <mailto:[email protected]>
> >>      >     <mailto:[email protected] <mailto:[email protected]>>
> >>      >      > <mailto:[email protected] <mailto:[email protected]
> >
> >>     <mailto:[email protected] <mailto:[email protected]>>>>
> wrote:
> >>      >      >
> >>      >      >     Hi Marius, all,
> >>      >      >
> >>      >      >     On 09/05/2019 09:29, Simon Urli wrote:
> >>      >      >      > Hi Marius, all,
> >>      >      >      >
> >>      >      >      > On 08/05/2019 14:09, Marius Dumitru Florea wrote:
> >>      >      >      >> Hi Simon,
> >>      >      >      >>
> >>      >      >      >> As I commented on
> >>      >      > https://github.com/xwiki/xwiki-platform/pull/1109 I
> >>      >      >      >> think
> >>      >      >      >> that most of the time you will want to use a
> >> scripting
> >>      >     macro +
> >>      >      >     HTML macro
> >>      >      >      >> like this:
> >>      >      >      >>
> >>      >      >      >> {{velocity}}
> >>      >      >      >> {{html clean="false"}}
> >>      >      >      >> <div ...><!-- Some wrapping around the content
> >>     that may
> >>      >     depend
> >>      >      >     on the
> >>      >      >      >> macro
> >>      >      >      >> parameters  -->
> >>      >      >      >>    ...
> >>      >      >      >>    <!-- Output the macro content here so that it
> >>     can be
> >>      >     edited
> >>      >      >     in-line in
> >>      >      >      >> the WYSIWYG editor. -->
> >>      >      >      >>    ...
> >>      >      >      >> </div>
> >>      >      >      >> {{/html}}
> >>      >      >      >> {{/velocity}}
> >>      >      >      >>
> >>      >      >      >> An example of such a macro could be:
> >>      >      >      >>
> >>      >      >      >> {{figure src="someImage.png"}}some
> >>     description{{/figure}}
> >>      >      >      >>
> >>      >      >      >> The macro code would look like this:
> >>      >      >      >>
> >>      >      >      >> {{velocity}}
> >>      >      >      >> {{html clean="false"}}
> >>      >      >      >> <div class="figure">
> >>      >      >      >>    <div class="figure-image-wrapper">
> >>      >      >      >>      <img src="..." class="figure-image" />
> >>      >      >      >>    </div>
> >>      >      >      >>    <div class="figure-caption">
> >>      >      >      >>      <!-- Output the figure caption here so that
> >>     it can
> >>      >     be edited
> >>      >      >      >> in-line in
> >>      >      >      >> the WYSIWYG editor. -->
> >>      >      >      >>    </div>
> >>      >      >      >> </div>
> >>      >      >      >> {{/html}}
> >>      >      >      >> {{/velocity}}
> >>      >      >      >>
> >>      >      >      >> I know you can output DIVs with wiki syntax but
> >> that's
> >>      >     not the
> >>      >      >     point. The
> >>      >      >      >> point is that we want to use HTML for the UI and
> >> leave
> >>      >     the wiki
> >>      >      >     syntax
> >>      >      >      >> for
> >>      >      >      >> the user content. So I don't think
> >>     ``wikimacrocontent``
> >>      >     is that
> >>      >      >     useful
> >>      >      >      >> (if
> >>      >      >      >> it's only purpose is to help you output the
> >>      >      >     ``non-generated-content``
> >>      >      >      >> DIV).
> >>      >      >      >
> >>      >      >      > so as Thomas mentioned in order to allow inline
> >>     editing I also
> >>      >      >     perform
> >>      >      >      > transformation on the generated list of blocks in
> >>      >      >      > DefaultWikiMacroRenderer to remove the macro marker
> >>     that
> >>      >     can cause
> >>      >      >      > troubles for inline editing. So the
> >> wikimacrocontent is
> >>      >     used both to
> >>      >      >      > insert content, and to detect where to remove the
> >> macro
> >>      >     markers
> >>      >      >     during
> >>      >      >      > the transformation.
> >>      >      >      >
> >>      >      >      > Now right now even with this solution it's not
> >>     possible to
> >>      >     inline
> >>      >      >     edit
> >>      >      >      > html macro because of the way it's designed: the
> >> HTML
> >>      >     macro only
> >>      >      >     create
> >>      >      >      > a raw blocks that contains all the html, so I
> >>     cannot easily
> >>      >      >     transform it
> >>      >      >      > for inline editing. IMO it requires a change in the
> >>     HTML
> >>      >     macro.
> >>      >      >
> >>      >      >     so, re the subject of HTML macro and the handle of
> >> inline
> >>      >     editing I was
> >>      >      >     actually wrong to assume that it was linked to the raw
> >>     block.
> >>      >     It's
> >>      >      >     actually linked to the metadata that are currently not
> >>      >     handled in the
> >>      >      >     custom HTML renderer of HTML macro. I created a
> >> dedicated
> >>      >     issue for it
> >>      >      >     (https://jira.xwiki.org/browse/XRENDERING-563), it's
> >>     actually
> >>      >     easy to
> >>      >      >     fix since the mechanism already exist in
> >>     AnnotatedHTMLRenderer.
> >>      >      >     So I've been able to successfully create a very simple
> >>     inline
> >>      >     editing
> >>      >      >     wiki macro like this:
> >>      >      >
> >>      >      >     {{html wiki="true"}}
> >>      >      >     <div style="border: 1px solid red">
> >>      >      >     ((({{wikimacrocontent/}})))
> >>      >      >     </div>
> >>      >      >     {{/html}}
> >>      >      >
> >>      >      >     I had to put the ((( ))) to avoid having the
> >>     wikimacrocontent
> >>      >     rendered
> >>      >      >     inline, maybe there's a way to do it cleaner, but I
> >> just
> >>      >     wanted to
> >>      >      >     check
> >>      >      >     that it's working there.
> >>      >      >     IMO it should really be the next priority in terms of
> >>      >     usability of
> >>      >      >     inline editing, to find a way to allow inline
> >> editing of
> >>      >     inline macro.
> >>      >      >
> >>      >      >
> >>      >      > Would it be hard to have a scripting API equivalent for
> the
> >>      >      > wikimacrocontent macro? I don't like mixing HTML with wiki
> >>     syntax
> >>      >     (you
> >>      >      > can get into trouble easily). As a wiki macro developer I
> >>     would
> >>      >     prefer
> >>      >      > to be able to write something like this:
> >>      >      >
> >>      >      > {{velocity}}
> >>      >      > {{html clean="false"}}
> >>      >      > <div class="my-macro">
> >>      >      > $xcontext.macro.renderNonGeneratedContent()
> >>      >      > </div>
> >>      >      > {{/html}}
> >>      >      > {{/velocity}}
> >>      >      > Thanks,
> >>      >      > Marius
> >>      >
> >>      >     Basically this API would need to:
> >>      >         1. Create the div around the macro content
> >>      >         2. Add a marker around that div to specify that
> >>     everything's inside
> >>      >     should be kept (since we need to remove the other macro
> >>     markers in the
> >>      >     WikiMacroRenderer)
> >>      >         3. Render the div + the content in the right target
> syntax
> >>      >
> >>      >     What bothers me here is that I don't think we would have
> >>     access to the
> >>      >     rendering context, to know the syntax that should be used to
> >>     render the
> >>      >     metadata.
> >>      >
> >>      >
> >>      > The alternative is:
> >>      >
> >>      > {{velocity}}
> >>      > {{html clean="false"}}
> >>      > <div class="my-macro">
> >>      >    ...
> >>      > {{html}}
> >>      >
> >>      > {{wikimacrocontent/}}
> >>      >
> >>      > {{html clean="false"}}
> >>      >    ...
> >>      > </div>
> >>      > {{/html}}
> >>      > {{/velocity}}
> >>      > It feels like a hack, but I can leave with it.
> >>
> >>     Actually you could do:
> >>
> >>     {{html wiki="true"}}
> >>     <div class="my-macro">
> >>     {{wikimacrocontent/}}
> >>     </div>
> >>     {{/html}}
> >>
> >>     but yeah it's mixing both syntax.
> >>
> >> I want to avoid this if possible.
> >
> > Now I have to check but with
> > https://jira.xwiki.org/browse/XRENDERING-563 you might be able to
> > directly do:
> >
> > {{velocity}}
> > {{html}}
> > <div class="mymacro">
> >    <div
> > data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.Block&gt;">
> >      $xcontext.macro.content
> >    </div>
> > </div>
> > {{/html}}
> > {{/velocity}}
> >
> > However I don't know how it would handle content containing other macros.
>
> So I just tested how we would do that, and I managed to do it using the
> following code:
> {{velocity}}
> {{html}}
> <div style="border: 1px solid red">
>    <div class="xwiki-metadata-container"
> data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.Block&gt;"
> data-xwiki-wikimacrocontent="true" data-xwiki-syntax="xhtml/1.0">
>      $xcontext.macro.content
>    </div>
> </div>
> {{/html}}
> {{/velocity}}
>
> Note that the syntax metadata is mandatory here since the HTML Macro
> will consider that it's content is HTML.
>
> Now there is one remaining issue: we cannot apparently insert macro in
> it. Here's the parameter request which is sent:
>
> <!DOCTYPE+html+PUBLIC+"-//W3C//DTD+XHTML+1.0+Strict//EN"+"
> http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";><html+xmlns="
> http://www.w3.org/1999/xhtml
> "+xml:lang="en"+lang="en"><body><!--startmacro:toto|-||-|<p>Some+content+inside+the+macro+encore+un+test?</p><p>un+autre+<strong>test</strong></p>--><div+data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.Block&gt;"+data-xwiki-syntax="xhtml/1.0"+data-xwiki-wikimacrocontent="true"+class="xwiki-metadata-container"><p>Some+content+inside+the+macro+encore+un+test?</p><div+class="wikimodel-emptyline"></div><p><!--startmacro:box|-|__cke_selected_macro="true"|-|dfgsdg--><!--stopmacro--></p><p>un+autre+<strong>test</strong></p></div><!--stopmacro--><div+class="wikimodel-emptyline"></div></body></html>
>
> you can see the markers for the box macro, with a new paragraph around
> it and an empty line before it.
> Here's the body answer of the request:
>
> <body id="body" class="skin-flamingo viewbody main wiki-xwiki
> space-TotoMacro"><!--startmacro:toto|-||-|<p>Some content inside the
> macro encore un test?</p><p>un autre <strong>test</strong></p>--><div
> style="border: 1px solid red">
> <div class="xwiki-metadata-container"
> data-xwiki-non-generated-content="java.util.List&lt;org.xwiki.Block&gt;"
> data-xwiki-syntax="xhtml/1.0" data-xwiki-wikimacrocontent="true">
> <p>Some content inside the macro encore un test?</p><p>un autre
> <strong>test</strong></p>
> </div>
> </div><!--stopmacro--><div class="wikimodel-emptyline"></div></body>
>
> The fact that the macro marker is missing is expected since I removed it
> after transformation in WikiMacroRenderer. However, it should have been
> transformed: we should get the HTML for the box. I still need to
> investigate to understand why it disappeared.
>
>

> I'm not sure if I need to document this way to allow inline editing of
> macro content, or maybe just in HTML macro page? WDYT?
>

I think it's worth documenting it on the wiki macro documentation page or
on the tutorial about writing a wiki macro, as an advanced feature. I don't
think the HTML macro page is the right place.

Thanks for working on this,
Marius


>
> Simon
>
> >>
> >>     Still it's working.
> >>      >
> >>      > Thanks,
> >>      > Marius
> >>      >
> >>      >      >
> >>      >      >
> >>      >      >     Simon
> >>      >      >      >
> >>      >      >      > Simon
> >>      >      >      >>
> >>      >      >      >> Thanks,
> >>      >      >      >> Marius
> >>      >      >      >>
> >>      >      >      >>
> >>      >      >      >> On Tue, May 7, 2019 at 9:21 AM Simon Urli
> >>      >     <[email protected] <mailto:[email protected]>
> >>     <mailto:[email protected] <mailto:[email protected]>>
> >>      >      >     <mailto:[email protected]
> >>     <mailto:[email protected]> <mailto:[email protected]
> >>     <mailto:[email protected]>>>>
> >>      >     wrote:
> >>      >      >      >>
> >>      >      >      >>> Hi everyone,
> >>      >      >      >>>
> >>      >      >      >>> I'm currently working on allowing inline editing
> >>     on new
> >>      >     wikimacros.
> >>      >      >      >>> My first challenge right now is to cope with the
> >>     problem of
> >>      >      >     inserting
> >>      >      >      >>> the macro content and allowing to inline edit it.
> >>      >      >      >>>
> >>      >      >      >>> In order to do so, I propose to create two new
> >>     dedicated
> >>      >     macro:
> >>      >      >      >>>     - wikimacrocontent: would allow to insert and
> >>     inline
> >>      >     edit a
> >>      >      >     wiki
> >>      >      >      >>> macro content
> >>      >      >      >>>     - wikimacroparameter: the same for a
> >> parameter.
> >>      >      >      >>>
> >>      >      >      >>> The idea would be to be able to write something
> >>     such as:
> >>      >      >      >>>
> >>      >      >      >>> {{velocity}}
> >>      >      >      >>> {{wikimacrocontent/}}
> >>      >      >      >>> This is a content of
> >> $xcontext.macro.content.length()
> >>      >     characters.
> >>      >      >      >>> {{/velocity}}
> >>      >      >      >>>
> >>      >      >      >>> So the purpose of those macros would be twofold:
> >>      >      >      >>>     1. to ease the insertion of macro
> >>     content/parameters (no
> >>      >      >     need to
> >>      >      >      >>> always use
> >>     {{velocity}}$xcontext.macro.content{{/velocity}}
> >>      >      >      >>>     2. to create the dedicated metadata around
> the
> >>      >     content and
> >>      >      >     to be
> >>      >      >      >>> processed during wikimacro rendering to allow
> >>     inline editing
> >>      >      >      >>>
> >>      >      >      >>> Of course those macro would be only to be used
> >>     inside a
> >>      >     wikimacro.
> >>      >      >      >>> I started to develop the wikimacroccontent, so I
> >>     have a
> >>      >     first
> >>      >      >     working
> >>      >      >      >>> POC, but I'd like to know WDYT about this.
> >>      >      >      >>>
> >>      >      >      >>> I would also be really happy if you could give me
> >>     some
> >>      >     wikimacro
> >>      >      >      >>> examples where the inline editing would make
> >>     sense, so I
> >>      >     could
> >>      >      >     use it in
> >>      >      >      >>> my tests.
> >>      >      >      >>>
> >>      >      >      >>> Thanks,
> >>      >      >      >>> Simon
> >>      >      >      >>> --
> >>      >      >      >>> Simon Urli
> >>      >      >      >>> Software Engineer at XWiki SAS
> >>      >      >      >>> [email protected]
> >>     <mailto:[email protected]> <mailto:[email protected]
> >>     <mailto:[email protected]>>
> >>      >     <mailto:[email protected] <mailto:[email protected]>
> >>     <mailto:[email protected] <mailto:[email protected]>>>
> >>      >      >      >>> More about us at http://www.xwiki.com
> >>      >      >      >>>
> >>      >      >      >
> >>      >      >
> >>      >      >     --
> >>      >      >     Simon Urli
> >>      >      >     Software Engineer at XWiki SAS
> >>      >      > [email protected] <mailto:[email protected]>
> >>     <mailto:[email protected] <mailto:[email protected]>>
> >>      >     <mailto:[email protected] <mailto:[email protected]>
> >>     <mailto:[email protected] <mailto:[email protected]>>>
> >>      >      >     More about us at http://www.xwiki.com
> >>      >      >
> >>      >
> >>      >     --
> >>      >     Simon Urli
> >>      >     Software Engineer at XWiki SAS
> >>      > [email protected] <mailto:[email protected]>
> >>     <mailto:[email protected] <mailto:[email protected]>>
> >>      >     More about us at http://www.xwiki.com
> >>      >
> >>
> >>     --     Simon Urli
> >>     Software Engineer at XWiki SAS
> >>     [email protected] <mailto:[email protected]>
> >>     More about us at http://www.xwiki.com
> >>
> >
>
> --
> Simon Urli
> Software Engineer at XWiki SAS
> [email protected]
> More about us at http://www.xwiki.com
>

Reply via email to