: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
function hideThrobber() {
factory = self.settings.itemsFactory;
self.throbber = new Throbber(self.getEl('body'), true);
if (self.items().length === 0) {
self.throbber.show(100, function () {
self.on('hide close', hideThrobber);
self.requestTime = time = new Date().getTime();
self.settings.itemsFactory(function (items) {
if (items.length === 0) {
if (self.requestTime !== time) {
self.getEl().style.width = '';
self.getEl('body').style.width = '';
self.getEl('body').innerHTML = '';
this.find('menuitem').exec('hideMenu');
self.items().each(function (ctrl) {
var settings = ctrl.settings;
if (settings.icon || settings.image || settings.selectable) {
if (self.settings.itemsFactory) {
self.on('postrender', function () {
if (self.settings.itemsFactory) {
self.on('show hide', function (e) {
if (e.control === self) {
global$7.setTimeout(function () {
self.classes.remove('in');
var ListBox = MenuButton.extend({
init: function (settings) {
var values, selected, selectedText, lastItemCtrl;
function setSelected(menuValues) {
for (var i = 0; i < menuValues.length; i++) {
selected = menuValues[i].selected || settings.value === menuValues[i].value;
selectedText = selectedText || menuValues[i].text;
self.state.set('value', menuValues[i].value);
if (menuValues[i].menu) {
if (setSelected(menuValues[i].menu)) {
settings = self.settings;
self._values = values = settings.values;
if (typeof settings.value !== 'undefined') {
if (!selected && values.length > 0) {
selectedText = values[0].text;
self.state.set('value', values[0].value);
self.state.set('menu', values);
self.state.set('text', settings.text || selectedText);
self.classes.add('listbox');
self.on('select', function (e) {
e.lastControl = lastItemCtrl;
ctrl.active(!ctrl.active());
self.value(e.control.value());
value: function (value) {
if (arguments.length === 0) {
return this.state.get('value');
if (typeof value === 'undefined') {
function valueExists(values) {
return exists(values, function (a) {
return a.menu ? valueExists(a.menu) : a.value === value;
if (this.settings.values) {
if (valueExists(this.settings.values)) {
this.state.set('value', value);
} else if (value === null) {
this.state.set('value', null);
this.state.set('value', value);
bindStates: function () {
function activateMenuItemsByValue(menu, value) {
if (menu instanceof Menu) {
menu.items().each(function (ctrl) {
ctrl.active(ctrl.value() === value);
function getSelectedItem(menuValues, value) {
for (var i = 0; i < menuValues.length; i++) {
if (menuValues[i].value === value) {
if (menuValues[i].menu) {
selectedItem = getSelectedItem(menuValues[i].menu, value);
self.on('show', function (e) {
activateMenuItemsByValue(e.control, self.value());
self.state.on('change:value', function (e) {
var selectedItem = getSelectedItem(self.state.get('menu'), e.value);
self.text(selectedItem.text);
self.text(self.settings.text);
var toggleTextStyle = function (ctrl, state) {
var textStyle = ctrl._textStyle;
var textElm = ctrl.getEl('text');
textElm.setAttribute('style', textStyle);
textElm.style.color = '';
textElm.style.backgroundColor = '';
var MenuItem = Widget.extend({
init: function (settings) {
settings = self.settings;
self.classes.add('menu-item');
self.classes.add('menu-item-expand');
self.classes.add('menu-item-preview');
text = self.state.get('text');
if (text === '-' || text === '|') {
self.classes.add('menu-item-sep');
self.aria('role', 'separator');
self.state.set('text', '-');
if (settings.selectable) {
self.aria('role', 'menuitemcheckbox');
self.classes.add('menu-item-checkbox');
settings.icon = 'selected';
if (!settings.preview && !settings.selectable) {
self.classes.add('menu-item-normal');
self.on('mousedown', function (e) {
if (settings.menu && !settings.ariaHideMenu) {
self.aria('haspopup', true);
return !!this.settings.menu;
var settings = self.settings;
var parent = self.parent();
parent.items().each(function (ctrl) {
menu.type = menu.type || 'menu';
if (parent.settings.itemDefaults) {
menu.itemDefaults = parent.settings.itemDefaults;
menu = self.menu = global$4.create(menu).parent(self).renderTo();
menu.on('cancel', function (e) {
menu.on('show hide', function (e) {
e.control.items().each(function (ctrl) {
ctrl.active(ctrl.settings.selected);
menu.on('hide', function (e) {
if (e.control === menu) {
self.classes.remove('selected');
menu._parentMenu = parent;
menu.classes.add('menu-sub');
var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [
menu.moveRel(self.getEl(), rel);
menu.classes.remove(menu._lastRel).add(rel);
self.classes.add('selected');
self.aria('expanded', true);
self.menu.items().each(function (item) {
self.aria('expanded', false);
renderHtml: function () {
var settings = self.settings;
var prefix = self.classPrefix;
var text = self.state.get('text');
var icon = self.settings.icon, image = '', shortcut = settings.shortcut;
var url = self.encode(settings.url), iconHtml = '';
function convertShortcut(shortcut) {
var i, value, replace = {};
replace = { meta: 'Ctrl' };
shortcut = shortcut.split('+');
for (i = 0; i < shortcut.length; i++) {
value = replace[shortcut[i].toLowerCase()];
return shortcut.join('+');
function escapeRegExp(str) {
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
function markMatches(text) {
var match = settings.match || '';
return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {
return '!mce~match[' + match + ']mce~match!';
function boldMatches(text) {
return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>');
self.parent().classes.add('menu-has-icons');
image = ' style="background-image: url(\'' + settings.image + '\')"';
shortcut = convertShortcut(shortcut);
icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');
iconHtml = text !== '-' ? '<i class="' + icon + '"' + image + '></i>\xA0' : '';
text = boldMatches(self.encode(markMatches(text)));
url = boldMatches(self.encode(markMatches(url)));
return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1">' + iconHtml + (text !== '-' ? '<span id="' + id + '-text" class="' + prefix + 'text">' + text + '</span>' : '') + (shortcut ? '<div id="' + id + '-shortcut" class="' + prefix + 'menu-shortcut">' + shortcut + '</div>' : '') + (settings.menu ? '<div class="' + prefix + 'caret"></div>' : '') + (url ? '<div class="' + prefix + 'menu-item-link">' + url + '</div>' : '') + '</div>';
postRender: function () {
var self = this, settings = self.settings;
var textStyle = settings.textStyle;
if (typeof textStyle === 'function') {
textStyle = textStyle.call(this);
var textElm = self.getEl('text');
textElm.setAttribute('style', textStyle);
self._textStyle = textStyle;
self.on('mouseenter click', function (e) {
if (e.control === self) {
if (!settings.menu && e.type === 'click') {
global$7.requestAnimationFrame(function () {
self.parent().items().each(function (ctrl) {
ctrl.classes.remove('selected');
self.classes.toggle('selected', true);
active: function (state) {
toggleTextStyle(this, state);
if (typeof state !== 'undefined') {
this.aria('checked', state);
return this._super(state);
var Radio = Checkbox.extend({
var ResizeHandle = Widget.extend({
renderHtml: function () {
var self = this, prefix = self.classPrefix;
self.classes.add('resizehandle');
if (self.settings.direction === 'both') {
self.classes.add('resizehandle-both');
return '<div id="' + self._id + '" class="' + self.classes + '">' + '<i class="' + prefix + 'ico ' + prefix + 'i-resize"></i>' + '</div>';
postRender: function () {
self.resizeDragHelper = new DragHelper(this._id, {
self.fire('ResizeStart');
if (self.settings.direction !== 'both') {
if (this.resizeDragHelper) {
this.resizeDragHelper.destroy();
function createOptions(options) {
for (var i = 0; i < options.length; i++) {
strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>';
var SelectBox = Widget.extend({