---------- 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<org.xwiki.Block>"> > > $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<org.xwiki.Block>" > 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<org.xwiki.Block>"+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<org.xwiki.Block>" > 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 >

