v1.0
只读模式 group, 分享 评论更多问题 博客标签总是存在一个
This commit is contained in:
214
public/tinymce/classes/EditorManager.js
Normal file → Executable file
214
public/tinymce/classes/EditorManager.js
Normal file → Executable file
@ -20,6 +20,7 @@
|
||||
*/
|
||||
define("tinymce/EditorManager", [
|
||||
"tinymce/Editor",
|
||||
"tinymce/dom/DomQuery",
|
||||
"tinymce/dom/DOMUtils",
|
||||
"tinymce/util/URI",
|
||||
"tinymce/Env",
|
||||
@ -27,19 +28,65 @@ define("tinymce/EditorManager", [
|
||||
"tinymce/util/Observable",
|
||||
"tinymce/util/I18n",
|
||||
"tinymce/FocusManager"
|
||||
], function(Editor, DOMUtils, URI, Env, Tools, Observable, I18n, FocusManager) {
|
||||
], function(Editor, DomQuery, DOMUtils, URI, Env, Tools, Observable, I18n, FocusManager) {
|
||||
var DOM = DOMUtils.DOM;
|
||||
var explode = Tools.explode, each = Tools.each, extend = Tools.extend;
|
||||
var instanceCounter = 0, beforeUnloadDelegate;
|
||||
var instanceCounter = 0, beforeUnloadDelegate, EditorManager;
|
||||
|
||||
function removeEditorFromList(editor) {
|
||||
var editors = EditorManager.editors, removedFromList;
|
||||
|
||||
delete editors[editor.id];
|
||||
|
||||
for (var i = 0; i < editors.length; i++) {
|
||||
if (editors[i] == editor) {
|
||||
editors.splice(i, 1);
|
||||
removedFromList = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Select another editor since the active one was removed
|
||||
if (EditorManager.activeEditor == editor) {
|
||||
EditorManager.activeEditor = editors[0];
|
||||
}
|
||||
|
||||
// Clear focusedEditor if necessary, so that we don't try to blur the destroyed editor
|
||||
if (EditorManager.focusedEditor == editor) {
|
||||
EditorManager.focusedEditor = null;
|
||||
}
|
||||
|
||||
return removedFromList;
|
||||
}
|
||||
|
||||
function purgeDestroyedEditor(editor) {
|
||||
// User has manually destroyed the editor lets clean up the mess
|
||||
if (editor && !(editor.getContainer() || editor.getBody()).parentNode) {
|
||||
removeEditorFromList(editor);
|
||||
editor.unbindAllNativeEvents();
|
||||
editor.destroy(true);
|
||||
editor = null;
|
||||
}
|
||||
|
||||
return editor;
|
||||
}
|
||||
|
||||
EditorManager = {
|
||||
/**
|
||||
* Dom query instance.
|
||||
*
|
||||
* @property $
|
||||
* @type tinymce.dom.DomQuery
|
||||
*/
|
||||
$: DomQuery,
|
||||
|
||||
var EditorManager = {
|
||||
/**
|
||||
* Major version of TinyMCE build.
|
||||
*
|
||||
* @property majorVersion
|
||||
* @type String
|
||||
*/
|
||||
majorVersion : '@@majorVersion@@',
|
||||
majorVersion: '@@majorVersion@@',
|
||||
|
||||
/**
|
||||
* Minor version of TinyMCE build.
|
||||
@ -47,7 +94,7 @@ define("tinymce/EditorManager", [
|
||||
* @property minorVersion
|
||||
* @type String
|
||||
*/
|
||||
minorVersion : '@@minorVersion@@',
|
||||
minorVersion: '@@minorVersion@@',
|
||||
|
||||
/**
|
||||
* Release date of TinyMCE build.
|
||||
@ -88,14 +135,21 @@ define("tinymce/EditorManager", [
|
||||
activeEditor: null,
|
||||
|
||||
setup: function() {
|
||||
var self = this, baseURL, documentBaseURL, suffix = "", preInit;
|
||||
var self = this, baseURL, documentBaseURL, suffix = "", preInit, src;
|
||||
|
||||
// Get base URL for the current document
|
||||
documentBaseURL = document.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
|
||||
if (!/[\/\\]$/.test(documentBaseURL)) {
|
||||
documentBaseURL += '/';
|
||||
documentBaseURL = document.location.href;
|
||||
|
||||
// Check if the URL is a document based format like: http://site/dir/file and file:///
|
||||
// leave other formats like applewebdata://... intact
|
||||
if (/^[^:]+:\/\/\/?[^\/]+\//.test(documentBaseURL)) {
|
||||
documentBaseURL = documentBaseURL.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
|
||||
|
||||
if (!/[\/\\]$/.test(documentBaseURL)) {
|
||||
documentBaseURL += '/';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// If tinymce is defined and has a base use that or use the old tinyMCEPreInit
|
||||
preInit = window.tinymce || window.tinyMCEPreInit;
|
||||
if (preInit) {
|
||||
@ -105,9 +159,13 @@ define("tinymce/EditorManager", [
|
||||
// Get base where the tinymce script is located
|
||||
var scripts = document.getElementsByTagName('script');
|
||||
for (var i = 0; i < scripts.length; i++) {
|
||||
var src = scripts[i].src;
|
||||
src = scripts[i].src;
|
||||
|
||||
if (/tinymce(\.jquery|)(\.min|\.dev|\.full\.min|)\.js/.test(src)) { // life fix fug full.min
|
||||
// Script types supported:
|
||||
// tinymce.js tinymce.min.js tinymce.dev.js
|
||||
// tinymce.jquery.js tinymce.jquery.min.js tinymce.jquery.dev.js
|
||||
// tinymce.full.js tinymce.full.min.js tinymce.full.dev.js
|
||||
if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) {
|
||||
if (src.indexOf('.min') != -1) {
|
||||
suffix = '.min';
|
||||
}
|
||||
@ -116,6 +174,18 @@ define("tinymce/EditorManager", [
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// We didn't find any baseURL by looking at the script elements
|
||||
// Try to use the document.currentScript as a fallback
|
||||
if (!baseURL && document.currentScript) {
|
||||
src = document.currentScript.src;
|
||||
|
||||
if (src.indexOf('.min') != -1) {
|
||||
suffix = '.min';
|
||||
}
|
||||
|
||||
baseURL = src.substring(0, src.lastIndexOf('/'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -170,7 +240,7 @@ define("tinymce/EditorManager", [
|
||||
* });
|
||||
*/
|
||||
init: function(settings) {
|
||||
var self = this, editors = [], editor;
|
||||
var self = this, editors = [];
|
||||
|
||||
function createId(elm) {
|
||||
var id = elm.id;
|
||||
@ -192,18 +262,28 @@ define("tinymce/EditorManager", [
|
||||
return id;
|
||||
}
|
||||
|
||||
function execCallback(se, n, s) {
|
||||
var f = se[n];
|
||||
function createEditor(id, settings, targetElm) {
|
||||
if (!purgeDestroyedEditor(self.get(id))) {
|
||||
var editor = new Editor(id, settings, self);
|
||||
|
||||
if (!f) {
|
||||
editor.targetElm = editor.targetElm || targetElm;
|
||||
editors.push(editor);
|
||||
editor.render();
|
||||
}
|
||||
}
|
||||
|
||||
function execCallback(name) {
|
||||
var callback = settings[name];
|
||||
|
||||
if (!callback) {
|
||||
return;
|
||||
}
|
||||
|
||||
return f.apply(s || this, Array.prototype.slice.call(arguments, 2));
|
||||
return callback.apply(self, Array.prototype.slice.call(arguments, 2));
|
||||
}
|
||||
|
||||
function hasClass(n, c) {
|
||||
return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);
|
||||
function hasClass(elm, className) {
|
||||
return className.constructor === RegExp ? className.test(elm.className) : DOM.hasClass(elm, className);
|
||||
}
|
||||
|
||||
function readyHandler() {
|
||||
@ -211,15 +291,13 @@ define("tinymce/EditorManager", [
|
||||
|
||||
DOM.unbind(window, 'ready', readyHandler);
|
||||
|
||||
execCallback(settings, 'onpageload');
|
||||
execCallback('onpageload');
|
||||
|
||||
if (settings.types) {
|
||||
// Process type specific selector
|
||||
each(settings.types, function(type) {
|
||||
each(DOM.select(type.selector), function(elm) {
|
||||
var editor = new Editor(createId(elm), extend({}, settings, type), self);
|
||||
editors.push(editor);
|
||||
editor.render(1);
|
||||
createEditor(createId(elm), extend({}, settings, type), elm);
|
||||
});
|
||||
});
|
||||
|
||||
@ -227,12 +305,12 @@ define("tinymce/EditorManager", [
|
||||
} else if (settings.selector) {
|
||||
// Process global selector
|
||||
each(DOM.select(settings.selector), function(elm) {
|
||||
var editor = new Editor(createId(elm), settings, self);
|
||||
editors.push(editor);
|
||||
editor.render(1);
|
||||
createEditor(createId(elm), settings, elm);
|
||||
});
|
||||
|
||||
return;
|
||||
} else if (settings.target) {
|
||||
createEditor(createId(settings.target), settings);
|
||||
}
|
||||
|
||||
// Fallback to old setting
|
||||
@ -240,22 +318,19 @@ define("tinymce/EditorManager", [
|
||||
case "exact":
|
||||
l = settings.elements || '';
|
||||
|
||||
if(l.length > 0) {
|
||||
each(explode(l), function(v) {
|
||||
if (DOM.get(v)) {
|
||||
editor = new Editor(v, settings, self);
|
||||
editors.push(editor);
|
||||
editor.render(true);
|
||||
if (l.length > 0) {
|
||||
each(explode(l), function(id) {
|
||||
var elm;
|
||||
|
||||
if ((elm = DOM.get(id))) {
|
||||
createEditor(id, settings, elm);
|
||||
} else {
|
||||
each(document.forms, function(f) {
|
||||
each(f.elements, function(e) {
|
||||
if (e.name === v) {
|
||||
v = 'mce_editor_' + instanceCounter++;
|
||||
DOM.setAttrib(e, 'id', v);
|
||||
|
||||
editor = new Editor(v, settings, self);
|
||||
editors.push(editor);
|
||||
editor.render(1);
|
||||
if (e.name === id) {
|
||||
id = 'mce_editor_' + instanceCounter++;
|
||||
DOM.setAttrib(e, 'id', id);
|
||||
createEditor(id, settings, e);
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -272,9 +347,7 @@ define("tinymce/EditorManager", [
|
||||
}
|
||||
|
||||
if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) {
|
||||
editor = new Editor(createId(elm), settings, self);
|
||||
editors.push(editor);
|
||||
editor.render(true);
|
||||
createEditor(createId(elm), settings, elm);
|
||||
}
|
||||
});
|
||||
break;
|
||||
@ -294,7 +367,7 @@ define("tinymce/EditorManager", [
|
||||
|
||||
// All done
|
||||
if (l == co) {
|
||||
execCallback(settings, 'oninit');
|
||||
execCallback('oninit');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@ -303,7 +376,7 @@ define("tinymce/EditorManager", [
|
||||
|
||||
// All done
|
||||
if (l == co) {
|
||||
execCallback(settings, 'oninit');
|
||||
execCallback('oninit');
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -332,11 +405,11 @@ define("tinymce/EditorManager", [
|
||||
* });
|
||||
*/
|
||||
get: function(id) {
|
||||
if (id === undefined) {
|
||||
if (!arguments.length) {
|
||||
return this.editors;
|
||||
}
|
||||
|
||||
return this.editors[id];
|
||||
return id in this.editors ? this.editors[id] : null;
|
||||
},
|
||||
|
||||
/**
|
||||
@ -353,6 +426,8 @@ define("tinymce/EditorManager", [
|
||||
editors[editor.id] = editor;
|
||||
editors.push(editor);
|
||||
|
||||
// Doesn't call setActive method since we don't want
|
||||
// to fire a bunch of activate/deactivate calls while initializing
|
||||
self.activeEditor = editor;
|
||||
|
||||
/**
|
||||
@ -407,7 +482,7 @@ define("tinymce/EditorManager", [
|
||||
* @return {tinymce.Editor} The editor that got passed in will be return if it was found otherwise null.
|
||||
*/
|
||||
remove: function(selector) {
|
||||
var self = this, i, editors = self.editors, editor, removedFromList;
|
||||
var self = this, i, editors = self.editors, editor;
|
||||
|
||||
// Remove all editors
|
||||
if (!selector) {
|
||||
@ -419,11 +494,15 @@ define("tinymce/EditorManager", [
|
||||
}
|
||||
|
||||
// Remove editors by selector
|
||||
if (typeof(selector) == "string") {
|
||||
if (typeof selector == "string") {
|
||||
selector = selector.selector || selector;
|
||||
|
||||
each(DOM.select(selector), function(elm) {
|
||||
self.remove(editors[elm.id]);
|
||||
editor = editors[elm.id];
|
||||
|
||||
if (editor) {
|
||||
self.remove(editor);
|
||||
}
|
||||
});
|
||||
|
||||
return;
|
||||
@ -437,28 +516,13 @@ define("tinymce/EditorManager", [
|
||||
return null;
|
||||
}
|
||||
|
||||
delete editors[editor.id];
|
||||
|
||||
for (i = 0; i < editors.length; i++) {
|
||||
if (editors[i] == editor) {
|
||||
editors.splice(i, 1);
|
||||
removedFromList = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Select another editor since the active one was removed
|
||||
if (self.activeEditor == editor) {
|
||||
self.activeEditor = editors[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Fires when an editor is removed from EditorManager collection.
|
||||
*
|
||||
* @event RemoveEditor
|
||||
* @param {Object} e Event arguments.
|
||||
*/
|
||||
if (removedFromList) {
|
||||
if (removeEditorFromList(editor)) {
|
||||
self.fire('RemoveEditor', {editor: editor});
|
||||
}
|
||||
|
||||
@ -556,6 +620,26 @@ define("tinymce/EditorManager", [
|
||||
*/
|
||||
translate: function(text) {
|
||||
return I18n.translate(text);
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets the active editor instance and fires the deactivate/activate events.
|
||||
*
|
||||
* @method setActive
|
||||
* @param {tinymce.Editor} editor Editor instance to set as the active instance.
|
||||
*/
|
||||
setActive: function(editor) {
|
||||
var activeEditor = this.activeEditor;
|
||||
|
||||
if (this.activeEditor != editor) {
|
||||
if (activeEditor) {
|
||||
activeEditor.fire('deactivate', {relatedTarget: editor});
|
||||
}
|
||||
|
||||
editor.fire('activate', {relatedTarget: activeEditor});
|
||||
}
|
||||
|
||||
this.activeEditor = editor;
|
||||
}
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user