X-Git-Url: https://scm.cri.ensmp.fr/git/Plinn.git/blobdiff_plain/3c4367d8e03450e9a73e61f4247145d2b6c86a33..959d888c17d1403d2eeecc19bc4b5e2c8d1debf6:/Products/Plinn/skins/ajax_scripts/widget_form_manager.js diff --git a/Products/Plinn/skins/ajax_scripts/widget_form_manager.js b/Products/Plinn/skins/ajax_scripts/widget_form_manager.js new file mode 100644 index 0000000..516dca7 --- /dev/null +++ b/Products/Plinn/skins/ajax_scripts/widget_form_manager.js @@ -0,0 +1,264 @@ +// © 2009 Benoît Pin +// http://plinn.org +// Licence GPL +// +// + +var WidgetBasedFormManager; + +(function(){ + WidgetBasedFormManager = function(widgets, editingArea, dataArea, dataAreaSpecs, afterShow) { + /* widgets : {'add':element, 'edit':element} element targets nodes to clone. + * editingArea : surrounding element where form is + * dataArea : element where data are + * dataAreaSpecs : by default, param used to indicate the total number of columns + * afterShow : function called after a widget insertion + */ + var thisWgtManager = this; + this.widgets = widgets; + this.openedWidget = null; + this.dataArea = dataArea; + this.dataAreaSpecs = dataAreaSpecs; + this.afterShow = afterShow; + + var form = editingArea.getElementsByTagName('form')[0]; + this.form = form; + var fm = new FormManager(form); + fm.onBeforeSubmit = function(fm, evt){return thisWgtManager.onBeforeSubmit(fm, evt);}; + fm.onResponseLoad = function(req){thisWgtManager.loadResponse(req);}; + + addListener(this.form, 'click', function(evt){thisWgtManager.clickHandler(evt);}); + + }; + + WidgetBasedFormManager.prototype.showAddWidget = function(dest) { + if (this.openedWidget) + return; + var wdgtCopy = this.widgets['add'].cloneNode(true); + wdgtCopy.removeAttribute('id'); + this.openedWidget = wdgtCopy; + dest.appendChild(wdgtCopy); + if (this.addButton) + this.addButton.style.visibility = 'hidden'; + if (this.afterShow) + this.afterShow(this); + }; + + WidgetBasedFormManager.prototype.showPopulatedWidget = function(dest, url) { + var req = new XMLHttpRequest(); + req.open("GET", url, false); + showProgressImage(); + req.send(null); + hideProgressImage(); + + if (req.status != 200){ + alert(req.status); + return; + } + + var wdgtCopy = this.widgets['edit'].cloneNode(true); + wdgtCopy.removeAttribute('id'); + var tmpForm = document.createElement('form'); + tmpForm.appendChild(wdgtCopy); + + var fields = req.responseXML.documentElement.childNodes; + var input, field, value; + for (var i = 0 ; i