: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
if (e.type === 'hide' && e.control.parent() === self) {
self.classes.remove('opened-under');
if (e.control === self.menu) {
self.activeMenu(e.type === 'show');
self.classes.toggle('opened', e.type === 'show');
self.aria('expanded', e.type === 'show');
self.menu.layoutRect({ w: self.layoutRect().w });
self.menu.moveRel(self.getEl(), self.isRtl() ? [
var menuLayoutRect = self.menu.layoutRect();
var selfBottom = self.$el.offset().top + self.layoutRect().h;
if (selfBottom > menuLayoutRect.y && selfBottom < menuLayoutRect.y + menuLayoutRect.h) {
self.classes.add('opened-under');
self.menu.items().each(function (item) {
activeMenu: function (state) {
this.classes.toggle('active', state);
renderHtml: function () {
var self = this, id = self._id, prefix = self.classPrefix;
var icon = self.settings.icon, image;
var text = self.state.get('text');
image = self.settings.image;
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 = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');
return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1" aria-labelledby="' + id + '">' + '<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
postRender: function () {
self.on('click', function (e) {
if (e.control === self && isChildOf$1(e.target, self.getEl())) {
self.menu.items().filter(':visible')[0].focus();
self.on('mouseenter', function (e) {
var overCtrl = e.control;
var parent = self.parent();
var hasVisibleSiblingMenu;
if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) {
parent.items().filter('MenuButton').each(function (ctrl) {
if (ctrl.hideMenu && ctrl !== overCtrl) {
if (ctrl.menu && ctrl.menu.visible()) {
hasVisibleSiblingMenu = true;
if (hasVisibleSiblingMenu) {
bindStates: function () {
self.state.on('change:menu', function () {
function Throbber (elm, inline) {
var classPrefix = Control$1.classPrefix;
self.show = function (time, callback) {
global$7(elm).append('<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>');
timer = global$3.setTimeout(render, time);
self.hide = function () {
var child = elm.lastChild;
global$3.clearTimeout(timer);
if (child && child.className.indexOf('throbber') !== -1) {
child.parentNode.removeChild(child);
var Menu = FloatPanel.extend({
init: function (settings) {
settings.autohide = true;
settings.constrainToViewport = true;
if (typeof settings.items === 'function') {
settings.itemsFactory = settings.items;
if (settings.itemDefaults) {
var items = settings.items;
items[i] = global$4.extend({}, settings.itemDefaults, items[i]);
self.classes.add('menu');
if (settings.animate && global$1.ie !== 11) {
self.classes.add('animate');
this.classes.toggle('menu-align', true);
this.getEl().style.height = '';
this.getEl('body').style.height = '';
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$3.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$b.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);