%PDF- %PDF-
| Direktori : /home/lightco1/www/media/editors/tinymce/js/ |
| Current File : /home/lightco1/www/media/editors/tinymce/js/tinymce.js |
/**
* @copyright Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
;(function(tinyMCE, Joomla, window, document){
"use strict";
// This line is for Mootools b/c
window.getSize = window.getSize || function(){return {x: window.innerWidth, y: window.innerHeight};};
// @deprecated 4.0 Use directly Joomla.editors.instances[editor].replaceSelection(text);
window.jInsertEditorText = function ( text, editor ) {
Joomla.editors.instances[editor].replaceSelection(text);
};
var JoomlaTinyMCE = {
/**
* Find all TinyMCE elements and initialize TinyMCE instance for each
*
* @param {HTMLElement} target Target Element where to search for the editor element
*
* @since 3.7.0
*/
setupEditors: function ( target ) {
target = target || document;
var pluginOptions = Joomla.getOptions ? Joomla.getOptions('plg_editor_tinymce', {})
: (Joomla.optionsStorage.plg_editor_tinymce || {}),
editors = target.querySelectorAll('.js-editor-tinymce');
for(var i = 0, l = editors.length; i < l; i++) {
var editor = editors[i].querySelector('textarea');
this.setupEditor(editor, pluginOptions);
}
},
/**
* Initialize TinyMCE editor instance
*
* @param {HTMLElement} element
* @param {Object} pluginOptions
*
* @since 3.7.0
*/
setupEditor: function ( element, pluginOptions ) {
var name = element ? element.getAttribute('name').replace(/\[\]|\]/g, '').split('[').pop() : 'default', // Get Editor name
tinyMCEOptions = pluginOptions ? pluginOptions.tinyMCE || {} : {},
defaultOptions = tinyMCEOptions['default'] || {},
options = tinyMCEOptions[name] ? tinyMCEOptions[name] : defaultOptions; // Check specific options by the name
// Avoid an unexpected changes, and copy the options object
if (options.joomlaMergeDefaults) {
options = Joomla.extend(Joomla.extend({}, defaultOptions), options);
} else {
options = Joomla.extend({}, options);
}
if (element) {
// We already have the Target, so reset the selector and assign given element as target
options.selector = null;
options.target = element;
}
// @TODO: the ext-buttons should be as TinyMCE plugins, not the callback hack
if (options.joomlaExtButtons && options.joomlaExtButtons.names && options.joomlaExtButtons.names.length) {
options.toolbar1 += ' | ' + options.joomlaExtButtons.names.join(' ');
var callbackString = options.joomlaExtButtons.script.join(';');
options.setupCallbackString = options.setupCallbackString || '';
options.setupCallbackString = options.setupCallbackString + ';' + callbackString;
options.joomlaExtButtons = null;
}
if (options.setupCallbackString && !options.setup) {
options.setup = new Function('editor', options.setupCallbackString);
}
// Create a new instance
var ed = new tinyMCE.Editor(element.id, options, tinymce.EditorManager);
ed.render();
/** Register the editor's instance to Joomla Object */
Joomla.editors.instances[element.id] = {
// Required by Joomla's API for the XTD-Buttons
'getValue': function () { return this.instance.getContent(); },
'setValue': function (text) { return this.instance.setContent(text); },
'replaceSelection': function (text) { return this.instance.execCommand('mceInsertContent', false, text); },
// Some extra instance dependent
'id': element.id,
'instance': ed,
'onSave': function() { if (this.instance.isHidden()) { this.instance.show()}; return '';},
};
/** On save **/
document.getElementById(ed.id).form.addEventListener('submit', function() {
Joomla.editors.instances[ed.targetElm.id].onSave();
})
}
};
Joomla.JoomlaTinyMCE = JoomlaTinyMCE;
// Init on DOMContentLoaded
document.addEventListener('DOMContentLoaded', function () {
Joomla.JoomlaTinyMCE.setupEditors();
// Init in subform field
if(window.jQuery) {
jQuery(document).on('subform-row-add', function (event, row) {
Joomla.JoomlaTinyMCE.setupEditors(row);
});
}
});
}(tinyMCE, Joomla, window, document));