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