Current Path : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/main/core/ |
Current File : /var/www/www-root/data/www/info.monolith-realty.ru/bitrix/js/main/core/core_window.js |
;(function(window) { if (BX.WindowManager) return; /* windows manager */ BX.WindowManager = { _stack: [], _runtime_resize: {}, _delta: 2, _delta_start: 1000, currently_loaded: null, settings_category: 'BX.WindowManager.9.5', register: function (w) { this.currently_loaded = null; w.WM_REG_INDEX = this._stack.length; this._stack.push(w); if (this._stack.length < 2) { BX.bind(document, 'keyup', BX.proxy(this.__checkKeyPress, this)); } }, unregister: function (w) { if (null == w.WM_REG_INDEX) return null; var _current; if (this._stack.length > 0) { while ((_current = this.__pop_stack()) != w) { if (!_current) { _current = null; break; } } if (this._stack.length <= 0) { this.enableKeyCheck(); } return _current; } else { return null; } }, __pop_stack: function(clean) { if (this._stack.length > 0) { var _current = this._stack.pop(); _current.WM_REG_INDEX = null; BX.onCustomEvent(_current, 'onWindowUnRegister', [clean === true]); return _current; } else return null; }, clean: function() { while (this.__pop_stack(true)){} this._stack = []; this.disableKeyCheck(); }, Get: function() { if (this.currently_loaded) return this.currently_loaded; else if (this._stack.length > 0) return this._stack[this._stack.length-1]; else return null; }, setStartZIndex: function(value) { this._delta_start = value; }, restoreStartZIndex: function() { this._delta_start = 1000; }, GetZIndex: function() { var _current; return (null != (_current = this._stack[this._stack.length-1]) ? parseInt(_current.Get().style.zIndex) + this._delta : this._delta_start ); }, __get_check_url: function(url) { var pos = url.indexOf('?'); return pos == -1 ? url : url.substring(0, pos); }, saveWindowSize: function(url, params) { var check_url = this.__get_check_url(url); if (BX.userOptions) { BX.userOptions.save(this.settings_category, 'size_' + check_url, 'width', params.width); BX.userOptions.save(this.settings_category, 'size_' + check_url, 'height', params.height); } this._runtime_resize[check_url] = params; }, saveWindowOptions: function(wnd_id, opts) { if (BX.userOptions) { for (var i in opts) { if(opts.hasOwnProperty(i)) { BX.userOptions.save(this.settings_category, 'options_' + wnd_id, i, opts[i]); } } } }, getRuntimeWindowSize: function(url) { return this._runtime_resize[this.__get_check_url(url)]; }, disableKeyCheck: function() { BX.unbind(document, 'keyup', BX.proxy(this.__checkKeyPress, this)); }, enableKeyCheck: function() { BX.bind(document, 'keyup', BX.proxy(this.__checkKeyPress, this)); }, __checkKeyPress: function(e) { if (null == e) e = window.event; if (e.keyCode == 27) { var wnd = BX.WindowManager.Get(); if (wnd && !wnd.unclosable) wnd.Close(); } } }; BX.garbage(BX.WindowManager.clean, BX.WindowManager); /* base button class */ BX.CWindowButton = function(params) { if (params.btn) { this.btn = params.btn; this.parentWindow = params.parentWindow; if (/save|apply/i.test(this.btn.name)) { BX.bind(this.btn, 'click', BX.delegate(this.disableUntilError, this)); } } else { this.title = params.title; // html value attr this.hint = params.hint; // html title attr this.id = params.id; // html name and id attrs this.name = params.name; // html name or value attrs when id and title 're absent this.className = params.className; // className for button input this.action = params.action; this.onclick = params.onclick; // you can override button creation method if (params.Button && BX.type.isFunction(params.Button)) this.Button = params.Button; this.btn = null; } }; BX.CWindowButton.prototype.disable = function() { if (this.btn) this.parentWindow.showWait(this.btn); }; BX.CWindowButton.prototype.enable = function(){ if (this.btn) this.parentWindow.closeWait(this.btn); }; BX.CWindowButton.prototype.emulate = function() { if (this.btn && this.btn.disabled) return; var act = this.action ? BX.delegate(this.action, this) : ( this.onclick ? this.onclick : ( this.btn ? this.btn.getAttribute('onclick') : '' ) ); if (act) { setTimeout(act, 50); if (this.btn && /save|apply/i.test(this.btn.name) && !this.action) { this.disableUntilError(); } } }; BX.CWindowButton.prototype.Button = function(parentWindow) { this.parentWindow = parentWindow; var btn = { props: { 'type': 'button', 'name': this.id ? this.id : this.name, 'value': this.title ? this.title : this.name, 'id': this.id } }; if (this.hint) btn.props.title = this.hint; if (!!this.className) btn.props.className = this.className; if (this.action) { btn.events = { 'click': BX.delegate(this.action, this) }; } else if (this.onclick) { if (BX.browser.IsIE()) { btn.events = { 'click': BX.delegate(function() {eval(this.onclick)}, this) }; } else { btn.attrs = { 'onclick': this.onclick }; } } this.btn = BX.create('INPUT', btn); return this.btn; }; BX.CWindowButton.prototype.disableUntilError = function() { this.disable(); if (!this.__window_error_handler_set) { BX.addCustomEvent(this.parentWindow, 'onWindowError', BX.delegate(this.enable, this)); this.__window_error_handler_set = true; } }; /* base window class */ BX.CWindow = function(div, type) { this.DIV = div || document.createElement('DIV'); this.SETTINGS = { resizable: false, min_height: 0, min_width: 0, top: 0, left: 0, draggable: false, drag_restrict: true, resize_restrict: true }; this.ELEMENTS = { draggable: [], resizer: [], close: [] }; this.type = type == 'float' ? 'float' : 'dialog'; BX.adjust(this.DIV, { props: { className: 'bx-core-window' }, style: { 'zIndex': 0, 'position': 'absolute', 'display': 'none', 'top': this.SETTINGS.top + 'px', 'left': this.SETTINGS.left + 'px', 'height': '100px', 'width': '100px' } }); this.isOpen = false; BX.addCustomEvent(this, 'onWindowRegister', BX.delegate(this.onRegister, this)); BX.addCustomEvent(this, 'onWindowUnRegister', BX.delegate(this.onUnRegister, this)); this.MOUSEOVER = null; BX.bind(this.DIV, 'mouseover', BX.delegate(this.__set_msover, this)); BX.bind(this.DIV, 'mouseout', BX.delegate(this.__unset_msover, this)); BX.ready(BX.delegate(function() { document.body.appendChild(this.DIV); BX.ZIndexManager.register(this.DIV); }, this)); }; BX.CWindow.prototype.Get = function () {return this.DIV}; BX.CWindow.prototype.visible = function() {return this.isOpen;}; BX.CWindow.prototype.Show = function(bNotRegister) { this.DIV.style.display = 'block'; if (!bNotRegister) { BX.WindowManager.register(this); BX.onCustomEvent(this, 'onWindowRegister'); } BX.ZIndexManager.bringToFront(this.DIV); }; BX.CWindow.prototype.Hide = function() { BX.WindowManager.unregister(this); this.DIV.style.display = 'none'; }; BX.CWindow.prototype.onRegister = function() { this.isOpen = true; }; BX.CWindow.prototype.onUnRegister = function(clean) { this.isOpen = false; if (clean || (this.PARAMS && this.PARAMS.content_url)) { if (clean) {BX.onCustomEvent(this, 'onWindowClose', [this, true]);} if (this.DIV.parentNode) this.DIV.parentNode.removeChild(this.DIV); } else { this.DIV.style.display = 'none'; } }; BX.CWindow.prototype.CloseDialog = // compatibility BX.CWindow.prototype.Close = function(bImmediately) { BX.onCustomEvent(this, 'onBeforeWindowClose', [this]); if (bImmediately !== true) { if (this.denyClose) return false; } BX.onCustomEvent(this, 'onWindowClose', [this]); //this crashes vis editor in ie via onWindowResizeExt event handler //if (this.bExpanded) this.__expand(); // alternative version: if (this.bExpanded) { var pDocElement = BX.GetDocElement(); BX.unbind(window, 'resize', BX.proxy(this.__expand_onresize, this)); pDocElement.style.overflow = this.__expand_settings.overflow; } BX.WindowManager.unregister(this); return true; }; BX.CWindow.prototype.SetResize = function(elem) { elem.style.cursor = 'se-resize'; BX.bind(elem, 'mousedown', BX.proxy(this.__startResize, this)); this.ELEMENTS.resizer.push(elem); this.SETTINGS.resizable = true; }; BX.CWindow.prototype.SetExpand = function(elem, event_name) { event_name = event_name || 'click'; BX.bind(elem, event_name, BX.proxy(this.__expand, this)); }; BX.CWindow.prototype.__expand_onresize = function() { var windowSize = BX.GetWindowInnerSize(); this.DIV.style.width = windowSize.innerWidth + "px"; this.DIV.style.height = windowSize.innerHeight + "px"; BX.onCustomEvent(this, 'onWindowResize'); }; BX.CWindow.prototype.__expand = function() { var pDocElement = BX.GetDocElement(); if (!this.bExpanded) { var wndScroll = BX.GetWindowScrollPos(), wndSize = BX.GetWindowInnerSize(); this.__expand_settings = { resizable: this.SETTINGS.resizable, draggable: this.SETTINGS.draggable, width: this.DIV.style.width, height: this.DIV.style.height, left: this.DIV.style.left, top: this.DIV.style.top, scrollTop: wndScroll.scrollTop, scrollLeft: wndScroll.scrollLeft, overflow: BX.style(pDocElement, 'overflow') }; this.SETTINGS.resizable = false; this.SETTINGS.draggable = false; window.scrollTo(0,0); pDocElement.style.overflow = 'hidden'; this.DIV.style.top = '0px'; this.DIV.style.left = '0px'; this.DIV.style.width = wndSize.innerWidth + 'px'; this.DIV.style.height = wndSize.innerHeight + 'px'; this.bExpanded = true; BX.onCustomEvent(this, 'onWindowExpand'); BX.onCustomEvent(this, 'onWindowResize'); BX.bind(window, 'resize', BX.proxy(this.__expand_onresize, this)); } else { BX.unbind(window, 'resize', BX.proxy(this.__expand_onresize, this)); this.SETTINGS.resizable = this.__expand_settings.resizable; this.SETTINGS.draggable = this.__expand_settings.draggable; pDocElement.style.overflow = this.__expand_settings.overflow; this.DIV.style.top = this.__expand_settings.top; this.DIV.style.left = this.__expand_settings.left; this.DIV.style.width = this.__expand_settings.width; this.DIV.style.height = this.__expand_settings.height; window.scrollTo(this.__expand_settings.scrollLeft, this.__expand_settings.scrollTop); this.bExpanded = false; BX.onCustomEvent(this, 'onWindowNarrow'); BX.onCustomEvent(this, 'onWindowResize'); } }; BX.CWindow.prototype.Resize = function(x, y) { var new_width = Math.max(x - this.pos.left + this.dx, this.SETTINGS.min_width); var new_height = Math.max(y - this.pos.top + this.dy, this.SETTINGS.min_height); if (this.SETTINGS.resize_restrict) { var scrollSize = BX.GetWindowScrollSize(); if (this.pos.left + new_width > scrollSize.scrollWidth - this.dw) new_width = scrollSize.scrollWidth - this.pos.left - this.dw; } this.DIV.style.width = new_width + 'px'; this.DIV.style.height = new_height + 'px'; BX.onCustomEvent(this, 'onWindowResize'); }; BX.CWindow.prototype.__startResize = function(e) { if (!this.SETTINGS.resizable) return false; if(!e) e = window.event; this.wndSize = BX.GetWindowScrollPos(); this.wndSize.innerWidth = BX.GetWindowInnerSize().innerWidth; this.pos = BX.pos(this.DIV); this.x = e.clientX + this.wndSize.scrollLeft; this.y = e.clientY + this.wndSize.scrollTop; this.dx = this.pos.left + this.pos.width - this.x; this.dy = this.pos.top + this.pos.height - this.y; this.dw = this.pos.width - parseInt(this.DIV.style.width); BX.bind(document, "mousemove", BX.proxy(this.__moveResize, this)); BX.bind(document, "mouseup", BX.proxy(this.__stopResize, this)); if(document.body.setCapture) document.body.setCapture(); document.onmousedown = BX.False; var b = document.body; b.ondrag = b.onselectstart = BX.False; b.style.MozUserSelect = this.DIV.style.MozUserSelect = 'none'; b.style.cursor = 'se-resize'; BX.onCustomEvent(this, 'onWindowResizeStart'); return true; }; BX.CWindow.prototype.__moveResize = function(e) { if(!e) e = window.event; var windowScroll = BX.GetWindowScrollPos(); var x = e.clientX + windowScroll.scrollLeft; var y = e.clientY + windowScroll.scrollTop; if(this.x == x && this.y == y) return; this.Resize(x, y); this.x = x; this.y = y; }; BX.CWindow.prototype.__stopResize = function() { if(document.body.releaseCapture) document.body.releaseCapture(); BX.unbind(document, "mousemove", BX.proxy(this.__moveResize, this)); BX.unbind(document, "mouseup", BX.proxy(this.__stopResize, this)); document.onmousedown = null; var b = document.body; b.ondrag = b.onselectstart = null; b.style.MozUserSelect = this.DIV.style.MozUserSelect = ''; b.style.cursor = ''; BX.onCustomEvent(this, 'onWindowResizeFinished') }; BX.CWindow.prototype.SetClose = function(elem) { BX.bind(elem, 'click', BX.proxy(this.Close, this)); this.ELEMENTS.close.push(elem); }; BX.CWindow.prototype.SetDraggable = function(elem) { BX.bind(elem, 'mousedown', BX.proxy(this.__startDrag, this)); elem.style.cursor = 'move'; this.ELEMENTS.draggable.push(elem); this.SETTINGS.draggable = true; }; BX.CWindow.prototype.Move = function(x, y) { var dxShadow = 1; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! var left = parseInt(this.DIV.style.left)+x; var top = parseInt(this.DIV.style.top)+y; if (this.SETTINGS.drag_restrict) { //Left side if (left < 0) left = 0; //Right side var scrollSize = BX.GetWindowScrollSize(); var floatWidth = this.DIV.offsetWidth; var floatHeight = this.DIV.offsetHeight; if (left > (scrollSize.scrollWidth - floatWidth - dxShadow)) left = scrollSize.scrollWidth - floatWidth - dxShadow; var scrollHeight = Math.max( document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight, scrollSize.scrollHeight ); if (top > (scrollHeight - floatHeight - dxShadow)) top = scrollHeight - floatHeight - dxShadow; //Top side if (top < 0) top = 0; } this.DIV.style.left = left+'px'; this.DIV.style.top = top+'px'; //this.AdjustShadow(div); }; BX.CWindow.prototype.__startDrag = function(e) { if (!this.SETTINGS.draggable) return false; if(!e) e = window.event; this.x = e.clientX + document.body.scrollLeft; this.y = e.clientY + document.body.scrollTop; this.__bWasDragged = false; BX.bind(document, "mousemove", BX.proxy(this.__moveDrag, this)); BX.bind(document, "mouseup", BX.proxy(this.__stopDrag, this)); if(document.body.setCapture) document.body.setCapture(); document.onmousedown = BX.False; var b = document.body; b.ondrag = b.onselectstart = BX.False; b.style.MozUserSelect = this.DIV.style.MozUserSelect = 'none'; b.style.cursor = 'move'; return BX.PreventDefault(e); }; BX.CWindow.prototype.__moveDrag = function(e) { if(!e) e = window.event; var x = e.clientX + document.body.scrollLeft; var y = e.clientY + document.body.scrollTop; if(this.x == x && this.y == y) return; this.Move((x - this.x), (y - this.y)); this.x = x; this.y = y; if (!this.__bWasDragged) { BX.onCustomEvent(this, 'onWindowDragStart'); this.__bWasDragged = true; BX.bind(BX.proxy_context, "click", BX.PreventDefault); } BX.onCustomEvent(this, 'onWindowDrag'); }; BX.CWindow.prototype.__stopDrag = function(e) { if(document.body.releaseCapture) document.body.releaseCapture(); BX.unbind(document, "mousemove", BX.proxy(this.__moveDrag, this)); BX.unbind(document, "mouseup", BX.proxy(this.__stopDrag, this)); document.onmousedown = null; var b = document.body; b.ondrag = b.onselectstart = null; b.style.MozUserSelect = this.DIV.style.MozUserSelect = ''; b.style.cursor = ''; if (this.__bWasDragged) { BX.onCustomEvent(this, 'onWindowDragFinished'); var _proxy_context = BX.proxy_context; setTimeout(function(){BX.unbind(_proxy_context, "click", BX.PreventDefault)}, 100); this.__bWasDragged = false; } return BX.PreventDefault(e); }; BX.CWindow.prototype.DenyClose = function() { this.denyClose = true; }; BX.CWindow.prototype.AllowClose = function() { this.denyClose = false; }; BX.CWindow.prototype.ShowError = function(str) { BX.onCustomEvent(this, 'onWindowError', [str]); if (this._wait) BX.closeWait(this._wait); window.alert(str); }; BX.CWindow.prototype.__set_msover = function() {this.MOUSEOVER = true;}; BX.CWindow.prototype.__unset_msover = function() {this.MOUSEOVER = false;}; /* dialog window class extends window class */ BX.CWindowDialog = function() { var a = arguments; a[1] = 'dialog'; BX.CWindowDialog.superclass.constructor.apply(this, a); this.DIV.style.top = '10px'; this.OVERLAY = null; }; BX.extend(BX.CWindowDialog, BX.CWindow); BX.CWindowDialog.prototype.__resizeOverlay = function() { var windowSize = BX.GetWindowScrollSize(); this.OVERLAY.style.width = windowSize.scrollWidth + "px"; }; BX.CWindowDialog.prototype.CreateOverlay = function(zIndex) { if (null == this.OVERLAY) { var windowSize = BX.GetWindowScrollSize(); // scrollHeight in BX.GetWindowScrollSize may be incorrect var scrollHeight = Math.max( document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight, document.body.clientHeight, document.documentElement.clientHeight, windowSize.scrollHeight ); this.OVERLAY = document.body.appendChild(BX.create("DIV", { style: { position: 'absolute', top: '0px', left: '0px', zIndex: zIndex || (parseInt(this.DIV.style.zIndex)-2), width: windowSize.scrollWidth + "px", height: scrollHeight + "px" } })); var component = BX.ZIndexManager.getComponent(this.DIV); if (component) { component.setOverlay(this.OVERLAY); } } return this.OVERLAY; }; BX.CWindowDialog.prototype.Show = function() { BX.CWindowDialog.superclass.Show.apply(this, arguments); this.CreateOverlay(); this.OVERLAY.style.display = 'block'; BX.unbind(window, 'resize', BX.proxy(this.__resizeOverlay, this)); BX.bind(window, 'resize', BX.proxy(this.__resizeOverlay, this)); }; BX.CWindowDialog.prototype.onUnRegister = function(clean) { BX.CWindowDialog.superclass.onUnRegister.apply(this, arguments); if (this.clean) { if (this.OVERLAY.parentNode) this.OVERLAY.parentNode.removeChild(this.OVERLAY); } else { this.OVERLAY.style.display = 'none'; } BX.unbind(window, 'resize', BX.proxy(this.__resizeOverlay, this)); }; /* standard bitrix dialog extends BX.CWindowDialog */ /* arParams = { ( title: 'dialog title', head: 'head block html', content: 'dialog content', icon: 'head icon classname or filename', resize_id: 'some id to save resize information'// useless if resizable = false ) or ( content_url: url to content load loaded content scripts can use BX.WindowManager.Get() to get access to the current window object ) height: window_height_in_pixels, width: window_width_in_pixels, draggable: true|false, resizable: true|false, min_height: min_window_height_in_pixels, // useless if resizable = false min_width: min_window_width_in_pixels, // useless if resizable = false buttons: [ 'html_code', BX.CDialog.btnSave, BX.CDialog.btnCancel, BX.CDialog.btnClose ] } */ BX.CDialog = function(arParams) { BX.CDialog.superclass.constructor.apply(this); this._sender = 'core_window_cdialog'; this.PARAMS = arParams || {}; for (var i in this.defaultParams) { if (typeof this.PARAMS[i] == 'undefined') this.PARAMS[i] = this.defaultParams[i]; } this.PARAMS.width = (!isNaN(parseInt(this.PARAMS.width))) ? this.PARAMS.width : this.defaultParams['width']; this.PARAMS.height = (!isNaN(parseInt(this.PARAMS.height))) ? this.PARAMS.height : this.defaultParams['height']; if (this.PARAMS.resize_id || this.PARAMS.content_url) { var arSize = BX.WindowManager.getRuntimeWindowSize(this.PARAMS.resize_id || this.PARAMS.content_url); if (arSize) { this.PARAMS.width = arSize.width; this.PARAMS.height = arSize.height; } } BX.addClass(this.DIV, 'bx-core-adm-dialog'); this.DIV.id = 'bx-admin-prefix'; this.PARTS = {}; this.DIV.style.height = null; this.DIV.style.width = null; this.PARTS.TITLEBAR = this.DIV.appendChild(BX.create('DIV', {props: { className: 'bx-core-adm-dialog-head' } })); this.PARTS.TITLE_CONTAINER = this.PARTS.TITLEBAR.appendChild(BX.create('SPAN', { props: {className: 'bx-core-adm-dialog-head-inner'}, text: this.PARAMS.title })); this.PARTS.TITLEBAR_ICONS = this.PARTS.TITLEBAR.appendChild(BX.create('DIV', { props: { className: 'bx-core-adm-dialog-head-icons' }, children: (this.PARAMS.resizable ? [ BX.create('SPAN', {props: {className: 'bx-core-adm-icon-expand', title: BX.message('JS_CORE_WINDOW_EXPAND')}}), BX.create('SPAN', {props: {className: 'bx-core-adm-icon-close', title: BX.message('JS_CORE_WINDOW_CLOSE')}}) ] : [ BX.create('SPAN', {props: {className: 'bx-core-adm-icon-close', title: BX.message('JS_CORE_WINDOW_CLOSE')}}) ]) })); this.PARTS.CONTENT = this.DIV.appendChild(BX.create('DIV', { props: {className: 'bx-core-adm-dialog-content-wrap adm-workarea'} })); this.PARTS.CONTENT_DATA = this.PARTS.CONTENT.appendChild(BX.create('DIV', { props: {className: 'bx-core-adm-dialog-content'}, style: { height: this.PARAMS.height + 'px', width: this.PARAMS.width + 'px' } })); this.PARTS.HEAD = this.PARTS.CONTENT_DATA.appendChild(BX.create('DIV', { props: { className: 'bx-core-adm-dialog-head-block' + (this.PARAMS.icon ? ' ' + this.PARAMS.icon : '') } })); this.SetHead(this.PARAMS.head); this.SetContent(this.PARAMS.content); this.SetTitle(this.PARAMS.title); this.SetClose(this.PARTS.TITLEBAR_ICONS.lastChild); if (this.PARAMS.resizable) { this.SetExpand(this.PARTS.TITLEBAR_ICONS.firstChild); this.SetExpand(this.PARTS.TITLEBAR, 'dblclick'); BX.addCustomEvent(this, 'onWindowExpand', BX.proxy(this.__onexpand, this)); BX.addCustomEvent(this, 'onWindowNarrow', BX.proxy(this.__onexpand, this)); } this.PARTS.FOOT = this.PARTS.BUTTONS_CONTAINER = this.PARTS.CONTENT.appendChild(BX.create('DIV', { props: { className: 'bx-core-adm-dialog-buttons' }, //events: { // 'click': BX.delegateEvent({property:{type: /button|submit/}}, BX.delegate(function() {this.showWait(BX.proxy_context)}, this)) //}, children: this.ShowButtons() } )); if (this.PARAMS.draggable) this.SetDraggable(this.PARTS.TITLEBAR); if (this.PARAMS.resizable) { this.PARTS.RESIZER = this.DIV.appendChild(BX.create('DIV', { props: {className: 'bx-core-resizer'} })); this.SetResize(this.PARTS.RESIZER); this.SETTINGS.min_width = this.PARAMS.min_width; this.SETTINGS.min_height = this.PARAMS.min_height; } this.auth_callback = BX.delegate(function(){ this.PARAMS.content = ''; this.hideNotify(); this.Show(); }, this) }; BX.extend(BX.CDialog, BX.CWindowDialog); BX.CDialog.prototype.defaultParams = { width: 700, height: 400, min_width: 500, min_height: 300, resizable: true, draggable: true, title: '', icon: '' }; BX.CDialog.prototype.showWait = function(el) { if (BX.type.isElementNode(el) && (el.type == 'button' || el.type == 'submit')) { BX.defer(function(){el.disabled = true})(); var bSave = (BX.hasClass(el, 'adm-btn-save') || BX.hasClass(el, 'adm-btn-save')), pos = BX.pos(el, true); el.bxwaiter = this.PARTS.FOOT.appendChild(BX.create('DIV', { props: {className: 'adm-btn-load-img' + (bSave ? '-green' : '')}, style: { top: parseInt((pos.bottom + pos.top)/2 - 10) + 'px', left: parseInt((pos.right + pos.left)/2 - 10) + 'px' } })); BX.addClass(el, 'adm-btn-load'); this.lastWaitElement = el; return el.bxwaiter; } return null; }; BX.CDialog.prototype.closeWait = function(el) { el = el || this.lastWaitElement; if (BX.type.isElementNode(el)) { if (el.bxwaiter) { if(el.bxwaiter.parentNode) { el.bxwaiter.parentNode.removeChild(el.bxwaiter); } el.bxwaiter = null; } el.disabled = false; BX.removeClass(el, 'adm-btn-load'); if (this.lastWaitElement == el) this.lastWaitElement = null; } }; BX.CDialog.prototype.Authorize = function(arAuthResult) { this.bSkipReplaceContent = true; this.ShowError(BX.message('JSADM_AUTH_REQ')); BX.onCustomEvent(this, 'onWindowError', []); BX.closeWait(); (new BX.CAuthDialog({ content_url: this.PARAMS.content_url, auth_result: arAuthResult, callback: BX.delegate(function(){ if (this.auth_callback) this.auth_callback() }, this) })).Show(); }; BX.CDialog.prototype.ShowError = function(str) { BX.onCustomEvent(this, 'onWindowError', [str]); this.closeWait(); if (this._wait) BX.closeWait(this._wait); this.Notify(str, true); }; BX.CDialog.prototype.__expandGetSize = function() { var pDocElement = BX.GetDocElement(); pDocElement.style.overflow = 'hidden'; var wndSize = BX.GetWindowInnerSize(); pDocElement.scrollTop = 0; this.DIV.style.top = '-' + this.dxShadow + 'px'; this.DIV.style.left = '-' + this.dxShadow + 'px'; return { width: (wndSize.innerWidth - parseInt(BX.style(this.PARTS.CONTENT, 'padding-right')) - parseInt(BX.style(this.PARTS.CONTENT, 'padding-left'))) + this.dxShadow, height: (wndSize.innerHeight - this.PARTS.TITLEBAR.offsetHeight - this.PARTS.FOOT.offsetHeight - parseInt(BX.style(this.PARTS.CONTENT, 'padding-top')) - parseInt(BX.style(this.PARTS.CONTENT, 'padding-bottom'))) + this.dxShadow }; }; BX.CDialog.prototype.__expand = function() { var pDocElement = BX.GetDocElement(); this.dxShadow = 2; if (!this.bExpanded) { var wndScroll = BX.GetWindowScrollPos(); this.__expand_settings = { resizable: this.SETTINGS.resizable, draggable: this.SETTINGS.draggable, width: this.PARTS.CONTENT_DATA.style.width, height: this.PARTS.CONTENT_DATA.style.height, left: this.DIV.style.left, top: this.DIV.style.top, scrollTop: wndScroll.scrollTop, scrollLeft: wndScroll.scrollLeft, overflow: BX.style(pDocElement, 'overflow') }; this.SETTINGS.resizable = false; this.SETTINGS.draggable = false; var pos = this.__expandGetSize(); this.PARTS.CONTENT_DATA.style.width = pos.width + 'px'; this.PARTS.CONTENT_DATA.style.height = pos.height + 'px'; window.scrollTo(0,0); pDocElement.style.overflow = 'hidden'; this.bExpanded = true; BX.onCustomEvent(this, 'onWindowExpand'); BX.onCustomEvent(this, 'onWindowResize'); BX.onCustomEvent(this, 'onWindowResizeExt', [{'width': pos.width, 'height': pos.height}]); BX.bind(window, 'resize', BX.proxy(this.__expand_onresize, this)); } else { BX.unbind(window, 'resize', BX.proxy(this.__expand_onresize, this)); this.SETTINGS.resizable = this.__expand_settings.resizable; this.SETTINGS.draggable = this.__expand_settings.draggable; pDocElement.style.overflow = this.__expand_settings.overflow; this.DIV.style.top = this.__expand_settings.top; this.DIV.style.left = this.__expand_settings.left; this.PARTS.CONTENT_DATA.style.width = this.__expand_settings.width; this.PARTS.CONTENT_DATA.style.height = this.__expand_settings.height; window.scrollTo(this.__expand_settings.scrollLeft, this.__expand_settings.scrollTop); this.bExpanded = false; BX.onCustomEvent(this, 'onWindowNarrow'); BX.onCustomEvent(this, 'onWindowResize'); BX.onCustomEvent(this, 'onWindowResizeExt', [{'width': parseInt(this.__expand_settings.width), 'height': parseInt(this.__expand_settings.height)}]); } }; BX.CDialog.prototype.__expand_onresize = function() { var pos = this.__expandGetSize(); this.PARTS.CONTENT_DATA.style.width = pos.width + 'px'; this.PARTS.CONTENT_DATA.style.height = pos.height + 'px'; BX.onCustomEvent(this, 'onWindowResize'); BX.onCustomEvent(this, 'onWindowResizeExt', [pos]); }; BX.CDialog.prototype.__onexpand = function() { var ob = this.PARTS.TITLEBAR_ICONS.firstChild; ob.className = BX.toggle(ob.className, ['bx-core-adm-icon-expand', 'bx-core-adm-icon-narrow']); ob.title = BX.toggle(ob.title, [BX.message('JS_CORE_WINDOW_EXPAND'), BX.message('JS_CORE_WINDOW_NARROW')]); if (this.PARTS.RESIZER) { this.PARTS.RESIZER.style.display = this.bExpanded ? 'none' : 'block'; } }; BX.CDialog.prototype.__startResize = function(e) { if (!this.SETTINGS.resizable) return false; if(!e) e = window.event; this.wndSize = BX.GetWindowScrollPos(); this.wndSize.innerWidth = BX.GetWindowInnerSize().innerWidth; this.pos = BX.pos(this.PARTS.CONTENT_DATA); this.x = e.clientX + this.wndSize.scrollLeft; this.y = e.clientY + this.wndSize.scrollTop; this.dx = this.pos.left + this.pos.width - this.x; this.dy = this.pos.top + this.pos.height - this.y; // TODO: suspicious this.dw = this.pos.width - parseInt(this.PARTS.CONTENT_DATA.style.width) + parseInt(BX.style(this.PARTS.CONTENT, 'padding-right')); BX.bind(document, "mousemove", BX.proxy(this.__moveResize, this)); BX.bind(document, "mouseup", BX.proxy(this.__stopResize, this)); if(document.body.setCapture) document.body.setCapture(); document.onmousedown = BX.False; var b = document.body; b.ondrag = b.onselectstart = BX.False; b.style.MozUserSelect = this.DIV.style.MozUserSelect = 'none'; b.style.cursor = 'se-resize'; BX.onCustomEvent(this, 'onWindowResizeStart'); return true; }; BX.CDialog.prototype.Resize = function(x, y) { var new_width = Math.max(x - this.pos.left + this.dx, this.SETTINGS.min_width); var new_height = Math.max(y - this.pos.top + this.dy, this.SETTINGS.min_height); if (this.SETTINGS.resize_restrict) { var scrollSize = BX.GetWindowScrollSize(); if (this.pos.left + new_width > scrollSize.scrollWidth - this.dw) new_width = scrollSize.scrollWidth - this.pos.left - this.dw; } this.PARTS.CONTENT_DATA.style.width = new_width + 'px'; this.PARTS.CONTENT_DATA.style.height = new_height + 'px'; BX.onCustomEvent(this, 'onWindowResize'); BX.onCustomEvent(this, 'onWindowResizeExt', [{'height': new_height, 'width': new_width}]); }; BX.CDialog.prototype.SetSize = function(obSize) { this.PARTS.CONTENT_DATA.style.width = obSize.width + 'px'; this.PARTS.CONTENT_DATA.style.height = obSize.height + 'px'; BX.onCustomEvent(this, 'onWindowResize'); BX.onCustomEvent(this, 'onWindowResizeExt', [obSize]); }; BX.CDialog.prototype.GetParameters = function(form_name) { var form = this.GetForm(); if(!form) return ""; var i, s = ""; var n = form.elements.length; var delim = ''; for(i=0; i<n; i++) { if (s != '') delim = '&'; var el = form.elements[i]; if (el.disabled) continue; switch(el.type.toLowerCase()) { case 'text': case 'textarea': case 'password': case 'hidden': if (null == form_name && el.name.substr(el.name.length-4) == '_alt' && form.elements[el.name.substr(0, el.name.length-4)]) break; s += delim + el.name + '=' + BX.util.urlencode(el.value); break; case 'radio': if(el.checked) s += delim + el.name + '=' + BX.util.urlencode(el.value); break; case 'checkbox': s += delim + el.name + '=' + BX.util.urlencode(el.checked ? 'Y':'N'); break; case 'select-one': var val = ""; if (null == form_name && form.elements[el.name + '_alt'] && el.selectedIndex == 0) val = form.elements[el.name+'_alt'].value; else val = el.value; s += delim + el.name + '=' + BX.util.urlencode(val); break; case 'select-multiple': var j, bAdded = false; var l = el.options.length; for (j=0; j<l; j++) { if (el.options[j].selected) { s += delim + el.name + '=' + BX.util.urlencode(el.options[j].value); bAdded = true; } } if (!bAdded) s += delim + el.name + '='; break; default: break; } } return s; }; BX.CDialog.prototype.PostParameters = function(params) { var url = this.PARAMS.content_url; if (null == params) params = ""; params += (params == "" ? "" : "&") + "bxsender=" + this._sender; var index = url.indexOf('?'); if (index == -1) url += '?' + params; else url = url.substring(0, index) + '?' + params + "&" + url.substring(index+1); BX.showWait(); this.auth_callback = BX.delegate(function(){ this.hideNotify(); this.PostParameters(params); }, this); BX.ajax.Setup({skipAuthCheck:true},true); BX.ajax.post(url, this.GetParameters(), BX.delegate(function(result) { BX.closeWait(); if (!this.bSkipReplaceContent) { this.ClearButtons(); // buttons are appended during form reload, so we should clear footer this.SetContent(result); this.Show(true); } this.bSkipReplaceContent = false; }, this)); }; BX.CDialog.prototype.Submit = function(params, url) { var FORM = this.GetForm(); if (FORM) { FORM.onsubmit = null; FORM.method = 'POST'; if (!FORM.action || url) { url = url || this.PARAMS.content_url; if (null != params) { var index = url.indexOf('?'); if (index == -1) url += '?' + params; else url = url.substring(0, index) + '?' + params + "&" + url.substring(index+1); } FORM.action = url; } if (!FORM._bxsender) { FORM._bxsender = FORM.appendChild(BX.create('INPUT', { attrs: { type: 'hidden', name: 'bxsender', value: this._sender } })); } this._wait = BX.showWait(); this.auth_callback = BX.delegate(function(){ this.hideNotify(); this.Submit(params); }, this); BX.ajax.submit(FORM, BX.delegate(function(){this.closeWait()}, this)); } else { window.alert('no form registered!'); } }; BX.CDialog.prototype.GetForm = function() { if (null == this.__form) { var forms = this.PARTS.CONTENT_DATA.getElementsByTagName('FORM'); this.__form = forms[0] ? forms[0] : null; } return this.__form; }; BX.CDialog.prototype.GetRealForm = function() { if (null == this.__rform) { var forms = this.PARTS.CONTENT_DATA.getElementsByTagName('FORM'); this.__rform = forms[1] ? forms[1] : (forms[0] ? forms[0] : null); } return this.__rform; }; BX.CDialog.prototype._checkButton = function(btn) { var arCustomButtons = ['btnSave', 'btnCancel', 'btnClose']; for (var i = 0; i < arCustomButtons.length; i++) { if (this[arCustomButtons[i]] && (btn == this[arCustomButtons[i]])) return arCustomButtons[i]; } return false; }; BX.CDialog.prototype.ShowButtons = function() { var result = []; if (this.PARAMS.buttons) { if (this.PARAMS.buttons.title) this.PARAMS.buttons = [this.PARAMS.buttons]; for (var i=0, len=this.PARAMS.buttons.length; i<len; i++) { if (BX.type.isNotEmptyString(this.PARAMS.buttons[i])) { result.push(this.PARAMS.buttons[i]); } else if (BX.type.isElementNode(this.PARAMS.buttons[i])) { result.push(this.PARAMS.buttons[i]); } else if (this.PARAMS.buttons[i]) { //if (!(this.PARAMS.buttons[i] instanceof BX.CWindowButton)) if (!BX.is_subclass_of(this.PARAMS.buttons[i], BX.CWindowButton)) { var b = this._checkButton(this.PARAMS.buttons[i]); // hack to set links to real CWindowButton object in btnSave etc; this.PARAMS.buttons[i] = new BX.CWindowButton(this.PARAMS.buttons[i]); if (b) this[b] = this.PARAMS.buttons[i]; } result.push(this.PARAMS.buttons[i].Button(this)); } } } return result; }; BX.CDialog.prototype.setAutosave = function () { if (!this.bSetAutosaveDelay) { this.bSetAutosaveDelay = true; setTimeout(BX.proxy(this.setAutosave, this), 10); } }; BX.CDialog.prototype.SetTitle = function(title) { this.PARAMS.title = title; BX.cleanNode(this.PARTS.TITLE_CONTAINER).appendChild(document.createTextNode(this.PARAMS.title)); }; BX.CDialog.prototype.SetHead = function(head) { this.PARAMS.head = BX.util.trim(head); this.PARTS.HEAD.innerHTML = this.PARAMS.head || " "; this.PARTS.HEAD.style.display = this.PARAMS.head ? 'block' : 'none'; this.adjustSize(); }; BX.CDialog.prototype.Notify = function(note, bError, html) { if (!this.PARTS.NOTIFY) { this.PARTS.NOTIFY = this.DIV.insertBefore(BX.create('DIV', { props: {className: 'adm-warning-block'}, children: [ BX.create('SPAN', { props: {className: 'adm-warning-text'} }), BX.create('SPAN', { props: {className: 'adm-warning-icon'} }), BX.create('SPAN', { props: {className: 'adm-warning-close'}, events: {click: BX.proxy(this.hideNotify, this)} }) ] }), this.DIV.firstChild); } if (bError) BX.addClass(this.PARTS.NOTIFY, 'adm-warning-block-red'); else BX.removeClass(this.PARTS.NOTIFY, 'adm-warning-block-red'); if(html !== true) { note = BX.util.htmlspecialchars(note); } this.PARTS.NOTIFY.firstChild.innerHTML = note || ' '; this.PARTS.NOTIFY.firstChild.style.width = (this.PARAMS.width-50) + 'px'; BX.removeClass(this.PARTS.NOTIFY, 'adm-warning-animate'); }; BX.CDialog.prototype.hideNotify = function() { BX.addClass(this.PARTS.NOTIFY, 'adm-warning-animate'); }; BX.CDialog.prototype.__adjustHeadToIcon = function() { if (!this.PARTS.HEAD.offsetHeight) { setTimeout(BX.delegate(this.__adjustHeadToIcon, this), 50); } else { if (this.icon_image && this.icon_image.height && this.icon_image.height > this.PARTS.HEAD.offsetHeight - 5) { this.PARTS.HEAD.style.height = this.icon_image.height + 5 + 'px'; this.adjustSize(); } this.icon_image.onload = null; this.icon_image = null; } }; BX.CDialog.prototype.SetIcon = function(icon_class) { if (this.PARAMS.icon != icon_class) { if (this.PARAMS.icon) BX.removeClass(this.PARTS.HEAD, this.PARAMS.icon); this.PARAMS.icon = icon_class; if (this.PARAMS.icon) { BX.addClass(this.PARTS.HEAD, this.PARAMS.icon); var icon_file = (BX.style(this.PARTS.HEAD, 'background-image') || BX.style(this.PARTS.HEAD, 'backgroundImage')); if (BX.type.isNotEmptyString(icon_file) && icon_file != 'none') { var match = icon_file.match(new RegExp('url\\s*\\(\\s*(\'|"|)(.+?)(\\1)\\s*\\)')); if(match) { icon_file = match[2]; if (BX.type.isNotEmptyString(icon_file)) { this.icon_image = new Image(); this.icon_image.onload = BX.delegate(this.__adjustHeadToIcon, this); this.icon_image.src = icon_file; } } } } } this.adjustSize(); }; BX.CDialog.prototype.SetIconFile = function(icon_file) { this.icon_image = new Image(); this.icon_image.onload = BX.delegate(this.__adjustHeadToIcon, this); this.icon_image.src = icon_file; BX.adjust(this.PARTS.HEAD, {style: {backgroundImage: 'url(' + icon_file + ')', backgroundPosition: 'right 9px'/*'99% center'*/}}); this.adjustSize(); }; /* BUTTON: { title: 'title', 'action': function executed in window object context } BX.CDialog.btnSave || BX.CDialog.btnCancel - standard buttons */ BX.CDialog.prototype.SetButtons = function(a) { if (BX.type.isString(a)) { if (a.length > 0) { this.PARTS.BUTTONS_CONTAINER.innerHTML += a; var btns = this.PARTS.BUTTONS_CONTAINER.getElementsByTagName('INPUT'); if (btns.length > 0) { this.PARAMS.buttons = []; for (var i = 0; i < btns.length; i++) { this.PARAMS.buttons.push(new BX.CWindowButton({btn: btns[i], parentWindow: this})); } } } } else { this.PARAMS.buttons = a; BX.adjust(this.PARTS.BUTTONS_CONTAINER, { children: this.ShowButtons() }); } this.adjustSize(); }; BX.CDialog.prototype.ClearButtons = function() { BX.cleanNode(this.PARTS.BUTTONS_CONTAINER); this.adjustSize(); }; BX.CDialog.prototype.SetContent = function(html) { this.__form = null; if (BX.type.isElementNode(html)) { if (html.parentNode) html.parentNode.removeChild(html); } else if (BX.type.isString(html)) { html = BX.create('DIV', {html: html}); } this.PARAMS.content = html; BX.cleanNode(this.PARTS.CONTENT_DATA); BX.adjust(this.PARTS.CONTENT_DATA, { children: [ this.PARTS.HEAD, BX.create('DIV', { props: { className: 'bx-core-adm-dialog-content-wrap-inner' }, children: [this.PARAMS.content] }) ] }); if (this.PARAMS.content_url && this.GetForm()) { this.__form.submitbtn = this.__form.appendChild(BX.create('INPUT', {props:{type:'submit'},style:{display:'none'}})); this.__form.onsubmit = BX.delegate(this.__submit, this); } }; BX.CDialog.prototype.__submit = function(e) { for (var i=0,len=this.PARAMS.buttons.length; i<len; i++) { if ( this.PARAMS.buttons[i] && ( this.PARAMS.buttons[i].name && /save|apply/i.test(this.PARAMS.buttons[i].name) || this.PARAMS.buttons[i].btn && this.PARAMS.buttons[i].btn.name && /save|apply/i.test(this.PARAMS.buttons[i].btn.name) ) ) { this.PARAMS.buttons[i].emulate(); break; } } return BX.PreventDefault(e); }; BX.CDialog.prototype.SwapContent = function(cont) { cont = BX(cont); BX.cleanNode(this.PARTS.CONTENT_DATA); cont.parentNode.removeChild(cont); this.PARTS.CONTENT_DATA.appendChild(cont); cont.style.display = 'block'; this.SetContent(cont.innerHTML); }; // this method deprecated BX.CDialog.prototype.adjustSize = function() { }; // this method deprecated BX.CDialog.prototype.__adjustSize = function() { }; BX.CDialog.prototype.adjustSizeEx = function() { BX.defer(this.__adjustSizeEx, this)(); }; BX.CDialog.prototype.__adjustSizeEx = function() { var ob = this.PARTS.CONTENT_DATA.firstChild, new_height = 0, marginTop, marginBottom; while (ob) { if (BX.type.isElementNode(ob)) { marginTop = parseInt(BX.style(ob, 'margin-top'), 10); if (isNaN(marginTop)) marginTop = 0; marginBottom = parseInt(BX.style(ob, 'margin-bottom'), 10); if (isNaN(marginBottom)) marginBottom = 0; new_height += ob.offsetHeight + marginTop + marginBottom; } ob = BX.nextSibling(ob); } if (new_height) this.PARTS.CONTENT_DATA.style.height = new_height + 'px'; }; BX.CDialog.prototype.__onResizeFinished = function() { BX.WindowManager.saveWindowSize( this.PARAMS.resize_id || this.PARAMS.content_url, {height: parseInt(this.PARTS.CONTENT_DATA.style.height), width: parseInt(this.PARTS.CONTENT_DATA.style.width)} ); }; BX.CDialog.prototype.Show = function(bNotRegister) { if ((!this.PARAMS.content) && this.PARAMS.content_url && BX.ajax && !bNotRegister) { var wait = BX.showWait(); BX.WindowManager.currently_loaded = this; this.CreateOverlay(); this.OVERLAY.style.display = 'block'; this.OVERLAY.className = 'bx-core-dialog-overlay'; var post_data = '', method = 'GET'; if (this.PARAMS.content_post) { post_data = this.PARAMS.content_post; method = 'POST'; } var url = this.PARAMS.content_url + (this.PARAMS.content_url.indexOf('?')<0?'?':'&')+'bxsender=' + this._sender; this.auth_callback = BX.delegate(function(){ this.PARAMS.content = ''; this.hideNotify(); this.Show(); }, this); BX.ajax({ method: method, dataType: 'html', url: url, data: post_data, skipAuthCheck: true, onsuccess: BX.delegate(function(data) { BX.closeWait(null, wait); this.SetContent(data || ' '); this.Show(); }, this) }); } else { BX.WindowManager.currently_loaded = null; BX.CDialog.superclass.Show.apply(this, arguments); this.adjustPos(); this.OVERLAY.className = 'bx-core-dialog-overlay'; this.__adjustSize(); BX.removeCustomEvent(this, 'onWindowResize', BX.proxy(this.__adjustSize, this)); BX.addCustomEvent(this, 'onWindowResize', BX.proxy(this.__adjustSize, this)); if (this.PARAMS.resizable && (this.PARAMS.content_url || this.PARAMS.resize_id)) { BX.removeCustomEvent(this, 'onWindowResizeFinished', BX.proxy(this.__onResizeFinished, this)); BX.addCustomEvent(this, 'onWindowResizeFinished', BX.proxy(this.__onResizeFinished, this)); } } }; BX.CDialog.prototype.GetInnerPos = function() { return {'width': parseInt(this.PARTS.CONTENT_DATA.style.width), 'height': parseInt(this.PARTS.CONTENT_DATA.style.height)}; }; BX.CDialog.prototype.adjustPos = function() { if (!this.bExpanded) { var currentWindow = window; var topWindow = BX.PageObject.getRootWindow(); if (topWindow.BX.SidePanel && topWindow.BX.SidePanel.Instance && topWindow.BX.SidePanel.Instance.getTopSlider()) { currentWindow = topWindow.BX.SidePanel.Instance.getTopSlider().getWindow(); } var windowSize = currentWindow.BX.GetWindowInnerSize(); var windowScroll = currentWindow.BX.GetWindowScrollPos(); var style = { left: parseInt(windowScroll.scrollLeft + windowSize.innerWidth / 2 - parseInt(this.DIV.offsetWidth) / 2) + 'px', top: Math.max(parseInt(windowScroll.scrollTop + windowSize.innerHeight / 2 - parseInt(this.DIV.offsetHeight) / 2), 0) + 'px' }; BX.adjust(this.DIV, { style: style }); } }; BX.CDialog.prototype.GetContent = function () {return this.PARTS.CONTENT_DATA}; BX.CDialog.prototype.btnSave = BX.CDialog.btnSave = { title: BX.message('JS_CORE_WINDOW_SAVE'), id: 'savebtn', name: 'savebtn', className: BX.browser.IsIE() && BX.browser.IsDoctype() && !BX.browser.IsIE10() ? '' : 'adm-btn-save', action: function () { this.disableUntilError(); this.parentWindow.PostParameters(); } }; BX.CDialog.prototype.btnCancel = BX.CDialog.btnCancel = { title: BX.message('JS_CORE_WINDOW_CANCEL'), id: 'cancel', name: 'cancel', action: function () { this.parentWindow.Close(); } }; BX.CDialog.prototype.btnClose = BX.CDialog.btnClose = { title: BX.message('JS_CORE_WINDOW_CLOSE'), id: 'close', name: 'close', action: function () { this.parentWindow.Close(); } }; /* special child for admin forms loaded into public page */ BX.CAdminDialog = function(arParams) { BX.CAdminDialog.superclass.constructor.apply(this, arguments); this._sender = 'core_window_cadmindialog'; BX.addClass(this.DIV, 'bx-core-adm-admin-dialog'); this.PARTS.CONTENT.insertBefore(this.PARTS.HEAD, this.PARTS.CONTENT.firstChild); this.PARTS.HEAD.className = 'bx-core-adm-dialog-tabs'; }; BX.extend(BX.CAdminDialog, BX.CDialog); BX.CAdminDialog.prototype.SetHead = function() { BX.CAdminDialog.superclass.SetHead.apply(this, arguments); if (this.PARTS.HEAD.firstChild && BX.type.isElementNode(this.PARTS.HEAD.firstChild)) { var ob = this.PARTS.HEAD.firstChild, new_width = 0, marginLeft = 0, marginRight = 0; while (ob) { if (BX.type.isElementNode(ob)) { marginLeft = parseInt(BX.style(ob, 'margin-left'), 10); if (isNaN(marginLeft)) marginLeft = 0; marginRight = parseInt(BX.style(ob, 'margin-right'), 10); if (isNaN(marginRight)) marginRight = 0; new_width += ob.offsetWidth + marginLeft + marginRight; } ob = BX.nextSibling(ob); } this.SETTINGS.min_width = Math.max(new_width, this.SETTINGS.min_width) - 2; if (this.PARAMS.width < this.SETTINGS.min_width) { BX.adjust(this.PARTS.CONTENT_DATA, { style: { width: this.SETTINGS.min_width + 'px' } }); } } }; BX.CAdminDialog.prototype.SetContent = function(html) { this.__form = null; if (BX.type.isElementNode(html)) { if (html.parentNode) html.parentNode.removeChild(html); } this.PARAMS.content = html; BX.cleanNode(this.PARTS.CONTENT_DATA); BX.adjust(this.PARTS.CONTENT_DATA, { children: [ this.PARAMS.content || ' ' ] }); if (this.PARAMS.content_url && this.GetForm()) { this.__form.appendChild(BX.create('INPUT', {props:{type:'submit'},style:{display:'none'}})); this.__form.onsubmit = BX.delegate(this.__submit, this); } }; BX.CAdminDialog.prototype.__expandGetSize = function() { var res = BX.CAdminDialog.superclass.__expandGetSize.apply(this, arguments); res.width -= parseInt(BX.style(this.PARTS.CONTENT_DATA, 'padding-right')) + parseInt(BX.style(this.PARTS.CONTENT_DATA, 'padding-left')); res.height -= parseInt(BX.style(this.PARTS.CONTENT_DATA, 'padding-top')) + parseInt(BX.style(this.PARTS.CONTENT_DATA, 'padding-bottom')); res.height -= this.PARTS.HEAD.offsetHeight; return res; }; BX.CAdminDialog.prototype.Submit = function() { var FORM = this.GetForm(); if (FORM && !FORM['bxpublic'] && !/bxpublic=/.test(FORM.action)) { FORM.appendChild(BX.create('INPUT', { props: { type: 'hidden', name: 'bxpublic', value: 'Y' } })); } return BX.CAdminDialog.superclass.Submit.apply(this, arguments); }; BX.CAdminDialog.prototype.btnSave = BX.CAdminDialog.btnSave = { title: BX.message('JS_CORE_WINDOW_SAVE'), id: 'savebtn', name: 'savebtn', className: 'adm-btn-save', action: function () { this.disableUntilError(); this.parentWindow.Submit(); } }; BX.CAdminDialog.btnCancel = BX.CAdminDialog.superclass.btnCancel; BX.CAdminDialog.btnClose = BX.CAdminDialog.superclass.btnClose; BX.CDebugDialog = function(arParams) { BX.CDebugDialog.superclass.constructor.apply(this, arguments); }; BX.extend(BX.CDebugDialog, BX.CDialog); BX.CDebugDialog.prototype.ShowDetails = function(div_id) { var div = BX(div_id); if (div) { if (this.div_detail_current) this.div_detail_current.style.display = 'none'; div.style.display = 'block'; this.div_detail_current = div; } }; BX.CDebugDialog.prototype.SetContent = function(html) { if (!html) return; var arHtml = html.split('#DIVIDER#'); if (arHtml.length > 1) { this.PARAMS.content = arHtml[1]; this.PARTS.CONTENT_DATA.style.overflow = 'hidden'; BX.CDebugDialog.superclass.SetContent.apply(this, [arHtml[1]]); this.PARTS.CONTENT_INNER = this.PARTS.CONTENT_DATA.firstChild.nextSibling; this.PARTS.CONTENT_TOP = this.PARTS.CONTENT_DATA.insertBefore(BX.create('DIV', { props: { className: 'bx-debug-content-top' }, html: arHtml[0] }), this.PARTS.CONTENT_INNER); this.PARTS.CONTENT_INNER.style.overflow = 'auto'; } else { BX.CDebugDialog.superclass.SetContent.apply(this, arguments); } }; BX.CDebugDialog.prototype.__adjustSize = function() { BX.CDebugDialog.superclass.__adjustSize.apply(this, arguments); if (this.PARTS.CONTENT_TOP) { var new_height = this.PARTS.CONTENT_DATA.offsetHeight - this.PARTS.HEAD.offsetHeight - this.PARTS.CONTENT_TOP.offsetHeight - 38; if (new_height > 0) { this.PARTS.CONTENT_INNER.style.height = new_height + 'px'; } } }; /* class for dialog window with editors */ BX.CEditorDialog = function(arParams) { BX.CEditorDialog.superclass.constructor.apply(this, arguments); BX.removeClass(this.PARTS.CONTENT, 'bx-core-adm-dialog-content-wrap'); BX.removeClass(this.PARTS.CONTENT_DATA, 'bx-core-adm-dialog-content'); BX.removeClass(this.PARTS.CONTENT_DATA.lastChild, 'bx-core-adm-dialog-content-wrap-inner'); BX.removeClass(this.PARTS.BUTTONS_CONTAINER, 'bx-core-adm-dialog-buttons'); BX.addClass(this.PARTS.CONTENT, 'bx-core-editor-dialog-content-wrap'); BX.addClass(this.PARTS.CONTENT_DATA, 'bx-core-editor-dialog-content'); BX.addClass(this.PARTS.BUTTONS_CONTAINER, 'bx-core-editor-dialog-buttons'); }; BX.extend(BX.CEditorDialog, BX.CDialog); BX.CEditorDialog.prototype.SetContent = function() { BX.CEditorDialog.superclass.SetContent.apply(this, arguments); BX.removeClass(this.PARTS.CONTENT_DATA.lastChild, 'bx-core-adm-dialog-content-wrap-inner'); }; /* class for wizards in admin section */ BX.CWizardDialog = function(arParams) { BX.CWizardDialog.superclass.constructor.apply(this, arguments); BX.removeClass(this.PARTS.CONTENT, 'bx-core-adm-dialog-content-wrap'); BX.removeClass(this.PARTS.CONTENT_DATA, 'bx-core-adm-dialog-content'); BX.removeClass(this.PARTS.CONTENT_DATA.lastChild, 'bx-core-adm-dialog-content-wrap-inner'); BX.removeClass(this.PARTS.BUTTONS_CONTAINER, 'bx-core-adm-dialog-buttons'); BX.addClass(this.PARTS.CONTENT, 'bx-core-wizard-dialog-content-wrap'); }; BX.extend(BX.CWizardDialog, BX.CDialog); /* class for auth dialog */ BX.CAuthDialog = function(arParams) { arParams.resizable = false; arParams.width = 350; arParams.height = 200; arParams.buttons = [this.btnSave]; BX.CAuthDialog.superclass.constructor.apply(this, arguments); this._sender = 'core_window_cauthdialog'; BX.addClass(this.DIV, 'bx-core-auth-dialog'); BX.AUTHAGENT = this; }; BX.extend(BX.CAuthDialog, BX.CDialog); BX.CAuthDialog.prototype.btnSave = BX.CAuthDialog.btnSave = { title: BX.message('JS_CORE_WINDOW_AUTH'), id: 'savebtn', name: 'savebtn', className: 'adm-btn-save', action: function () { this.disableUntilError(); this.parentWindow.Submit('', this.parentWindow.PARAMS.content_url); } }; BX.CAuthDialog.prototype.SetError = function(error) { BX.closeWait(); if (!!error) this.ShowError(error.MESSAGE || error); }; BX.CAuthDialog.prototype.setAuthResult = function(result) { BX.closeWait(); if (result === false) { this.Close(); if (this.PARAMS.callback) this.PARAMS.callback(); } else { this.SetError(result); } }; /* MENU CLASSES */ BX.CWindowFloat = function(node) { BX.CWindowFloat.superclass.constructor.apply(this, [node, 'float']); this.SETTINGS.resizable = false; }; BX.extend(BX.CWindowFloat, BX.CWindow); BX.CWindowFloat.prototype.adjustPos = function() { if (this.PARAMS.parent) this.adjustToNode(); else if (this.PARAMS.x && this.PARAMS.y) this.adjustToPos([this.PARAMS.x, this.PARAMS.y]); }; BX.CWindowFloat.prototype.adjustToPos = function(pos) { this.DIV.style.left = parseInt(pos[0]) + 'px'; this.DIV.style.top = parseInt(pos[1]) + 'px'; }; BX.CWindowFloat.prototype.adjustToNodeGetPos = function() { return BX.pos(this.PARAMS.parent); }; BX.CWindowFloat.prototype.adjustToNode = function(el) { el = el || this.PARAMS.parent; this.PARAMS.parent = BX(el); if (this.PARAMS.parent) { var pos = this.adjustToNodeGetPos(); this.DIV.style.top = pos.top + 'px';//(pos.top - 26) + 'px'; this.DIV.style.left = pos.left + 'px'; this.PARAMS.parent.OPENER = this; } }; BX.CWindowFloat.prototype.Show = function() { this.adjustToPos([-1000, -1000]); BX.CWindowFloat.superclass.Show.apply(this, arguments); this.adjustPos(); }; /* menu opener class */ /* { DOMNode DIV, BX.CMenu or Array MENU, TYPE = 'hover' | 'click', TIMEOUT: 1000 ATTACH_MODE: 'top' | 'right' ACTIVE_CLASS: className for opener element when menu is opened } */ BX.COpener = function(arParams) { this.PARAMS = arParams || {}; this.MENU = arParams.MENU || []; this.DIV = arParams.DIV; this.ATTACH = arParams.ATTACH || arParams.DIV; this.ATTACH_MODE = arParams.ATTACH_MODE || 'bottom'; this.ACTIVE_CLASS = arParams.ACTIVE_CLASS || ''; this.PUBLIC_FRAME = arParams.PUBLIC_FRAME || 0; this.LEVEL = arParams.LEVEL || 0; this.CLOSE_ON_CLICK = typeof arParams.CLOSE_ON_CLICK != 'undefined' ? !!arParams.CLOSE_ON_CLICK : true; this.ADJUST_ON_CLICK = typeof arParams.ADJUST_ON_CLICK != 'undefined' ? !!arParams.ADJUST_ON_CLICK : true; this.TYPE = this.PARAMS.TYPE == 'hover' ? 'hover' : 'click'; this._openTimeout = null; if (this.PARAMS.TYPE == 'hover' && arParams.TIMEOUT !== 0) this.TIMEOUT = arParams.TIMEOUT || 1000; else this.TIMEOUT = 0; this.bMenuInit = false; if (!!this.PARAMS.MENU_URL) { this.bMenuLoaded = false; this.bMenuLoading = false; this.MENU = [{ TEXT: BX.message('JS_CORE_LOADING'), CLOSE_ON_CLICK: false }]; if (this.PARAMS.MENU_PRELOAD) { BX.defer(this.Load, this)(); } } BX.ready(BX.defer(this.Init, this)); }; BX.COpener.prototype.Init = function() { this.DIV = BX(this.DIV); switch (this.TYPE) { case 'hover': BX.bind(this.DIV, 'mouseover', BX.proxy(this.Open, this)); BX.bind(this.DIV, 'click', BX.proxy(this.Toggle, this)); break; case 'click': BX.bind(this.DIV, 'click', BX.proxy(this.Toggle, this)); break; } //BX.bind(window, 'scroll', BX.delegate(this.__close_immediately, this)); //this.bMenuInit = false; }; BX.COpener.prototype.Load = function() { if (this.PARAMS.MENU_URL && !this.bMenuLoaded) { if (!this.bMenuLoading) { var url = this.PARAMS.MENU_URL; if (url.indexOf('sessid=') <= 0) url += (url.indexOf('?') > 0 ? '&' : '?') + 'sessid=' + BX.bitrix_sessid(); this.bMenuLoading = true; BX.ajax.loadJSON(url, BX.proxy(this.SetMenu, this), BX.proxy(this.LoadFailed, this)); } } }; BX.COpener.prototype.SetMenu = function(menu) { this.bMenuLoaded = true; this.bMenuLoading = false; if (this.bMenuInit) { this.MENU.setItems(menu); } else { this.MENU = menu; } }; BX.COpener.prototype.LoadFailed = function(type, error) { this.bMenuLoading = false; this.SetMenu([{ TEXT: BX.message('JS_CORE_NO_DATA'), CLOSE_ON_CLICK: true }]); BX.debug(arguments); }; BX.COpener.prototype.checkAdminMenu = function() { if (document.documentElement.id == 'bx-admin-prefix') return true; return !!BX.findParent(this.DIV, {property: {id: 'bx-admin-prefix'}}); }; BX.COpener.prototype.Toggle = function(e) { this.__clear_timeout(); if (!this.bMenuInit || !this.MENU.visible()) { var t = this.TIMEOUT; this.TIMEOUT = 0; this.Open(e); this.TIMEOUT = t; } else { this.MENU.Close(); } return !!(e||window.event) && BX.PreventDefault(e); }; BX.COpener.prototype.GetMenu = function() { if (!this.bMenuInit) { if (BX.type.isArray(this.MENU)) { this.MENU = new BX.CMenu({ ITEMS: this.MENU, ATTACH_MODE: this.ATTACH_MODE, SET_ID: this.checkAdminMenu() ? 'bx-admin-prefix' : '', CLOSE_ON_CLICK: !!this.CLOSE_ON_CLICK, ADJUST_ON_CLICK: !!this.ADJUST_ON_CLICK, PUBLIC_FRAME: !!this.PUBLIC_FRAME, LEVEL: this.LEVEL, parent: BX(this.DIV), parent_attach: BX(this.ATTACH) }); if (this.LEVEL > 0) { BX.bind(this.MENU.DIV, 'mouseover', BX.proxy(this._on_menu_hover, this)); BX.bind(this.MENU.DIV, 'mouseout', BX.proxy(this._on_menu_hout, this)); } } BX.addCustomEvent(this.MENU, 'onMenuOpen', BX.proxy(this.handler_onopen, this)); BX.addCustomEvent(this.MENU, 'onMenuClose', BX.proxy(this.handler_onclose, this)); BX.addCustomEvent('onMenuItemHover', BX.proxy(this.handler_onover, this)); this.bMenuInit = true; } return this.MENU; }; BX.COpener.prototype.Open = function() { this.GetMenu(); this.bOpen = true; this.__clear_timeout(); if (this.TIMEOUT > 0) { BX.bind(this.DIV, 'mouseout', BX.proxy(this.__clear_timeout, this)); this._openTimeout = setTimeout(BX.proxy(this.__open, this), this.TIMEOUT); } else { this.__open(); } if (!!this.PARAMS.MENU_URL && !this.bMenuLoaded) { this._loadTimeout = setTimeout(BX.proxy(this.Load, this), parseInt(this.TIMEOUT/2)); } return true; }; BX.COpener.prototype.__clear_timeout = function() { if (!!this._openTimeout) clearTimeout(this._openTimeout); if (!!this._loadTimeout) clearTimeout(this._loadTimeout); BX.unbind(this.DIV, 'mouseout', BX.proxy(this.__clear_timeout, this)); }; BX.COpener.prototype._on_menu_hover = function() { this.bMenuHover = true; this.__clear_timeout(); if (this.ACTIVE_CLASS) BX.addClass(this.DIV, this.ACTIVE_CLASS); }; BX.COpener.prototype._on_menu_hout = function() { this.bMenuHover = false; }; BX.COpener.prototype.handler_onover = function(level, opener) { if (this.bMenuHover) return; if (opener != this && level == this.LEVEL-1 && this.ACTIVE_CLASS) { BX.removeClass(this.DIV, this.ACTIVE_CLASS); } if (this.bMenuInit && level <= this.LEVEL-1 && this.MENU.visible()) { if (opener != this) { this.__clear_timeout(); this._openTimeout = setTimeout(BX.proxy(this.Close, this), this.TIMEOUT); } } }; BX.COpener.prototype.handler_onopen = function() { this.bOpen = true; if (this.ACTIVE_CLASS) BX.addClass(this.DIV, this.ACTIVE_CLASS); BX.defer(function() { BX.onCustomEvent(this, 'onOpenerMenuOpen'); }, this)(); }; BX.COpener.prototype.handler_onclose = function() { this.bOpen = false; BX.onCustomEvent(this, 'onOpenerMenuClose'); if (this.ACTIVE_CLASS) BX.removeClass(this.DIV, this.ACTIVE_CLASS); }; BX.COpener.prototype.Close = function() { if (!this.bMenuInit) return; if (!!this._openTimeout) clearTimeout(this._openTimeout); this.bOpen = false; this.__close(); }; BX.COpener.prototype.__open = function() { this.__clear_timeout(); if (this.bMenuInit && this.bOpen && !this.MENU.visible()) this.MENU.Show(); }; BX.COpener.prototype.__close = function() { if (this.bMenuInit && !this.bOpen && this.MENU.visible()) this.MENU.Hide(); }; BX.COpener.prototype.__close_immediately = function() { this.bOpen = false; this.__close(); }; BX.COpener.prototype.isMenuVisible = function() { return null != this.MENU.visible && this.MENU.visible() }; /* common menu class */ BX.CMenu = function(arParams) { BX.CMenu.superclass.constructor.apply(this); this.DIV.style.width = 'auto';//this.DIV.firstChild.offsetWidth + 'px'; this.DIV.style.height = 'auto';//this.DIV.firstChild.offsetHeight + 'px'; this.PARAMS = arParams || {}; this.PARTS = {}; this.PARAMS.ATTACH_MODE = this.PARAMS.ATTACH_MODE || 'bottom'; this.PARAMS.CLOSE_ON_CLICK = typeof this.PARAMS.CLOSE_ON_CLICK == 'undefined' ? true : this.PARAMS.CLOSE_ON_CLICK; this.PARAMS.ADJUST_ON_CLICK = typeof this.PARAMS.ADJUST_ON_CLICK == 'undefined' ? true : this.PARAMS.ADJUST_ON_CLICK; this.PARAMS.PUBLIC_FRAME = typeof this.PARAMS.PUBLIC_FRAME == 'undefined' ? false : this.PARAMS.PUBLIC_FRAME; this.PARAMS.LEVEL = this.PARAMS.LEVEL || 0; this.DIV.className = 'bx-core-popup-menu bx-core-popup-menu-' + this.PARAMS.ATTACH_MODE + ' bx-core-popup-menu-level' + this.PARAMS.LEVEL + (typeof this.PARAMS.ADDITIONAL_CLASS != 'undefined' ? ' ' + this.PARAMS.ADDITIONAL_CLASS : ''); if (!!this.PARAMS.SET_ID) this.DIV.id = this.PARAMS.SET_ID; if (this.PARAMS.LEVEL == 0) { this.ARROW = this.DIV.appendChild(BX.create('SPAN', {props: {className: 'bx-core-popup-menu-angle'}, style: {left:'15px'}})); } if (!!this.PARAMS.CLASS_NAME) this.DIV.className += ' ' + this.PARAMS.CLASS_NAME; BX.bind(this.DIV, 'click', BX.eventCancelBubble); this.ITEMS = []; this.setItems(this.PARAMS.ITEMS); BX.addCustomEvent('onMenuOpen', BX.proxy(this._onMenuOpen, this)); BX.addCustomEvent('onMenuItemSelected', BX.proxy(this.Hide, this)); }; BX.extend(BX.CMenu, BX.CWindowFloat); BX.CMenu.broadcastCloseEvent = function() { BX.onCustomEvent("onMenuItemSelected"); }; BX.CMenu._toggleChecked = function() { BX.toggleClass(this, 'bx-core-popup-menu-item-checked'); }; BX.CMenu._itemDblClick = function() { window.location.href = this.href; }; BX.CMenu.prototype.toggleArrow = function(v) { if (!!this.ARROW) { if (typeof v == 'undefined') { v = this.ARROW.style.visibility == 'hidden'; } this.ARROW.style.visibility = !!v ? 'visible' : 'hidden'; } }; BX.CMenu.prototype.visible = function() { return this.DIV.style.display !== 'none'; }; BX.CMenu.prototype._onMenuOpen = function(menu, menu_level) { if (this.visible()) { if (menu_level == this.PARAMS.LEVEL && menu != this) { this.Hide(); } } }; BX.CMenu.prototype.onUnRegister = function() { if (!this.visible()) return; this.Hide(); }; BX.CMenu.prototype.setItems = function(items) { this.PARAMS.ITEMS = items; BX.cleanNode(this.DIV); if (!!this.ARROW) this.DIV.appendChild(this.ARROW); if (this.PARAMS.ITEMS) { this.PARAMS.ITEMS = BX.util.array_values(this.PARAMS.ITEMS); var bIcons = false; var cnt = 0; for (var i = 0, len = this.PARAMS.ITEMS.length; i < len; i++) { if ((i == 0 || i == len-1) && this.PARAMS.ITEMS[i].SEPARATOR) continue; cnt++; if (!bIcons) bIcons = !!this.PARAMS.ITEMS[i].GLOBAL_ICON; this.addItem(this.PARAMS.ITEMS[i], i); } // Occam turning in his grave if (cnt === 1) BX.addClass(this.DIV, 'bx-core-popup-menu-single-item'); else BX.removeClass(this.DIV, 'bx-core-popup-menu-single-item'); if (!bIcons) BX.addClass(this.DIV, 'bx-core-popup-menu-no-icons'); else BX.removeClass(this.DIV, 'bx-core-popup-menu-no-icons'); } }; BX.CMenu.prototype.addItem = function(item) { this.ITEMS.push(item); if (item.SEPARATOR) { item.NODE = BX.create( 'DIV', {props: {className: 'bx-core-popup-menu-separator'}} ); } else { var bHasMenu = (!!item.MENU && ( (BX.type.isArray(item.MENU) && item.MENU.length > 0) || item.MENU instanceof BX.CMenu ) || !!item.MENU_URL ); if (item.DISABLED) { item.CLOSE_ON_CLICK = false; item.LINK = null; item.ONCLICK = null; item.ACTION = null; } var attrs = {}; if (!!item.LINK || BX.browser.IsIE() && !BX.browser.IsDoctype()) { attrs.href = item.LINK || 'javascript:void(0)'; } if (this.PARAMS.PUBLIC_FRAME) { attrs.target = '_top'; } item.NODE = BX.create(!!item.LINK || BX.browser.IsIE() && !BX.browser.IsDoctype() ? 'A' : 'SPAN', { props: { className: 'bx-core-popup-menu-item' + (bHasMenu ? ' bx-core-popup-menu-item-opener' : '') + (!!item.DEFAULT ? ' bx-core-popup-menu-item-default' : '') + (!!item.DISABLED ? ' bx-core-popup-menu-item-disabled' : '') + (!!item.CHECKED ? ' bx-core-popup-menu-item-checked' : ''), title: !!BX.message['MENU_ENABLE_TOOLTIP'] || !!item.SHOW_TITLE ? item.TITLE || '' : '', BXMENULEVEL: this.PARAMS.LEVEL }, attrs: attrs, events: { mouseover: function() { BX.onCustomEvent('onMenuItemHover', [this.BXMENULEVEL, this.OPENER]) } }, html: '<span class="bx-core-popup-menu-item-icon' + (item.GLOBAL_ICON ? ' '+item.GLOBAL_ICON : '') + '"></span><span class="bx-core-popup-menu-item-text">'+(item.HTML||(item.TEXT? BX.util.htmlspecialchars(item.TEXT) : ''))+'</span>' }); if (bHasMenu && !item.DISABLED) { item.NODE.OPENER = new BX.COpener({ DIV: item.NODE, ACTIVE_CLASS: 'bx-core-popup-menu-item-opened', TYPE: 'hover', MENU: item.MENU, MENU_URL: item.MENU_URL, MENU_PRELOAD: !!item.MENU_PRELOAD, LEVEL: this.PARAMS.LEVEL + 1, ATTACH_MODE:'right', TIMEOUT: 500 }); } else if (this.PARAMS.CLOSE_ON_CLICK && (typeof item.CLOSE_ON_CLICK == 'undefined' || !!item.CLOSE_ON_CLICK)) { BX.bind(item.NODE, 'click', BX.CMenu.broadcastCloseEvent); } else if (this.PARAMS.ADJUST_ON_CLICK && (typeof item.ADJUST_ON_CLICK == 'undefined' || !!item.ADJUST_ON_CLICK)) { BX.bind(item.NODE, 'click', BX.defer(this.adjustPos, this)); } if (bHasMenu && !!item.LINK) { BX.bind(item.NODE, 'dblclick', BX.CMenu._itemDblClick); } if (typeof item.CHECKED != 'undefined') { BX.bind(item.NODE, 'click', BX.CMenu._toggleChecked); } item.ONCLICK = item.ACTION || item.ONCLICK; if (!!item.ONCLICK) { if (BX.type.isString(item.ONCLICK)) { item.ONCLICK = new Function("event", item.ONCLICK); } BX.bind(item.NODE, 'click', item.ONCLICK); } } this.DIV.appendChild(item.NODE); }; BX.CMenu.prototype._documentClickBind = function() { this._documentClickUnBind(); BX.bind(document, 'click', BX.proxy(this._documentClick, this)); }; BX.CMenu.prototype._documentClickUnBind = function() { BX.unbind(document, 'click', BX.proxy(this._documentClick, this)); }; BX.CMenu.prototype._documentClick = function(e) { e = e||window.event; if(!!e && !(BX.getEventButton(e) & BX.MSLEFT)) return; this.Close(); }; BX.CMenu.prototype.Show = function() { BX.onCustomEvent(this, 'onMenuOpen', [this, this.PARAMS.LEVEL]); BX.CMenu.superclass.Show.apply(this, []); this.bCloseEventFired = false; BX.addCustomEvent(this.PARAMS.parent_attach, 'onChangeNodePosition', BX.proxy(this.adjustToNode, this)); (BX.defer(this._documentClickBind, this))(); }; BX.CMenu.prototype.Close = // we shouldn't 'Close' window - only hide BX.CMenu.prototype.Hide = function() { if (!this.visible()) return; BX.removeCustomEvent(this.PARAMS.parent_attach, 'onChangeNodePosition', BX.proxy(this.adjustToNode, this)); this._documentClickUnBind(); if (!this.bCloseEventFired) { BX.onCustomEvent(this, 'onMenuClose', [this, this.PARAMS.LEVEL]); this.bCloseEventFired = true; } BX.CMenu.superclass.Hide.apply(this, arguments); // this.DIV.onclick = null; //this.PARAMS.parent.onclick = null; }; BX.CMenu.prototype.__adjustMenuToNode = function() { var pos = BX.pos(this.PARAMS.parent_attach), bFixed = !!BX.findParent(this.PARAMS.parent_attach, BX.is_fixed); if (bFixed) this.DIV.style.position = 'fixed'; else this.DIV.style.position = 'absolute'; if (!pos.top) { this.DIV.style.top = '-1000px'; this.DIV.style.left = '-1000px'; } if (this.bTimeoutSet) return; var floatWidth = this.DIV.offsetWidth, floatHeight = this.DIV.offsetHeight; if (!floatWidth) { setTimeout(BX.delegate(function(){ this.bTimeoutSet = false; this.__adjustMenuToNode(); }, this), 100); this.bTimeoutSet = true; return; } var menu_pos = {}, wndSize = BX.GetWindowSize(); /* if (BX.browser.IsIE() && !BX.browser.IsDoctype()) { pos.top -= 4; pos.bottom -= 4; pos.left -= 2; pos.right -= 2; } */ switch (this.PARAMS.ATTACH_MODE) { case 'bottom': menu_pos.top = pos.bottom + 9; menu_pos.left = pos.left; var arrowPos = 0; if (!!this.ARROW) { if (pos.width > floatWidth) arrowPos = parseInt(floatWidth/2 - 7); else arrowPos = parseInt(Math.min(floatWidth, pos.width)/2 - 7); if (arrowPos < 7) { menu_pos.left -= 15; arrowPos += 15; } } if (menu_pos.left > wndSize.scrollWidth - floatWidth - 10) { var orig_menu_pos = menu_pos.left; menu_pos.left = wndSize.scrollWidth - floatWidth - 10; if (!!this.ARROW) arrowPos += orig_menu_pos - menu_pos.left; } if (bFixed) { menu_pos.left -= wndSize.scrollLeft; } if (!!this.ARROW) this.ARROW.style.left = arrowPos + 'px'; break; case 'right': menu_pos.top = pos.top-1; menu_pos.left = pos.right; if (menu_pos.left > wndSize.scrollWidth - floatWidth - 10) { menu_pos.left = pos.left - floatWidth - 1; } break; } if (bFixed) { menu_pos.top -= wndSize.scrollTop; } if (!!this.ARROW) this.ARROW.className = 'bx-core-popup-menu-angle'; if((menu_pos.top + floatHeight > wndSize.scrollTop + wndSize.innerHeight) || (menu_pos.top + floatHeight > wndSize.scrollHeight)) { var new_top = this.PARAMS.ATTACH_MODE == 'bottom' ? pos.top - floatHeight - 9 : pos.bottom - floatHeight + 1; if((new_top > wndSize.scrollTop) || (menu_pos.top + floatHeight > wndSize.scrollHeight)) { if ((menu_pos.top + floatHeight > wndSize.scrollHeight)) { menu_pos.top = Math.max(0, wndSize.scrollHeight-floatHeight); this.toggleArrow(false); } else { menu_pos.top = new_top; if (!!this.ARROW) this.ARROW.className = 'bx-core-popup-menu-angle-bottom'; } } } if (menu_pos.top + menu_pos.left == 0) { this.Hide(); } else { this.DIV.style.top = menu_pos.top + 'px'; this.DIV.style.left = menu_pos.left + 'px'; } }; BX.CMenu.prototype.adjustToNode = function(el) { this.PARAMS.parent_attach = BX(el) || this.PARAMS.parent_attach || this.PARAMS.parent; this.__adjustMenuToNode(); }; /* components toolbar class */ BX.CMenuOpener = function(arParams) { BX.CMenuOpener.superclass.constructor.apply(this); this.PARAMS = arParams || {}; this.setParent(this.PARAMS.parent); this.PARTS = {}; this.SETTINGS.drag_restrict = true; this.defaultAction = null; this.timeout = 500; this.DIV.className = 'bx-component-opener'; this.DIV.ondblclick = BX.PreventDefault; if (this.PARAMS.component_id) { this.PARAMS.transform = !!this.PARAMS.transform; } this.OPENERS = []; this.DIV.appendChild(BX.create('SPAN', { props: {className: 'bx-context-toolbar' + (this.PARAMS.transform ? ' bx-context-toolbar-vertical-mode' : '')} })); //set internal structure and register draggable element this.PARTS.INNER = this.DIV.firstChild.appendChild(BX.create('SPAN', { props: {className: 'bx-context-toolbar-inner'}, html: '<span class="bx-context-toolbar-drag-icon"></span><span class="bx-context-toolbar-vertical-line"></span><br>' })); this.EXTRA_BUTTONS = {}; var btnCount = 0; for (var i = 0, len = this.PARAMS.menu.length; i < len; i++) { var item = this.addItem(this.PARAMS.menu[i]); if (null != item) { btnCount++; this.PARTS.INNER.appendChild(item); this.PARTS.INNER.appendChild(BX.create('BR')); } } var bHasButtons = btnCount > 0; //menu items will be attached here this.PARTS.ICONS = this.PARTS.INNER.appendChild(BX.create('SPAN', { props: {className: 'bx-context-toolbar-icons'} })); if (this.PARAMS.component_id) { this.PARAMS.pin = !!this.PARAMS.pin; if (bHasButtons) this.PARTS.ICONS.appendChild(BX.create('SPAN', {props: {className: 'bx-context-toolbar-separator'}})); this.PARTS.ICON_PIN = this.PARTS.ICONS.appendChild(BX.create('A', { attrs: { href: 'javascript:void(0)' }, props: { className: this.PARAMS.pin ? 'bx-context-toolbar-pin-fixed' : 'bx-context-toolbar-pin' }, events: { click: BX.delegate(this.__pin_btn_clicked, this) } })); } if (this.EXTRA_BUTTONS['components2_props']) { var btn = this.EXTRA_BUTTONS['components2_props'] || {URL: 'javascript:void(0)'}; if (null == this.defaultAction) { this.defaultAction = btn.ONCLICK; this.defaultActionTitle = btn.TITLE || btn.TEXT; } btn.URL = 'javascript:' + BX.util.urlencode(btn.ONCLICK); this.ATTACH = this.PARTS.ICONS.appendChild(BX.create('SPAN', { props: {className: 'bx-context-toolbar-button bx-context-toolbar-button-settings' }, children: [ BX.create('SPAN', { props:{className: 'bx-context-toolbar-button-inner'}, children: [ BX.create('A', { attrs: {href: btn.URL}, events: { mouseover: BX.proxy(this.__msover_text, this), mouseout: BX.proxy(this.__msout_text, this), mousedown: BX.proxy(this.__msdown_text, this) }, html: '<span class="bx-context-toolbar-button-icon bx-context-toolbar-settings-icon"></span>' }), BX.create('A', { attrs: {href: 'javascript: void(0)'}, props: {className: 'bx-context-toolbar-button-arrow'}, events: { mouseover: BX.proxy(this.__msover_arrow, this), mouseout: BX.proxy(this.__msout_arrow, this), mousedown: BX.proxy(this.__msdown_arrow, this) }, html: '<span class="bx-context-toolbar-button-arrow"></span>' }) ] }) ] })); this.OPENER = this.ATTACH.firstChild.lastChild; var opener = this.attachMenu(this.EXTRA_BUTTONS['components2_submenu']['MENU']); BX.addCustomEvent(opener, 'onOpenerMenuOpen', BX.proxy(this.__menu_open, this)); BX.addCustomEvent(opener, 'onOpenerMenuClose', BX.proxy(this.__menu_close, this)); } if (btnCount > 1) { this.PARTS.ICONS.appendChild(BX.create('span', { props: {className: 'bx-context-toolbar-separator bx-context-toolbar-separator-switcher'}})); this.ICON_TRANSFORM = this.PARTS.ICONS.appendChild(BX.create('A', { attrs: {href: 'javascript: void(0)'}, props: {className: 'bx-context-toolbar-switcher'}, events: { click: BX.delegate(this.__trf_btn_clicked, this) } })); } if (this.PARAMS.HINT) { this.DIV.BXHINT = this.HINT = new BX.CHint({ parent: this.DIV, hint:this.PARAMS.HINT.TEXT || '', title: this.PARAMS.HINT.TITLE || '', hide_timeout: this.timeout/2, preventHide: false }); } BX.addCustomEvent(this, 'onWindowDragFinished', BX.delegate(this.__onMoveFinished, this)); BX.addCustomEvent('onDynamicModeChange', BX.delegate(this.__onDynamicModeChange, this)); BX.addCustomEvent('onTopPanelCollapse', BX.delegate(this.__onPanelCollapse, this)); BX.addCustomEvent('onMenuOpenerMoved', BX.delegate(this.checkPosition, this)); BX.addCustomEvent('onMenuOpenerUnhide', BX.delegate(this.checkPosition, this)); BX.Event.EventEmitter.incrementMaxListeners('onDynamicModeChange'); BX.Event.EventEmitter.incrementMaxListeners('onTopPanelCollapse'); BX.Event.EventEmitter.incrementMaxListeners('onMenuOpenerMoved'); BX.Event.EventEmitter.incrementMaxListeners('onMenuOpenerUnhide'); if (this.OPENERS) { for (i=0,len=this.OPENERS.length; i<len; i++) { BX.addCustomEvent(this.OPENERS[i], 'onOpenerMenuOpen', BX.proxy(this.__hide_hint, this)); } } }; BX.extend(BX.CMenuOpener, BX.CWindowFloat); BX.CMenuOpener.prototype.setParent = function(new_parent) { new_parent = BX(new_parent); if (!new_parent) { return; } if(new_parent.OPENER && new_parent.OPENER != this) { new_parent.OPENER.Close(); new_parent.OPENER.clearHoverHoutEvents(); } if(this.PARAMS.parent && this.PARAMS.parent != new_parent) { this.clearHoverHoutEvents(); this.PARAMS.parent.OPENER = null; } this.PARAMS.parent = new_parent; this.PARAMS.parent.OPENER = this; }; BX.CMenuOpener.prototype.setHoverHoutEvents = function(hover, hout) { if(!this.__opener_events_set) { BX.bind(this.Get(), 'mouseover', hover); BX.bind(this.Get(), 'mouseout', hout); this.__opener_events_set = true; } }; BX.CMenuOpener.prototype.clearHoverHoutEvents = function() { if(this.Get()) { BX.unbindAll(this.Get()); this.__opener_events_set = false; } }; BX.CMenuOpener.prototype.unclosable = true; BX.CMenuOpener.prototype.__check_intersection = function(pos_self, pos_other) { return !(pos_other.right <= pos_self.left || pos_other.left >= pos_self.right || pos_other.bottom <= pos_self.top || pos_other.top >= pos_self.bottom); }; BX.CMenuOpener.prototype.__msover_text = function() { this.bx_hover = true; if (!this._menu_open) BX.addClass(this.ATTACH, 'bx-context-toolbar-button-text-hover'); }; BX.CMenuOpener.prototype.__msout_text = function() { this.bx_hover = false; if (!this._menu_open) BX.removeClass(this.ATTACH, 'bx-context-toolbar-button-text-hover bx-context-toolbar-button-text-active'); }; BX.CMenuOpener.prototype.__msover_arrow = function() { this.bx_hover = true; if (!this._menu_open) BX.addClass(this.ATTACH, 'bx-context-toolbar-button-arrow-hover'); }; BX.CMenuOpener.prototype.__msout_arrow = function() { this.bx_hover = false; if (!this._menu_open) BX.removeClass(this.ATTACH, 'bx-context-toolbar-button-arrow-hover bx-context-toolbar-button-arrow-active'); }; BX.CMenuOpener.prototype.__msdown_text = function() { this.bx_active = true; if (!this._menu_open) BX.addClass(this.ATTACH, 'bx-context-toolbar-button-text-active'); }; BX.CMenuOpener.prototype.__msdown_arrow = function() { this.bx_active = true; if (!this._menu_open) BX.addClass(this.ATTACH, 'bx-context-toolbar-button-arrow-active'); }; BX.CMenuOpener.prototype.__menu_close = function() { this._menu_open = false; this.bx_active = false; BX.removeClass(this.ATTACH, 'bx-context-toolbar-button-active bx-context-toolbar-button-text-active bx-context-toolbar-button-arrow-active'); if (!this.bx_hover) { BX.removeClass(this.ATTACH, 'bx-context-toolbar-button-hover bx-context-toolbar-button-text-hover bx-context-toolbar-button-arrow-hover'); this.bx_hover = false; } }; BX.CMenuOpener.prototype.__menu_open = function() { this._menu_open = true; }; BX.CMenuOpener.prototype.checkPosition = function() { if (this.isMenuVisible() || this.DIV.style.display == 'none' || this == BX.proxy_context || BX.proxy_context.zIndex > this.zIndex) return; this.correctPosition(BX.proxy_context); }; BX.CMenuOpener.prototype.correctPosition = function(opener) { var pos_self = BX.pos(this.DIV), pos_other = BX.pos(opener.Get()); if (this.__check_intersection(pos_self, pos_other)) { var new_top = pos_other.top - pos_self.height; if (new_top < 0) new_top = pos_other.bottom; this.DIV.style.top = new_top + 'px'; BX.addCustomEvent(opener, 'onMenuOpenerHide', BX.proxy(this.restorePosition, this)); BX.onCustomEvent(this, 'onMenuOpenerMoved'); } }; BX.CMenuOpener.prototype.restorePosition = function() { if (!this.MOUSEOVER && !this.isMenuVisible()) { if (this.originalPos) this.DIV.style.top = this.originalPos.top + 'px'; BX.removeCustomEvent(BX.proxy_context, 'onMenuOpenerHide', BX.proxy(this.restorePosition, this)); if (this.restore_pos_timeout) clearTimeout(this.restore_pos_timeout); } else { this.restore_pos_timeout = setTimeout(BX.proxy(this.restorePosition, this), this.timeout); } }; BX.CMenuOpener.prototype.Show = function() { BX.CMenuOpener.superclass.Show.apply(this, arguments); this.SetDraggable(this.PARTS.INNER.firstChild); this.DIV.style.width = 'auto'; this.DIV.style.height = 'auto'; if (!this.PARAMS.pin) { this.DIV.style.left = '-1000px'; this.DIV.style.top = '-1000px'; this.Hide(); } else { this.bPosAdjusted = true; this.bMoved = true; if (this.PARAMS.top) this.DIV.style.top = this.PARAMS.top + 'px'; if (this.PARAMS.left) this.DIV.style.left = this.PARAMS.left + 'px'; this.DIV.style.display = (!BX.admin.dynamic_mode || BX.admin.dynamic_mode_show_borders) ? 'block' : 'none'; if (this.DIV.style.display == 'block') { setTimeout(BX.delegate(function() {BX.onCustomEvent(this, 'onMenuOpenerUnhide')}, this), 50); } } }; BX.CMenuOpener.prototype.executeDefaultAction = function() { if (this.defaultAction) { if (BX.type.isFunction(this.defaultAction)) this.defaultAction(); else if(BX.type.isString(this.defaultAction)) BX.evalGlobal(this.defaultAction); } }; BX.CMenuOpener.prototype.__onDynamicModeChange = function(val) { this.DIV.style.display = val ? 'block' : 'none'; }; BX.CMenuOpener.prototype.__onPanelCollapse = function(bCollapsed, dy) { this.DIV.style.top = (parseInt(this.DIV.style.top) + dy) + 'px'; if (this.PARAMS.pin) { this.__savePosition(); } }; BX.CMenuOpener.prototype.__onMoveFinished = function() { BX.onCustomEvent(this, 'onMenuOpenerMoved'); this.bMoved = true; if (this.PARAMS.pin) this.__savePosition(); }; BX.CMenuOpener.prototype.__savePosition = function() { var arOpts = {}; arOpts.pin = this.PARAMS.pin; if (!this.PARAMS.pin) { arOpts.top = false; arOpts.left = false; arOpts.transform = false; } else { arOpts.transform = this.PARAMS.transform; if (this.bMoved) { arOpts.left = parseInt(this.DIV.style.left); arOpts.top = parseInt(this.DIV.style.top); } } BX.WindowManager.saveWindowOptions(this.PARAMS.component_id, arOpts); }; BX.CMenuOpener.prototype.__pin_btn_clicked = function() {this.Pin()}; BX.CMenuOpener.prototype.Pin = function(val) { if (null == val) this.PARAMS.pin = !this.PARAMS.pin; else this.PARAMS.pin = !!val; this.PARTS.ICON_PIN.className = (this.PARAMS.pin ? 'bx-context-toolbar-pin-fixed' : 'bx-context-toolbar-pin'); this.__savePosition(); }; BX.CMenuOpener.prototype.__trf_btn_clicked = function() {this.Transform()}; BX.CMenuOpener.prototype.Transform = function(val) { var pos = {}; if (null == val) this.PARAMS.transform = !this.PARAMS.transform; else this.PARAMS.transform = !!val; if (this.bMoved) { pos = BX.pos(this.DIV); } if (this.PARAMS.transform) BX.addClass(this.DIV.firstChild, 'bx-context-toolbar-vertical-mode'); else BX.removeClass(this.DIV.firstChild, 'bx-context-toolbar-vertical-mode'); if (!this.bMoved) { this.adjustPos(); } else { this.DIV.style.left = (pos.right - this.DIV.offsetWidth - (BX.browser.IsIE() && !BX.browser.IsDoctype() ? 2 : 0)) + 'px'; } this.__savePosition(); }; BX.CMenuOpener.prototype.adjustToNodeGetPos = function() { var pos = BX.pos(this.PARAMS.parent/*, true*/); var scrollSize = BX.GetWindowScrollSize(); var floatWidth = this.DIV.offsetWidth; pos.left -= BX.admin.__border_dx; pos.top -= BX.admin.__border_dx; if (true || !this.PARAMS.transform) { pos.top -= 45; } if (pos.left > scrollSize.scrollWidth - floatWidth) { pos.left = scrollSize.scrollWidth - floatWidth; } return pos; }; BX.CMenuOpener.prototype.addItem = function(item) { if (item.TYPE) { this.EXTRA_BUTTONS[item.TYPE] = item; return null; } else { var q = new BX.CMenuOpenerItem(item); if (null == this.defaultAction) { if (q.item.ONCLICK) { this.defaultAction = item.ONCLICK; } else if (q.item.MENU) { this.defaultAction = BX.delegate(function() {this.Open()}, q.item.OPENER); } this.defaultActionTitle = item.TITLE || item.TEXT; BX.addClass(q.Get(), 'bx-content-toolbar-default'); } if (q.item.OPENER) this.OPENERS[this.OPENERS.length] = q.item.OPENER; return q.Get(); } }; BX.CMenuOpener.prototype.attachMenu = function(menu) { var opener = new BX.COpener({ 'DIV': this.OPENER, 'ATTACH': this.ATTACH, 'MENU': menu, 'TYPE': 'click' }); this.OPENERS[this.OPENERS.length] = opener; return opener; }; BX.CMenuOpener.prototype.__hide_hint = function() { if (this.HINT) this.HINT.__hide_immediately(); }; BX.CMenuOpener.prototype.isMenuVisible = function() { for (var i=0,len=this.OPENERS.length; i<len; i++) { if (this.OPENERS[i].isMenuVisible()) return true; } return false; }; BX.CMenuOpener.prototype.Hide = function() { if (!this.PARAMS.pin) { this.DIV.style.display = 'none'; BX.onCustomEvent(this, 'onMenuOpenerHide'); } }; BX.CMenuOpener.prototype.UnHide = function() { this.DIV.style.display = 'block'; if (!this.bPosAdjusted && !this.PARAMS.pin) { this.adjustPos(); this.bPosAdjusted = true; } if (null == this.originalPos && !this.bMoved) { this.originalPos = BX.pos(this.DIV); } BX.onCustomEvent(this, 'onMenuOpenerUnhide'); }; BX.CMenuOpenerItem = function(item) { this.item = item; if (this.item.ACTION && !this.item.ONCLICK) { this.item.ONCLICK = this.item.ACTION; } this.DIV = BX.create('SPAN'); this.DIV.appendChild(BX.create('SPAN', {props: {className: 'bx-context-toolbar-button-underlay'}})); this.WRAPPER = this.DIV.appendChild(BX.create('SPAN', { props: {className: 'bx-context-toolbar-button-wrapper'}, children: [ BX.create('SPAN', { props: {className: 'bx-context-toolbar-button', title: item.TITLE}, children: [ BX.create('SPAN', { props: {className: 'bx-context-toolbar-button-inner'} }) ] }) ] })); var btn_icon = BX.create('SPAN', { props: {className: 'bx-context-toolbar-button-icon' + (this.item.ICON || this.item.ICONCLASS ? ' ' + (this.item.ICON || this.item.ICONCLASS) : '')}, attrs: ( !(this.item.ICON || this.item.ICONCLASS) && (this.item.SRC || this.item.IMAGE) ) ? { style: 'background: scroll transparent url(' + (this.item.SRC || this.item.IMAGE) + ') no-repeat center center !important;' } : {} }), btn_text = BX.create('SPAN', { props: {className: 'bx-context-toolbar-button-text'}, text: this.item.TEXT }); if (this.item.ACTION && !this.item.ONCLICK) { this.item.ONCLICK = this.item.ACTION; } this.bHasMenu = !!this.item.MENU; this.bHasAction = !!this.item.ONCLICK; if (this.bHasAction) { this.LINK = this.WRAPPER.firstChild.firstChild.appendChild(BX.create('A', { attrs: { 'href': 'javascript: void(0)' }, events: { mouseover: this.bHasMenu ? BX.proxy(this.__msover_text, this) : BX.proxy(this.__msover, this), mouseout: this.bHasMenu ? BX.proxy(this.__msout_text, this) : BX.proxy(this.__msout, this), mousedown: this.bHasMenu ? BX.proxy(this.__msdown_text, this) : BX.proxy(this.__msdown, this) }, children: [btn_icon, btn_text] })); if (this.bHasMenu) { this.LINK_MENU = this.WRAPPER.firstChild.firstChild.appendChild(BX.create('A', { props: {className: 'bx-context-toolbar-button-arrow'}, attrs: { 'href': 'javascript: void(0)' }, events: { mouseover: BX.proxy(this.__msover_arrow, this), mouseout: BX.proxy(this.__msout_arrow, this), mousedown: BX.proxy(this.__msdown_arrow, this) }, children: [ BX.create('SPAN', {props: {className: 'bx-context-toolbar-button-arrow'}}) ] })); } } else if (this.bHasMenu) { this.item.ONCLICK = null; this.LINK = this.LINK_MENU = this.WRAPPER.firstChild.firstChild.appendChild(BX.create('A', { attrs: { 'href': 'javascript: void(0)' }, events: { mouseover: BX.proxy(this.__msover, this), mouseout: BX.proxy(this.__msout, this), mousedown: BX.proxy(this.__msdown, this) }, children: [ btn_icon, btn_text ] })); this.LINK.appendChild(BX.create('SPAN', {props: {className: 'bx-context-toolbar-single-button-arrow'}})); } if (this.bHasMenu) { this.item.SUBMENU = new BX.CMenu({ ATTACH_MODE:'bottom', ITEMS:this.item['MENU'], //PARENT_MENU:this.parentMenu, parent: this.LINK_MENU, parent_attach: this.WRAPPER.firstChild }); this.item.OPENER = new BX.COpener({ DIV: this.LINK_MENU, TYPE: 'click', MENU: this.item.SUBMENU }); BX.addCustomEvent(this.item.OPENER, 'onOpenerMenuOpen', BX.proxy(this.__menu_open, this)); BX.addCustomEvent(this.item.OPENER, 'onOpenerMenuClose', BX.proxy(this.__menu_close, this)); } if (this.bHasAction) { BX.bind(this.LINK, 'click', BX.delegate(this.__click, this)); } }; BX.CMenuOpenerItem.prototype.Get = function() {return this.DIV;}; BX.CMenuOpenerItem.prototype.__msover = function() { this.bx_hover = true; if (!this._menu_open) BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-hover'); }; BX.CMenuOpenerItem.prototype.__msout = function() { this.bx_hover = false; if (!this._menu_open) BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-hover bx-context-toolbar-button-active'); }; BX.CMenuOpenerItem.prototype.__msover_text = function() { this.bx_hover = true; if (!this._menu_open) BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-text-hover'); }; BX.CMenuOpenerItem.prototype.__msout_text = function() { this.bx_hover = false; if (!this._menu_open) BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-text-hover bx-context-toolbar-button-text-active'); }; BX.CMenuOpenerItem.prototype.__msover_arrow = function() { this.bx_hover = true; if (!this._menu_open) BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-arrow-hover'); }; BX.CMenuOpenerItem.prototype.__msout_arrow = function() { this.bx_hover = false; if (!this._menu_open) BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-arrow-hover bx-context-toolbar-button-arrow-active'); }; BX.CMenuOpenerItem.prototype.__msdown = function() { this.bx_active = true; if (!this._menu_open) BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-active'); }; BX.CMenuOpenerItem.prototype.__msdown_text = function() { this.bx_active = true; if (!this._menu_open) BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-text-active'); }; BX.CMenuOpenerItem.prototype.__msdown_arrow = function() { this.bx_active = true; if (!this._menu_open) BX.addClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-arrow-active'); }; BX.CMenuOpenerItem.prototype.__menu_close = function() { this._menu_open = false; this.bx_active = false; BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-active bx-context-toolbar-button-text-active bx-context-toolbar-button-arrow-active'); if (!this.bx_hover) { BX.removeClass(this.LINK.parentNode.parentNode, 'bx-context-toolbar-button-hover bx-context-toolbar-button-text-hover bx-context-toolbar-button-arrow-hover'); this.bx_hover = false; } }; BX.CMenuOpenerItem.prototype.__menu_open = function() { this._menu_open = true; }; BX.CMenuOpenerItem.prototype.__click = function() {BX.evalGlobal(this.item.ONCLICK)}; /* global page opener class */ BX.CPageOpener = function(arParams) { //if (null == arParams.pin) arParams.pin = true; BX.CPageOpener.superclass.constructor.apply(this, arguments); this.timeout = 505; window.PAGE_EDIT_CONTROL = this; }; BX.extend(BX.CPageOpener, BX.CMenuOpener); BX.CPageOpener.prototype.checkPosition = function() { if (/*this.isMenuVisible() || this.DIV.style.display == 'none' || */this == BX.proxy_context) return; this.correctPosition(BX.proxy_context); }; BX.CPageOpener.prototype.correctPosition = function(opener) { if (this.bPosCorrected) return; var pos_self; if (this.DIV.style.display == 'none') { pos_self = this.adjustToNodeGetPos(); pos_self.bottom = pos_self.top + 30; pos_self.right = pos_self.left + 300; } else { pos_self = BX.pos(this.DIV); } var pos_other = BX.pos(opener.Get()); if (this.__check_intersection(pos_self, pos_other)) { this.DIV.style.display = 'none'; var handler = BX.proxy(this.restorePosition, this); BX.removeCustomEvent(opener, 'onMenuOpenerHide', handler); BX.addCustomEvent(opener, 'onMenuOpenerHide', handler); this.bPosCorrected = true; } }; BX.CPageOpener.prototype.restorePosition = function() { if (BX.proxy_context && BX.proxy_context.Get().style.display == 'none') { this.bPosCorrected = false; if (this.PARAMS.parent.bx_over || this.PARAMS.pin) this.UnHide(); BX.removeCustomEvent('onMenuOpenerHide', BX.proxy(this.restorePosition, this)); } }; BX.CPageOpener.prototype.UnHide = function() { if (!this.bPosCorrected) BX.CPageOpener.superclass.UnHide.apply(this, arguments); }; BX.CPageOpener.prototype.Remove = function() { BX.admin.removeComponentBorder(this.PARAMS.parent); BX.userOptions.save('global', 'settings', 'page_edit_control_enable', 'N'); this.DIV.style.display = 'none'; }; /******* HINT ***************/ BX.CHintSimple = function() { BX.CHintSimple.superclass.constructor.apply(this, arguments); }; BX.extend(BX.CHintSimple, BX.CHint); BX.CHintSimple.prototype.Init = function() { this.DIV = document.body.appendChild(BX.create('DIV', {props: {className: 'bx-tooltip-simple'}, style: {display: 'none'}, children: [(this.CONTENT = BX.create('DIV'))]})); BX.ZIndexManager.register(this.DIV); if (this.HINT_TITLE) this.CONTENT.appendChild(BX.create('B', {text: this.HINT_TITLE})); if (this.HINT) this.CONTENT_TEXT = this.CONTENT.appendChild(BX.create('DIV')).appendChild(BX.create('SPAN', {html: this.HINT})); if (this.PARAMS.preventHide) { BX.bind(this.DIV, 'mouseout', BX.proxy(this.Hide, this)); BX.bind(this.DIV, 'mouseover', BX.proxy(this.Show, this)); } this.bInited = true; }; /*************************** admin informer **********************************/ BX.adminInformer = { itemsShow: 3, Init: function (itemsShow) { if(itemsShow) BX.adminInformer.itemsShow = itemsShow; var informer = BX("admin-informer"); if(informer) { document.body.appendChild(informer); BX.ZIndexManager.register(informer); } BX.addCustomEvent("onTopPanelCollapse", BX.proxy(BX.adminInformer.Close, BX.adminInformer)); }, Toggle: function(notifyBlock) { var informer = BX("admin-informer"); if(!informer) return false; var pos = BX.pos(notifyBlock); informer.style.top = (parseInt(pos.top)+parseInt(pos.height)+7)+'px'; informer.style.left = pos.left+'px'; if(!BX.hasClass(informer, "adm-informer-active")) BX.adminInformer.Show(informer); else BX.adminInformer.Hide(informer); return false; }, Close: function() { BX.adminInformer.Hide(BX("admin-informer")); }, OnInnerClick: function(event) { var target = event.target || event.srcElement; if(target.nodeName.toLowerCase() != 'a' || BX.hasClass(target,"adm-informer-footer")) { return BX.PreventDefault(event); } return true; }, ToggleExtra : function() { var footerLink = BX("adm-informer-footer"); if (BX.hasClass(footerLink, "adm-informer-footer-collapsed")) this.ShowAll(); else this.HideExtra(); return false; }, ShowAll: function() { var informer = BX("admin-informer"); for(var i=0; i<informer.children.length; i++) if(BX.hasClass(informer.children[i], "adm-informer-item") && informer.children[i].style.display == "none") { informer.children[i].style.display = "block"; } var footerLink = BX("adm-informer-footer"); if(footerLink.textContent !== undefined) footerLink.textContent = BX.message('JSADM_AI_HIDE_EXTRA'); else footerLink.innerText = BX.message('JSADM_AI_HIDE_EXTRA'); BX.removeClass(footerLink, "adm-informer-footer-collapsed"); return false; }, HideExtra: function() { var informer = BX("admin-informer"); var hided = 0; for(var i=BX.adminInformer.itemsShow+1; i<informer.children.length; i++) { if (BX.hasClass(informer.children[i], "adm-informer-item") && informer.children[i].style.display == "block") { informer.children[i].style.display = "none"; hided++; } } var footerLink = BX("adm-informer-footer"); var linkText = BX.message('JSADM_AI_ALL_NOTIF')+" ("+(BX.adminInformer.itemsShow+parseInt(hided))+")"; if(footerLink.textContent !== undefined) footerLink.textContent = linkText; else footerLink.innerText = linkText; BX.addClass(footerLink, "adm-informer-footer-collapsed"); return false; }, Show: function(informer) { var notifButton = BX("adm-header-notif-block"); if (notifButton) BX.addClass(notifButton, "adm-header-notif-block-active"); BX.onCustomEvent(informer, 'onBeforeAdminInformerShow'); setTimeout( BX.proxy(function() { BX.bind(document, "click", BX.proxy(BX.adminInformer.Close, BX.adminInformer)); }, BX.adminInformer ),0 ); BX.addClass(informer, "adm-informer-active"); BX.ZIndexManager.bringToFront(informer); setTimeout(function() {BX.addClass(informer, "adm-informer-animate");},0); }, Hide: function(informer) { var notifButton = BX("adm-header-notif-block"); if (notifButton) BX.removeClass(notifButton, "adm-header-notif-block-active"); BX.unbind(document, "click", BX.proxy(BX.adminInformer.Close, BX.adminInformer)); BX.removeClass(informer, "adm-informer-animate"); if (this.IsAnimationSupported()) setTimeout(function() {BX.removeClass(informer, "adm-informer-active");}, 300); else BX.removeClass(informer, "adm-informer-active"); BX.onCustomEvent(informer, 'onAdminInformerHide'); //setTimeout(function() {BX.adminInformer.HideExtra();},500); }, IsAnimationSupported : function() { var d = document.body || document.documentElement; if (typeof(d.style.transition) == "string") return true; else if (typeof(d.style.MozTransition) == "string") return true; else if (typeof(d.style.OTransition) == "string") return true; else if (typeof(d.style.WebkitTransition) == "string") return true; else if (typeof(d.style.msTransition) == "string") return true; return false; }, SetItemHtml: function(itemIdx, html) { var itemHtmlDiv = BX("adm-informer-item-html-"+itemIdx); if(!itemHtmlDiv) return false; itemHtmlDiv.innerHTML = html; return true; }, SetItemFooter: function(itemIdx, html) { var itemFooterDiv = BX("adm-informer-item-footer-"+itemIdx); if(!itemFooterDiv) return false; itemFooterDiv.innerHTML = html; if(html) itemFooterDiv.style.display = "block"; else itemFooterDiv.style.display = "none"; return true; } }; })(window);