116 lines
4.8 KiB
HTML
116 lines
4.8 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>The source code</title>
|
|
<link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
|
|
<script type="text/javascript" src="../resources/prettify/prettify.js"></script>
|
|
<style type="text/css">
|
|
.highlight { display: block; background-color: #ddd; }
|
|
</style>
|
|
<script type="text/javascript">
|
|
function highlight() {
|
|
document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="prettyPrint(); highlight();">
|
|
<pre class="prettyprint lang-js"><span id='Ext-layout-MenuLayout'>/**
|
|
</span> * @class Ext.layout.MenuLayout
|
|
* @extends Ext.layout.ContainerLayout
|
|
* <p>Layout manager used by {@link Ext.menu.Menu}. Generally this class should not need to be used directly.</p>
|
|
*/
|
|
Ext.layout.MenuLayout = Ext.extend(Ext.layout.ContainerLayout, {
|
|
<span id='Ext-layout-MenuLayout-property-monitorResize'> monitorResize : true,
|
|
</span>
|
|
<span id='Ext-layout-MenuLayout-property-type'> type: 'menu',
|
|
</span>
|
|
<span id='Ext-layout-MenuLayout-method-setContainer'> setContainer : function(ct){
|
|
</span> this.monitorResize = !ct.floating;
|
|
// This event is only fired by the menu in IE, used so we don't couple
|
|
// the menu with the layout.
|
|
ct.on('autosize', this.doAutoSize, this);
|
|
Ext.layout.MenuLayout.superclass.setContainer.call(this, ct);
|
|
},
|
|
|
|
<span id='Ext-layout-MenuLayout-method-renderItem'> renderItem : function(c, position, target){
|
|
</span> if (!this.itemTpl) {
|
|
this.itemTpl = Ext.layout.MenuLayout.prototype.itemTpl = new Ext.XTemplate(
|
|
'<li id="{itemId}" class="{itemCls}">',
|
|
'<tpl if="needsIcon">',
|
|
'<img alt="{altText}" src="{icon}" class="{iconCls}"/>',
|
|
'</tpl>',
|
|
'</li>'
|
|
);
|
|
}
|
|
|
|
if(c && !c.rendered){
|
|
if(Ext.isNumber(position)){
|
|
position = target.dom.childNodes[position];
|
|
}
|
|
var a = this.getItemArgs(c);
|
|
|
|
// The Component's positionEl is the <li> it is rendered into
|
|
c.render(c.positionEl = position ?
|
|
this.itemTpl.insertBefore(position, a, true) :
|
|
this.itemTpl.append(target, a, true));
|
|
|
|
// Link the containing <li> to the item.
|
|
c.positionEl.menuItemId = c.getItemId();
|
|
|
|
// If rendering a regular Component, and it needs an icon,
|
|
// move the Component rightwards.
|
|
if (!a.isMenuItem && a.needsIcon) {
|
|
c.positionEl.addClass('x-menu-list-item-indent');
|
|
}
|
|
this.configureItem(c);
|
|
}else if(c && !this.isValidParent(c, target)){
|
|
if(Ext.isNumber(position)){
|
|
position = target.dom.childNodes[position];
|
|
}
|
|
target.dom.insertBefore(c.getActionEl().dom, position || null);
|
|
}
|
|
},
|
|
|
|
<span id='Ext-layout-MenuLayout-method-getItemArgs'> getItemArgs : function(c) {
|
|
</span> var isMenuItem = c instanceof Ext.menu.Item,
|
|
canHaveIcon = !(isMenuItem || c instanceof Ext.menu.Separator);
|
|
|
|
return {
|
|
isMenuItem: isMenuItem,
|
|
needsIcon: canHaveIcon && (c.icon || c.iconCls),
|
|
icon: c.icon || Ext.BLANK_IMAGE_URL,
|
|
iconCls: 'x-menu-item-icon ' + (c.iconCls || ''),
|
|
itemId: 'x-menu-el-' + c.id,
|
|
itemCls: 'x-menu-list-item ',
|
|
altText: c.altText || ''
|
|
};
|
|
},
|
|
|
|
<span id='Ext-layout-MenuLayout-method-isValidParent'> // Valid if the Component is in a <li> which is part of our target <ul>
|
|
</span> isValidParent : function(c, target) {
|
|
return c.el.up('li.x-menu-list-item', 5).dom.parentNode === (target.dom || target);
|
|
},
|
|
|
|
<span id='Ext-layout-MenuLayout-method-onLayout'> onLayout : function(ct, target){
|
|
</span> Ext.layout.MenuLayout.superclass.onLayout.call(this, ct, target);
|
|
this.doAutoSize();
|
|
},
|
|
|
|
<span id='Ext-layout-MenuLayout-method-doAutoSize'> doAutoSize : function(){
|
|
</span> var ct = this.container, w = ct.width;
|
|
if(ct.floating){
|
|
if(w){
|
|
ct.setWidth(w);
|
|
}else if(Ext.isIE9m){
|
|
ct.setWidth(Ext.isStrict && (Ext.isIE7 || Ext.isIE8 || Ext.isIE9) ? 'auto' : ct.minWidth);
|
|
var el = ct.getEl(), t = el.dom.offsetWidth; // force recalc
|
|
ct.setWidth(ct.getLayoutTarget().getWidth() + el.getFrameWidth('lr'));
|
|
}
|
|
}
|
|
}
|
|
});
|
|
Ext.Container.LAYOUTS['menu'] = Ext.layout.MenuLayout;
|
|
</pre>
|
|
</body>
|
|
</html>
|