: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
var DOM$3 = global$3.DOM;
var ColorButton = PanelButton.extend({
init: function (settings) {
this.classes.add('splitbtn');
this.classes.add('colorbutton');
color: function (color) {
this.getEl('preview').style.backgroundColor = color;
resetColor: function () {
this.getEl('preview').style.backgroundColor = null;
renderHtml: function () {
var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');
var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : '';
self.classes.add('btn-has-text');
textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
return '<div id="' + id + '" class="' + self.classes + '" role="button" tabindex="-1" aria-haspopup="true">' + '<button role="presentation" hidefocus="1" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + '<span id="' + id + '-preview" class="' + prefix + 'preview"></span>' + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
postRender: function () {
var self = this, onClickHandler = self.settings.onclick;
self.on('click', function (e) {
if (e.aria && e.aria.key === 'down') {
if (e.control === self && !DOM$3.getParent(e.target, '.' + self.classPrefix + 'open')) {
e.stopImmediatePropagation();
onClickHandler.call(self, e);
delete self.settings.onclick;
var global$e = tinymce.util.Tools.resolve('tinymce.util.Color');
var ColorPicker = Widget.extend({
Defaults: { classes: 'widget colorpicker' },
init: function (settings) {
postRender: function () {
var color = self.color();
var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;
hueRootElm = self.getEl('h');
huePointElm = self.getEl('hp');
svRootElm = self.getEl('sv');
svPointElm = self.getEl('svp');
function getPos(elm, event) {
var pos = funcs.getPos(elm);
x = Math.max(0, Math.min(x / elm.clientWidth, 1));
y = Math.max(0, Math.min(y / elm.clientHeight, 1));
function updateColor(hsv, hueUpdate) {
var hue = (360 - hsv.h) / 360;
funcs.css(huePointElm, { top: hue * 100 + '%' });
svRootElm.style.background = global$e({
function updateSaturationAndValue(e) {
pos = getPos(svRootElm, e);
hsv.v = (1 - pos.y) * 100;
pos = getPos(hueRootElm, e);
hsv.h = (1 - pos.y) * 360;
self._repaint = function () {
self._svdraghelper = new DragHelper(self._id + '-sv', {
start: updateSaturationAndValue,
drag: updateSaturationAndValue
self._hdraghelper = new DragHelper(self._id + '-h', {
return this.color().toRgb();
value: function (value) {
self.color().parse(value);
return self.color().toHex();
this._color = global$e();
renderHtml: function () {
var prefix = self.classPrefix;
var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';
function getOldIeFallbackHtml() {
var i, l, html = '', gradientPrefix, stopsList;
gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';
stopsList = stops.split(',');
for (i = 0, l = stopsList.length - 1; i < l; i++) {
html += '<div class="' + prefix + 'colorpicker-h-chunk" style="' + 'height:' + 100 / l + '%;' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ');' + '-ms-' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ')' + '"></div>';
var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';
hueHtml = '<div id="' + id + '-h" class="' + prefix + 'colorpicker-h" style="' + gradientCssText + '">' + getOldIeFallbackHtml() + '<div id="' + id + '-hp" class="' + prefix + 'colorpicker-h-marker"></div>' + '</div>';
return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-sv" class="' + prefix + 'colorpicker-sv">' + '<div class="' + prefix + 'colorpicker-overlay1">' + '<div class="' + prefix + 'colorpicker-overlay2">' + '<div id="' + id + '-svp" class="' + prefix + 'colorpicker-selector1">' + '<div class="' + prefix + 'colorpicker-selector2"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + hueHtml + '</div>';
var DropZone = Widget.extend({
init: function (settings) {
settings = global$2.extend({
text: 'Drop an image here',
self.classes.add('dropzone');
self.classes.add('multiple');
renderHtml: function () {
elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>');
funcs.css(elm, 'height', cfg.height + 'px');
funcs.css(elm, 'width', cfg.width + 'px');
elm.className = self.classes;
postRender: function () {
var toggleDragClass = function (e) {
self.classes.toggle('dragenter');
self.getEl().className = self.classes;
var filter = function (files) {
var accept = self.settings.accept;
if (typeof accept !== 'string') {
var re = new RegExp('(' + accept.split(/\s*,\s*/).join('|') + ')$', 'i');
return global$2.grep(files, function (file) {
return re.test(file.name);
self.$el.on('dragover', function (e) {
self.$el.on('dragenter', toggleDragClass);
self.$el.on('dragleave', toggleDragClass);
self.$el.on('drop', function (e) {
if (self.state.get('disabled')) {
var files = filter(e.dataTransfer.files);
self.value = function () {
} else if (self.settings.multiple) {
var Path = Widget.extend({
init: function (settings) {
if (!settings.delimiter) {
settings.delimiter = '\xBB';
self.classes.add('path');
self.on('click', function (e) {
if (index = target.getAttribute('data-index')) {
value: self.row()[index],
self.row(self.settings.row);
self.getEl().firstChild.focus();
return this.state.get('row');
this.state.set('row', row);
renderHtml: function () {
return '<div id="' + self._id + '" class="' + self.classes + '">' + self._getDataPathHtml(self.state.get('row')) + '</div>';
bindStates: function () {
self.state.on('change:row', function (e) {
self.innerHtml(self._getDataPathHtml(e.value));
_getDataPathHtml: function (data) {
var prefix = self.classPrefix;
for (i = 0, l = parts.length; i < l; i++) {
html += (i > 0 ? '<div class="' + prefix + 'divider" aria-hidden="true"> ' + self.settings.delimiter + ' </div>' : '') + '<div role="button" class="' + prefix + 'path-item' + (i === l - 1 ? ' ' + prefix + 'last' : '') + '" data-index="' + i + '" tabindex="-1" id="' + self._id + '-' + i + '" aria-level="' + (i + 1) + '">' + parts[i].name + '</div>';
html = '<div class="' + prefix + 'path-item">\xA0</div>';
var ElementPath = Path.extend({
postRender: function () {
var self = this, editor = self.settings.editor;
if (elm.nodeType === 1) {
if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {
if (elm.getAttribute('data-mce-type') === 'bookmark') {
if (editor.settings.elementpath !== false) {
self.on('select', function (e) {
editor.selection.select(this.row()[e.index].element);
editor.on('nodeChange', function (e) {
if (parents[i].nodeType === 1 && !isHidden(parents[i])) {
var args = editor.fire('ResolveName', {
name: parents[i].nodeName.toLowerCase(),
if (!args.isDefaultPrevented()) {
if (args.isPropagationStopped()) {
var FormItem = Container.extend({
renderHtml: function () {
var self = this, layout = self._layout, prefix = self.classPrefix;
self.classes.add('formitem');
return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<div id="' + self._id + '-title" class="' + prefix + 'title">' + self.settings.title + '</div>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
var Form = Container.extend({
var self = this, items = self.items();
if (!self.settings.formItemDefaults) {
self.settings.formItemDefaults = {
items.each(function (ctrl) {
var label = ctrl.settings.label;
formItem = new FormItem(global$2.extend({
disabled: ctrl.disabled()
}, self.settings.formItemDefaults));
formItem.type = 'formitem';
ctrl.aria('labelledby', ctrl._id + '-l');
if (typeof ctrl.settings.flex === 'undefined') {
self.replace(ctrl, formItem);
return this.fire('submit', { data: this.toJSON() });
postRender: function () {
self.fromJSON(self.settings.data);
bindStates: function () {
function recalcLabels() {
if (self.settings.labelGapCalc === false) {
if (self.settings.labelGapCalc === 'children') {
items = self.find('formitem');
items.filter('formitem').each(function (item) {
var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;
maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;
labelGap = self.settings.labelGap || 0;
labels[i].settings.minWidth = maxLabelWidth + labelGap;
self.on('show', recalcLabels);
var FieldSet = Form.extend({
containerCls: 'fieldset',
renderHtml: function () {
var self = this, layout = self._layout, prefix = self.classPrefix;
return '<fieldset id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<legend id="' + self._id + '-title" class="' + prefix + 'fieldset-title">' + self.settings.title + '</legend>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</fieldset>';
var generate = function (prefix) {
var time = date.getTime();
var random = Math.floor(Math.random() * 1000000000);
return prefix + '_' + random + unique$1 + String(time);