function EAL() { var t = this; t.version = "0.8.2"; date = new Date(); t.start_time = date.getTime(); t.win = "loading"; t.error = false; t.baseURL = ""; t.template = ""; t.lang = {}; t.load_syntax = {}; t.syntax = {}; t.loadedFiles = []; t.waiting_loading = {}; t.scripts_to_load = []; t.sub_scripts_to_load = []; t.syntax_display_name = { 'basic': 'Basic', 'brainfuck': 'Brainfuck', 'c': 'C', 'coldfusion': 'Coldfusion', 'cpp': 'CPP', 'css': 'CSS', 'html': 'HTML', 'java': 'Java', 'js': 'Javascript', 'pas': 'Pascal', 'perl': 'Perl', 'php': 'Php', 'python': 'Python', 'robotstxt': 'Robots txt', 'ruby': 'Ruby', 'sql': 'SQL', 'tsql': 'T-SQL', 'vb': 'Visual Basic', 'xml': 'XML' }; t.resize = []; t.hidden = {}; t.default_settings = { debug: false, smooth_selection: true, font_size: "10", font_family: "monospace", start_highlight: false, toolbar: "search,go_to_line,fullscreen,|,undo,redo,|,select_font,|,change_smooth_selection,highlight,reset_highlight,word_wrap,|,help", begin_toolbar: "", end_toolbar: "", is_multi_files: false, allow_resize: "both", show_line_colors: false, min_width: 400, min_height: 125, replace_tab_by_spaces: false, allow_toggle: true, language: "en", syntax: "", syntax_selection_allow: "basic,brainfuck,c,coldfusion,cpp,css,html,java,js,pas,perl,php,python,ruby,robotstxt,sql,tsql,vb,xml", display: "onload", max_undo: 30, browsers: "known", plugins: "", gecko_spellcheck: false, fullscreen: false, is_editable: true, cursor_position: "begin", word_wrap: false, autocompletion: false, load_callback: "", save_callback: "", change_callback: "", submit_callback: "", EA_init_callback: "", EA_delete_callback: "", EA_load_callback: "", EA_unload_callback: "", EA_toggle_on_callback: "", EA_toggle_off_callback: "", EA_file_switch_on_callback: "", EA_file_switch_off_callback: "", EA_file_close_callback: "" }; t.advanced_buttons = [ ['new_document', 'newdocument.gif', 'new_document', false], ['search', 'search.gif', 'show_search', false], ['go_to_line', 'go_to_line.gif', 'go_to_line', false], ['undo', 'undo.gif', 'undo', true], ['redo', 'redo.gif', 'redo', true], ['change_smooth_selection', 'smooth_selection.gif', 'change_smooth_selection_mode', true], ['reset_highlight', 'reset_highlight.gif', 'resync_highlight', true], ['highlight', 'highlight.gif', 'change_highlight', true], ['help', 'help.gif', 'show_help', false], ['save', 'save.gif', 'save', false], ['load', 'load.gif', 'load', false], ['fullscreen', 'fullscreen.gif', 'toggle_full_screen', false], ['word_wrap', 'word_wrap.gif', 'toggle_word_wrap', true], ['autocompletion', 'autocompletion.gif', 'toggle_autocompletion', true] ]; t.set_browser_infos(t); if (t.isIE >= 6 || t.isGecko || (t.isWebKit && !t.isSafari < 3) || t.isOpera >= 9 || t.isCamino) t.isValidBrowser = true; else t.isValidBrowser = false; t.set_base_url(); for (var i = 0; i < t.scripts_to_load.length; i++) { setTimeout("eAL.load_script('" + t.baseURL + t.scripts_to_load[i] + ".js');", 1); t.waiting_loading[t.scripts_to_load[i] + ".js"] = false; } t.add_event(window, "load", EAL.prototype.window_loaded); }; EAL.prototype = { has_error: function() { this.error = true; for (var i in EAL.prototype) { EAL.prototype[i] = function() {}; } }, set_browser_infos: function(o) { ua = navigator.userAgent; o.isWebKit = /WebKit/.test(ua); o.isGecko = !o.isWebKit && /Gecko/.test(ua); o.isMac = /Mac/.test(ua); o.isIE = (navigator.appName == "Microsoft Internet Explorer"); if (o.isIE) { o.isIE = ua.replace(/^.*?MSIE\s+([0-9\.]+).*$/, "$1"); if (o.isIE < 6) o.has_error(); } if (o.isOpera = (ua.indexOf('Opera') != -1)) { o.isOpera = ua.replace(/^.*?Opera.*?([0-9\.]+).*$/i, "$1"); if (o.isOpera < 9) o.has_error(); o.isIE = false; } if (o.isFirefox = (ua.indexOf('Firefox') != -1)) o.isFirefox = ua.replace(/^.*?Firefox.*?([0-9\.]+).*$/i, "$1"); if (ua.indexOf('Iceweasel') != -1) o.isFirefox = ua.replace(/^.*?Iceweasel.*?([0-9\.]+).*$/i, "$1"); if (ua.indexOf('GranParadiso') != -1) o.isFirefox = ua.replace(/^.*?GranParadiso.*?([0-9\.]+).*$/i, "$1"); if (ua.indexOf('BonEcho') != -1) o.isFirefox = ua.replace(/^.*?BonEcho.*?([0-9\.]+).*$/i, "$1"); if (ua.indexOf('SeaMonkey') != -1) o.isFirefox = (ua.replace(/^.*?SeaMonkey.*?([0-9\.]+).*$/i, "$1")) + 1; if (o.isCamino = (ua.indexOf('Camino') != -1)) o.isCamino = ua.replace(/^.*?Camino.*?([0-9\.]+).*$/i, "$1"); if (o.isSafari = (ua.indexOf('Safari') != -1)) o.isSafari = ua.replace(/^.*?Version\/([0-9]+\.[0-9]+).*$/i, "$1"); if (o.isChrome = (ua.indexOf('Chrome') != -1)) { o.isChrome = ua.replace(/^.*?Chrome.*?([0-9\.]+).*$/i, "$1"); o.isSafari = false; } }, window_loaded: function() { eAL.win = "loaded"; if (document.forms) { for (var i = 0; i < document.forms.length; i++) { var form = document.forms[i]; form.edit_area_replaced_submit = null; try { form.edit_area_replaced_submit = form.onsubmit; form.onsubmit = ""; } catch (e) {} eAL.add_event(form, "submit", EAL.prototype.submit); eAL.add_event(form, "reset", EAL.prototype.reset); } } eAL.add_event(window, "unload", function() { for (var i in eAs) { eAL.delete_instance(i); } }); }, init_ie_textarea: function(id) { var a = document.getElementById(id); try { if (a && typeof(a.focused) == "undefined") { a.focus(); a.focused = true; a.selectionStart = a.selectionEnd = 0; get_IE_selection(a); eAL.add_event(a, "focus", IE_textarea_focus); eAL.add_event(a, "blur", IE_textarea_blur); } } catch (ex) {} }, init: function(settings) { var t = this, s = settings, i; if (!s["id"]) t.has_error(); if (t.error) return; if (eAs[s["id"]]) t.delete_instance(s["id"]); for (i in t.default_settings) { if (typeof(s[i]) == "undefined") s[i] = t.default_settings[i]; } if (s["browsers"] == "known" && t.isValidBrowser == false) { return; } if (s["begin_toolbar"].length > 0) s["toolbar"] = s["begin_toolbar"] + "," + s["toolbar"]; if (s["end_toolbar"].length > 0) s["toolbar"] = s["toolbar"] + "," + s["end_toolbar"]; s["tab_toolbar"] = s["toolbar"].replace(/ /g, "").split(","); s["plugins"] = s["plugins"].replace(/ /g, "").split(","); for (i = 0; i < s["plugins"].length; i++) { if (s["plugins"][i].length == 0) s["plugins"].splice(i, 1); } t.get_template(); t.load_script(t.baseURL + "langs/" + s["language"] + ".js"); if (s["syntax"].length > 0) { s["syntax"] = s["syntax"].toLowerCase(); t.load_script(t.baseURL + "reg_syntax/" + s["syntax"] + ".js"); } eAs[s["id"]] = { "settings": s }; eAs[s["id"]]["displayed"] = false; eAs[s["id"]]["hidden"] = false; t.start(s["id"]); }, delete_instance: function(id) { var d = document, fs = window.frames, span, iframe; eAL.execCommand(id, "EA_delete"); if (fs["frame_" + id] && fs["frame_" + id].editArea) { if (eAs[id]["displayed"]) eAL.toggle(id, "off"); fs["frame_" + id].editArea.execCommand("EA_unload"); } span = d.getElementById("EditAreaArroundInfos_" + id); if (span) span.parentNode.removeChild(span); iframe = d.getElementById("frame_" + id); if (iframe) { iframe.parentNode.removeChild(iframe); try { delete fs["frame_" + id]; } catch (e) {} } delete eAs[id]; }, start: function(id) { var t = this, d = document, f, span, father, next, html = '', html_toolbar_content = '', template, content, i; if (t.win != "loaded") { setTimeout("eAL.start('" + id + "');", 50); return; } for (i in t.waiting_loading) { if (t.waiting_loading[i] != "loaded" && typeof(t.waiting_loading[i]) != "function") { setTimeout("eAL.start('" + id + "');", 50); return; } } if (!t.lang[eAs[id]["settings"]["language"]] || (eAs[id]["settings"]["syntax"].length > 0 && !t.load_syntax[eAs[id]["settings"]["syntax"]])) { setTimeout("eAL.start('" + id + "');", 50); return; } if (eAs[id]["settings"]["syntax"].length > 0) t.init_syntax_regexp(); if (!d.getElementById("EditAreaArroundInfos_" + id) && (eAs[id]["settings"]["debug"] || eAs[id]["settings"]["allow_toggle"])) { span = d.createElement("span"); span.id = "EditAreaArroundInfos_" + id; if (eAs[id]["settings"]["allow_toggle"]) { checked = (eAs[id]["settings"]["display"] == "onload") ? "checked='checked'" : ""; html += "
"; html += ""; html += "
"; } if (eAs[id]["settings"]["debug"]) html += "
"; html = t.translate(html, eAs[id]["settings"]["language"]); span.innerHTML = html; father = d.getElementById(id).parentNode; next = d.getElementById(id).nextSibling; if (next == null) father.appendChild(span); else father.insertBefore(span, next); } if (!eAs[id]["initialized"]) { t.execCommand(id, "EA_init"); if (eAs[id]["settings"]["display"] == "later") { eAs[id]["initialized"] = true; return; } } if (t.isIE) { t.init_ie_textarea(id); } var area = eAs[id]; for (i = 0; i < area["settings"]["tab_toolbar"].length; i++) { html_toolbar_content += t.get_control_html(area["settings"]["tab_toolbar"][i], area["settings"]["language"]); } html_toolbar_content = t.translate(html_toolbar_content, area["settings"]["language"], "template"); if (!t.iframe_script) { t.iframe_script = ""; for (i = 0; i < t.sub_scripts_to_load.length; i++) t.iframe_script += ''; } for (i = 0; i < area["settings"]["plugins"].length; i++) { if (!t.all_plugins_loaded) t.iframe_script += ''; t.iframe_script += ''; } if (!t.iframe_css) { t.iframe_css = ""; } template = t.template.replace(/\[__BASEURL__\]/g, t.baseURL); template = template.replace("[__TOOLBAR__]", html_toolbar_content); template = t.translate(template, area["settings"]["language"], "template"); template = template.replace("[__CSSRULES__]", t.iframe_css); template = template.replace("[__JSCODE__]", t.iframe_script); template = template.replace("[__EA_VERSION__]", t.version); area.textarea = d.getElementById(area["settings"]["id"]); eAs[area["settings"]["id"]]["textarea"] = area.textarea; if (typeof(window.frames["frame_" + area["settings"]["id"]]) != 'undefined') delete window.frames["frame_" + area["settings"]["id"]]; father = area.textarea.parentNode; content = d.createElement("iframe"); content.name = "frame_" + area["settings"]["id"]; content.id = "frame_" + area["settings"]["id"]; content.style.borderWidth = "0px"; setAttribute(content, "frameBorder", "0"); content.style.overflow = "hidden"; content.style.display = "none"; next = area.textarea.nextSibling; if (next == null) father.appendChild(content); else father.insertBefore(content, next); f = window.frames["frame_" + area["settings"]["id"]]; f.document.open(); f.eAs = eAs; f.area_id = area["settings"]["id"]; f.document.area_id = area["settings"]["id"]; f.document.write(template); f.document.close(); }, toggle: function(id, toggle_to) { if (!toggle_to) toggle_to = (eAs[id]["displayed"] == true) ? "off" : "on"; if (eAs[id]["displayed"] == true && toggle_to == "off") { this.toggle_off(id); } else if (eAs[id]["displayed"] == false && toggle_to == "on") { this.toggle_on(id); } return false; }, toggle_off: function(id) { var fs = window.frames, f, t, parNod, nxtSib, selStart, selEnd, scrollTop, scrollLeft; if (fs["frame_" + id]) { f = fs["frame_" + id]; t = eAs[id]["textarea"]; if (f.editArea.fullscreen['isFull']) f.editArea.toggle_full_screen(false); eAs[id]["displayed"] = false; t.wrap = "off"; setAttribute(t, "wrap", "off"); parNod = t.parentNode; nxtSib = t.nextSibling; parNod.removeChild(t); parNod.insertBefore(t, nxtSib); t.value = f.editArea.textarea.value; selStart = f.editArea.last_selection["selectionStart"]; selEnd = f.editArea.last_selection["selectionEnd"]; scrollTop = f.document.getElementById("result").scrollTop; scrollLeft = f.document.getElementById("result").scrollLeft; document.getElementById("frame_" + id).style.display = 'none'; t.style.display = "inline"; try { t.focus(); } catch (e) {}; if (this.isIE) { t.selectionStart = selStart; t.selectionEnd = selEnd; t.focused = true; set_IE_selection(t); } else { if (this.isOpera && this.isOpera < 9.6) { t.setSelectionRange(0, 0); } try { t.setSelectionRange(selStart, selEnd); } catch (e) {}; } t.scrollTop = scrollTop; t.scrollLeft = scrollLeft; f.editArea.execCommand("toggle_off"); } }, toggle_on: function(id) { var fs = window.frames, f, t, selStart = 0, selEnd = 0, scrollTop = 0, scrollLeft = 0, curPos, elem; if (fs["frame_" + id]) { f = fs["frame_" + id]; t = eAs[id]["textarea"]; area = f.editArea; area.textarea.value = t.value; curPos = eAs[id]["settings"]["cursor_position"]; if (t.use_last == true) { selStart = t.last_selectionStart; selEnd = t.last_selectionEnd; scrollTop = t.last_scrollTop; scrollLeft = t.last_scrollLeft; t.use_last = false; } else if (curPos == "auto") { try { selStart = t.selectionStart; selEnd = t.selectionEnd; scrollTop = t.scrollTop; scrollLeft = t.scrollLeft; } catch (ex) {} } this.set_editarea_size_from_textarea(id, document.getElementById("frame_" + id)); t.style.display = "none"; document.getElementById("frame_" + id).style.display = "inline"; area.execCommand("focus"); eAs[id]["displayed"] = true; area.execCommand("update_size"); f.document.getElementById("result").scrollTop = scrollTop; f.document.getElementById("result").scrollLeft = scrollLeft; area.area_select(selStart, selEnd - selStart); area.execCommand("toggle_on"); } else { elem = document.getElementById(id); elem.last_selectionStart = elem.selectionStart; elem.last_selectionEnd = elem.selectionEnd; elem.last_scrollTop = elem.scrollTop; elem.last_scrollLeft = elem.scrollLeft; elem.use_last = true; eAL.start(id); } }, set_editarea_size_from_textarea: function(id, frame) { var elem, width, height; elem = document.getElementById(id); width = Math.max(eAs[id]["settings"]["min_width"], elem.offsetWidth) + "px"; height = Math.max(eAs[id]["settings"]["min_height"], elem.offsetHeight) + "px"; if (elem.style.width.indexOf("%") != -1) width = elem.style.width; if (elem.style.height.indexOf("%") != -1) height = elem.style.height; frame.style.width = width; frame.style.height = height; }, set_base_url: function() { var t = this, elems, i, docBasePath; if (!this.baseURL) { elems = document.getElementsByTagName('script'); for (i = 0; i < elems.length; i++) { if (elems[i].src && elems[i].src.match(/edit_area_[^\\\/]*$/i)) { var src = unescape(elems[i].src); src = src.substring(0, src.lastIndexOf('/')); this.baseURL = src; this.file_name = elems[i].src.substr(elems[i].src.lastIndexOf("/") + 1); break; } } } docBasePath = document.location.href; if (docBasePath.indexOf('?') != -1) docBasePath = docBasePath.substring(0, docBasePath.indexOf('?')); docBasePath = docBasePath.substring(0, docBasePath.lastIndexOf('/')); if (t.baseURL.indexOf('://') == -1 && t.baseURL.charAt(0) != '/') { t.baseURL = docBasePath + "/" + t.baseURL; } t.baseURL += "/"; }, get_button_html: function(id, img, exec, isFileSpecific, baseURL) { var cmd, html; if (!baseURL) baseURL = this.baseURL; cmd = 'editArea.execCommand(\'' + exec + '\')'; html = ''; html += ''; return html; }, get_control_html: function(button_name, lang) { var t = this, i, but, html, si; for (i = 0; i < t.advanced_buttons.length; i++) { but = t.advanced_buttons[i]; if (but[0] == button_name) { return t.get_button_html(but[0], but[1], but[2], but[3]); } } switch (button_name) { case "*": case "return": return "
"; case "|": case "separator": return ''; case "select_font": html = ""; return html; case "syntax_selection": html = ""; return html; } return "[" + button_name + "]"; }, get_template: function() { if (this.template == "") { var xhr_object = null; if (window.XMLHttpRequest) xhr_object = new XMLHttpRequest(); else if (window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else { alert("XMLHTTPRequest not supported. EditArea not loaded"); return; } xhr_object.open("GET", this.baseURL + "template.html", false); xhr_object.send(null); if (xhr_object.readyState == 4) this.template = xhr_object.responseText; else this.has_error(); } }, translate: function(text, lang, mode) { if (mode == "word") text = eAL.get_word_translation(text, lang); else if (mode = "template") { eAL.current_language = lang; text = text.replace(/\{\$([^\}]+)\}/gm, eAL.translate_template); } return text; }, translate_template: function() { return eAL.get_word_translation(EAL.prototype.translate_template.arguments[1], eAL.current_language); }, get_word_translation: function(val, lang) { var i; for (i in eAL.lang[lang]) { if (i == val) return eAL.lang[lang][i]; } return "_" + val; }, load_script: function(url) { var t = this, d = document, script, head; if (t.loadedFiles[url]) return; try { script = d.createElement("script"); script.type = "text/javascript"; script.src = url; script.charset = "UTF-8"; d.getElementsByTagName("head")[0].appendChild(script); } catch (e) { d.write(''); } t.loadedFiles[url] = true; }, add_event: function(obj, name, handler) { try { if (obj.attachEvent) { obj.attachEvent("on" + name, handler); } else { obj.addEventListener(name, handler, false); } } catch (e) {} }, remove_event: function(obj, name, handler) { try { if (obj.detachEvent) obj.detachEvent("on" + name, handler); else obj.removeEventListener(name, handler, false); } catch (e) {} }, reset: function(e) { var formObj, is_child, i, x; formObj = eAL.isIE ? window.event.srcElement : e.target; if (formObj.tagName != 'FORM') formObj = formObj.form; for (i in eAs) { is_child = false; for (x = 0; x < formObj.elements.length; x++) { if (formObj.elements[x].id == i) is_child = true; } if (window.frames["frame_" + i] && is_child && eAs[i]["displayed"] == true) { var exec = 'window.frames["frame_' + i + '"].editArea.textarea.value=document.getElementById("' + i + '").value;'; exec += 'window.frames["frame_' + i + '"].editArea.execCommand("focus");'; exec += 'window.frames["frame_' + i + '"].editArea.check_line_selection();'; exec += 'window.frames["frame_' + i + '"].editArea.execCommand("reset");'; window.setTimeout(exec, 10); } } return; }, submit: function(e) { var formObj, is_child, fs = window.frames, i, x; formObj = eAL.isIE ? window.event.srcElement : e.target; if (formObj.tagName != 'FORM') formObj = formObj.form; for (i in eAs) { is_child = false; for (x = 0; x < formObj.elements.length; x++) { if (formObj.elements[x].id == i) is_child = true; } if (is_child) { if (fs["frame_" + i] && eAs[i]["displayed"] == true) document.getElementById(i).value = fs["frame_" + i].editArea.textarea.value; eAL.execCommand(i, "EA_submit"); } } if (typeof(formObj.edit_area_replaced_submit) == "function") { res = formObj.edit_area_replaced_submit(); if (res == false) { if (eAL.isIE) return false; else e.preventDefault(); } } return; }, getValue: function(id) { if (window.frames["frame_" + id] && eAs[id]["displayed"] == true) { return window.frames["frame_" + id].editArea.textarea.value; } else if (elem = document.getElementById(id)) { return elem.value; } return false; }, setValue: function(id, new_val) { var fs = window.frames; if ((f = fs["frame_" + id]) && eAs[id]["displayed"] == true) { f.editArea.textarea.value = new_val; f.editArea.execCommand("focus"); f.editArea.check_line_selection(false); f.editArea.execCommand("onchange"); } else if (elem = document.getElementById(id)) { elem.value = new_val; } }, getSelectionRange: function(id) { var sel, eA, fs = window.frames; sel = { "start": 0, "end": 0 }; if (fs["frame_" + id] && eAs[id]["displayed"] == true) { eA = fs["frame_" + id].editArea; sel["start"] = eA.textarea.selectionStart; sel["end"] = eA.textarea.selectionEnd; } else if (elem = document.getElementById(id)) { sel = getSelectionRange(elem); } return sel; }, setSelectionRange: function(id, new_start, new_end) { var fs = window.frames; if (fs["frame_" + id] && eAs[id]["displayed"] == true) { fs["frame_" + id].editArea.area_select(new_start, new_end - new_start); if (!this.isIE) { fs["frame_" + id].editArea.check_line_selection(false); fs["frame_" + id].editArea.scroll_to_view(); } } else if (elem = document.getElementById(id)) { setSelectionRange(elem, new_start, new_end); } }, getSelectedText: function(id) { var sel = this.getSelectionRange(id); return this.getValue(id).substring(sel["start"], sel["end"]); }, setSelectedText: function(id, new_val) { var fs = window.frames, d = document, sel, text, scrollTop, scrollLeft, new_sel_end; new_val = new_val.replace(/\r/g, ""); sel = this.getSelectionRange(id); text = this.getValue(id); if (fs["frame_" + id] && eAs[id]["displayed"] == true) { scrollTop = fs["frame_" + id].document.getElementById("result").scrollTop; scrollLeft = fs["frame_" + id].document.getElementById("result").scrollLeft; } else { scrollTop = d.getElementById(id).scrollTop; scrollLeft = d.getElementById(id).scrollLeft; } text = text.substring(0, sel["start"]) + new_val + text.substring(sel["end"]); this.setValue(id, text); new_sel_end = sel["start"] + new_val.length; this.setSelectionRange(id, sel["start"], new_sel_end); if (new_val != this.getSelectedText(id).replace(/\r/g, "")) { this.setSelectionRange(id, sel["start"], new_sel_end + new_val.split("\n").length - 1); } if (fs["frame_" + id] && eAs[id]["displayed"] == true) { fs["frame_" + id].document.getElementById("result").scrollTop = scrollTop; fs["frame_" + id].document.getElementById("result").scrollLeft = scrollLeft; fs["frame_" + id].editArea.execCommand("onchange"); } else { d.getElementById(id).scrollTop = scrollTop; d.getElementById(id).scrollLeft = scrollLeft; } }, insertTags: function(id, open_tag, close_tag) { var old_sel, new_sel; old_sel = this.getSelectionRange(id); text = open_tag + this.getSelectedText(id) + close_tag; eAL.setSelectedText(id, text); new_sel = this.getSelectionRange(id); if (old_sel["end"] > old_sel["start"]) this.setSelectionRange(id, new_sel["end"], new_sel["end"]); else this.setSelectionRange(id, old_sel["start"] + open_tag.length, old_sel["start"] + open_tag.length); }, hide: function(id) { var fs = window.frames, d = document, t = this, scrollTop, scrollLeft, span; if (d.getElementById(id) && !t.hidden[id]) { t.hidden[id] = {}; t.hidden[id]["selectionRange"] = t.getSelectionRange(id); if (d.getElementById(id).style.display != "none") { t.hidden[id]["scrollTop"] = d.getElementById(id).scrollTop; t.hidden[id]["scrollLeft"] = d.getElementById(id).scrollLeft; } if (fs["frame_" + id]) { t.hidden[id]["toggle"] = eAs[id]["displayed"]; if (fs["frame_" + id] && eAs[id]["displayed"] == true) { scrollTop = fs["frame_" + id].document.getElementById("result").scrollTop; scrollLeft = fs["frame_" + id].document.getElementById("result").scrollLeft; } else { scrollTop = d.getElementById(id).scrollTop; scrollLeft = d.getElementById(id).scrollLeft; } t.hidden[id]["scrollTop"] = scrollTop; t.hidden[id]["scrollLeft"] = scrollLeft; if (eAs[id]["displayed"] == true) eAL.toggle_off(id); } span = d.getElementById("EditAreaArroundInfos_" + id); if (span) { span.style.display = 'none'; } d.getElementById(id).style.display = "none"; } }, show: function(id) { var fs = window.frames, d = document, t = this, span; if ((elem = d.getElementById(id)) && t.hidden[id]) { elem.style.display = "inline"; elem.scrollTop = t.hidden[id]["scrollTop"]; elem.scrollLeft = t.hidden[id]["scrollLeft"]; span = d.getElementById("EditAreaArroundInfos_" + id); if (span) { span.style.display = 'inline'; } if (fs["frame_" + id]) { elem.style.display = "inline"; if (t.hidden[id]["toggle"] == true) eAL.toggle_on(id); scrollTop = t.hidden[id]["scrollTop"]; scrollLeft = t.hidden[id]["scrollLeft"]; if (fs["frame_" + id] && eAs[id]["displayed"] == true) { fs["frame_" + id].document.getElementById("result").scrollTop = scrollTop; fs["frame_" + id].document.getElementById("result").scrollLeft = scrollLeft; } else { elem.scrollTop = scrollTop; elem.scrollLeft = scrollLeft; } } sel = t.hidden[id]["selectionRange"]; t.setSelectionRange(id, sel["start"], sel["end"]); delete t.hidden[id]; } }, getCurrentFile: function(id) { return this.execCommand(id, 'get_file', this.execCommand(id, 'curr_file')); }, getFile: function(id, file_id) { return this.execCommand(id, 'get_file', file_id); }, getAllFiles: function(id) { return this.execCommand(id, 'get_all_files()'); }, openFile: function(id, file_infos) { return this.execCommand(id, 'open_file', file_infos); }, closeFile: function(id, file_id) { return this.execCommand(id, 'close_file', file_id); }, setFileEditedMode: function(id, file_id, to) { var reg1, reg2; reg1 = new RegExp('\\\\', 'g'); reg2 = new RegExp('"', 'g'); return this.execCommand(id, 'set_file_edited_mode("' + file_id.replace(reg1, '\\\\').replace(reg2, '\\"') + '",' + to + ')'); }, execCommand: function(id, cmd, fct_param) { switch (cmd) { case "EA_init": if (eAs[id]['settings']["EA_init_callback"].length > 0) eval(eAs[id]['settings']["EA_init_callback"] + "('" + id + "');"); break; case "EA_delete": if (eAs[id]['settings']["EA_delete_callback"].length > 0) eval(eAs[id]['settings']["EA_delete_callback"] + "('" + id + "');"); break; case "EA_submit": if (eAs[id]['settings']["submit_callback"].length > 0) eval(eAs[id]['settings']["submit_callback"] + "('" + id + "');"); break; } if (window.frames["frame_" + id] && window.frames["frame_" + id].editArea) { if (fct_param != undefined) return eval('window.frames["frame_' + id + '"].editArea.' + cmd + '(fct_param);'); else return eval('window.frames["frame_' + id + '"].editArea.' + cmd + ';'); } return false; } }; var eAL = new EAL(); var eAs = {}; function getAttribute(elm, aName) { var aValue, taName, i; try { aValue = elm.getAttribute(aName); } catch (exept) {} if (!aValue) { for (i = 0; i < elm.attributes.length; i++) { taName = elm.attributes[i].name.toLowerCase(); if (taName == aName) { aValue = elm.attributes[i].value; return aValue; } } } return aValue; }; function setAttribute(elm, attr, val) { if (attr == "class") { elm.setAttribute("className", val); elm.setAttribute("class", val); } else { elm.setAttribute(attr, val); } }; function getChildren(elem, elem_type, elem_attribute, elem_attribute_match, option, depth) { if (!option) var option = "single"; if (!depth) var depth = -1; if (elem) { var children = elem.childNodes; var result = null; var results = []; for (var x = 0; x < children.length; x++) { strTagName = new String(children[x].tagName); children_class = "?"; if (strTagName != "undefined") { child_attribute = getAttribute(children[x], elem_attribute); if ((strTagName.toLowerCase() == elem_type.toLowerCase() || elem_type == "") && (elem_attribute == "" || child_attribute == elem_attribute_match)) { if (option == "all") { results.push(children[x]); } else { return children[x]; } } if (depth != 0) { result = getChildren(children[x], elem_type, elem_attribute, elem_attribute_match, option, depth - 1); if (option == "all") { if (result.length > 0) { results = results.concat(result); } } else if (result != null) { return result; } } } } if (option == "all") return results; } return null; }; function isChildOf(elem, parent) { if (elem) { if (elem == parent) return true; while (elem.parentNode != 'undefined') { return isChildOf(elem.parentNode, parent); } } return false; }; function getMouseX(e) { if (e != null && typeof(e.pageX) != "undefined") { return e.pageX; } else { return (e != null ? e.x : event.x) + document.documentElement.scrollLeft; } }; function getMouseY(e) { if (e != null && typeof(e.pageY) != "undefined") { return e.pageY; } else { return (e != null ? e.y : event.y) + document.documentElement.scrollTop; } }; function calculeOffsetLeft(r) { return calculeOffset(r, "offsetLeft") }; function calculeOffsetTop(r) { return calculeOffset(r, "offsetTop") }; function calculeOffset(element, attr) { var offset = 0; while (element) { offset += element[attr]; element = element.offsetParent } return offset; }; function get_css_property(elem, prop) { if (document.defaultView) { return document.defaultView.getComputedStyle(elem, null).getPropertyValue(prop); } else if (elem.currentStyle) { var prop = prop.replace(/-\D/gi, function(sMatch) { return sMatch.charAt(sMatch.length - 1).toUpperCase(); }); return elem.currentStyle[prop]; } else return null; } var _mCE; function start_move_element(e, id, frame) { var elem_id = (e.target || e.srcElement).id; if (id) elem_id = id; if (!frame) frame = window; if (frame.event) e = frame.event; _mCE = frame.document.getElementById(elem_id); _mCE.frame = frame; frame.document.onmousemove = move_element; frame.document.onmouseup = end_move_element; mouse_x = getMouseX(e); mouse_y = getMouseY(e); _mCE.start_pos_x = mouse_x - (_mCE.style.left.replace("px", "") || calculeOffsetLeft(_mCE)); _mCE.start_pos_y = mouse_y - (_mCE.style.top.replace("px", "") || calculeOffsetTop(_mCE)); return false; }; function end_move_element(e) { _mCE.frame.document.onmousemove = ""; _mCE.frame.document.onmouseup = ""; _mCE = null; }; function move_element(e) { var newTop, newLeft, maxLeft; if (_mCE.frame && _mCE.frame.event) e = _mCE.frame.event; newTop = getMouseY(e) - _mCE.start_pos_y; newLeft = getMouseX(e) - _mCE.start_pos_x; maxLeft = _mCE.frame.document.body.offsetWidth - _mCE.offsetWidth; max_top = _mCE.frame.document.body.offsetHeight - _mCE.offsetHeight; newTop = Math.min(Math.max(0, newTop), max_top); newLeft = Math.min(Math.max(0, newLeft), maxLeft); _mCE.style.top = newTop + "px"; _mCE.style.left = newLeft + "px"; return false; }; var nav = eAL.nav; function getSelectionRange(textarea) { return { "start": textarea.selectionStart, "end": textarea.selectionEnd }; }; function setSelectionRange(t, start, end) { t.focus(); start = Math.max(0, Math.min(t.value.length, start)); end = Math.max(start, Math.min(t.value.length, end)); if (nav.isOpera && nav.isOpera < 9.6) { t.selectionEnd = 1; t.selectionStart = 0; t.selectionEnd = 1; t.selectionStart = 0; } t.selectionStart = start; t.selectionEnd = end; if (nav.isIE) set_IE_selection(t); }; function get_IE_selection(t) { var d = document, div, range, stored_range, elem, scrollTop, relative_top, line_start, line_nb, range_start, range_end, tab; if (t && t.focused) { if (!t.ea_line_height) { div = d.createElement("div"); div.style.fontFamily = get_css_property(t, "font-family"); div.style.fontSize = get_css_property(t, "font-size"); div.style.visibility = "hidden"; div.innerHTML = "0"; d.body.appendChild(div); t.ea_line_height = div.offsetHeight; d.body.removeChild(div); } range = d.selection.createRange(); try { stored_range = range.duplicate(); stored_range.moveToElementText(t); stored_range.setEndPoint('EndToEnd', range); if (stored_range.parentElement() == t) { elem = t; scrollTop = 0; while (elem.parentNode) { scrollTop += elem.scrollTop; elem = elem.parentNode; } relative_top = range.offsetTop - calculeOffsetTop(t) + scrollTop; line_start = Math.round((relative_top / t.ea_line_height) + 1); line_nb = Math.round(range.boundingHeight / t.ea_line_height); range_start = stored_range.text.length - range.text.length; tab = t.value.substr(0, range_start).split("\n"); range_start += (line_start - tab.length) * 2; t.selectionStart = range_start; range_end = t.selectionStart + range.text.length; tab = t.value.substr(0, range_start + range.text.length).split("\n"); range_end += (line_start + line_nb - 1 - tab.length) * 2; t.selectionEnd = range_end; } } catch (e) {} } if (t && t.id) { setTimeout("get_IE_selection(document.getElementById('" + t.id + "'));", 50); } }; function IE_textarea_focus() { event.srcElement.focused = true; } function IE_textarea_blur() { event.srcElement.focused = false; } function set_IE_selection(t) { var nbLineStart, nbLineStart, nbLineEnd, range; if (!window.closed) { nbLineStart = t.value.substr(0, t.selectionStart).split("\n").length - 1; nbLineEnd = t.value.substr(0, t.selectionEnd).split("\n").length - 1; try { range = document.selection.createRange(); range.moveToElementText(t); range.setEndPoint('EndToStart', range); range.moveStart('character', t.selectionStart - nbLineStart); range.moveEnd('character', t.selectionEnd - nbLineEnd - (t.selectionStart - nbLineStart)); range.select(); } catch (e) {} } }; eAL.waiting_loading["elements_functions.js"] = "loaded"; EAL.prototype.start_resize_area = function() { var d = document, a, div, width, height, father; d.onmouseup = eAL.end_resize_area; d.onmousemove = eAL.resize_area; eAL.toggle(eAL.resize["id"]); a = eAs[eAL.resize["id"]]["textarea"]; div = d.getElementById("edit_area_resize"); if (!div) { div = d.createElement("div"); div.id = "edit_area_resize"; div.style.border = "dashed #888888 1px"; } width = a.offsetWidth - 2; height = a.offsetHeight - 2; div.style.display = "block"; div.style.width = width + "px"; div.style.height = height + "px"; father = a.parentNode; father.insertBefore(div, a); a.style.display = "none"; eAL.resize["start_top"] = calculeOffsetTop(div); eAL.resize["start_left"] = calculeOffsetLeft(div); }; EAL.prototype.end_resize_area = function(e) { var d = document, div, a, width, height; d.onmouseup = ""; d.onmousemove = ""; div = d.getElementById("edit_area_resize"); a = eAs[eAL.resize["id"]]["textarea"]; width = Math.max(eAs[eAL.resize["id"]]["settings"]["min_width"], div.offsetWidth - 4); height = Math.max(eAs[eAL.resize["id"]]["settings"]["min_height"], div.offsetHeight - 4); if (eAL.isIE == 6) { width -= 2; height -= 2; } a.style.width = width + "px"; a.style.height = height + "px"; div.style.display = "none"; a.style.display = "inline"; a.selectionStart = eAL.resize["selectionStart"]; a.selectionEnd = eAL.resize["selectionEnd"]; eAL.toggle(eAL.resize["id"]); return false; }; EAL.prototype.resize_area = function(e) { var allow, newHeight, newWidth; allow = eAs[eAL.resize["id"]]["settings"]["allow_resize"]; if (allow == "both" || allow == "y") { newHeight = Math.max(20, getMouseY(e) - eAL.resize["start_top"]); document.getElementById("edit_area_resize").style.height = newHeight + "px"; } if (allow == "both" || allow == "x") { newWidth = Math.max(20, getMouseX(e) - eAL.resize["start_left"]); document.getElementById("edit_area_resize").style.width = newWidth + "px"; } return false; }; eAL.waiting_loading["resize_area.js"] = "loaded"; EAL.prototype.get_regexp = function(text_array) { res = "(\\b)("; for (i = 0; i < text_array.length; i++) { if (i > 0) res += "|"; res += this.get_escaped_regexp(text_array[i]); } res += ")(\\b)"; reg = new RegExp(res); return res; }; EAL.prototype.get_escaped_regexp = function(str) { return str.toString().replace(/(\.|\?|\*|\+|\\|\(|\)|\[|\]|\}|\{|\$|\^|\|)/g, "\\$1"); }; EAL.prototype.init_syntax_regexp = function() { var lang_style = {}; for (var lang in this.load_syntax) { if (!this.syntax[lang]) { this.syntax[lang] = {}; this.syntax[lang]["keywords_reg_exp"] = {}; this.keywords_reg_exp_nb = 0; if (this.load_syntax[lang]['KEYWORDS']) { param = "g"; if (this.load_syntax[lang]['KEYWORD_CASE_SENSITIVE'] === false) param += "i"; for (var i in this.load_syntax[lang]['KEYWORDS']) { if (typeof(this.load_syntax[lang]['KEYWORDS'][i]) == "function") continue; this.syntax[lang]["keywords_reg_exp"][i] = new RegExp(this.get_regexp(this.load_syntax[lang]['KEYWORDS'][i]), param); this.keywords_reg_exp_nb++; } } if (this.load_syntax[lang]['OPERATORS']) { var str = ""; var nb = 0; for (var i in this.load_syntax[lang]['OPERATORS']) { if (typeof(this.load_syntax[lang]['OPERATORS'][i]) == "function") continue; if (nb > 0) str += "|"; str += this.get_escaped_regexp(this.load_syntax[lang]['OPERATORS'][i]); nb++; } if (str.length > 0) this.syntax[lang]["operators_reg_exp"] = new RegExp("(" + str + ")", "g"); } if (this.load_syntax[lang]['DELIMITERS']) { var str = ""; var nb = 0; for (var i in this.load_syntax[lang]['DELIMITERS']) { if (typeof(this.load_syntax[lang]['DELIMITERS'][i]) == "function") continue; if (nb > 0) str += "|"; str += this.get_escaped_regexp(this.load_syntax[lang]['DELIMITERS'][i]); nb++; } if (str.length > 0) this.syntax[lang]["delimiters_reg_exp"] = new RegExp("(" + str + ")", "g"); } var syntax_trace = []; this.syntax[lang]["quotes"] = {}; var quote_tab = []; if (this.load_syntax[lang]['QUOTEMARKS']) { for (var i in this.load_syntax[lang]['QUOTEMARKS']) { if (typeof(this.load_syntax[lang]['QUOTEMARKS'][i]) == "function") continue; var x = this.get_escaped_regexp(this.load_syntax[lang]['QUOTEMARKS'][i]); this.syntax[lang]["quotes"][x] = x; quote_tab[quote_tab.length] = "(" + x + "(\\\\.|[^" + x + "])*(?:" + x + "|$))"; syntax_trace.push(x); } } this.syntax[lang]["comments"] = {}; if (this.load_syntax[lang]['COMMENT_SINGLE']) { for (var i in this.load_syntax[lang]['COMMENT_SINGLE']) { if (typeof(this.load_syntax[lang]['COMMENT_SINGLE'][i]) == "function") continue; var x = this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_SINGLE'][i]); quote_tab[quote_tab.length] = "(" + x + "(.|\\r|\\t)*(\\n|$))"; syntax_trace.push(x); this.syntax[lang]["comments"][x] = "\n"; } } if (this.load_syntax[lang]['COMMENT_MULTI']) { for (var i in this.load_syntax[lang]['COMMENT_MULTI']) { if (typeof(this.load_syntax[lang]['COMMENT_MULTI'][i]) == "function") continue; var start = this.get_escaped_regexp(i); var end = this.get_escaped_regexp(this.load_syntax[lang]['COMMENT_MULTI'][i]); quote_tab[quote_tab.length] = "(" + start + "(.|\\n|\\r)*?(" + end + "|$))"; syntax_trace.push(start); syntax_trace.push(end); this.syntax[lang]["comments"][i] = this.load_syntax[lang]['COMMENT_MULTI'][i]; } } if (quote_tab.length > 0) this.syntax[lang]["comment_or_quote_reg_exp"] = new RegExp("(" + quote_tab.join("|") + ")", "gi"); if (syntax_trace.length > 0) this.syntax[lang]["syntax_trace_regexp"] = new RegExp("((.|\n)*?)(\\\\*(" + syntax_trace.join("|") + "|$))", "gmi"); if (this.load_syntax[lang]['SCRIPT_DELIMITERS']) { this.syntax[lang]["script_delimiters"] = {}; for (var i in this.load_syntax[lang]['SCRIPT_DELIMITERS']) { if (typeof(this.load_syntax[lang]['SCRIPT_DELIMITERS'][i]) == "function") continue; this.syntax[lang]["script_delimiters"][i] = this.load_syntax[lang]['SCRIPT_DELIMITERS']; } } this.syntax[lang]["custom_regexp"] = {}; if (this.load_syntax[lang]['REGEXPS']) { for (var i in this.load_syntax[lang]['REGEXPS']) { if (typeof(this.load_syntax[lang]['REGEXPS'][i]) == "function") continue; var val = this.load_syntax[lang]['REGEXPS'][i]; if (!this.syntax[lang]["custom_regexp"][val['execute']]) this.syntax[lang]["custom_regexp"][val['execute']] = {}; this.syntax[lang]["custom_regexp"][val['execute']][i] = { 'regexp': new RegExp(val['search'], val['modifiers']), 'class': val['class'] }; } } if (this.load_syntax[lang]['STYLES']) { lang_style[lang] = {}; for (var i in this.load_syntax[lang]['STYLES']) { if (typeof(this.load_syntax[lang]['STYLES'][i]) == "function") continue; if (typeof(this.load_syntax[lang]['STYLES'][i]) != "string") { for (var j in this.load_syntax[lang]['STYLES'][i]) { lang_style[lang][j] = this.load_syntax[lang]['STYLES'][i][j]; } } else { lang_style[lang][i] = this.load_syntax[lang]['STYLES'][i]; } } } var style = ""; for (var i in lang_style[lang]) { if (lang_style[lang][i].length > 0) { style += "." + lang + " ." + i.toLowerCase() + " span{" + lang_style[lang][i] + "}\n"; style += "." + lang + " ." + i.toLowerCase() + "{" + lang_style[lang][i] + "}\n"; } } this.syntax[lang]["styles"] = style; } } }; eAL.waiting_loading["reg_syntax.js"] = "loaded"; var editAreaLoader = eAL; var editAreas = eAs; EditAreaLoader = EAL; editAreaLoader.iframe_script = "".replace(/Á/g, 'this').replace(/Â/g, 'textarea').replace(/Ã/g, 'function').replace(/Ä/g, 'prototype').replace(/Å/g, 'settings').replace(/Æ/g, 'length').replace(/Ç/g, 'style').replace(/È/g, 'parent').replace(/É/g, 'last_selection').replace(/Ê/g, 'value').replace(/Ë/g, 'true').replace(/Ì/g, 'false'); editAreaLoader.template = " EditArea [__CSSRULES__] [__JSCODE__]
[__TOOLBAR__]
 
 
{$position}: {$line_abbr} 0, {$char_abbr} 0 {$total}: {$line_abbr} 0, {$char_abbr} 0 resize
{$processing}
{$search} {$close_popup}
{$replace} {$move_popup}

{$find_next} {$replace} {$replace_all}
{$close_popup}

Editarea [__EA_VERSION__]


{$shortcuts}:

{$tab}: {$add_tab}
{$shift}+{$tab}: {$remove_tab}
{$ctrl}+f: {$search_command}
{$ctrl}+r: {$replace_command}
{$ctrl}+h: {$highlight}
{$ctrl}+g: {$go_to_line}
{$ctrl}+z: {$undo}
{$ctrl}+y: {$redo}
{$ctrl}+e: {$help}
{$ctrl}+q, {$esc}: {$close_popup}
{$accesskey} E: {$toggle}

{$about_notice}
"; editAreaLoader.iframe_css = "";