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