---------- Forwarded message ---------
From: Marius Dumitru Florea <mariusdumitru.florea(a)xwiki.com>
Date: Tue, May 21, 2019 at 1:06 PM
Subject: Re: [xwiki-devs] [Proposal] WikiMacro inline editing: 2 new
dedicated macros
To: Simon Urli <simon.urli(a)xwiki.com>
On Mon, May 20, 2019 at 11:57 AM Simon Urli <simon.urli(a)xwiki.com> 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
<simon.urli(a)xwiki.com
<mailto:simon.urli@xwiki.com>> wrote:
On 14/05/2019 13:02, Marius Dumitru Florea wrote:
On Tue, May 14, 2019 at 1:55 PM Simon Urli
<simon.urli(a)xwiki.com
<mailto:simon.urli@xwiki.com>
<mailto:simon.urli@xwiki.com
<mailto:simon.urli@xwiki.com>>>
wrote:
On 14/05/2019 12:43, Marius Dumitru Florea wrote:
> On Fri, May 10, 2019 at 11:21 AM Simon Urli
<simon.urli(a)xwiki.com
<mailto:simon.urli@xwiki.com>
> <mailto:simon.urli@xwiki.com <mailto:simon.urli@xwiki.com>>
> > <mailto:simon.urli@xwiki.com <mailto:simon.urli@xwiki.com
> <mailto:simon.urli@xwiki.com <mailto:simon.urli@xwiki.com>>>>
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
> > <simon.urli(a)xwiki.com <mailto:simon.urli@xwiki.com>
> <mailto:simon.urli@xwiki.com <mailto:simon.urli@xwiki.com>>
> > > <mailto:simon.urli@xwiki.com
> <mailto:simon.urli@xwiki.com> <mailto:simon.urli@xwiki.com
> <mailto:simon.urli@xwiki.com>>>>
> > 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
> >>> simon.urli(a)xwiki.com
<mailto:simon.urli@xwiki.com> <mailto:simon.urli@xwiki.com
<mailto:simon.urli@xwiki.com>>
<mailto:simon.urli@xwiki.com
<mailto:simon.urli@xwiki.com>
<mailto:simon.urli@xwiki.com
<mailto:simon.urli@xwiki.com>>>
> >>> More about us at
http://www.xwiki.com
> >>>
> >
>
> --
> Simon Urli
> Software Engineer at XWiki SAS
> simon.urli(a)xwiki.com <mailto:simon.urli@xwiki.com>
<mailto:simon.urli@xwiki.com <mailto:simon.urli@xwiki.com>>
<mailto:simon.urli@xwiki.com
<mailto:simon.urli@xwiki.com>
<mailto:simon.urli@xwiki.com
<mailto:simon.urli@xwiki.com>>>
--
Simon Urli
Software Engineer at XWiki SAS
simon.urli(a)xwiki.com <mailto:simon.urli@xwiki.com>
<mailto:simon.urli@xwiki.com <mailto:simon.urli@xwiki.com>>
-- Simon Urli
Software Engineer at XWiki SAS
simon.urli(a)xwiki.com <mailto:simon.urli@xwiki.com>
More about us at
http://www.xwiki.com
--
Simon Urli
Software Engineer at XWiki SAS
simon.urli(a)xwiki.com
More about us at
http://www.xwiki.com