]> git.donarmstrong.com Git - roundcube.git/blobdiff - program/js/tiny_mce/plugins/compat2x/editor_plugin_src.js
Imported Upstream version 0.2~alpha
[roundcube.git] / program / js / tiny_mce / plugins / compat2x / editor_plugin_src.js
diff --git a/program/js/tiny_mce/plugins/compat2x/editor_plugin_src.js b/program/js/tiny_mce/plugins/compat2x/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..afad77c
--- /dev/null
@@ -0,0 +1,613 @@
+/**\r
+ * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $\r
+ *\r
+ * @author Moxiecode\r
+ * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.\r
+ */\r
+\r
+(function() {\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;\r
+\r
+       tinymce.create('tinymce.plugins.Compat2x', {\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Compat2x',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',\r
+                               version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       (function() {\r
+               // Extend tinyMCE/EditorManager\r
+               tinymce.extend(tinyMCE, {\r
+                       addToLang : function(p, l) {\r
+                               each(l, function(v, k) {\r
+                                       tinyMCE.i18n[(tinyMCE.settings.language || 'en') + '.' + (p ? p + '_' : '') + k] = v;\r
+                               });\r
+                       },\r
+\r
+                       getInstanceById : function(n) {\r
+                               return this.get(n);\r
+                       }\r
+               });\r
+       })();\r
+\r
+       (function() {\r
+               var EditorManager = tinymce.EditorManager;\r
+\r
+               tinyMCE.instances = {};\r
+               tinyMCE.plugins = {};\r
+               tinymce.PluginManager.onAdd.add(function(pm, n, p) {\r
+                       tinyMCE.plugins[n] = p;\r
+               });\r
+\r
+               tinyMCE.majorVersion = tinymce.majorVersion;\r
+               tinyMCE.minorVersion = tinymce.minorVersion;\r
+               tinyMCE.releaseDate = tinymce.releaseDate;\r
+               tinyMCE.baseURL = tinymce.baseURL;\r
+               tinyMCE.isIE = tinyMCE.isMSIE = tinymce.isIE || tinymce.isOpera;\r
+               tinyMCE.isMSIE5 = tinymce.isIE;\r
+               tinyMCE.isMSIE5_0 = tinymce.isIE;\r
+               tinyMCE.isMSIE7 = tinymce.isIE;\r
+               tinyMCE.isGecko = tinymce.isGecko;\r
+               tinyMCE.isSafari = tinymce.isWebKit;\r
+               tinyMCE.isOpera = tinymce.isOpera;\r
+               tinyMCE.isMac = false;\r
+               tinyMCE.isNS7 = false;\r
+               tinyMCE.isNS71 = false;\r
+               tinyMCE.compat = true;\r
+\r
+               // Extend tinyMCE class\r
+               TinyMCE_Engine = tinyMCE;\r
+               tinymce.extend(tinyMCE, {\r
+                       getParam : function(n, dv) {\r
+                               return this.activeEditor.getParam(n, dv);\r
+                       },\r
+\r
+                       addEvent : function(e, na, f, sc) {\r
+                               tinymce.dom.Event.add(e, na, f, sc || this);\r
+                       },\r
+\r
+                       getControlHTML : function(n) {\r
+                               return EditorManager.activeEditor.controlManager.createControl(n);\r
+                       },\r
+\r
+                       loadCSS : function(u) {\r
+                               tinymce.DOM.loadCSS(u);\r
+                       },\r
+\r
+                       importCSS : function(doc, u) {\r
+                               if (doc == document)\r
+                                       this.loadCSS(u);\r
+                               else\r
+                                       new tinymce.dom.DOMUtils(doc).loadCSS(u);\r
+                       },\r
+\r
+                       log : function() {\r
+                               console.debug.apply(console, arguments);\r
+                       },\r
+\r
+                       getLang : function(n, dv) {\r
+                               var v = EditorManager.activeEditor.getLang(n.replace(/^lang_/g, ''), dv);\r
+\r
+                               // Is number\r
+                               if (/^[0-9\-.]+$/g.test(v))\r
+                                       return parseInt(v);\r
+\r
+                               return v;\r
+                       },\r
+\r
+                       isInstance : function(o) {\r
+                               return o != null && typeof(o) == "object" && o.execCommand;\r
+                       },\r
+\r
+                       triggerNodeChange : function() {\r
+                               EditorManager.activeEditor.nodeChanged();\r
+                       },\r
+\r
+                       regexpReplace : function(in_str, reg_exp, replace_str, opts) {\r
+                               var re;\r
+\r
+                               if (in_str == null)\r
+                                       return in_str;\r
+\r
+                               if (typeof(opts) == "undefined")\r
+                                       opts = 'g';\r
+\r
+                               re = new RegExp(reg_exp, opts);\r
+\r
+                               return in_str.replace(re, replace_str);\r
+                       },\r
+\r
+                       trim : function(s) {\r
+                               return tinymce.trim(s);\r
+                       },\r
+\r
+                       xmlEncode : function(s) {\r
+                               return tinymce.DOM.encode(s);\r
+                       },\r
+\r
+                       explode : function(s, d) {\r
+                               var o = [];\r
+\r
+                               tinymce.each(s.split(d), function(v) {\r
+                                       if (v != '')\r
+                                               o.push(v);\r
+                               });\r
+\r
+                               return o;\r
+                       },\r
+\r
+                       switchClass : function(id, cls) {\r
+                               var b;\r
+\r
+                               if (/^mceButton/.test(cls)) {\r
+                                       b = EditorManager.activeEditor.controlManager.get(id);\r
+\r
+                                       if (!b)\r
+                                               return;\r
+\r
+                                       switch (cls) {\r
+                                               case "mceButtonNormal":\r
+                                                       b.setDisabled(false);\r
+                                                       b.setActive(false);\r
+                                                       return;\r
+\r
+                                               case "mceButtonDisabled":\r
+                                                       b.setDisabled(true);\r
+                                                       return;\r
+\r
+                                               case "mceButtonSelected":\r
+                                                       b.setActive(true);\r
+                                                       b.setDisabled(false);\r
+                                                       return;\r
+                                       }\r
+                               }\r
+                       },\r
+\r
+                       addCSSClass : function(e, n, b) {\r
+                               return tinymce.DOM.addClass(e, n, b);\r
+                       },\r
+\r
+                       hasCSSClass : function(e, n) {\r
+                               return tinymce.DOM.hasClass(e, n);\r
+                       },\r
+\r
+                       removeCSSClass : function(e, n) {\r
+                               return tinymce.DOM.removeClass(e, n);\r
+                       },\r
+\r
+                       getCSSClasses : function() {\r
+                               var cl = EditorManager.activeEditor.dom.getClasses(), o = [];\r
+\r
+                               each(cl, function(c) {\r
+                                       o.push(c['class']);\r
+                               });\r
+\r
+                               return o;\r
+                       },\r
+\r
+                       setWindowArg : function(n, v) {\r
+                               EditorManager.activeEditor.windowManager.params[n] = v;\r
+                       },\r
+\r
+                       getWindowArg : function(n, dv) {\r
+                               var wm = EditorManager.activeEditor.windowManager, v;\r
+\r
+                               v = wm.getParam(n);\r
+                               if (v === '')\r
+                                       return '';\r
+\r
+                               return v || wm.getFeature(n) || dv;\r
+                       },\r
+\r
+                       getParentNode : function(n, f) {\r
+                               return this._getDOM().getParent(n, f);\r
+                       },\r
+\r
+                       selectElements : function(n, na, f) {\r
+                               var i, a = [], nl, x;\r
+\r
+                               for (x=0, na = na.split(','); x<na.length; x++)\r
+                                       for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)\r
+                                               (!f || f(nl[i])) && a.push(nl[i]);\r
+\r
+                               return a;\r
+                       },\r
+\r
+                       getNodeTree : function(n, na, t, nn) {\r
+                               return this.selectNodes(n, function(n) {\r
+                                       return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);\r
+                               }, na ? na : []);\r
+                       },\r
+\r
+                       getAttrib : function(e, n, dv) {\r
+                               return this._getDOM().getAttrib(e, n, dv);\r
+                       },\r
+\r
+                       setAttrib : function(e, n, v) {\r
+                               return this._getDOM().setAttrib(e, n, v);\r
+                       },\r
+\r
+                       getElementsByAttributeValue : function(n, e, a, v) {\r
+                               var i, nl = n.getElementsByTagName(e), o = [];\r
+\r
+                               for (i=0; i<nl.length; i++) {\r
+                                       if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)\r
+                                               o[o.length] = nl[i];\r
+                               }\r
+\r
+                               return o;\r
+                       },\r
+\r
+                       selectNodes : function(n, f, a) {\r
+                               var i;\r
+\r
+                               if (!a)\r
+                                       a = [];\r
+\r
+                               if (f(n))\r
+                                       a[a.length] = n;\r
+\r
+                               if (n.hasChildNodes()) {\r
+                                       for (i=0; i<n.childNodes.length; i++)\r
+                                               tinyMCE.selectNodes(n.childNodes[i], f, a);\r
+                               }\r
+\r
+                               return a;\r
+                       },\r
+\r
+                       getContent : function() {\r
+                               return EditorManager.activeEditor.getContent();\r
+                       },\r
+\r
+                       getParentElement : function(n, na, f) {\r
+                               if (na)\r
+                                       na = new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$', 'g');\r
+\r
+                               return this._getDOM().getParent(n, function(n) {\r
+                                       return n.nodeType == 1 && (!na || na.test(n.nodeName)) && (!f || f(n));\r
+                               }, this.activeEditor.getBody());\r
+                       },\r
+\r
+                       importPluginLanguagePack : function(n) {\r
+                               tinymce.PluginManager.requireLangPack(n);\r
+                       },\r
+\r
+                       getButtonHTML : function(cn, lang, img, c, u, v) {\r
+                               var ed = EditorManager.activeEditor;\r
+\r
+                               img = img.replace(/\{\$pluginurl\}/g, tinyMCE.pluginURL);\r
+                               img = img.replace(/\{\$themeurl\}/g, tinyMCE.themeURL);\r
+                               lang = lang.replace(/^lang_/g, '');\r
+\r
+                               return ed.controlManager.createButton(cn, {\r
+                                       title : lang,\r
+                                       command : c,\r
+                                       ui : u,\r
+                                       value : v,\r
+                                       scope : this,\r
+                                       'class' : 'compat',\r
+                                       image : img\r
+                               });\r
+                       },\r
+\r
+                       addSelectAccessibility : function(e, s, w) {\r
+                               // Add event handlers \r
+                               if (!s._isAccessible) {\r
+                                       s.onkeydown = tinyMCE.accessibleEventHandler;\r
+                                       s.onblur = tinyMCE.accessibleEventHandler;\r
+                                       s._isAccessible = true;\r
+                                       s._win = w;\r
+                               }\r
+\r
+                               return false;\r
+                       },\r
+\r
+                       accessibleEventHandler : function(e) {\r
+                               var elm, win = this._win;\r
+\r
+                               e = tinymce.isIE ? win.event : e;\r
+                               elm = tinymce.isIE ? e.srcElement : e.target;\r
+\r
+                               // Unpiggyback onchange on blur\r
+                               if (e.type == "blur") {\r
+                                       if (elm.oldonchange) {\r
+                                               elm.onchange = elm.oldonchange;\r
+                                               elm.oldonchange = null;\r
+                                       }\r
+\r
+                                       return true;\r
+                               }\r
+\r
+                               // Piggyback onchange\r
+                               if (elm.nodeName == "SELECT" && !elm.oldonchange) {\r
+                                       elm.oldonchange = elm.onchange;\r
+                                       elm.onchange = null;\r
+                               }\r
+\r
+                               // Execute onchange and remove piggyback\r
+                               if (e.keyCode == 13 || e.keyCode == 32) {\r
+                                       elm.onchange = elm.oldonchange;\r
+                                       elm.onchange();\r
+                                       elm.oldonchange = null;\r
+\r
+                                       tinyMCE.cancelEvent(e);\r
+                                       return false;\r
+                               }\r
+\r
+                               return true;\r
+                       },\r
+\r
+                       cancelEvent : function(e) {\r
+                               return tinymce.dom.Event.cancel(e);\r
+                       },\r
+\r
+                       handleVisualAid : function(e) {\r
+                               EditorManager.activeEditor.addVisual(e);\r
+                       },\r
+\r
+                       getAbsPosition : function(n, r) {\r
+                               return tinymce.DOM.getPos(n, r);\r
+                       },\r
+\r
+                       cleanupEventStr : function(s) {\r
+                               s = "" + s;\r
+                               s = s.replace('function anonymous()\n{\n', '');\r
+                               s = s.replace('\n}', '');\r
+                               s = s.replace(/^return true;/gi, ''); // Remove event blocker\r
+\r
+                               return s;\r
+                       },\r
+\r
+                       getVisualAidClass : function(s) {\r
+                               // TODO: Implement\r
+                               return s;\r
+                       },\r
+\r
+                       parseStyle : function(s) {\r
+                               return this._getDOM().parseStyle(s);\r
+                       },\r
+\r
+                       serializeStyle : function(s) {\r
+                               return this._getDOM().serializeStyle(s);\r
+                       },\r
+\r
+                       openWindow : function(tpl, args) {\r
+                               var ed = EditorManager.activeEditor, o = {}, n;\r
+\r
+                               // Convert name/value array to object\r
+                               for (n in tpl)\r
+                                       o[n] = tpl[n];\r
+\r
+                               tpl = o;\r
+\r
+                               args = args || {};\r
+                               tpl.url = new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);\r
+                               tpl.inline = tpl.inline || args.inline;\r
+\r
+                               ed.windowManager.open(tpl, args);\r
+                       },\r
+\r
+                       closeWindow : function(win) {\r
+                               EditorManager.activeEditor.windowManager.close(win);\r
+                       },\r
+\r
+                       getOuterHTML : function(e) {\r
+                               return tinymce.DOM.getOuterHTML(e);\r
+                       },\r
+\r
+                       setOuterHTML : function(e, h, d) {\r
+                               return tinymce.DOM.setOuterHTML(e, h, d);\r
+                       },\r
+\r
+                       hasPlugin : function(n) {\r
+                               return tinymce.PluginManager.get(n) != null;\r
+                       },\r
+\r
+                       _setEventsEnabled : function() {\r
+                               // Ignore it!!\r
+                       },\r
+\r
+                       addPlugin : function(pn, f) {\r
+                               var t = this;\r
+\r
+                               function PluginWrapper(ed) {\r
+                                       tinyMCE.selectedInstance = ed;\r
+\r
+                                       ed.onInit.add(function() {\r
+                                               t.settings = ed.settings;\r
+                                               t.settings['base_href'] = tinyMCE.documentBasePath;\r
+                                               tinyMCE.settings = t.settings;\r
+                                               tinyMCE.documentBasePath = ed.documentBasePath;\r
+                                               //ed.formElement = DOM.get(ed.id);\r
+\r
+                                               if (f.initInstance)\r
+                                                       f.initInstance(ed);\r
+\r
+                                               ed.contentDocument = ed.getDoc();\r
+                                               ed.contentWindow = ed.getWin();\r
+                                               ed.undoRedo = ed.undoManager;\r
+                                               ed.startContent = ed.getContent({format : 'raw'});\r
+\r
+                                               tinyMCE.instances[ed.id] = ed;\r
+                                               tinyMCE.loadedFiles = [];\r
+                                       });\r
+\r
+                                       ed.onActivate.add(function() {\r
+                                               tinyMCE.settings = ed.settings;\r
+                                               tinyMCE.selectedInstance = ed;\r
+                                       });\r
+\r
+                               /*      if (f.removeInstance) {\r
+                                               ed.onDestroy.add(function() {\r
+                                                       return f.removeInstance(ed.id);\r
+                                               });\r
+                                       }*/\r
+\r
+                                       if (f.handleNodeChange) {\r
+                                               ed.onNodeChange.add(function(ed, cm, n) {\r
+                                                       f.handleNodeChange(ed.id, n, 0, 0, false, !ed.selection.isCollapsed());\r
+                                               });\r
+                                       }\r
+\r
+                                       if (f.onChange) {\r
+                                               ed.onChange.add(function(ed, n) {\r
+                                                       return f.onChange(ed);\r
+                                               });\r
+                                       }\r
+\r
+                                       if (f.cleanup) {\r
+                                               ed.onGetContent.add(function() {\r
+                                                       //f.cleanup(type, content, inst);\r
+                                               });\r
+                                       }\r
+\r
+                                       this.getInfo = function() {\r
+                                               return f.getInfo();\r
+                                       };\r
+\r
+                                       this.createControl = function(n) {\r
+                                               tinyMCE.pluginURL = tinymce.baseURL + '/plugins/' + pn;\r
+                                               tinyMCE.themeURL = tinymce.baseURL + '/themes/' + tinyMCE.activeEditor.settings.theme;\r
+\r
+                                               if (f.getControlHTML)\r
+                                                       return f.getControlHTML(n);\r
+\r
+                                               return null;\r
+                                       };\r
+\r
+                                       this.execCommand = function(cmd, ui, val) {\r
+                                               if (f.execCommand)\r
+                                                       return f.execCommand(ed.id, ed.getBody(), cmd, ui, val);\r
+\r
+                                               return false;\r
+                                       };\r
+                               };\r
+\r
+                               tinymce.PluginManager.add(pn, PluginWrapper);\r
+                       },\r
+\r
+                       _getDOM : function() {\r
+                               return tinyMCE.activeEditor ? tinyMCE.activeEditor.dom : tinymce.DOM;\r
+                       },\r
+\r
+                       convertRelativeToAbsoluteURL : function(b, u) {\r
+                               return new tinymce.util.URI(b).toAbsolute(u);\r
+                       },\r
+\r
+                       convertAbsoluteURLToRelativeURL : function(b, u) {\r
+                               return new tinymce.util.URI(b).toRelative(u);\r
+                       }\r
+               });\r
+\r
+               // Extend Editor class\r
+               tinymce.extend(tinymce.Editor.prototype, {\r
+                       getFocusElement : function() {\r
+                               return this.selection.getNode();\r
+                       },\r
+\r
+                       getData : function(n) {\r
+                               if (!this.data)\r
+                                       this.data = [];\r
+\r
+                               if (!this.data[n])\r
+                                       this.data[n] = [];\r
+\r
+                               return this.data[n];\r
+                       },\r
+\r
+                       hasPlugin : function(n) {\r
+                               return this.plugins[n] != null;\r
+                       },\r
+\r
+                       getContainerWin : function() {\r
+                               return window;\r
+                       },\r
+\r
+                       getHTML : function(raw) {\r
+                               return this.getContent({ format : raw ? 'raw' : 'html'});\r
+                       },\r
+\r
+                       setHTML : function(h) {\r
+                               this.setContent(h);\r
+                       },\r
+\r
+                       getSel : function() {\r
+                               return this.selection.getSel();\r
+                       },\r
+\r
+                       getRng : function() {\r
+                               return this.selection.getRng();\r
+                       },\r
+\r
+                       isHidden : function() {\r
+                               var s;\r
+\r
+                               if (!tinymce.isGecko)\r
+                                       return false;\r
+\r
+                               s = this.getSel();\r
+\r
+                               // Weird, wheres that cursor selection?\r
+                               return (!s || !s.rangeCount || s.rangeCount == 0);\r
+                       },\r
+\r
+                       translate : function(s) {\r
+                               var c = this.settings.language, o;\r
+\r
+                               o = tinymce.EditorManager.i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {\r
+                                       return tinymce.EditorManager.i18n[c + '.' + b] || '{#' + b + '}';\r
+                               });\r
+\r
+                               o = o.replace(/{\$lang_([^}]+)\}/g, function(a, b) {\r
+                                       return tinymce.EditorManager.i18n[c + '.' + b] || '{$lang_' + b + '}';\r
+                               });\r
+\r
+                               return o;\r
+                       },\r
+\r
+                       repaint : function() {\r
+                               this.execCommand('mceRepaint');\r
+                       }\r
+               });\r
+\r
+               // Extend selection\r
+               tinymce.extend(tinymce.dom.Selection.prototype, {\r
+                       getSelectedText : function() {\r
+                               return this.getContent({format : 'text'});\r
+                       },\r
+\r
+                       getSelectedHTML : function() {\r
+                               return this.getContent({format : 'html'});\r
+                       },\r
+\r
+                       getFocusElement : function() {\r
+                               return this.getNode();\r
+                       },\r
+\r
+                       selectNode : function(node, collapse, select_text_node, to_start) {\r
+                               var t = this;\r
+\r
+                               t.select(node, select_text_node || 0);\r
+\r
+                               if (!is(collapse))\r
+                                       collapse = true;\r
+\r
+                               if (collapse) {\r
+                                       if (!is(to_start))\r
+                                               to_start = true;\r
+\r
+                                       t.collapse(to_start);\r
+                               }\r
+                       }\r
+               });\r
+       }).call(this);\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('compat2x', tinymce.plugins.Compat2x);\r
+})();\r
+\r