Hi Marius,

On Wed, Aug 3, 2011 at 4:15 PM, Marius Dumitru Florea <
[email protected]> wrote:

> Hi Guillaume,
>
> On 08/03/2011 04:15 PM, Guillaume Lerouge wrote:
> > Hi Marius,
> >
> > On Wed, Aug 3, 2011 at 10:49 AM, Marius Dumitru Florea<
> > [email protected]>  wrote:
> >
> >> Hi Guillaume,
> >>
> >> First of all, thanks for your feedback. See my comments below.
> >>
> >> On 08/01/2011 03:40 PM, Guillaume Lerouge wrote:
> >>> Hi Marius,
> >>>
> >>> please see my answers below.
> >>>
> >>> On Mon, Jul 11, 2011 at 3:06 PM, Marius Dumitru Florea<
> >>> [email protected]>   wrote:
> >>>
> >>>> Hi devs,
> >>>>
> >>>> I'd like to make the following proposal based on your feedback:
> >>>>
> >>>> (1) a sheet is a document that has an object of type XWiki.SheetClass
> >>>>
> >>>
> >>> Ok.
> >>>
> >>>
> >>>> (2) the sheet code is stored in the sheet document content
> >>>>
> >>>
> >>> Ok.
> >>>
> >>>
> >>>> (3) XWiki.SheetClass has the following properties:
> >>>>
> >>>> display: Static List ('page', 'inline', 'meta')
> >>>> action: String ('view', 'edit', etc.)
> >>>>
> >>>> The 'display' property specifies where to place the sheet output:
> >>>>
> >>>> * page: the sheet output overwrites the 'mainContentArea',
> 'xdocFooter'
> >>>> and 'xwikidata' DIVs. This means everything besides the header (logo
> and
> >>>> top menu), the content menu, the footer (version and license info) and
> >>>> the side columns (panels).
> >>>>
> >>>
> >>> Ok.
> >>>
> >>>
> >>>> * inline: the sheet output overwrites the content of the
> 'xwikicontent'
> >>>> DIV in view mode and the form fields in edit mode (similar to the
> >>>> current inline edit mode).
> >>>>
> >>>
> >>
> >>> So the title field is not included, correct? If so, I think it would be
> >> good
> >>> to display the title field by default in inline mode so that users can
> >>> access it and modify it.
> >>
> >> The output of an inline sheet is placed where the content of the
> >> document is currently placed. This means that a sheet with
> >> display:inline doesn't control the title of the document, i.e. the title
> >> of the document is displayed whatever output the sheet may have.
> >>
> >> When you edit (inline) a blog post the title of the document is
> >> displayed followed by a title input field. They are synchronized because
> >> document title is set to $doc.getValue("title"). With the new sheet
> >> system we can (and should!) reuse the title and content of a document.
> >> For instance we could remove the "title" and "content" fields from the
> >> BlogPostClass and use instead the title and the content of the document
> >> holding the blog post object.
> >>
> >
> > Yes, that would be good.
> >
> >
> >> With this in mind, do you think the current "inline" edit behaviour
> >> (document title displayed read-only followed by sheet output) is bad? I
> >> don't think so. I think it's best to let the sheet decide what form
> >> fields to display. If we were to display the title input then what do we
> >> do about document parent and document syntax? Should we also allow users
> >> to edit them in "inline" edit mode? I don't think so.
> >>
> >
>
> > Why not? These are wiki-wide document options. Why should they not be
> > available for all content types? This would go towards standardizing the
> > display of wiki pages in edition mode. What's not to like about that?
>
> Regarding the document title, I'm thinking that once we start using it
> instead of an object property we might have the need to edit it in a
> special way:
>
> * don't edit at all because it is automatically generated
> * edit partially, e.g. only a suffix
>
> That's why I think it's better to let the sheet decide if and how the
> title of the page is edited.
>
> Regarding the document parent, I'm thinking that for some applications
> you may want to enforce a specific parent (e.g. the home page of the
> application space). Again, the sheet can decide if the parent should be
> editable or should be automatically set.
>

You're right, I had overlooked those use cases. We might still want to
provide sheet creators with tools to easily include the title / parent field
should they wish to use them (through a macro maybe?).

As for the page syntax, I think it is a bit too technical and you don't
> need to change it when you edit the structured data of an XWiki
> application.
>

Indeed.

Thanks,

Guillaume

>>> * meta: the sheet output is aggregated under the "Objects" document
> >>>> extra tab. The bottom tabs are displayed only in view mode currently
> but
> >>>> we can imagine ways to display 'meta' sheets in edit mode too.
> >>>>
> >>>
> >>
> >>> I think it would be better to be able to create a custom tab rather
> than
> >> a
> >>> generic "Objects" tab. "Objects" is a technical term and I don't think
> >> users
> >>> would have the reflex to go and look at that tab.
> >>
> >> I thought about this initially but I gave up the idea because I felt is
> >> was too complicated considering how bottom tabs are currently
> >> implemented (with velocity templates). I'm going to postpone the "meta"
> >> sheets for a while and focus only on "page" and "inline" sheets.
> >>
> >
> > Ok. It's indeed less important than the other 2 options at this stage
> > anyway.
> >
> >
> >>> In that case you would need to be able to define the title to display
> in
> >> the
> >>> tab, maybe through a translation key stored in a field of the
> ClassSheet
> >>> object.
> >>>
> >>>
> >>>> The 'action' property specifies when to apply the sheet. The empty
> >>>> string means the sheet can be applied on any action.
> >>>>
> >>>
> >>
> >>> What about a multi-select instead of a string given that the list of
> >>> existing actions is already known?
> >>
> >> In the near future actions will be implemented as components (with the
> >> help of the xwiki-platform-action module). XWiki applications will be
> >> able to define their own actions so we can't use a static list for the
> >> "action" sheet property.
> >>
> >
>
> > Even with actions implemented as components, you can still
> programatically
> > generate a list of existing actions and provide a list interface to
> select
> > them.
> >
> > As we can see from WYSIWYG macros, users tend to be lost when they cannot
> > pick from a list of explicit values when they have to fill a field that
> only
> > accepts values from a predefined subset.
>
> We can have an UI (e.g. in ClassSheet) that lets you choose from some
> well known actions, but I don't think we should limit the type of the
> "action" sheet property to StaticList.
>
> Thanks,
> Marius
>
> >
> >>> (4) Sheets can control the UI elements outside of their scope through
> >>>> parameters, depending on the value of the display property:
> >>
> >>> I'm not sure I agree with this. Panels should not be affected by
> >> something
> >>> else than their existing interface, that will confuse users. I'm not
> sure
> >> I
> >>> see the added value of defining panels at the class level. It's a
> simple
> >> to
> >>> define them at the space level (and there's very often an
> application<=>
> >>> space mapping anyway).
> >>
> >> Ludovic proposed this btw.
> >>
> >
> > I still don't agree about it, unless I get further details about this use
> > case that make me change my mind of course :-)
> >
> >> * page: since sheets of this type control most of what is displayed the
> >>>> only useful parameter is the list of left/right panels.
> >>>> * inline: list of left/right panels, show/hide breadcrumb, show/hide
> >>>> title, show/hide bottom tabs, list of bottom tabs, show/hide version
> >>>> summary in edit mode.
> >>
> >>> And default bottom tab. I think all these options should be provided
> for
> >>> every page in the wiki under an "advanced" section (including normal
> wiki
> >>> pages). I don't see a reason to restrict those options only to pages
> that
> >>> have an object.
> >>
> >> I partially agree with you, but it would be a pain, for instance, to
> >> have to configure all the blog post documents when you want change the
> >> default bottom tab. It is a lot easier to just configure the
> >> BlogPostSheet document and then enforce its configuration to all
> >> documents holding a BlogPostClass object.
> >>
> >
> > Right.
> >
> >
> >> I think you'll agree with me that a system that allows us to configure a
> >> wiki page, defaulting to the sheet configuration (when that document has
> >> a sheet of course) is the best option.
> >>
> >
> > Indeed, I agree.
> >
> > Guillaume
> >
> >> As for the interface, checkboxes would do. I'm not sure where they would
> >> be
> >>> stored though, maybe in a new "XWikiDocument" object?
> >>>
> >>>
> >>>> * meta: no parameters because sheets of this type are used to display
> >>>> secondary objects.
> >>>>
> >>>> Now, regarding the way to set these parameters I think we have three
> >>>> options:
> >>>>
> >>>
> >>> Based on what I said above, the need for such an interface would be
> only
> >> for
> >>> page-level settings. I have no preference about how to store them, a
> text
> >>> area would be fine as long as the user interface is made of checkboxes
> >> and
> >>> lists.
> >>>
> >>> (4A) String parameters
> >>>>
> >>>> Use a generic class, XWiki.ParameterClass, with two string properties,
> >>>> key and value.
> >>>>
> >>>> pro: we can easily add a new parameter to the sheet (by adding a new
> >>>> parameter object to the sheet document) without modifying the
> parameters
> >>>> class.
> >>>>
> >>>> con: error prone
> >>>>
> >>>> (4B) Typed parameters
> >>>>
> >>>> Use a specific class, XWiki.SheetConfigClass, with properties matching
> >>>> configuration parameters.
> >>>>
> >>>> pro: less error prone since parameters are typed and their names are
> >>>> hard-coded
> >>>>
> >>>> con: harder to add/remove/rename parameters
> >>>>
> >>>> (4C) Velocity parameters
> >>>>
> >>>> Add a TextArea property to the XWiki.SheetClass, called 'parameters',
> >>>> where we can set velocity variables. The value of this property will
> be
> >>>> evaluated in startpage.vm after xwikivars.vm and layoutvars.vm.
> >>>>
> >>>> I prefer (4C).
> >>>>
> >>>> (5) In order to declare a sheet a xclass (or a plain document) has to
> >>>> use an object of type XWiki.SheetInclude that has only one Database
> list
> >>>> property called 'sheet' which, obviously, specifies the sheet to be
> >>>> applied. A xclass can include zero (no sheets) or more sheets (a
> >>>> different sheet for a different action).
> >>>>
> >>>
> >>
> >>> Ok. We'll also need to update the XWiki.ClassSheet page to provide a
> nice
> >>> interface for this.
> >>
> >> For sure.
> >>
> >>>
> >>> (6) The only case when sheets can conflict is when a document has
> >>>> objects of different types that declare 'page' sheets for the same
> >>>> action. Multiple objects with 'meta' sheets are aggregated under the
> >>>> 'Objects' tab. Multiple objects with 'inline' sheets are aggregated
> >>>> inside the 'xwikicontent' element in view mode and inside the same
> HTML
> >>>> form in edit mode. A 'page' sheet can choose to display 'inline' and
> >>>> 'meta' sheets, and of course 'inline' and 'meta' sheets can be
> displayed
> >>>> by the default view mode.
> >>>>
> >>>> The conflict between 'page' sheets can be resolved by defining an
> order
> >>>> between objects. I prefer an inherent order (e.g. the object that was
> >>>> added first is the most/less important) rather than an explicit
> priority
> >>>> field.
> >>>>
> >>>
> >>> I think that's going to be an edge use case. Usually when you go
> through
> >> the
> >>> hassle of building a complete new page to display specific objects,
> your
> >>> display is very customized anyway and you can write a page sheet that
> >>> aggregates 2 other page sheets if needed.
> >>
> >> Yep.
> >>
> >>>
> >>> (7) Sheet resolution:
> >>>>
> >>>> * if the current document has an object of type XWiki.SheetInclude and
> >>>> the specified sheet has display:page and matches the current action
> then
> >>>> apply it
> >>>
> >>>
> >>> Ok.
> >>>
> >>>
> >>>> (in case there are more XWiki.SheetInclude objects that satisfy
> >>>> this constraint then use the one with the lowest/highest index).
> >>>>
> >>>
> >>> I think that this is actually the sign of an error on the part of the
> dev
> >>> who created the application, but your solution would work.
> >>>
> >>>
> >>>> * if the current document has objects whose xclass declares a 'page'
> >>>> sheet, then resolve the conflict and use the proper sheet.
> >>>> * if there is no 'page' sheet included either by the current document
> or
> >>>> by one of its objects then aggregate all 'inline' and 'meta' sheets
> >>>> (from the objects and from the document itself).
> >>>> * if there are no 'inline' sheets then simply display the default
> >>>> view/edit mode.
> >>>>
> >>>
> >>> Ok.
> >>>
> >>> WDYT?
> >>>>
> >>>
> >>
> >>> That I'm looking forward to seeing all this implemented ;-)
> >>
> >> I'm going to create a feature branch ASAP.
> >>
> >> Thanks again for your feedback,
> >> Marius
> >>
> >>>
> >>> Thanks,
> >>>
> >>> Guillaume
> >>>
> >>> Thanks,
> >>>> Marius
> >>>>
> >>>> On 06/28/2011 07:43 PM, Marius Dumitru Florea wrote:
> >>>>> Hi devs,
> >>>>>
> >>>>> A prerequisite for Application Within Minutes [1] is to be able to
> >>>>> specify the sheet that will be used to display a document without
> >>>>> touching the content of that document [2]. This can be done in
> multiple
> >>>>> ways, depending on how we define the notion of a sheet.
> >>>>>
> >>>>>
> >>>>> (1) Class sheets vs. document sheets
> >>>>>
> >>>>> A class sheet displays an object of a particular type and is
> specified
> >>>>> in the definition of that type. This means that when you create or
> edit
> >>>>> a class, i.e. a type of object, you can specify which sheet should be
> >>>>> used to display the instances of that class.
> >>>>>
> >>>>> Pro: Documents don't have to specify a sheet.
> >>>>> Con: We have to determine which sheet to use in case there are
> multiple
> >>>>> objects attached to a document.
> >>>>>
> >>>>> A document sheet displays a document of a particular type and is
> >>>>> specified at document level because the document type, unlike the
> >>>>> xclass, does not exist actually. The document type is inferred from
> the
> >>>>> type of objects the document has, or from its content, or, why not,
> >> from
> >>>>> the type of attachments it has.
> >>>>>
> >>>>> Pro: Doesn't have the class sheet con.
> >>>>> Con: Each document has to specify which sheet to use.
> >>>>>
> >>>>> Class sheets are enough for Application Within Minutes because the
> >>>>> wizard will create a single class (with a sheet) and so the
> application
> >>>>> items will have only one object that specifies a sheet.
> >>>>>
> >>>>>
> >>>>> (2) Separate sheets per action?
> >>>>>
> >>>>> The current practice is to define a single (class) sheet which either
> >>>>> checks for the current action in its code or uses doc.display method
> >>>>> whose output is action specific.
> >>>>>
> >>>>> How often did you had the need to write separate sheets per action
> >> (e.g.
> >>>>> create, view, edit, search, changes)?
> >>>>>
> >>>>>
> >>>>> (3) Which actions require a sheet?
> >>>>>
> >>>>> If we're talking about class sheets then the list of actions that
> >> target
> >>>>> an object and which require a sheet is limited. Currently we have
> >> "view"
> >>>>> and "edit", but Ludovic proposed also "create", "search" and
> "changes".
> >>>>>
> >>>>> If we're talking about document sheets then we can have custom
> actions
> >>>>> and so we need an extensible mechanism to map actions to sheets.
> >>>>>
> >>>>>
> >>>>> (4) Sheet parameters?
> >>>>>
> >>>>> If we're talking about class sheets then they only need to specify
> how
> >>>>> an object is displayed. Document sheets on the other hand may need to
> >>>>> control elements like:
> >>>>>
> >>>>> * which tabs (comments, annotations, attachments, etc.), if any, are
> >>>>> displayed
> >>>>> * show title field in edit mode
> >>>>> * the side panels
> >>>>> * the form buttons
> >>>>>
> >>>>>
> >>>>> WDYT?
> >>>>>
> >>>>> Thanks,
> >>>>> Marius
> >>>>>
> >>>>> [1]
> >> http://dev.xwiki.org/xwiki/bin/view/Design/ApplicationWithinMinutes
> >>>>> [2]
> >>>>>
> >>>>
> >>
> http://dev.xwiki.org/xwiki/bin/view/Design/ApplicationWithinMinutesCoreChangeSheetDisplay
>
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to