diff options
author | svncommit <devs@roundcube.net> | 2007-12-11 04:20:01 +0000 |
---|---|---|
committer | svncommit <devs@roundcube.net> | 2007-12-11 04:20:01 +0000 |
commit | 4315b0086b14cd5266b4cb824c3bd95aa550240c (patch) | |
tree | a9bfe0abb484200015e792faacd68c706d972f7a /program/js/tiny_mce/utils | |
parent | deb30262a766df2886e2bad2a5612a1040b6b05d (diff) |
added ability to insert attached images in HTML editor
Diffstat (limited to 'program/js/tiny_mce/utils')
-rw-r--r-- | program/js/tiny_mce/utils/editable_selects.js | 122 | ||||
-rw-r--r-- | program/js/tiny_mce/utils/form_utils.js | 420 | ||||
-rw-r--r-- | program/js/tiny_mce/utils/mclayer.js | 420 | ||||
-rw-r--r-- | program/js/tiny_mce/utils/mctabs.js | 148 | ||||
-rw-r--r-- | program/js/tiny_mce/utils/validate.js | 438 |
5 files changed, 774 insertions, 774 deletions
diff --git a/program/js/tiny_mce/utils/editable_selects.js b/program/js/tiny_mce/utils/editable_selects.js index e72336541..add2aa5a1 100644 --- a/program/js/tiny_mce/utils/editable_selects.js +++ b/program/js/tiny_mce/utils/editable_selects.js @@ -1,61 +1,61 @@ -/**
- * $Id: editable_selects.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Makes select boxes editable.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-var TinyMCE_EditableSelects = {
- editSelectElm : null,
-
- init : function() {
- var nl = document.getElementsByTagName("select"), i, d = document, o;
-
- for (i=0; i<nl.length; i++) {
- if (nl[i].className.indexOf('mceEditableSelect') != -1) {
- o = new Option('(value)', '__mce_add_custom__');
-
- o.className = 'mceAddSelectValue';
-
- nl[i].options[nl[i].options.length] = o;
- nl[i].setAttribute('onchange', 'TinyMCE_EditableSelects.onChangeEditableSelect(this);');
- }
- }
- },
-
- onChangeEditableSelect : function(se) {
- var d = document, ne;
-
- if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
- ne = d.createElement("input");
- ne.id = se.id + "_custom";
- ne.name = se.name + "_custom";
- ne.type = "text";
-
- ne.style.width = se.clientWidth;
- se.parentNode.insertBefore(ne, se);
- se.style.display = 'none';
- ne.focus();
- ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
- TinyMCE_EditableSelects.editSelectElm = se;
- }
- },
-
- onBlurEditableSelectInput : function() {
- var se = TinyMCE_EditableSelects.editSelectElm;
-
- if (se) {
- if (se.previousSibling.value != '') {
- addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
- selectByValue(document.forms[0], se.id, se.previousSibling.value);
- } else
- selectByValue(document.forms[0], se.id, '');
-
- se.style.display = 'inline';
- se.parentNode.removeChild(se.previousSibling);
- TinyMCE_EditableSelects.editSelectElm = null;
- }
- }
-};
+/** + * $Id: editable_selects.js 162 2007-01-03 16:16:52Z spocke $ + * + * Makes select boxes editable. + * + * @author Moxiecode + * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. + */ + +var TinyMCE_EditableSelects = { + editSelectElm : null, + + init : function() { + var nl = document.getElementsByTagName("select"), i, d = document, o; + + for (i=0; i<nl.length; i++) { + if (nl[i].className.indexOf('mceEditableSelect') != -1) { + o = new Option('(value)', '__mce_add_custom__'); + + o.className = 'mceAddSelectValue'; + + nl[i].options[nl[i].options.length] = o; + nl[i].setAttribute('onchange', 'TinyMCE_EditableSelects.onChangeEditableSelect(this);'); + } + } + }, + + onChangeEditableSelect : function(se) { + var d = document, ne; + + if (se.options[se.selectedIndex].value == '__mce_add_custom__') { + ne = d.createElement("input"); + ne.id = se.id + "_custom"; + ne.name = se.name + "_custom"; + ne.type = "text"; + + ne.style.width = se.clientWidth; + se.parentNode.insertBefore(ne, se); + se.style.display = 'none'; + ne.focus(); + ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput; + TinyMCE_EditableSelects.editSelectElm = se; + } + }, + + onBlurEditableSelectInput : function() { + var se = TinyMCE_EditableSelects.editSelectElm; + + if (se) { + if (se.previousSibling.value != '') { + addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value); + selectByValue(document.forms[0], se.id, se.previousSibling.value); + } else + selectByValue(document.forms[0], se.id, ''); + + se.style.display = 'inline'; + se.parentNode.removeChild(se.previousSibling); + TinyMCE_EditableSelects.editSelectElm = null; + } + } +}; diff --git a/program/js/tiny_mce/utils/form_utils.js b/program/js/tiny_mce/utils/form_utils.js index ec9dbb3b6..110a720e0 100644 --- a/program/js/tiny_mce/utils/form_utils.js +++ b/program/js/tiny_mce/utils/form_utils.js @@ -1,210 +1,210 @@ -/**
- * $Id: form_utils.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Various form utilitiy functions.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-var themeBaseURL = tinyMCE.baseURL + '/themes/' + tinyMCE.getParam("theme");
-
-function getColorPickerHTML(id, target_form_element) {
- var h = "";
-
- h += '<a id="' + id + '_link" href="javascript:void(0);" onkeydown="pickColor(event,\'' + target_form_element +'\');" onmousedown="pickColor(event,\'' + target_form_element +'\');return false;">';
- h += '<img id="' + id + '" src="' + themeBaseURL + '/images/color.gif"';
- h += ' onmouseover="this.className=\'mceButtonOver\'"';
- h += ' onmouseout="this.className=\'mceButtonNormal\'"';
- h += ' onmousedown="this.className=\'mceButtonDown\'"';
- h += ' width="20" height="16" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';
- h += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';
-
- return h;
-}
-
-function pickColor(e, target_form_element) {
- if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown")
- tinyMCEPopup.pickColor(e, target_form_element);
-}
-
-function updateColor(img_id, form_element_id) {
- document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
-}
-
-function setBrowserDisabled(id, state) {
- var img = document.getElementById(id);
- var lnk = document.getElementById(id + "_link");
-
- if (lnk) {
- if (state) {
- lnk.setAttribute("realhref", lnk.getAttribute("href"));
- lnk.removeAttribute("href");
- tinyMCE.switchClass(img, 'mceButtonDisabled', true);
- } else {
- lnk.setAttribute("href", lnk.getAttribute("realhref"));
- tinyMCE.switchClass(img, 'mceButtonNormal', false);
- }
- }
-}
-
-function getBrowserHTML(id, target_form_element, type, prefix) {
- var option = prefix + "_" + type + "_browser_callback";
- var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
- if (cb == null)
- return "";
-
- var html = "";
-
- html += '<a id="' + id + '_link" href="javascript:openBrower(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;">';
- html += '<img id="' + id + '" src="' + themeBaseURL + '/images/browse.gif"';
- html += ' onmouseover="this.className=\'mceButtonOver\';"';
- html += ' onmouseout="this.className=\'mceButtonNormal\';"';
- html += ' onmousedown="this.className=\'mceButtonDown\';"';
- html += ' width="20" height="18" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';
- html += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';
-
- return html;
-}
-
-function openBrower(img_id, target_form_element, type, option) {
- var img = document.getElementById(img_id);
-
- if (img.className != "mceButtonDisabled")
- tinyMCEPopup.openBrowser(target_form_element, type, option);
-}
-
-function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
- if (!form_obj || !form_obj.elements[field_name])
- return;
-
- var sel = form_obj.elements[field_name];
-
- var found = false;
- for (var i=0; i<sel.options.length; i++) {
- var option = sel.options[i];
-
- if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
- option.selected = true;
- found = true;
- } else
- option.selected = false;
- }
-
- if (!found && add_custom && value != '') {
- var option = new Option(value, value);
- option.selected = true;
- sel.options[sel.options.length] = option;
- sel.selectedIndex = sel.options.length - 1;
- }
-
- return found;
-}
-
-function getSelectValue(form_obj, field_name) {
- var elm = form_obj.elements[field_name];
-
- if (elm == null || elm.options == null)
- return "";
-
- return elm.options[elm.selectedIndex].value;
-}
-
-function addSelectValue(form_obj, field_name, name, value) {
- var s = form_obj.elements[field_name];
- var o = new Option(name, value);
- s.options[s.options.length] = o;
-}
-
-function addClassesToList(list_id, specific_option) {
- // Setup class droplist
- var styleSelectElm = document.getElementById(list_id);
- var styles = tinyMCE.getParam('theme_advanced_styles', false);
- styles = tinyMCE.getParam(specific_option, styles);
-
- if (styles) {
- var stylesAr = styles.split(';');
-
- for (var i=0; i<stylesAr.length; i++) {
- if (stylesAr != "") {
- var key, value;
-
- key = stylesAr[i].split('=')[0];
- value = stylesAr[i].split('=')[1];
-
- styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
- }
- }
- } else {
- // Use auto impored classes
- var csses = tinyMCE.getCSSClasses(tinyMCE.getWindowArg('editor_id'));
- for (var i=0; i<csses.length; i++)
- styleSelectElm.options[styleSelectElm.length] = new Option(csses[i], csses[i]);
- }
-}
-
-function isVisible(element_id) {
- var elm = document.getElementById(element_id);
-
- return elm && elm.style.display != "none";
-}
-
-function convertRGBToHex(col) {
- var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
-
- var rgb = col.replace(re, "$1,$2,$3").split(',');
- if (rgb.length == 3) {
- r = parseInt(rgb[0]).toString(16);
- g = parseInt(rgb[1]).toString(16);
- b = parseInt(rgb[2]).toString(16);
-
- r = r.length == 1 ? '0' + r : r;
- g = g.length == 1 ? '0' + g : g;
- b = b.length == 1 ? '0' + b : b;
-
- return "#" + r + g + b;
- }
-
- return col;
-}
-
-function convertHexToRGB(col) {
- if (col.indexOf('#') != -1) {
- col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
-
- r = parseInt(col.substring(0, 2), 16);
- g = parseInt(col.substring(2, 4), 16);
- b = parseInt(col.substring(4, 6), 16);
-
- return "rgb(" + r + "," + g + "," + b + ")";
- }
-
- return col;
-}
-
-function trimSize(size) {
- return size.replace(new RegExp('[^0-9%]', 'gi'), '');
-}
-
-function getCSSSize(size) {
- size = trimSize(size);
-
- if (size == "")
- return "";
-
- return size.indexOf('%') != -1 ? size : size + "px";
-}
-
-function getStyle(elm, attrib, style) {
- var val = tinyMCE.getAttrib(elm, attrib);
-
- if (val != '')
- return '' + val;
-
- if (typeof(style) == 'undefined')
- style = attrib;
-
- val = eval('elm.style.' + style);
-
- return val == null ? '' : '' + val;
-}
+/** + * $Id: form_utils.js 162 2007-01-03 16:16:52Z spocke $ + * + * Various form utilitiy functions. + * + * @author Moxiecode + * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. + */ + +var themeBaseURL = tinyMCE.baseURL + '/themes/' + tinyMCE.getParam("theme"); + +function getColorPickerHTML(id, target_form_element) { + var h = ""; + + h += '<a id="' + id + '_link" href="javascript:void(0);" onkeydown="pickColor(event,\'' + target_form_element +'\');" onmousedown="pickColor(event,\'' + target_form_element +'\');return false;">'; + h += '<img id="' + id + '" src="' + themeBaseURL + '/images/color.gif"'; + h += ' onmouseover="this.className=\'mceButtonOver\'"'; + h += ' onmouseout="this.className=\'mceButtonNormal\'"'; + h += ' onmousedown="this.className=\'mceButtonDown\'"'; + h += ' width="20" height="16" border="0" title="' + tinyMCE.getLang('lang_browse') + '"'; + h += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>'; + + return h; +} + +function pickColor(e, target_form_element) { + if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown") + tinyMCEPopup.pickColor(e, target_form_element); +} + +function updateColor(img_id, form_element_id) { + document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value; +} + +function setBrowserDisabled(id, state) { + var img = document.getElementById(id); + var lnk = document.getElementById(id + "_link"); + + if (lnk) { + if (state) { + lnk.setAttribute("realhref", lnk.getAttribute("href")); + lnk.removeAttribute("href"); + tinyMCE.switchClass(img, 'mceButtonDisabled', true); + } else { + lnk.setAttribute("href", lnk.getAttribute("realhref")); + tinyMCE.switchClass(img, 'mceButtonNormal', false); + } + } +} + +function getBrowserHTML(id, target_form_element, type, prefix) { + var option = prefix + "_" + type + "_browser_callback"; + var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); + if (cb == null) + return ""; + + var html = ""; + + html += '<a id="' + id + '_link" href="javascript:openBrower(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;">'; + html += '<img id="' + id + '" src="' + themeBaseURL + '/images/browse.gif"'; + html += ' onmouseover="this.className=\'mceButtonOver\';"'; + html += ' onmouseout="this.className=\'mceButtonNormal\';"'; + html += ' onmousedown="this.className=\'mceButtonDown\';"'; + html += ' width="20" height="18" border="0" title="' + tinyMCE.getLang('lang_browse') + '"'; + html += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>'; + + return html; +} + +function openBrower(img_id, target_form_element, type, option) { + var img = document.getElementById(img_id); + + if (img.className != "mceButtonDisabled") + tinyMCEPopup.openBrowser(target_form_element, type, option); +} + +function selectByValue(form_obj, field_name, value, add_custom, ignore_case) { + if (!form_obj || !form_obj.elements[field_name]) + return; + + var sel = form_obj.elements[field_name]; + + var found = false; + for (var i=0; i<sel.options.length; i++) { + var option = sel.options[i]; + + if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) { + option.selected = true; + found = true; + } else + option.selected = false; + } + + if (!found && add_custom && value != '') { + var option = new Option(value, value); + option.selected = true; + sel.options[sel.options.length] = option; + sel.selectedIndex = sel.options.length - 1; + } + + return found; +} + +function getSelectValue(form_obj, field_name) { + var elm = form_obj.elements[field_name]; + + if (elm == null || elm.options == null) + return ""; + + return elm.options[elm.selectedIndex].value; +} + +function addSelectValue(form_obj, field_name, name, value) { + var s = form_obj.elements[field_name]; + var o = new Option(name, value); + s.options[s.options.length] = o; +} + +function addClassesToList(list_id, specific_option) { + // Setup class droplist + var styleSelectElm = document.getElementById(list_id); + var styles = tinyMCE.getParam('theme_advanced_styles', false); + styles = tinyMCE.getParam(specific_option, styles); + + if (styles) { + var stylesAr = styles.split(';'); + + for (var i=0; i<stylesAr.length; i++) { + if (stylesAr != "") { + var key, value; + + key = stylesAr[i].split('=')[0]; + value = stylesAr[i].split('=')[1]; + + styleSelectElm.options[styleSelectElm.length] = new Option(key, value); + } + } + } else { + // Use auto impored classes + var csses = tinyMCE.getCSSClasses(tinyMCE.getWindowArg('editor_id')); + for (var i=0; i<csses.length; i++) + styleSelectElm.options[styleSelectElm.length] = new Option(csses[i], csses[i]); + } +} + +function isVisible(element_id) { + var elm = document.getElementById(element_id); + + return elm && elm.style.display != "none"; +} + +function convertRGBToHex(col) { + var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); + + var rgb = col.replace(re, "$1,$2,$3").split(','); + if (rgb.length == 3) { + r = parseInt(rgb[0]).toString(16); + g = parseInt(rgb[1]).toString(16); + b = parseInt(rgb[2]).toString(16); + + r = r.length == 1 ? '0' + r : r; + g = g.length == 1 ? '0' + g : g; + b = b.length == 1 ? '0' + b : b; + + return "#" + r + g + b; + } + + return col; +} + +function convertHexToRGB(col) { + if (col.indexOf('#') != -1) { + col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); + + r = parseInt(col.substring(0, 2), 16); + g = parseInt(col.substring(2, 4), 16); + b = parseInt(col.substring(4, 6), 16); + + return "rgb(" + r + "," + g + "," + b + ")"; + } + + return col; +} + +function trimSize(size) { + return size.replace(new RegExp('[^0-9%]', 'gi'), ''); +} + +function getCSSSize(size) { + size = trimSize(size); + + if (size == "") + return ""; + + return size.indexOf('%') != -1 ? size : size + "px"; +} + +function getStyle(elm, attrib, style) { + var val = tinyMCE.getAttrib(elm, attrib); + + if (val != '') + return '' + val; + + if (typeof(style) == 'undefined') + style = attrib; + + val = eval('elm.style.' + style); + + return val == null ? '' : '' + val; +} diff --git a/program/js/tiny_mce/utils/mclayer.js b/program/js/tiny_mce/utils/mclayer.js index 1b347f75c..23982db19 100644 --- a/program/js/tiny_mce/utils/mclayer.js +++ b/program/js/tiny_mce/utils/mclayer.js @@ -1,210 +1,210 @@ -/**
- * $Id: mclayer.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Moxiecode floating layer script.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-function MCLayer(id) {
- this.id = id;
- this.settings = new Array();
- this.blockerElement = null;
- this.isMSIE = navigator.appName == "Microsoft Internet Explorer";
- this.events = false;
- this.autoHideCallback = null;
-}
-
-MCLayer.prototype = {
- moveRelativeTo : function(re, p, a) {
- var rep = this.getAbsPosition(re);
- var w = parseInt(re.offsetWidth);
- var h = parseInt(re.offsetHeight);
- var x, y;
-
- switch (p) {
- case "tl":
- break;
-
- case "tr":
- x = rep.absLeft + w;
- y = rep.absTop;
- break;
-
- case "bl":
- break;
-
- case "br":
- break;
- }
-
- this.moveTo(x, y);
- },
-
- moveBy : function(dx, dy) {
- var e = this.getElement();
- var x = parseInt(e.style.left);
- var y = parseInt(e.style.top);
-
- e.style.left = (x + dx) + "px";
- e.style.top = (y + dy) + "px";
-
- this.updateBlocker();
- },
-
- moveTo : function(x, y) {
- var e = this.getElement();
-
- e.style.left = x + "px";
- e.style.top = y + "px";
-
- this.updateBlocker();
- },
-
- show : function() {
- MCLayer.visibleLayer = this;
-
- this.getElement().style.display = 'block';
- this.updateBlocker();
- },
-
- hide : function() {
- this.getElement().style.display = 'none';
- this.updateBlocker();
- },
-
- setAutoHide : function(s, cb) {
- this.autoHideCallback = cb;
- this.registerEventHandlers();
- },
-
- getElement : function() {
- return document.getElementById(this.id);
- },
-
- updateBlocker : function() {
- if (!this.isMSIE)
- return;
-
- var e = this.getElement();
- var b = this.getBlocker();
- var x = this.parseInt(e.style.left);
- var y = this.parseInt(e.style.top);
- var w = this.parseInt(e.offsetWidth);
- var h = this.parseInt(e.offsetHeight);
-
- b.style.left = x + 'px';
- b.style.top = y + 'px';
- b.style.width = w + 'px';
- b.style.height = h + 'px';
- b.style.display = e.style.display;
- },
-
- getBlocker : function() {
- if (!this.blockerElement) {
- var d = document, b = d.createElement("iframe");
-
- b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0';
- b.src = 'javascript:false;';
- b.frameBorder = '0';
- b.scrolling = 'no';
-
- d.body.appendChild(b);
- this.blockerElement = b;
- }
-
- return this.blockerElement;
- },
-
- getAbsPosition : function(n) {
- var p = {absLeft : 0, absTop : 0};
-
- while (n) {
- p.absLeft += n.offsetLeft;
- p.absTop += n.offsetTop;
- n = n.offsetParent;
- }
-
- return p;
- },
-
- registerEventHandlers : function() {
- if (!this.events) {
- var d = document;
-
- this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown);
-
- this.events = true;
- }
- },
-
- addEvent : function(o, n, h) {
- if (o.attachEvent)
- o.attachEvent("on" + n, h);
- else
- o.addEventListener(n, h, false);
- },
-
- onMouseDown : function(e) {
- e = typeof(e) == "undefined" ? window.event : e;
- var b = document.body;
- var l = MCLayer.visibleLayer;
-
- if (l) {
- var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX;
- var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY;
- var el = l.getElement();
- var x = parseInt(el.style.left);
- var y = parseInt(el.style.top);
- var w = parseInt(el.offsetWidth);
- var h = parseInt(el.offsetHeight);
-
- if (!(mx > x && mx < x + w && my > y && my < y + h)) {
- MCLayer.visibleLayer = null;
-
- if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my))
- return true;
-
- l.hide();
- }
- }
- },
-
- addCSSClass : function(e, c) {
- this.removeCSSClass(e, c);
- var a = this.explode(' ', e.className);
- a[a.length] = c;
- e.className = a.join(' ');
- },
-
- removeCSSClass : function(e, c) {
- var a = this.explode(' ', e.className), i;
-
- for (i=0; i<a.length; i++) {
- if (a[i] == c)
- a[i] = '';
- }
-
- e.className = a.join(' ');
- },
-
- explode : function(d, s) {
- var ar = s.split(d);
- var oar = new Array();
-
- for (var i = 0; i<ar.length; i++) {
- if (ar[i] != "")
- oar[oar.length] = ar[i];
- }
-
- return oar;
- },
-
- parseInt : function(s) {
- if (s == null || s == '')
- return 0;
-
- return parseInt(s);
- }
-}
+/** + * $Id: mclayer.js 162 2007-01-03 16:16:52Z spocke $ + * + * Moxiecode floating layer script. + * + * @author Moxiecode + * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. + */ + +function MCLayer(id) { + this.id = id; + this.settings = new Array(); + this.blockerElement = null; + this.isMSIE = navigator.appName == "Microsoft Internet Explorer"; + this.events = false; + this.autoHideCallback = null; +} + +MCLayer.prototype = { + moveRelativeTo : function(re, p, a) { + var rep = this.getAbsPosition(re); + var w = parseInt(re.offsetWidth); + var h = parseInt(re.offsetHeight); + var x, y; + + switch (p) { + case "tl": + break; + + case "tr": + x = rep.absLeft + w; + y = rep.absTop; + break; + + case "bl": + break; + + case "br": + break; + } + + this.moveTo(x, y); + }, + + moveBy : function(dx, dy) { + var e = this.getElement(); + var x = parseInt(e.style.left); + var y = parseInt(e.style.top); + + e.style.left = (x + dx) + "px"; + e.style.top = (y + dy) + "px"; + + this.updateBlocker(); + }, + + moveTo : function(x, y) { + var e = this.getElement(); + + e.style.left = x + "px"; + e.style.top = y + "px"; + + this.updateBlocker(); + }, + + show : function() { + MCLayer.visibleLayer = this; + + this.getElement().style.display = 'block'; + this.updateBlocker(); + }, + + hide : function() { + this.getElement().style.display = 'none'; + this.updateBlocker(); + }, + + setAutoHide : function(s, cb) { + this.autoHideCallback = cb; + this.registerEventHandlers(); + }, + + getElement : function() { + return document.getElementById(this.id); + }, + + updateBlocker : function() { + if (!this.isMSIE) + return; + + var e = this.getElement(); + var b = this.getBlocker(); + var x = this.parseInt(e.style.left); + var y = this.parseInt(e.style.top); + var w = this.parseInt(e.offsetWidth); + var h = this.parseInt(e.offsetHeight); + + b.style.left = x + 'px'; + b.style.top = y + 'px'; + b.style.width = w + 'px'; + b.style.height = h + 'px'; + b.style.display = e.style.display; + }, + + getBlocker : function() { + if (!this.blockerElement) { + var d = document, b = d.createElement("iframe"); + + b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0'; + b.src = 'javascript:false;'; + b.frameBorder = '0'; + b.scrolling = 'no'; + + d.body.appendChild(b); + this.blockerElement = b; + } + + return this.blockerElement; + }, + + getAbsPosition : function(n) { + var p = {absLeft : 0, absTop : 0}; + + while (n) { + p.absLeft += n.offsetLeft; + p.absTop += n.offsetTop; + n = n.offsetParent; + } + + return p; + }, + + registerEventHandlers : function() { + if (!this.events) { + var d = document; + + this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown); + + this.events = true; + } + }, + + addEvent : function(o, n, h) { + if (o.attachEvent) + o.attachEvent("on" + n, h); + else + o.addEventListener(n, h, false); + }, + + onMouseDown : function(e) { + e = typeof(e) == "undefined" ? window.event : e; + var b = document.body; + var l = MCLayer.visibleLayer; + + if (l) { + var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX; + var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY; + var el = l.getElement(); + var x = parseInt(el.style.left); + var y = parseInt(el.style.top); + var w = parseInt(el.offsetWidth); + var h = parseInt(el.offsetHeight); + + if (!(mx > x && mx < x + w && my > y && my < y + h)) { + MCLayer.visibleLayer = null; + + if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my)) + return true; + + l.hide(); + } + } + }, + + addCSSClass : function(e, c) { + this.removeCSSClass(e, c); + var a = this.explode(' ', e.className); + a[a.length] = c; + e.className = a.join(' '); + }, + + removeCSSClass : function(e, c) { + var a = this.explode(' ', e.className), i; + + for (i=0; i<a.length; i++) { + if (a[i] == c) + a[i] = ''; + } + + e.className = a.join(' '); + }, + + explode : function(d, s) { + var ar = s.split(d); + var oar = new Array(); + + for (var i = 0; i<ar.length; i++) { + if (ar[i] != "") + oar[oar.length] = ar[i]; + } + + return oar; + }, + + parseInt : function(s) { + if (s == null || s == '') + return 0; + + return parseInt(s); + } +} diff --git a/program/js/tiny_mce/utils/mctabs.js b/program/js/tiny_mce/utils/mctabs.js index fae038d6a..d64340283 100644 --- a/program/js/tiny_mce/utils/mctabs.js +++ b/program/js/tiny_mce/utils/mctabs.js @@ -1,74 +1,74 @@ -/**
- * $Id: mctabs.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Moxiecode DHTML Tabs script.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-function MCTabs() {
- this.settings = new Array();
-};
-
-MCTabs.prototype.init = function(settings) {
- this.settings = settings;
-};
-
-MCTabs.prototype.getParam = function(name, default_value) {
- var value = null;
-
- value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
-
- // Fix bool values
- if (value == "true" || value == "false")
- return (value == "true");
-
- return value;
-};
-
-MCTabs.prototype.displayTab = function(tab_id, panel_id) {
- var panelElm = document.getElementById(panel_id);
- var panelContainerElm = panelElm ? panelElm.parentNode : null;
- var tabElm = document.getElementById(tab_id);
- var tabContainerElm = tabElm ? tabElm.parentNode : null;
- var selectionClass = this.getParam('selection_class', 'current');
-
- if (tabElm && tabContainerElm) {
- var nodes = tabContainerElm.childNodes;
-
- // Hide all other tabs
- for (var i=0; i<nodes.length; i++) {
- if (nodes[i].nodeName == "LI")
- nodes[i].className = '';
- }
-
- // Show selected tab
- tabElm.className = 'current';
- }
-
- if (panelElm && panelContainerElm) {
- var nodes = panelContainerElm.childNodes;
-
- // Hide all other panels
- for (var i=0; i<nodes.length; i++) {
- if (nodes[i].nodeName == "DIV")
- nodes[i].className = 'panel';
- }
-
- // Show selected panel
- panelElm.className = 'current';
- }
-};
-
-MCTabs.prototype.getAnchor = function() {
- var pos, url = document.location.href;
-
- if ((pos = url.lastIndexOf('#')) != -1)
- return url.substring(pos + 1);
-
- return "";
-};
-
-// Global instance
-var mcTabs = new MCTabs();
+/** + * $Id: mctabs.js 162 2007-01-03 16:16:52Z spocke $ + * + * Moxiecode DHTML Tabs script. + * + * @author Moxiecode + * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. + */ + +function MCTabs() { + this.settings = new Array(); +}; + +MCTabs.prototype.init = function(settings) { + this.settings = settings; +}; + +MCTabs.prototype.getParam = function(name, default_value) { + var value = null; + + value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name]; + + // Fix bool values + if (value == "true" || value == "false") + return (value == "true"); + + return value; +}; + +MCTabs.prototype.displayTab = function(tab_id, panel_id) { + var panelElm = document.getElementById(panel_id); + var panelContainerElm = panelElm ? panelElm.parentNode : null; + var tabElm = document.getElementById(tab_id); + var tabContainerElm = tabElm ? tabElm.parentNode : null; + var selectionClass = this.getParam('selection_class', 'current'); + + if (tabElm && tabContainerElm) { + var nodes = tabContainerElm.childNodes; + + // Hide all other tabs + for (var i=0; i<nodes.length; i++) { + if (nodes[i].nodeName == "LI") + nodes[i].className = ''; + } + + // Show selected tab + tabElm.className = 'current'; + } + + if (panelElm && panelContainerElm) { + var nodes = panelContainerElm.childNodes; + + // Hide all other panels + for (var i=0; i<nodes.length; i++) { + if (nodes[i].nodeName == "DIV") + nodes[i].className = 'panel'; + } + + // Show selected panel + panelElm.className = 'current'; + } +}; + +MCTabs.prototype.getAnchor = function() { + var pos, url = document.location.href; + + if ((pos = url.lastIndexOf('#')) != -1) + return url.substring(pos + 1); + + return ""; +}; + +// Global instance +var mcTabs = new MCTabs(); diff --git a/program/js/tiny_mce/utils/validate.js b/program/js/tiny_mce/utils/validate.js index b8931f437..92b44edc0 100644 --- a/program/js/tiny_mce/utils/validate.js +++ b/program/js/tiny_mce/utils/validate.js @@ -1,219 +1,219 @@ -/**
- * $Id: validate.js 162 2007-01-03 16:16:52Z spocke $
- *
- * Various form validation methods.
- *
- * @author Moxiecode
- * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
- */
-
-/**
- // String validation:
-
- if (!Validator.isEmail('myemail'))
- alert('Invalid email.');
-
- // Form validation:
-
- var f = document.forms['myform'];
-
- if (!Validator.isEmail(f.myemail))
- alert('Invalid email.');
-*/
-
-var Validator = {
- isEmail : function(s) {
- return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
- },
-
- isAbsUrl : function(s) {
- return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
- },
-
- isSize : function(s) {
- return this.test(s, '^[0-9]+(px|%)?$');
- },
-
- isId : function(s) {
- return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
- },
-
- isEmpty : function(s) {
- var nl, i;
-
- if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
- return true;
-
- if (s.type == 'checkbox' && !s.checked)
- return true;
-
- if (s.type == 'radio') {
- for (i=0, nl = s.form.elements; i<nl.length; i++) {
- if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
- return false;
- }
-
- return true;
- }
-
- return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
- },
-
- isNumber : function(s, d) {
- return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
- },
-
- test : function(s, p) {
- s = s.nodeType == 1 ? s.value : s;
-
- return s == '' || new RegExp(p).test(s);
- }
-};
-
-var AutoValidator = {
- settings : {
- id_cls : 'id',
- int_cls : 'int',
- url_cls : 'url',
- number_cls : 'number',
- email_cls : 'email',
- size_cls : 'size',
- required_cls : 'required',
- invalid_cls : 'invalid',
- min_cls : 'min',
- max_cls : 'max'
- },
-
- init : function(s) {
- var n;
-
- for (n in s)
- this.settings[n] = s[n];
- },
-
- validate : function(f) {
- var i, nl, s = this.settings, c = 0;
-
- nl = this.tags(f, 'label');
- for (i=0; i<nl.length; i++)
- this.removeClass(nl[i], s.invalid_cls);
-
- c += this.validateElms(f, 'input');
- c += this.validateElms(f, 'select');
- c += this.validateElms(f, 'textarea');
-
- return c == 3;
- },
-
- invalidate : function(n) {
- this.mark(n.form, n);
- },
-
- reset : function(e) {
- var t = new Array('label', 'input', 'select', 'textarea');
- var i, j, nl, s = this.settings;
-
- if (e == null)
- return;
-
- for (i=0; i<t.length; i++) {
- nl = this.tags(e.form ? e.form : e, t[i]);
- for (j=0; j<nl.length; j++)
- this.removeClass(nl[j], s.invalid_cls);
- }
- },
-
- validateElms : function(f, e) {
- var nl, i, n, s = this.settings, st = true, va = Validator, v;
-
- nl = this.tags(f, e);
- for (i=0; i<nl.length; i++) {
- n = nl[i];
-
- this.removeClass(n, s.invalid_cls);
-
- if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.size_cls) && !va.isSize(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.id_cls) && !va.isId(n))
- st = this.mark(f, n);
-
- if (this.hasClass(n, s.min_cls, true)) {
- v = this.getNum(n, s.min_cls);
-
- if (isNaN(v) || parseInt(n.value) < parseInt(v))
- st = this.mark(f, n);
- }
-
- if (this.hasClass(n, s.max_cls, true)) {
- v = this.getNum(n, s.max_cls);
-
- if (isNaN(v) || parseInt(n.value) > parseInt(v))
- st = this.mark(f, n);
- }
- }
-
- return st;
- },
-
- hasClass : function(n, c, d) {
- return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
- },
-
- getNum : function(n, c) {
- c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
- c = c.replace(/[^0-9]/g, '');
-
- return c;
- },
-
- addClass : function(n, c, b) {
- var o = this.removeClass(n, c);
- n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
- },
-
- removeClass : function(n, c) {
- c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
- return n.className = c != ' ' ? c : '';
- },
-
- tags : function(f, s) {
- return f.getElementsByTagName(s);
- },
-
- mark : function(f, n) {
- var s = this.settings;
-
- this.addClass(n, s.invalid_cls);
- this.markLabels(f, n, s.invalid_cls);
-
- return false;
- },
-
- markLabels : function(f, n, ic) {
- var nl, i;
-
- nl = this.tags(f, "label");
- for (i=0; i<nl.length; i++) {
- if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
- this.addClass(nl[i], ic);
- }
-
- return null;
- }
-};
+/** + * $Id: validate.js 162 2007-01-03 16:16:52Z spocke $ + * + * Various form validation methods. + * + * @author Moxiecode + * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. + */ + +/** + // String validation: + + if (!Validator.isEmail('myemail')) + alert('Invalid email.'); + + // Form validation: + + var f = document.forms['myform']; + + if (!Validator.isEmail(f.myemail)) + alert('Invalid email.'); +*/ + +var Validator = { + isEmail : function(s) { + return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$'); + }, + + isAbsUrl : function(s) { + return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$'); + }, + + isSize : function(s) { + return this.test(s, '^[0-9]+(px|%)?$'); + }, + + isId : function(s) { + return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$'); + }, + + isEmpty : function(s) { + var nl, i; + + if (s.nodeName == 'SELECT' && s.selectedIndex < 1) + return true; + + if (s.type == 'checkbox' && !s.checked) + return true; + + if (s.type == 'radio') { + for (i=0, nl = s.form.elements; i<nl.length; i++) { + if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked) + return false; + } + + return true; + } + + return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s); + }, + + isNumber : function(s, d) { + return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$')); + }, + + test : function(s, p) { + s = s.nodeType == 1 ? s.value : s; + + return s == '' || new RegExp(p).test(s); + } +}; + +var AutoValidator = { + settings : { + id_cls : 'id', + int_cls : 'int', + url_cls : 'url', + number_cls : 'number', + email_cls : 'email', + size_cls : 'size', + required_cls : 'required', + invalid_cls : 'invalid', + min_cls : 'min', + max_cls : 'max' + }, + + init : function(s) { + var n; + + for (n in s) + this.settings[n] = s[n]; + }, + + validate : function(f) { + var i, nl, s = this.settings, c = 0; + + nl = this.tags(f, 'label'); + for (i=0; i<nl.length; i++) + this.removeClass(nl[i], s.invalid_cls); + + c += this.validateElms(f, 'input'); + c += this.validateElms(f, 'select'); + c += this.validateElms(f, 'textarea'); + + return c == 3; + }, + + invalidate : function(n) { + this.mark(n.form, n); + }, + + reset : function(e) { + var t = new Array('label', 'input', 'select', 'textarea'); + var i, j, nl, s = this.settings; + + if (e == null) + return; + + for (i=0; i<t.length; i++) { + nl = this.tags(e.form ? e.form : e, t[i]); + for (j=0; j<nl.length; j++) + this.removeClass(nl[j], s.invalid_cls); + } + }, + + validateElms : function(f, e) { + var nl, i, n, s = this.settings, st = true, va = Validator, v; + + nl = this.tags(f, e); + for (i=0; i<nl.length; i++) { + n = nl[i]; + + this.removeClass(n, s.invalid_cls); + + if (this.hasClass(n, s.required_cls) && va.isEmpty(n)) + st = this.mark(f, n); + + if (this.hasClass(n, s.number_cls) && !va.isNumber(n)) + st = this.mark(f, n); + + if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true)) + st = this.mark(f, n); + + if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n)) + st = this.mark(f, n); + + if (this.hasClass(n, s.email_cls) && !va.isEmail(n)) + st = this.mark(f, n); + + if (this.hasClass(n, s.size_cls) && !va.isSize(n)) + st = this.mark(f, n); + + if (this.hasClass(n, s.id_cls) && !va.isId(n)) + st = this.mark(f, n); + + if (this.hasClass(n, s.min_cls, true)) { + v = this.getNum(n, s.min_cls); + + if (isNaN(v) || parseInt(n.value) < parseInt(v)) + st = this.mark(f, n); + } + + if (this.hasClass(n, s.max_cls, true)) { + v = this.getNum(n, s.max_cls); + + if (isNaN(v) || parseInt(n.value) > parseInt(v)) + st = this.mark(f, n); + } + } + + return st; + }, + + hasClass : function(n, c, d) { + return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className); + }, + + getNum : function(n, c) { + c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0]; + c = c.replace(/[^0-9]/g, ''); + + return c; + }, + + addClass : function(n, c, b) { + var o = this.removeClass(n, c); + n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c; + }, + + removeClass : function(n, c) { + c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' '); + return n.className = c != ' ' ? c : ''; + }, + + tags : function(f, s) { + return f.getElementsByTagName(s); + }, + + mark : function(f, n) { + var s = this.settings; + + this.addClass(n, s.invalid_cls); + this.markLabels(f, n, s.invalid_cls); + + return false; + }, + + markLabels : function(f, n, ic) { + var nl, i; + + nl = this.tags(f, "label"); + for (i=0; i<nl.length; i++) { + if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id) + this.addClass(nl[i], ic); + } + + return null; + } +}; |