Форк Rambox
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

176 lines
5.3 KiB

/**
* An extended {@link Ext.dom.Element} object that supports a shadow and shim
*
* @deprecated 5.1.0 Ext.dom.Element now includes support for shadow and shim
* see {@link Ext.dom.Element#enableShadow enableShadow} and
* {@link Ext.dom.Element#enableShim enableShim}
*/
Ext.define('Ext.dom.Layer', {
extend: 'Ext.Element',
alternateClassName: 'Ext.Layer',
/**
* @cfg {String/Boolean} [shadow=false]
* True to automatically create an {@link Ext.Shadow}, or a string indicating the
* shadow's display {@link Ext.Shadow#mode}. False to disable the shadow.
*/
/**
* @cfg {String/Boolean} [shim=false]
* True to automatically create a {@link Ext.dom.Shim}.
*/
/**
* @cfg {Object} [dh={tag: 'div', cls: 'x-layer'}]
* DomHelper object config to create element with.
*/
/**
* @cfg {Boolean} [constrain=true]
* False to disable constrain to viewport.
*/
/**
* @cfg {String} cls
* CSS class to add to the element
*/
/**
* @cfg {Number} [zindex=11000]
* Starting z-index.
*/
/**
* @cfg {Number} [shadowOffset=4]
* Number of pixels to offset the shadow
*/
/**
* @cfg {Boolean} [useDisplay=false]
* Defaults to use css offsets to hide the Layer. Specify <tt>true</tt>
* to use css style <tt>'display:none;'</tt> to hide the Layer.
*/
/**
* @cfg {String} visibilityCls
* The CSS class name to add in order to hide this Layer if this layer
* is configured with <code>{@link #hideMode}: 'asclass'</code>
*/
/**
* @cfg {String} hideMode
* A String which specifies how this Layer will be hidden.
* Values may be:
*
* - `'display'` : The Component will be hidden using the `display: none` style.
* - `'visibility'` : The Component will be hidden using the `visibility: hidden` style.
* - `'offsets'` : The Component will be hidden by absolutely positioning it out of the visible area
* of the document. This is useful when a hidden Component must maintain measurable dimensions.
* Hiding using `display` results in a Component having zero dimensions.
*/
isLayer: true,
/**
* Creates new Layer.
* @param {Object} [config] An object with config options.
* @param {String/HTMLElement} [existingEl] Uses an existing DOM element.
* If the element is not found it creates it.
*/
constructor: function(config, existingEl) {
config = config || {};
var me = this,
dh = Ext.DomHelper,
cp = config.parentEl,
pel = cp ? Ext.getDom(cp) : document.body,
hm = config.hideMode,
cls = Ext.baseCSSPrefix + (config.fixed ? 'fixed-layer' : 'layer'),
dom, id, element, shadowConfig;
if (existingEl) {
dom = Ext.getDom(existingEl);
if (!dom.parentNode) {
pel.appendChild(dom);
}
}
if (!dom) {
dom = dh.append(pel, config.dh || {
tag: 'div',
cls: cls // primarily to give el 'position:absolute' or, if fixed, 'position:fixed'
});
}
if (config.id) {
dom.id = config.id;
}
id = dom.id;
if (id) {
element = Ext.cache[id];
if (element) {
// if we have an existing Ext.Element in the cache for this same dom
// element, delete it, so that it can be replaced by this layer instance
// when we callParent below.
delete Ext.cache[id];
element.dom = null;
}
}
this.callParent([dom]);
if (existingEl) {
me.addCls(cls);
}
if (config.preventSync) {
me.preventSync = true;
}
if (config.cls) {
me.addCls(config.cls);
}
me.constrain = config.constrain !== false;
// Allow Components to pass their hide mode down to the Layer if they are floating.
// Otherwise, allow useDisplay to override the default hiding method which is visibility.
// TODO: Have ExtJS's Element implement visibilityMode by using classes as in Mobile.
if (hm) {
me.setVisibilityMode(Ext.Element[hm.toUpperCase()]);
} else if (config.useDisplay) {
me.setVisibilityMode(Ext.Element.DISPLAY);
} else {
me.setVisibilityMode(Ext.Element.VISIBILITY);
}
if (config.shadow) {
me.shadowOffset = config.shadowOffset || 4;
shadowConfig = {
offset: me.shadowOffset,
fixed: config.fixed
};
if (config.shadow !== true) {
shadowConfig.mode = config.shadow;
}
me.enableShadow(shadowConfig);
} else {
me.shadowOffset = 0;
}
if (config.shim) {
me.enableShim({
fixed: config.fixed
});
}
// Keep the following only for cases where Ext.Layer would be instantiated
// directly. We don't ever pass hidden in the config in the framework
// since this is handled by the Component lifecycle.
if (config.hidden === true) {
me.hide();
} else if (config.hidden === false) {
me.show();
}
}
});