只读模式
group, 分享
评论更多问题
博客标签总是存在一个
This commit is contained in:
lealife
2015-06-15 18:01:48 +08:00
parent 7e458bb433
commit 6987a38820
1453 changed files with 114561 additions and 91536 deletions

214
public/tinymce/classes/EditorManager.js Normal file → Executable file
View 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;
}
};