W3C Forms teleconference January 18, 2012

* Present

Steven Pemberton, CWI
Alain Couthures, AgenceXML
Philip Fennell, MarkLogic
Leigh Klotz, Xerox (minutes)
Dan McCreary, Dan McCreary Associates
Nick van den Bleeken, Inventive Designers [IRC only]
Erik Bruchez, Orbeon/Inventive Designers [late]

* Agenda


* CSS3 UI Last Call


Steven Pemberton: Do we depend on any of these features?
Leigh Klotz: We never really got the features they promised us in 2000. It's been 12 years now.
Steven Pemberton: Are they dropping anything we depend on? We have 4 weeks. Anybody feel particularly called to look at it? I shall have a look at it myself. Anyone else, please review as well.

ACTION-1856 Steven Pemberton to review http://lists.w3.org/Archives/Public/public-forms/2012Jan/0015.html

* XRX Group on Linked-In


Steven Pemberton: Didn't you start this group, Dan?

* Oryx XForms Editor

Steven Pemberton: Has anyone used this?
Alain Couthures: I tried to use it.
Steven Pemberton: I got quite a different page when I clicked on start.
Alain Couthures: I tried as standalone; it might work without the Mozilla extension.
Steven Pemberton: Someone else could install it?
Alain Couthures: Yes. It has to be modified because when it's saving the form there are some server-side transformations. It's not a pure XForms editor, but a BPM editor. A stylesheet is required. But it works quite well and is fast.
Steven Pemberton: Is it worth trying to find a place to run it?
Alain Couthures: I don't know about the copyright.
Steven Pemberton: It says "open source terms" using the MIT license.
Alain Couthures: It's a good candidate to start with. There are extensions for working with Orbeon.

* appearance on help, label, hint


Leigh Klotz: Orbeon has the same type of extension that Mark Birbeck used to have, to put the label or hint inside the input control display. Ian has this in HTML5 so we should be able to do it declaratively. Orbeon does this with an appearance extension, but maybe we could use minimal. With Chiba and XSLTForms we've used help/@appearance=minimal to turn it into a hyperlink on the label. But maybe someone else has a better idea than minimal.
Steven Pemberton: Any comments on using something other than minimal?
Philip Fennell: Sounds alright.
Steven Pemberton: What if both label and hint are minimal?
Leigh Klotz: We should ask Erik.
Steven Pemberton: If we accept this then we'd like an action.
Leigh Klotz: What do we accept?
Steven Pemberton: We need a firm proposal.
Leigh Klotz: I'd like at least a response from Erik. I'd like to know why he didn't use minimal. I think there's no reason for us now now to have a standard declarative way of doing it.
Steven Pemberton: You could ask Erik?

ACTION-1857 Leigh Klotz to ask Erik Bruchez about http://lists.w3.org/Archives/Public/public-forms/2012Jan/0013.html

* Identifying Application State (TAG)


Leigh Klotz: How do we surface (bidirectionally) those components of the location URI (#! parsed stuff and query parameters) in the XPath data model. We have ways to serialize to x-www-form-urlencoded but nothing for parsing them.
Steven Pemberton: Is there no way of reversing the process we use for submit?
Erik Bruchez: [joins]
Leigh Klotz: I don't know if it will be popular to use the history mechanism of HTML5 that lets you fake history but requires work on both sides of the server (i.e., if you have /path/to/tab and that's both handled at the server side and handled inside the Forms).
Erik Bruchez: If you only have one tab view, it's pretty easy. You might have a lot of state. It might be "virtual pages." How do you combine all that?
Leigh Klotz: Jenni Tennison brought up hashtags and the TAG wrote up application state. So how do map XPath data model state to the URI?
Steven Pemberton: We don't have bidirectional parsing.
Erik Bruchez: We could say that you want to store the state in the URL if possible.
Leigh Klotz: So you could do something like this for hashtags <bind ref="instance(x)" calculate="please-parse-hashtags()" />
Leigh Klotz: But what about for history.push and query strings?
Erik Bruchez: You could imagine some type of persistent declaration? <bind ref="instance(x)" persistent="true"/>
Erik Bruchez: If you modify the URL it would have to reflect it.
Leigh Klotz: It's a little like JSON parsing. Do we offer just #! and ? x-www-form-urlencoded or do we have a pair of serializations and parsing functions for this?
Erik Bruchez: You could have it author-defined or you could provide some simple accessors. Just access to the HTML5 history api and XPath 2, regular expressions, you can parse that kind of stuff fairly easily. You could do all the work yourself. It's just going to be fairly painful.
Leigh Klotz: If we have a way of binding location path to URI to XPath data model then we get a declarative way of doing it.
Steven Pemberton: We could produce an instance with fixed names, a repeating structure for server name, path, query, etc. It might be possible todo it that way. Then alter one of those parts.
Leigh Klotz: Here are some examples of ways you could express "I'm on the Review tab" in the URIl.

 <a href="http://xformstest.org/2010/07/kurt_cagle/index.xml#!Review">http://xformstest.org/2010/07/kurt_cagle/index.xml#!Review</a>  <a href="http://xformstest.org/2010/07/kurt_cagle/index.xml#!tab1=Review">http://xformstest.org/2010/07/kurt_cagle/index.xml#!tab1=Review</a>  <a href="http://xformstest.org/2010/07/kurt_cagle/index.xml?tab=review">http://xformstest.org/2010/07/kurt_cagle/index.xml?tab=review</a>  <a href="http://xformstest.org/2010/07/kurt_cagle/index.xml?tab=review;color=white">http://xformstest.org/2010/07/kurt_cagle/index.xml?tab=review;color=white</a>  <a href="http://xformstest.org/2010/07/kurt_cagle/review">http://xformstest.org/2010/07/kurt_cagle/review</a> 

Leigh Klotz: The last one may require some duplication of application state in client and server.

Steven Pemberton: Or we could provide a magic instance containing this: <url><scheme>http</scheme><server><elem>xformstest></elem><elem>org</elem><path><elem>2010 .... etc
Leigh Klotz: Or a function.
Philip Fennell: It could be a system property.
Steven Pemberton: The magic instance whenever bound, as the values changed, so changes the URL and then the URL gets pushed on the history stack.
Leigh Klotz: There's a sublety..are you navigating to a new page or not?
Steven Pemberton: Definitely not.
Erik Bruchez: We already have a way to change the page, using xf:load or xf:submission. I think it might be better...you most like are going to be explicit about what changes become part of the history and what parts don't. You might not change the history after the user types one character, but you might if they make more important activities, traditionally associated with a new page, such as a tab. It can't be just if a value changes you push history.
Steven Pemberton: Traditionall the back button is related to changes in URL, so if you change the URL that should be a change in history. There are two reasons to record state: when you come back another time (saving the URL) to get back to a similar state, and the other is the same thing, going back in history.
Leigh Klotz: switch/@ref="funnyfunction()/x" then it would be bound but input ref="name" wouldn't.
Nick van: What about transactions? Do you want to combine multiple updates?
Steven Pemberton: Just do it at refresh or something.
Leigh Klotz: If we bound to a funnyfunction or an instance then it would all get updated at one action.
Steven Pemberton: Is this just query and fragment or can you change path and host?
Leigh Klotz: I think you can change the path.
Steven Pemberton: It's odd to do change the page.
Leigh Klotz: Yes, that's why I said you had to double the logic server and client, with or without XForms. See my last example above.
Erik Bruchez: Yes, there is a bit of backlash against Twitter and Google for using hash. Until recently, well now you can change the URL location without reloading the page.
Erik Bruchez: We have an example: Start with this localhost:8080/orbeon/fr/orbeon/builder/new and then when you save the form we change it immediately to localhost:8080/orbeon/fr/orbeon/builder/edit/123456.
Erik Bruchez: Of course, you have to make sure the semantics are the same whether you get there from client change or directly through entering the server. So there is some duplication, or maybe using a smart framework to do the duplication for you. It's unavoidable that you need to think the URLs through.
Leigh Klotz: Yes, Steven's funny-function proposal lets you do that. The question is how.
Steven Pemberton: The question should we allow you to change the path or just the "state" bits?
Leigh Klotz: I think you can change the path but not the host and port for security.
Erik Bruchez: Yes. I think it's not part of the API.
Leigh Klotz: history.push(string) is good enough to implement on top of but not good eough for us to offer.
Philip Fennell: Could we open this up to more properties of the browser.

<bind ref="/foo/@bar" calculate="system-property(location.hash)"/>
<bind ref="/foo/@bar" calculate="system-property(screen.height)"/>

Leigh Klotz: That works except that calculate is one-directional not bidirectional.

Steven Pemberton: This is interesting and this is good to talk about.

* appearance on help, label, hint

Steven Pemberton: Leigh has an action to look at this with you.
Erik Bruchez: Yes, placeholder.
Steven Pemberton: The proposal is to use "minimal" instead of "placeholder." Could you look at the mail?

* IRC Minutes


* Meeting Ends