: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
init: function (settings) {
self.on('click mousedown', function (e) {
self.on('click', function (e) {
self.checked(!self.checked());
self.checked(self.settings.checked);
checked: function (state) {
return this.state.get('checked');
this.state.set('checked', state);
value: function (state) {
return this.checked(state);
renderHtml: function () {
var self = this, id = self._id, prefix = self.classPrefix;
return '<div id="' + id + '" class="' + self.classes + '" unselectable="on" aria-labelledby="' + id + '-al" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-checkbox"></i>' + '<span id="' + id + '-al" class="' + prefix + 'label">' + self.encode(self.state.get('text')) + '</span>' + '</div>';
bindStates: function () {
function checked(state) {
self.classes.toggle('checked', state);
self.aria('checked', state);
self.state.on('change:text', function (e) {
self.getEl('al').firstChild.data = self.translate(e.value);
self.state.on('change:checked change:value', function (e) {
self.state.on('change:icon', function (e) {
var prefix = self.classPrefix;
if (typeof icon === 'undefined') {
return self.settings.icon;
self.settings.icon = icon;
icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
var btnElm = self.getEl().firstChild;
var iconElm = btnElm.getElementsByTagName('i')[0];
if (!iconElm || iconElm !== btnElm.firstChild) {
iconElm = domGlobals.document.createElement('i');
btnElm.insertBefore(iconElm, btnElm.firstChild);
iconElm.className = icon;
btnElm.removeChild(iconElm);
if (self.state.get('checked')) {
var global$d = tinymce.util.Tools.resolve('tinymce.util.VK');
var ComboBox = Widget.extend({
init: function (settings) {
settings = self.settings;
self.classes.add('combobox');
settings.menu = settings.menu || settings.values;
self.on('click', function (e) {
if (!global$9.contains(root, elm) && elm !== root) {
while (elm && elm !== root) {
if (elm.id && elm.id.indexOf('-open') !== -1) {
self.menu.items()[0].focus();
self.on('keydown', function (e) {
if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {
self.parents().reverse().each(function (ctrl) {
self.fire('submit', { data: rootControl.toJSON() });
self.on('keyup', function (e) {
if (e.target.nodeName === 'INPUT') {
var oldValue = self.state.get('value');
var newValue = e.target.value;
if (newValue !== oldValue) {
self.state.set('value', newValue);
self.fire('autocomplete', e);
self.on('mouseover', function (e) {
var tooltip = self.tooltip().moveTo(-65535);
if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {
var statusMessage = self.statusMessage() || 'Ok';
var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [
tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
tooltip.moveRel(e.target, rel);
statusLevel: function (value) {
if (arguments.length > 0) {
this.state.set('statusLevel', value);
return this.state.get('statusLevel');
statusMessage: function (value) {
if (arguments.length > 0) {
this.state.set('statusMessage', value);
return this.state.get('statusMessage');
var settings = self.settings;
menu = settings.menu || [];
menu.type = menu.type || 'menu';
self.menu = global$4.create(menu).parent(self).renderTo(self.getContainerElm());
self.menu.on('cancel', function (e) {
if (e.control === self.menu) {
self.menu.on('show hide', function (e) {
e.control.items().each(function (ctrl) {
ctrl.active(ctrl.value() === self.value());
self.menu.on('select', function (e) {
self.value(e.control.value());
self.on('focusin', function (e) {
if (e.target.tagName.toUpperCase() === 'INPUT') {
self.aria('expanded', true);
self.menu.layoutRect({ w: self.layoutRect().w });
self.menu.moveRel(self.getEl(), self.isRtl() ? [
this.getEl('inp').focus();
var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect();
var width, lineHeight, innerPadding = 0;
var inputElm = elm.firstChild;
if (self.statusLevel() && self.statusLevel() !== 'none') {
innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);
width = rect.w - funcs.getSize(openElm).width - 10;
var doc = domGlobals.document;
if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
lineHeight = self.layoutRect().h - 2 + 'px';
width: width - innerPadding,
postRender: function () {
global$9(this.getEl('inp')).on('change', function (e) {
self.state.set('value', e.target.value);
renderHtml: function () {
var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix;
var value = self.state.get('value') || '';
var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';
if ('spellcheck' in settings) {
extraAttrs += ' spellcheck="' + settings.spellcheck + '"';
if (settings.maxLength) {
extraAttrs += ' maxlength="' + settings.maxLength + '"';
extraAttrs += ' size="' + settings.size + '"';
extraAttrs += ' type="' + settings.subtype + '"';
statusHtml = '<i id="' + id + '-status" class="mce-status mce-ico" style="display: none"></i>';
extraAttrs += ' disabled="disabled"';
if (icon && icon !== 'caret') {
icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;
text = self.state.get('text');
openBtnHtml = '<div id="' + id + '-open" class="' + prefix + 'btn ' + prefix + 'open" tabIndex="-1" role="button">' + '<button id="' + id + '-action" type="button" hidefocus="1" tabindex="-1">' + (icon !== 'caret' ? '<i class="' + icon + '"></i>' : '<i class="' + prefix + 'caret"></i>') + (text ? (icon ? ' ' : '') + text : '') + '</button>' + '</div>';
self.classes.add('has-open');
return '<div id="' + id + '" class="' + self.classes + '">' + '<input id="' + id + '-inp" class="' + prefix + 'textbox" value="' + self.encode(value, false) + '" hidefocus="1"' + extraAttrs + ' placeholder="' + self.encode(settings.placeholder) + '" />' + statusHtml + openBtnHtml + '</div>';
value: function (value) {
this.state.set('value', value);
if (this.state.get('rendered')) {
this.state.set('value', this.getEl('inp').value);
return this.state.get('value');
showAutoComplete: function (items, term) {
if (items.length === 0) {
var insert = function (value, title) {
self.fire('selectitem', {
self.menu.items().remove();
self.menu = global$4.create({
classes: 'combobox-menu',
}).parent(self).renderTo();
global$2.each(items, function (item) {
classes: 'menu-item-ellipsis',
onclick: insert(item.value, item.title)
self.menu.on('cancel', function (e) {
if (e.control.parent() === self.menu) {
self.menu.on('select', function () {
var maxW = self.layoutRect().w;
self.menu.moveRel(self.getEl(), self.isRtl() ? [
bindStates: function () {
self.state.on('change:value', function (e) {
if (self.getEl('inp').value !== e.value) {
self.getEl('inp').value = e.value;
self.state.on('change:disabled', function (e) {
self.getEl('inp').disabled = e.value;
self.state.on('change:statusLevel', function (e) {
var statusIconElm = self.getEl('status');
var prefix = self.classPrefix, value = e.value;
funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');
funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');
funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');
funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');
self.classes.toggle('has-status', value !== 'none');
funcs.on(self.getEl('status'), 'mouseleave', function () {
self.on('cancel', function (e) {
if (self.menu && self.menu.visible()) {
var focusIdx = function (idx, menu) {
if (menu && menu.items().length > 0) {
menu.items().eq(idx)[0].focus();
self.on('keydown', function (e) {
if (e.target.nodeName === 'INPUT') {
if (keyCode === global$d.DOWN) {
self.fire('autocomplete');
} else if (keyCode === global$d.UP) {
global$9(this.getEl('inp')).off();
var ColorBox = ComboBox.extend({
init: function (settings) {
settings.spellcheck = false;
self.classes.add('colorbox');
self.on('change keyup postrender', function () {
self.repaintColor(self.value());
repaintColor: function (value) {
var openElm = this.getEl('open');
var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;
elm.style.background = value;
bindStates: function () {
self.state.on('change:value', function (e) {
if (self.state.get('rendered')) {
self.repaintColor(e.value);
var PanelButton = Button.extend({
var self = this, settings = self.settings;
self.classes.add('opened');
var panelSettings = settings.panel;
if (panelSettings.type) {
panelSettings.role = panelSettings.role || 'dialog';
panelSettings.popover = true;
panelSettings.autohide = true;
panelSettings.ariaRoot = true;
self.panel = new FloatPanel(panelSettings).on('hide', function () {
self.classes.remove('opened');
}).on('cancel', function (e) {
}).parent(self).renderTo(self.getContainerElm());
var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));
self.panel.classes.toggle('start', rel.substr(-1) === 'l');
self.panel.classes.toggle('end', rel.substr(-1) === 'r');
var isTop = rel.substr(0, 1) === 't';
self.panel.classes.toggle('bottom', !isTop);
self.panel.classes.toggle('top', isTop);
self.panel.moveRel(self.getEl(), rel);
postRender: function () {
self.aria('haspopup', true);
self.on('click', function (e) {
if (e.control === self) {
if (self.panel && self.panel.visible()) {
self.panel.focus(!!e.aria);