--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/clientside/tinymce/plugins/noneditable/editor_plugin_src.js Wed Jun 13 16:07:17 2007 -0400
@@ -0,0 +1,153 @@
+/**
+ * $Id: editor_plugin_src.js 205 2007-02-12 18:58:29Z spocke $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
+ */
+
+var TinyMCE_NonEditablePlugin = {
+ getInfo : function() {
+ return {
+ longname : 'Non editable elements',
+ author : 'Moxiecode Systems AB',
+ authorurl : 'http://tinymce.moxiecode.com',
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',
+ version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
+ };
+ },
+
+ initInstance : function(inst) {
+ tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/noneditable/css/noneditable.css");
+
+ // Ugly hack
+ if (tinyMCE.isMSIE5_0)
+ tinyMCE.settings['plugins'] = tinyMCE.settings['plugins'].replace(/noneditable/gi, 'Noneditable');
+ },
+
+ handleEvent : function(e) {
+ return this._moveSelection(e, tinyMCE.selectedInstance);
+ },
+
+ cleanup : function(type, content, inst) {
+ switch (type) {
+ case "insert_to_editor_dom":
+ var nodes, i, editClass, nonEditClass, editable, elm;
+
+ // Pass through Gecko
+ if (tinyMCE.isGecko)
+ return content;
+
+ nodes = tinyMCE.getNodeTree(content, [], 1);
+
+ editClass = tinyMCE.getParam("noneditable_editable_class", "mceEditable");
+ nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceNonEditable");
+
+ for (i=0; i<nodes.length; i++) {
+ elm = nodes[i];
+
+ // Convert contenteditable to classes
+ editable = tinyMCE.getAttrib(elm, "contenteditable");
+ if (new RegExp("true|false","gi").test(editable))
+ TinyMCE_NonEditablePlugin._setEditable(elm, editable == "true");
+
+ if (tinyMCE.isIE) {
+ if (tinyMCE.hasCSSClass(elm, editClass))
+ elm.contentEditable = true;
+
+ if (tinyMCE.hasCSSClass(elm, nonEditClass))
+ elm.contentEditable = false;
+ }
+ }
+
+ break;
+
+ case "insert_to_editor":
+ var editClass = tinyMCE.getParam("noneditable_editable_class", "mceEditable");
+ var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceNonEditable");
+
+ // Replace mceItem to new school
+ content = content.replace(/mceItemEditable/g, editClass);
+ content = content.replace(/mceItemNonEditable/g, nonEditClass);
+
+ if (tinyMCE.isIE && (content.indexOf(editClass) != -1 || content.indexOf(nonEditClass) != -1)) {
+ content = content.replace(new RegExp("class=\"(.+)(" + editClass + ")\"", "gi"), 'class="$1$2" contenteditable="true"');
+ content = content.replace(new RegExp("class=\"(.+)(" + nonEditClass + ")\"", "gi"), 'class="$1$2" contenteditable="false"');
+ content = content.replace(new RegExp("class=\"(" + editClass + ")([^\"]*)\"", "gi"), 'class="$1$2" contenteditable="true"');
+ content = content.replace(new RegExp("class=\"(" + nonEditClass + ")([^\"]*)\"", "gi"), 'class="$1$2" contenteditable="false"');
+ content = content.replace(new RegExp("class=\"(.+)(" + editClass + ")([^\"]*)\"", "gi"), 'class="$1$2$3" contenteditable="true"');
+ content = content.replace(new RegExp("class=\"(.+)(" + nonEditClass + ")([^\"]*)\"", "gi"), 'class="$1$2$3" contenteditable="false"');
+ }
+
+ break;
+
+ case "get_from_editor_dom":
+ // Pass through Gecko
+ if (tinyMCE.isGecko)
+ return content;
+
+ if (tinyMCE.getParam("noneditable_leave_contenteditable", false)) {
+ var nodes = tinyMCE.getNodeTree(content, new Array(), 1);
+
+ for (var i=0; i<nodes.length; i++)
+ nodes[i].removeAttribute("contenteditable");
+ }
+
+ break;
+ }
+
+ return content;
+ },
+
+ _moveSelection : function(e, inst) {
+ var s, r, sc, ec, el, c = tinyMCE.getParam('noneditable_editable_class', 'mceNonEditable');
+
+ if (!inst)
+ return true;
+
+ // Always select whole element
+ if (tinyMCE.isGecko) {
+ s = inst.selection.getSel();
+ r = s.getRangeAt(0);
+ sc = tinyMCE.getParentNode(r.startContainer, function (n) {return tinyMCE.hasCSSClass(n, c);});
+ ec = tinyMCE.getParentNode(r.endContainer, function (n) {return tinyMCE.hasCSSClass(n, c);});
+
+ sc && r.setStartBefore(sc);
+ ec && r.setEndAfter(ec);
+
+ if (sc || ec) {
+ if (e.type == 'keypress' && e.keyCode == 39) {
+ el = sc || ec;
+
+ // Try!!
+ }
+
+ s.removeAllRanges();
+ s.addRange(r);
+
+ return tinyMCE.cancelEvent(e);
+ }
+ }
+
+ return true;
+ },
+
+ _setEditable : function(elm, state) {
+ var editClass = tinyMCE.getParam("noneditable_editable_class", "mceEditable");
+ var nonEditClass = tinyMCE.getParam("noneditable_noneditable_class", "mceNonEditable");
+
+ var className = elm.className ? elm.className : "";
+
+ if (className.indexOf(editClass) != -1 || className.indexOf(nonEditClass) != -1)
+ return;
+
+ if ((className = tinyMCE.getAttrib(elm, "class")) != "")
+ className += " ";
+
+ className += state ? editClass : nonEditClass;
+
+ elm.setAttribute("class", className);
+ elm.className = className;
+ }
+};
+
+tinyMCE.addPlugin("noneditable", TinyMCE_NonEditablePlugin);