: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
renderHtml: function () {
return '<div id="' + this._id + '" class="' + this.classes + '"></div>';
postRender: function () {
var settings = self.settings;
var elm, box, parent, name, parentEventsRoot;
self.$el = global$9(self.getEl());
self.state.set('rendered', true);
if (name.indexOf('on') === 0) {
self.on(name.substr(2), settings[name]);
for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) {
parentEventsRoot = parent._eventsRoot;
for (name in parentEventsRoot._nativeEvents) {
self._nativeEvents[name] = true;
elm.setAttribute('style', settings.style);
elm.style.cssText = settings.style;
if (self.settings.border) {
'border-top-width': box.top,
'border-right-width': box.right,
'border-bottom-width': box.bottom,
'border-left-width': box.left
var root = self.getRoot();
if (!root.controlIdLookup) {
root.controlIdLookup = {};
root.controlIdLookup[self._id] = self;
for (var key in self._aria) {
self.aria(key, self._aria[key]);
if (self.state.get('visible') === false) {
self.getEl().style.display = 'none';
self.state.on('change:visible', function (e) {
if (self.state.get('rendered')) {
self.getEl().style.display = state === false ? 'none' : '';
self.getEl().getBoundingClientRect();
parentCtrl = self.parent();
parentCtrl._lastRect = null;
self.fire(state ? 'show' : 'hide');
self.fire('postrender', {}, false);
bindStates: function () {
scrollIntoView: function (align) {
function getOffset(elm, rootElm) {
while (parent && parent !== rootElm && parent.nodeType) {
x += parent.offsetLeft || 0;
y += parent.offsetTop || 0;
parent = parent.offsetParent;
var elm = this.getEl(), parentElm = elm.parentNode;
var x, y, width, height, parentWidth, parentHeight;
var pos = getOffset(elm, parentElm);
height = elm.offsetHeight;
parentWidth = parentElm.clientWidth;
parentHeight = parentElm.clientHeight;
x -= parentWidth - width;
y -= parentHeight - height;
} else if (align === 'center') {
x -= parentWidth / 2 - width / 2;
y -= parentHeight / 2 - height / 2;
parentElm.scrollLeft = x;
var ctrl = this, rootControl;
rootControl = ctrl.rootControl;
parents[i].rootControl = rootControl;
ReflowQueue.remove(this);
var parent = this.parent();
if (parent && parent._layout && !parent._layout.isNative()) {
global$2.each('text title visible disabled active value'.split(' '), function (name) {
proto$1[name] = function (value) {
if (arguments.length === 0) {
return this.state.get(name);
if (typeof value !== 'undefined') {
this.state.set(name, value);
Control = global$a.extend(proto$1);
function getEventDispatcher(obj) {
if (!obj._eventDispatcher) {
obj._eventDispatcher = new global$b({
toggleEvent: function (name, state) {
if (state && global$b.isNative(name)) {
if (!obj._nativeEvents) {
obj._nativeEvents[name] = true;
if (obj.state.get('rendered')) {
return obj._eventDispatcher;
function bindPendingEvents(eventCtrl) {
var i, l, parents, eventRootCtrl, nativeEvents, name;
var control = eventCtrl.getParentCtrl(e.target);
function mouseLeaveHandler() {
var ctrl = eventRootCtrl._lastHoverCtrl;
ctrl.fire('mouseleave', { target: ctrl.getEl() });
ctrl.parents().each(function (ctrl) {
ctrl.fire('mouseleave', { target: ctrl.getEl() });
eventRootCtrl._lastHoverCtrl = null;
function mouseEnterHandler(e) {
var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;
eventRootCtrl._lastHoverCtrl = ctrl;
parents = ctrl.parents().toArray().reverse();
lastParents = lastCtrl.parents().toArray().reverse();
lastParents.push(lastCtrl);
for (idx = 0; idx < lastParents.length; idx++) {
if (parents[idx] !== lastParents[idx]) {
for (i = lastParents.length - 1; i >= idx; i--) {
lastCtrl = lastParents[i];
lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });
for (i = idx; i < parents.length; i++) {
ctrl.fire('mouseenter', { target: ctrl.getEl() });
function fixWheelEvent(e) {
if (e.type === 'mousewheel') {
e.deltaY = -1 / 40 * e.wheelDelta;
e.deltaX = -1 / 40 * e.wheelDeltaX;
e = eventCtrl.fire('wheel', e);
nativeEvents = eventCtrl._nativeEvents;
parents = eventCtrl.parents().toArray();
parents.unshift(eventCtrl);
for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {
eventRootCtrl = parents[i]._eventsRoot;
eventRootCtrl = parents[parents.length - 1] || eventCtrl;
eventCtrl._eventsRoot = eventRootCtrl;
for (l = i, i = 0; i < l; i++) {
parents[i]._eventsRoot = eventRootCtrl;
var eventRootDelegates = eventRootCtrl._delegates;
if (!eventRootDelegates) {
eventRootDelegates = eventRootCtrl._delegates = {};
for (name in nativeEvents) {
if (name === 'wheel' && !hasWheelEventSupport) {
if (hasMouseWheelEventSupport) {
global$9(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);
global$9(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);
if (name === 'mouseenter' || name === 'mouseleave') {
if (!eventRootCtrl._hasMouseEnter) {
global$9(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);
eventRootCtrl._hasMouseEnter = 1;
} else if (!eventRootDelegates[name]) {
global$9(eventRootCtrl.getEl()).on(name, delegate);
eventRootDelegates[name] = true;
nativeEvents[name] = false;
var hasTabstopData = function (elm) {
return elm.getAttribute('data-mce-tabstop') ? true : false;
function KeyboardNavigation (settings) {
var root = settings.root;
var focusedElement, focusedControl;
function isElement(node) {
return node && node.nodeType === 1;
focusedElement = domGlobals.document.activeElement;
focusedElement = domGlobals.document.body;
focusedControl = root.getParentCtrl(focusedElement);
elm = elm || focusedElement;
return elm.getAttribute('role');
function getParentRole(elm) {
var role, parent = elm || focusedElement;
while (parent = parent.parentNode) {
if (role = getRole(parent)) {
function getAriaProp(name) {
var elm = focusedElement;
return elm.getAttribute('aria-' + name);
function isTextInputElement(elm) {
var tagName = elm.tagName.toUpperCase();
return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';
if (isTextInputElement(elm) && !elm.hidden) {
if (hasTabstopData(elm)) {
if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {
function getFocusElements(elm) {
if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {
for (var i = 0; i < elm.childNodes.length; i++) {
collect(elm.childNodes[i]);
collect(elm || root.getEl());
function getNavigationRoot(targetControl) {
var navigationRoot, controls;
targetControl = targetControl || focusedControl;
controls = targetControl.parents().toArray();
controls.unshift(targetControl);
for (var i = 0; i < controls.length; i++) {
navigationRoot = controls[i];
if (navigationRoot.settings.ariaRoot) {
function focusFirst(targetControl) {
var navigationRoot = getNavigationRoot(targetControl);
var focusElements = getFocusElements(navigationRoot.getEl());
if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {
moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);
moveFocusToIndex(0, focusElements);
function moveFocusToIndex(idx, elements) {
idx = elements.length - 1;
} else if (idx >= elements.length) {
function moveFocus(dir, elements) {
var navigationRoot = getNavigationRoot();
elements = elements || getFocusElements(navigationRoot.getEl());
for (var i = 0; i < elements.length; i++) {
if (elements[i] === focusedElement) {
navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);
var parentRole = getParentRole();
if (parentRole === 'tablist') {
moveFocus(-1, getFocusElements(focusedElement.parentNode));
} else if (focusedControl.parent().submenu) {
var role = getRole(), parentRole = getParentRole();
if (parentRole === 'tablist') {
moveFocus(1, getFocusElements(focusedElement.parentNode));
} else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {
var role = getRole(), parentRole = getParentRole();
if (role === 'menuitem' && parentRole === 'menubar') {
} else if (role === 'button' && getAriaProp('haspopup')) {
var parentRole = getParentRole();
if (parentRole === 'tablist') {
var elm = getFocusElements(focusedControl.getEl('body'))[0];
moveFocus(e.shiftKey ? -1 : 1);
focusedControl.fire('cancel');
focusedControl.fire('click', {
root.on('keydown', function (e) {
function handleNonTabOrEscEvent(e, handler) {
if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {
if (getRole(focusedElement) === 'slider') {
if (handler(e) !== false) {
if (e.isDefaultPrevented()) {
handleNonTabOrEscEvent(e, left);
handleNonTabOrEscEvent(e, right);
handleNonTabOrEscEvent(e, up);
handleNonTabOrEscEvent(e, down);
handleNonTabOrEscEvent(e, enter);
root.on('focusin', function (e) {
focusedElement = e.target;
focusedControl = e.control;
return { focusFirst: focusFirst };
var Container = Control$1.extend({
init: function (settings) {
settings = self.settings;
self.state.set('fixed', true);
self._items = new Collection$2();