Re: [xwiki-devs] XWiki/XEclipse template/form system.
Hi Karel, Don`t forget about textareas :) It would be nice if you could, when you finish the project, cotribute it as a feature of XEclipse. The REST templates service could become a part of XE as well. Thanks, Eduard On Mon, Aug 8, 2011 at 11:40 AM, Karel Gardas <karel.gardas@centrum.cz>wrote:
Hi Eduard,
thanks a lot for your help with this. Indeed, your JS kind of works. I've a little bit fixed this and now I'm using:
String js = "function getFormData() {\n"; js = js + "var formData = {};\n"; js = js + "var stringData = '';\n"; js = js + "var inputs = document.getElementsByTagName(**'input');\n"; js = js + "for (var i = 0; i < inputs.length; ++i) {\n"; js = js + "var input = inputs[i];\n"; js = js + "if (input.value == null || input.value == '' || input.type == 'button' || input.type == 'submit') {\n"; js = js + "continue;\n"; js = js + "}\n"; //js = js + "alert('Input [' + i + '] (' + input.type + '): ' + input.name + ' = ' + input.value)\n"; js = js + "formData[ input.name] = input.value;\n"; js = js + "stringData = stringData + '[' + input.name + ']=' + input.value;\n"; js = js + "}\n"; js = js + "var selects = document.getElementsByTagName(**'select');\n"; js = js + "for (var j = 0; j < selects.length; ++j) {\n"; js = js + "var input = selects[j];\n"; js = js + "if (input.value == null || input.value == '' || input.type == 'button' || input.type == 'submit') {\n"; js = js + "continue;\n"; js = js + "}\n"; //js = js + "alert('Input [' + i + '] (' + input.type + '): ' + input.name + ' = ' + input.value)\n"; js = js + "formData[ input.name] = input.value;\n"; js = js + "stringData = stringData + '[' + input.name + ']=' + input.value;\n"; js = js + "}\n"; //js = js + "alert.log(formData);\n"; //js = js + "alert(formData);\n"; //js = js + "return formData.toString();\n"; js = js + "return stringData;\n"; js = js + "}\n"; //js = js + "formData;\n"; js = js + "return getFormData();\n";
Thanks! Karel
On 06/29/11 02:59 PM, Eduard Moraru wrote:
Hi Karel,
On Tue, Jun 28, 2011 at 9:46 PM, Karel Gardas<karel.gardas@centrum.cz**
wrote:
Hi Eduard,
On 06/28/11 05:45 PM, Eduard Moraru wrote:
After googling around on this topic, it seems that there is no clean way
of doing this.
The initial community-accepted way I managed to find was using javascript (Browser.execute(String)) to retrieve your data, store it in window.status and then, a BrowserStatusText listener would get that value from the status text. An example is here: http://www.java2s.com/Code/****Java/SWT-JFace-Eclipse/**<http://www.java2s.com/Code/**Java/SWT-JFace-Eclipse/**> QueryDOMnodevalue.htm<http://**www.java2s.com/Code/Java/SWT-** JFace-Eclipse/**QueryDOMnodevalue.htm<http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/QueryDOMnodevalue.htm>
On the other hand, by checking the Eclipse/SWT API, it seems that Browser.evaluate(String) also got implemented along the way and, compared to execute(String), it actually returns the value of the executed JavaScript so you can use it directly. Documentation here: http://help.eclipse.org/****indigo/index.jsp?topic=%2Forg.****<http://help.eclipse.org/**indigo/index.jsp?topic=%2Forg.**> eclipse.platform.doc.isv%****2Freference%2Fapi%2Forg%** 2Feclipse%2Fswt%2Fbrowser%****2FBrowser.html<http://help.** eclipse.org/indigo/index.jsp?**topic=%2Forg.eclipse.platform.** doc.isv%2Freference%2Fapi%**2Forg%2Feclipse%2Fswt%** 2Fbrowser%2FBrowser.html<http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fswt%2Fbrowser%2FBrowser.html>
So, to sum it up, use JS to document.getElementById(...) for each field in the form and use their names+values to build the request performed by your Finish button.
I'm afraid this is not possible. Imagine you do have completely unknown template to you and you need your new page wizard to support it. You don't know at all what id you should use and how many of them to get all the template forms values. For example let's have a template for book type with a fields: "Book name", "Author name" and "publication". Id's of those fields in my particular case are: Book store.BookClass_0_name, Book store.BookClass_0_author, Book store.BookClass_0_publication how the template wizard author should know this? So IMHO this way is not possible or at least not in this way...
Well, from your template wizard and by using JavaScript, you could get all the<input...> elements with their name and value and pass them to the request performed by the 'Finish' button. I doubt that there will be more than one<form> element in the template page, but even so, the main<form> element's ID is 'inline'.
Here's a starting point based on the above:
var formData = {};
var inputs = document.getElementsByTagName(**'input'); for (var i = 0; i< inputs.length; ++i) { var input = inputs[i]; if (input.value == null || input.value == '' || input.type == 'button' || input.type == 'submit') { continue; } console.log('Input [' + i + '] (' + input.type + '): ' + input.name + ' = ' + input.value) formData[input.name] = input.value; }
console.log(formData);
Note: Replace 'console' with alert if you are not running this in Firebug's console.
It does need some fine tuning, but it should work.
P.S.: Can you post a screenshot of the wizard page containing the
template's form?
It's small, so I hope nobody will be angry for attaching this directly. This is a second page of the wizard creating page for Book with name "Matka" (Mother in English), author's name is "Karel Capek" and publication date is set to "1929" -- but this is completely untrue, just my example, the first real publication was in 1938. BTW: Karel Capek is listed from the dynamic list of authors, which is a result of SPARQ query on top of Jena's DB. Code which shall be also open-source once we get green from the customer legal department... "FOUND BOOK NAME" and "FOUND AUTHOR NAME" together with "<set property operation aborted!>" are just debug messages from template .vm code where I'm using some of our semantics marcos (also to be open-sourced) -- this all is about semantic XWiki book store demo example... I'm creating pages for authors and books using author and book template. Once you add author page all the semantics props are set so you get it listed automatically inside the book template code in author name dynamic SPARQ list...
Thanks for the preview. It looks like you are using xpage=plain for plain HTML rendering. This should be enough for basic templates. I some templates contain javascript inside them (for input validation, autocomplete, etc) , I don`t think it will work since the JS is not included in xpage=plain. Don`t know if that`s a problem for your usecase.
Good luck, Eduard
Now I just need to make sure page template creation is really working
even from XEclipse (this thread is all about)...
Thanks! Karel
On Tue, Jun 28, 2011 at 2:56 PM, Karel Gardas<karel.gardas@centrum.cz**
**
wrote:
Hi Eduard,
On 06/15/11 06:59 PM, Eduard Moraru wrote:
Hi Karel,
On 06/15/2011 01:54 PM, Karel Gardas wrote:
Hello Sergiu, > > thanks a lot for you hint, when I renamed > xwiki-enterprise-web-3.1-****SNAPSHOT to simple xwiki, then after > clicking > on<save and view> button I got to normal login screen and when I > log > > in
the page is really created.
> > If you look at my first reply (with initial suggestions), you`ll see > that I suggested that the actual Save action when completing the creation of a page should be performed by your wizard`s Finish button (sending a HTTP request with all the parameters set), otherwise you mix up the user by having 2 sets of buttons (XWiki`s and the wizard`s).
I remember well your initial recommendation. Thanks for it! The way of using SWT browser directly was just rather a proof-of-concept of the idea of having browser embedded inside the wizard. Now, the situation is a little bit different. I do have:
- small http client code which logs into xwiki server if needed and access the newly created page - strip all not needed information from the newly created page and leave just a form to fill the template data - show such page in the browser embedded inside the wizard window and allow user to fill the form.
That's what working. Now I would like to press Finish button get the filled form from SWT browser (somehow!) and POST it to the xwiki server to save the page with entered data. The problem is that if I use getText() method on SWT browser it does not return page with filled data and I don't see any other API which should support this.
So my question now is : do you have any idea how to get filled form page from the browser back into my code?
Thanks a lot! Karel
______________________________****_________________ devs mailing list devs@xwiki.org http://lists.xwiki.org/****mailman/listinfo/devs<http://lists.xwiki.org/**mailman/listinfo/devs> <http://**lists.xwiki.org/mailman/**listinfo/devs<http://lists.xwiki.org/mailman/listinfo/devs>
______________________________****_________________
devs mailing list devs@xwiki.org http://lists.xwiki.org/****mailman/listinfo/devs<http://lists.xwiki.org/**mailman/listinfo/devs> <http://**lists.xwiki.org/mailman/**listinfo/devs<http://lists.xwiki.org/mailman/listinfo/devs>
participants (1)
-
Eduard Moraru