| // Form plugin for Xinha |
| // Distributed under the same terms as HTMLArea itself. |
| // This notice MUST stay intact for use (see license.txt). |
| |
| |
| function Forms(editor) { |
| this.editor = editor; |
| var cfg = editor.config; |
| var bl = Forms.btnList; |
| var self = this; |
| // register the toolbar buttons provided by this plugin |
| var toolbar = ["linebreak"]; |
| for (var i = 0; i < bl.length; ++i) { |
| var btn = bl[i]; |
| if (!btn) { |
| toolbar.push("separator"); |
| } else { |
| var id = btn[0]; |
| if (i<3) |
| cfg.registerButton(id, this._lc(btn[1]), editor.imgURL("ed_" + btn[0] + ".gif", "Forms"), false, |
| function(editor, id) { |
| // dispatch button press event |
| self.buttonPress(editor, id); |
| }); |
| else |
| cfg.registerButton(id, this._lc(btn[1]), editor.imgURL("ed_" + btn[0] + ".gif", "Forms"), false, |
| function(editor, id) { |
| // dispatch button press event |
| self.buttonPress(editor, id); |
| },"form"); |
| toolbar.push(id); |
| } |
| } |
| // add a new line in the toolbar |
| cfg.toolbar.push(toolbar); |
| } |
| |
| Forms._pluginInfo = { |
| name : "Forms", |
| origin : "version: 1.0, by Nelson Bright, BrightWork, Inc., http://www.brightworkweb.com", |
| version : "2.0", |
| developer : "Udo Schmal", |
| developer_url : "", |
| sponsor : "L.N.Schaffrath NeueMedien", |
| sponsor_url : "http://www.schaffrath-neuemedien.de/", |
| c_owner : "Udo Schmal & Schaffrath-NeueMedien", |
| license : "htmlArea" |
| }; |
| |
| // the list of buttons added by this plugin |
| Forms.btnList = [ |
| // form properties button |
| null, // separator |
| ["form", "Form"], |
| null, // separator |
| // form elements |
| ["textarea", "Textarea"], |
| ["select", "Selection Field"], |
| ["checkbox", "Checkbox"], |
| ["radio", "Radio Button"], |
| ["text", "Text Field"], |
| ["password", "Password Field"], |
| ["file", "File Field"], |
| ["button", "Button"], |
| ["submit", "Submit Button"], |
| ["reset", "Reset Button"], |
| ["image", "Image Button"], |
| ["hidden", "Hidden Field"], |
| ["label", "Label"], |
| ["fieldset", "Field Set"] |
| ]; |
| |
| Forms.prototype._lc = function(string) { |
| return Xinha._lc(string, 'Forms'); |
| }; |
| |
| Forms.prototype.onGenerate = function() { |
| this.editor.addEditorStylesheet(Xinha.getPluginDir("Forms") + '/forms.css'); |
| }; |
| |
| Forms.prototype.buttonPress = function(editor,button_id, node) { |
| function optionValues(text,value) { |
| this.text = text; |
| this.value = value; |
| } |
| var outparam = new Object(); |
| var type = button_id; |
| var sel = editor._getSelection(); |
| var range = editor._createRange(sel); |
| if (button_id=="form") { //Form |
| // see if selection is inside an existing 'form' tag |
| var pe = editor.getParentElement(); |
| var frm = null; |
| while (pe && (pe.nodeType == 1) && (pe.tagName.toLowerCase() != 'body')) { |
| if(pe.tagName.toLowerCase() == "form") { |
| frm = pe; |
| break; |
| } else |
| pe = pe.parentNode; |
| } |
| if (frm) { |
| outparam.f_name = frm.name; |
| outparam.f_action = frm.action; |
| outparam.f_method = frm.method; |
| outparam.f_enctype = frm.enctype; |
| outparam.f_target = frm.target; |
| } else {; |
| outparam.f_name = ""; |
| outparam.f_action = ""; |
| outparam.f_method = ""; |
| outparam.f_enctype = ""; |
| outparam.f_target = ""; |
| } |
| editor._popupDialog("plugin://Forms/form", function(param) { |
| if (param) { |
| if(frm) { |
| frm.name = param["f_name"]; |
| frm.setAttribute("action", param["f_action"]); |
| frm.setAttribute("method", param["f_method"]); |
| frm.setAttribute("enctype",param["f_enctype"]); |
| frm.setAttribute("target", param["f_target"]); |
| } else { |
| frm = '<form name="' + param["f_name"] + '"'; |
| if (param["f_action"] != "") frm += ' action="' + param["f_action"] + '"'; |
| if (param["f_method"] != "") frm += ' method="' + param["f_method"] + '"'; |
| if (param["f_enctype"] != "") frm += ' enctype="' + param["f_enctype"] + '"'; |
| if (param["f_target"] != "") frm += ' target="' + param["f_target"] + '"'; |
| frm += '>'; |
| editor.surroundHTML(frm, ' </form>'); |
| } |
| } |
| }, outparam); |
| |
| } else { // form element (checkbox, radio, text, password, textarea, select, button, submit, reset, image, hidden) |
| var tagName = ""; |
| // see if selection is an form element |
| if (typeof node == "undefined") { |
| node = editor.getParentElement(); |
| var tag = node.tagName.toLowerCase() |
| if (node && (tag == "legend")) { |
| node = node.parentElement; |
| tag = node.tagName.toLowerCase(); |
| } |
| if (node && !(tag == "textarea" || tag == "select" || tag == "input" || tag == "label" || tag == "fieldset")) |
| node = null; |
| } |
| |
| if(node) { |
| type = node.tagName.toLowerCase(); |
| outparam.f_name = node.name; |
| tagName = node.tagName; |
| if (type == "input") { |
| outparam.f_type = node.type; |
| type = node.type; |
| } |
| switch (type) { |
| case "textarea": |
| outparam.f_cols = node.cols; |
| outparam.f_rows = node.rows; |
| outparam.f_text = node.innerHTML; |
| outparam.f_wrap = node.getAttribute("wrap"); |
| outparam.f_readOnly = node.getAttribute("readOnly"); |
| outparam.f_disabled = node.getAttribute("disabled"); |
| outparam.f_tabindex = node.getAttribute("tabindex"); |
| outparam.f_accesskey = node.getAttribute("accesskey"); |
| break; |
| case "select": |
| outparam.f_size = parseInt(node.size); |
| outparam.f_multiple = node.getAttribute("multiple"); |
| outparam.f_disabled = node.getAttribute("disabled"); |
| outparam.f_tabindex = node.getAttribute("tabindex"); |
| var a_options = new Array(); |
| for (var i=0; i<=node.options.length-1; i++) { |
| a_options[i] = new optionValues(node.options[i].text, node.options[i].value); |
| } |
| outparam.f_options = a_options; |
| break; |
| case "text": |
| case "password": |
| outparam.f_value = node.value; |
| outparam.f_size = node.size; |
| outparam.f_maxLength = node.maxLength; |
| outparam.f_readOnly = node.getAttribute("readOnly"); |
| outparam.f_disabled = node.getAttribute("disabled"); |
| outparam.f_tabindex = node.getAttribute("tabindex"); |
| outparam.f_accesskey = node.getAttribute("accesskey"); |
| break; |
| case "hidden": |
| outparam.f_value = node.value; |
| break; |
| case "submit": |
| case "reset": |
| outparam.f_value = node.value; |
| outparam.f_disabled = node.getAttribute("disabled"); |
| outparam.f_tabindex = node.getAttribute("tabindex"); |
| outparam.f_accesskey = node.getAttribute("accesskey"); |
| break; |
| case "checkbox": |
| case "radio": |
| outparam.f_value = node.value; |
| outparam.f_checked = node.checked; |
| outparam.f_disabled = node.getAttribute("disabled"); |
| outparam.f_tabindex = node.getAttribute("tabindex"); |
| outparam.f_accesskey = node.getAttribute("accesskey"); |
| break; |
| case "button": |
| outparam.f_value = node.value; |
| outparam.f_onclick = node.getAttribute("onclick"); |
| outparam.f_disabled = node.getAttribute("disabled"); |
| outparam.f_tabindex = node.getAttribute("tabindex"); |
| outparam.f_accesskey = node.getAttribute("accesskey"); |
| break; |
| case "image": |
| outparam.f_value = node.value; |
| outparam.f_src = node.src; |
| outparam.f_disabled = node.getAttribute("disabled"); |
| outparam.f_tabindex = node.getAttribute("tabindex"); |
| outparam.f_accesskey = node.getAttribute("accesskey"); |
| break; |
| case "file": |
| outparam.f_disabled = node.getAttribute("disabled"); |
| outparam.f_tabindex = node.getAttribute("tabindex"); |
| outparam.f_accesskey = node.getAttribute("accesskey"); |
| break; |
| case "label": |
| outparam.f_text = node.innerHTML; |
| outparam.f_for = node.getAttribute("for"); |
| outparam.f_accesskey = node.getAttribute("accesskey"); |
| break; |
| case "fieldset": |
| if(node.firstChild.tagName.toLowerCase()=="legend") |
| outparam.f_text = node.firstChild.innerHTML; |
| else |
| outparam.f_text = ""; |
| break; |
| } |
| } else { |
| outparam.f_name = ""; |
| switch (button_id) { |
| case "textarea": |
| case "select": |
| case "label": |
| case "fieldset": |
| tagName = button_id; |
| break; |
| default: |
| tagName = "input"; |
| outparam.f_type = button_id; |
| break; |
| } |
| outparam.f_options = ""; |
| outparam.f_cols = "20"; |
| outparam.f_rows = "4"; |
| outparam.f_multiple = "false"; |
| outparam.f_value = ""; |
| outparam.f_size = ""; |
| outparam.f_maxLength = ""; |
| outparam.f_checked = ""; |
| outparam.f_src = ""; |
| outparam.f_onclick = ""; |
| outparam.f_wrap = ""; |
| outparam.f_readOnly = "false"; |
| outparam.f_disabled = "false"; |
| outparam.f_tabindex = ""; |
| outparam.f_accesskey = ""; |
| outparam.f_for = ""; |
| outparam.f_text = ""; |
| outparam.f_legend = ""; |
| } |
| editor._popupDialog("plugin://Forms/" + tagName + ".html", function(param) { |
| if (param) { |
| if(param["f_cols"]) |
| if (isNaN(parseInt(param["f_cols"],10)) || parseInt(param["f_cols"],10) <= 0) |
| param["f_cols"] = ""; |
| if(param["f_rows"]) |
| if(isNaN(parseInt(param["f_rows"],10)) || parseInt(param["f_rows"],10) <= 0) |
| param["f_rows"] = ""; |
| if(param["f_size"]) |
| if(isNaN(parseInt(param["f_size"],10)) || parseInt(param["f_size"],10) <= 0) |
| param["f_size"] = ""; |
| if(param["f_maxlength"]) |
| if(isNaN(parseInt(param["f_maxLength"],10)) || parseInt(param["f_maxLength"],10) <= 0) |
| param["f_maxLength"] = ""; |
| if(node) { |
| //prepare existing Element |
| for (field in param) { |
| //alert(field.substring(2,20) + '=' + param[field]); //to be silent! by htanaka |
| if ((field=="f_text") || (field=="f_options") || (field=="f_onclick") || (field=="f_checked"))continue; |
| if (param[field] != "") |
| node.setAttribute(field.substring(2,20), param[field]); |
| else |
| node.removeAttribute(field.substring(2,20)); |
| } |
| if (type == "textarea") { |
| node.innerHTML = param["f_text"]; |
| } else if(type == "select") { |
| node.options.length = 0; |
| var optionsList = param["f_options"]; |
| for (i=0; i<= optionsList.length-1; i++) { |
| node.options[i] = new Option(optionsList[i].text, optionsList[i].value) |
| } |
| } else if(type == "label") { |
| node.innerHTML = param["f_text"]; |
| } else if(type == "fieldset") { |
| if(outparam.f_text != "") { |
| if(node.firstChild.tagName.toLowerCase()=="legend") |
| node.firstChild.innerHTML = param["f_text"]; |
| } else {}// not implemented jet |
| } else if((type == "checkbox") || (type == "radio")) { //input |
| if(param["f_checked"]!="") |
| node.checked = true; |
| else |
| node.checked = false; |
| } else { |
| if(param["f_onclick"]){ |
| node.onclick = ""; |
| if(param["f_onclick"]!="") |
| node.onclick = param["f_onclick"]; |
| } |
| } |
| } else { |
| //create Element |
| var text = ""; |
| for (field in param) { |
| if (!param[field]) continue; |
| if ((param[field]=="") || (field=="f_text")|| (field=="f_options"))continue; |
| text += " " + field.substring(2,20) + '="' + param[field] + '"'; |
| } |
| |
| if(type == "textarea") { |
| text = '<textarea' + text + '>' + param["f_text"] + '</textarea>'; |
| } else if(type == "select") { |
| text = '<select' + text + '>'; |
| var optionsList = param["f_options"]; |
| for (i=0; i<= optionsList.length-1; i++) { |
| // v-- Avoid lc_parse_strings.php |
| text += '<'+'option value="'+optionsList[i].value+'">'+optionsList[i].text+'</option>'; |
| } |
| text += '</select>'; |
| } else if(type == "label") { |
| text = '<label' + text + '>' + param["f_text"] + '</label>'; |
| } else if(type == "fieldset") { |
| text = '<fieldset' + text + '>'; |
| if (param["f_legend"] != "") text += '<legend>' + param["f_text"] + '</legend>'; |
| text += '</fieldset>'; |
| } else { |
| text = '<input type="'+type+'"' + text + '>'; |
| } |
| editor.insertHTML(text); |
| } |
| } |
| }, outparam); |
| } |
| }; |