171 lines
5.4 KiB
JavaScript
171 lines
5.4 KiB
JavaScript
/**
|
|
* @package JCE
|
|
* @copyright Copyright (c) 2009-2022 Ryan Demmer. All rights reserved.
|
|
* @license GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
* JCE is free software. This version may have been modified pursuant
|
|
* to the GNU General Public License, and as distributed it includes or
|
|
* is derivative of works licensed under the GNU General Public License or
|
|
* other free or open source software licenses.
|
|
*/
|
|
|
|
/* global jQuery */
|
|
|
|
(function ($) {
|
|
var tinymce = {
|
|
settings: {
|
|
language: "en",
|
|
document_base_url: ""
|
|
},
|
|
|
|
i18n: {},
|
|
|
|
/**
|
|
* Adds a language pack
|
|
*
|
|
* @method addI18n
|
|
* @param {String} p Prefix for the language items. For example en.myplugin
|
|
* @param {Object} o Name/Value collection with items to add to the language group.
|
|
* @source TinyMCE EditorManager.js
|
|
* @copyright Copyright 2009, Moxiecode Systems AB
|
|
* @licence GNU / LGPL 2 - http://www.gnu.org/copyleft/lesser.html
|
|
*
|
|
* Modified for JQuery
|
|
*/
|
|
addI18n: function (p, o) {
|
|
var i18n = this.i18n;
|
|
|
|
if ($.type(p) == 'string') {
|
|
$.each(o, function (k, o) {
|
|
i18n[p + '.' + k] = o;
|
|
});
|
|
} else {
|
|
$.each(p, function (lc, o) {
|
|
$.each(o, function (g, o) {
|
|
$.each(o, function (k, o) {
|
|
if (g == 'common') {
|
|
i18n[lc + '.' + k] = o;
|
|
} else {
|
|
i18n[lc + '.' + g + '.' + k] = o;
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
}
|
|
},
|
|
|
|
getLang: function (n, dv) {
|
|
return this.i18n[this.settings.language + '.' + n] || dv;
|
|
},
|
|
|
|
convertURL: function (src) {
|
|
return src;
|
|
},
|
|
|
|
documentBaseURI: {
|
|
toAbsolute: function (url) {
|
|
if (/:\/\//.test(url)) {
|
|
return url;
|
|
}
|
|
|
|
// remove leading slash
|
|
url = url.replace(/^\//, '');
|
|
|
|
var root = tinymce.settings.document_base_url;
|
|
|
|
// remove trailing slash
|
|
root = root.replace(/\/$/, '');
|
|
|
|
// join and return
|
|
return root + '/' + url;
|
|
},
|
|
|
|
toRelative: function (url) {
|
|
if (/:\/\//.test(url)) {
|
|
var base = tinymce.settings.document_base_url;
|
|
return url.replace(new RegExp('^' + base), '');
|
|
}
|
|
|
|
return url;
|
|
}
|
|
},
|
|
|
|
windowManager: {
|
|
params: {
|
|
window: window.parent,
|
|
callback: function (selected, data) {
|
|
var win = window.parent;
|
|
|
|
var value = data[0].url;
|
|
|
|
var elm = win.document.getElementById(tinymce.settings.element);
|
|
|
|
// Joomla 3.5.x / 4.x Media Field
|
|
var $wrapper = win.jQuery(elm).parents('.field-media-wrapper'),
|
|
inst = $wrapper.data('fieldMedia') || $wrapper.get(0);
|
|
|
|
if (inst && inst.setValue) {
|
|
return inst.setValue(value);
|
|
}
|
|
|
|
win.jQuery(elm).val(value).trigger('change');
|
|
}
|
|
},
|
|
|
|
// Open a modal window . This is only used from inside an existing modal, eg: Help or Image Editor
|
|
open: function (args, params) {
|
|
var $ = jQuery;
|
|
|
|
args.url += '&' + tinymce.settings.token + '=1&standalone=1';
|
|
|
|
var div = $('<div class="uk-inline-help uk-modal" />');
|
|
|
|
var html = '' +
|
|
'<div class="uk-modal-dialog uk-modal-dialog-blank">' +
|
|
' <button class="uk-modal-close uk-close"></button>' +
|
|
' <div class="uk-modal-header"><h3><strong>' + (args.title || "") + '</strong></h3></div>' +
|
|
' <iframe src="' + args.url + '" frameborder="0"></iframe>' +
|
|
'</div>';
|
|
|
|
$(div).html(html).find('.uk-close').on('click', function (e) {
|
|
e.preventDefault();
|
|
$(div).removeClass('uk-open').delay(150).remove();
|
|
});
|
|
|
|
$(div).appendTo('body').addClass('uk-open').show();
|
|
|
|
// store params
|
|
tinymce.windowManager.params = params;
|
|
},
|
|
|
|
// Close a modal window opened using a Joomla Modal method.
|
|
close: function () {
|
|
var win = window.parent;
|
|
|
|
if (win.Joomla && win.Joomla.Modal) {
|
|
return win.Joomla.Modal.getCurrent().close();
|
|
}
|
|
|
|
// legacy modal
|
|
if (win.jModalClose) {
|
|
win.jModalClose();
|
|
}
|
|
|
|
if (win.SqueezeBox) {
|
|
win.SqueezeBox.close();
|
|
}
|
|
|
|
// Joomla 3.5.x / 4.x Media Field
|
|
win.jQuery('.modal.in [data-dismiss]').trigger('click');
|
|
}
|
|
},
|
|
|
|
getParam: function (n, dv) {
|
|
var v = this.settings[n];
|
|
return (typeof v !== "undefined") ? v : dv;
|
|
}
|
|
};
|
|
|
|
window.tinyMCE = window.tinymce = tinymce;
|
|
})(jQuery); |