: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
settings = self.settings;
size = self.settings.size;
self.on('click mousedown', function (e) {
self.on('touchstart', function (e) {
self.classes.add(settings.subtype);
self.classes.add('btn-' + size);
self.icon(settings.icon);
return this.state.get('icon');
this.state.set('icon', icon);
var btnElm = this.getEl().firstChild;
btnStyle.width = btnStyle.height = '100%';
renderHtml: function () {
var self = this, id = self._id, prefix = self.classPrefix;
var icon = self.state.get('icon'), image;
var text = self.state.get('text');
var settings = self.settings;
if (typeof image !== 'string') {
image = domGlobals.window.getSelection ? image[0] : image[1];
image = ' style="background-image: url(\'' + image + '\')"';
self.classes.add('btn-has-text');
textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1"' + ariaPressed + '>' + '<button id="' + id + '-button" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '</div>';
bindStates: function () {
var self = this, $ = self.$, textCls = self.classPrefix + 'txt';
function setButtonText(text) {
var $span = $('span.' + textCls, self.getEl());
$('button:first', self.getEl()).append('<span class="' + textCls + '"></span>');
$span = $('span.' + textCls, self.getEl());
$span.html(self.encode(text));
self.classes.toggle('btn-has-text', !!text);
self.state.on('change:text', function (e) {
self.state.on('change:icon', function (e) {
var prefix = self.classPrefix;
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);
setButtonText(self.state.get('text'));
var BrowseButton = Button.extend({
init: function (settings) {
settings = global$4.extend({
self.classes.add('browsebutton');
self.classes.add('multiple');
postRender: function () {
var input = funcs.create('input', {
id: self._id + '-browse',
accept: self.settings.accept
global$7(input).on('change', function (e) {
var files = e.target.files;
self.value = function () {
} else if (self.settings.multiple) {
global$7(input).on('click', function (e) {
global$7(self.getEl('button')).on('click touchstart', function (e) {
self.getEl().appendChild(input);
global$7(this.getEl('button')).off();
global$7(this.getEl('input')).off();
var ButtonGroup = Container.extend({
renderHtml: function () {
var self = this, layout = self._layout;
self.classes.add('btn-group');
return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
var Checkbox = Widget.extend({
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$f = 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$7.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$b.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$7(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$b.create({
classes: 'combobox-menu',
}).parent(self).renderTo();
global$4.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;