// default menu aligns Ext.override(Ext.Button, { menuAlign:'tr-br?', iconAlign: 'right', subMenuAlign:'tr-tl?' }); Ext.override(Ext.menu.Menu, { subMenuAlign:'tr-tl?' }); Ext.override(Ext.menu.DateMenu, { subMenuAlign:'tr-tl?' }); Ext.override(Ext.menu.ColorMenu, { subMenuAlign:'tr-tl?' }); // default align for tips Ext.override(Ext.Tip, {defaultAlign:'tr-bl?'}); // isClickOnArrow for SplitButton should check for smaller than left Ext.override(Ext.SplitButton, { isClickOnArrow : function(e){ return this.arrowAlign != 'bottom' ? e.getPageX() < this.el.child(this.buttonSelector).getRegion().left : // changed for RTL e.getPageY() > this.el.child(this.buttonSelector).getRegion().bottom; } }); // Ext.layout.HBoxLayout needs total new onLayout Ext.override(Ext.layout.HBoxLayout,{ onLayout : function(ct, target){ Ext.layout.HBoxLayout.superclass.onLayout.call(this, ct, target); var cs = ct.items.items, len = cs.length, c, i, last = len-1, cm; var size = this.getLayoutTargetSize(target); var w = size.width - target.getPadding('lr') - this.scrollOffset, h = size.height - target.getPadding('tb'), l = this.padding.left, t = this.padding.top; if ((Ext.isIE && !Ext.isStrict) && (w < 1 || h < 1)) { return; } else if (w < 1 && h < 1) { return; } var stretchHeight = h - (this.padding.top + this.padding.bottom); var totalFlex = 0; var totalWidth = 0; var maxHeight = 0; for(i = 0; i < len; i++){ c = cs[i]; cm = c.margins; totalFlex += c.flex || 0; totalWidth += c.getWidth() + cm.left + cm.right; maxHeight = Math.max(maxHeight, c.getHeight() + cm.top + cm.bottom); } var innerCtHeight = maxHeight + this.padding.top + this.padding.bottom; switch(this.align){ case 'stretch': this.innerCt.setSize(w, h); break; case 'stretchmax': case 'top': this.innerCt.setSize(w, innerCtHeight); break; case 'middle': this.innerCt.setSize(w, h = Math.max(h, innerCtHeight)); break; } var extraWidth = w - totalWidth - this.padding.left - this.padding.right; var allocated = 0; var cw, ch, ct, availableHeight = h - this.padding.top - this.padding.bottom; if(this.pack == 'center'){ l += extraWidth ? extraWidth/2 : 0; }else if(this.pack == 'end'){ l += extraWidth; } for(i = 0; i < len; i++){ c = cs[i]; cm = c.margins; cw = c.getWidth(); ch = c.getHeight(); l += cm.right; if(this.align != 'middle'){ ct = t + cm.top; }else{ var diff = availableHeight - (ch + cm.top + cm.bottom); if(diff == 0){ ct = t + cm.top; }else{ ct = t + cm.top + (diff/2); } } if(this.pack == 'start' && c.flex){ var ratio = c.flex/totalFlex; var add = Math.floor(extraWidth*ratio); allocated += add; if(i == last){ add += (extraWidth-allocated); } cw += add; c.setWidth(cw); } c.setPosition(w - l - cw, ct); if(this.align == 'stretch'){ c.setHeight((stretchHeight - (cm.top + cm.bottom)).constrain(c.minHeight || 0, c.maxHeight || 1000000)); }else if(this.align == 'stretchmax'){ c.setHeight((maxHeight - (cm.top + cm.bottom)).constrain(c.minHeight || 0, c.maxHeight || 1000000)); } l += cw + cm.left; } } }); Ext.override(Ext.layout.VBoxLayout, { onLayout : function(ct, target){ Ext.layout.VBoxLayout.superclass.onLayout.call(this, ct, target); var cs = ct.items.items, len = cs.length, c, i, last = len-1, cm; var size = this.getLayoutTargetSize(target); var w = size.width - target.getPadding('lr') - this.scrollOffset, h = size.height - target.getPadding('tb'), l = this.padding.right, t = this.padding.top; if ((Ext.isIE && !Ext.isStrict) && (w < 1 || h < 1)) { return; } else if (w < 1 && h < 1) { return; } var stretchWidth = w - (this.padding.left + this.padding.right); var totalFlex = 0; var totalHeight = 0; var maxWidth = 0; for(i = 0; i < len; i++){ c = cs[i]; cm = c.margins; totalFlex += c.flex || 0; totalHeight += c.getHeight() + cm.top + cm.bottom; maxWidth = Math.max(maxWidth, c.getWidth() + cm.left + cm.right); } var innerCtWidth = maxWidth + this.padding.left + this.padding.right; switch(this.align){ case 'stretch': this.innerCt.setSize(w, h); break; case 'stretchmax': case 'left': case 'center': this.innerCt.setSize(w = Math.max(w, innerCtWidth), h); break; } var extraHeight = h - totalHeight - this.padding.top - this.padding.bottom; var allocated = 0; var cw, ch, cl, availableWidth = w - this.padding.left - this.padding.right; if(this.pack == 'center'){ t += extraHeight ? extraHeight/2 : 0; }else if(this.pack == 'end'){ t += extraHeight; } for(i = 0; i < len; i++){ c = cs[i]; cm = c.margins; cw = c.getWidth(); ch = c.getHeight(); t += cm.top; if(this.align != 'center'){ cl = l + cm.right; }else{ var diff = availableWidth - (cw + cm.left + cm.right); if(diff == 0){ cl = l + cm.right; }else{ cl = l + cm.right + (diff/2); } } c.setPosition(w - cl - cw, t); if(this.pack == 'start' && c.flex){ var ratio = c.flex/totalFlex; var add = Math.floor(extraHeight*ratio); allocated += add; if(i == last){ add += (extraHeight-allocated); } ch += add; c.setHeight(ch); } if(this.align == 'stretch'){ c.setWidth((stretchWidth - (cm.left + cm.right)).constrain(c.minWidth || 0, c.maxWidth || 1000000)); }else if(this.align == 'stretchmax'){ c.setWidth((maxWidth - (cm.left + cm.right)).constrain(c.minWidth || 0, c.maxWidth || 1000000)); } t += ch + cm.bottom; } } }); // FormLayout Ext.override(Ext.layout.FormLayout, { setContainer : function(ct){ Ext.layout.FormLayout.superclass.setContainer.call(this, ct); if(ct.labelAlign){ ct.addClass('x-form-label-'+ct.labelAlign); } if(ct.hideLabels){ Ext.apply(this, { labelStyle: 'display:none', elementStyle: 'padding-right:0;', labelAdjust: 0 }); }else{ this.labelSeparator = ct.labelSeparator || this.labelSeparator; ct.labelWidth = ct.labelWidth || 100; if(Ext.isNumber(ct.labelWidth)){ var pad = Ext.isNumber(ct.labelPad) ? ct.labelPad : 5; Ext.apply(this, { labelAdjust: ct.labelWidth + pad, labelStyle: 'width:' + ct.labelWidth + 'px;', elementStyle: 'padding-right:' + (ct.labelWidth + pad) + 'px' }); } if(ct.labelAlign == 'top'){ Ext.apply(this, { labelStyle: 'width:auto;', labelAdjust: 0, elementStyle: 'padding-right:0;' }); } } } }); Ext.override(Ext.form.Field, { alignErrorIcon : function(){ this.errorIcon.alignTo(this.el, 'tr-tl', [-2, 0]); } }); Ext.override(Ext.form.TriggerField, { alignErrorIcon: function() { if(this.wrap){ this.errorIcon.alignTo(this.wrap, 'tr-tl', [-2, 0]); } } }); // CheckbxGroup /* Ext.override(Ext.form.CheckboxGroup ,{ onRender : function(ct, position){ if(!this.el){ var panelCfg = { cls: this.groupCls, layout: 'column', border: false, renderTo: ct }; var colCfg = { defaultType: this.defaultType, layout: 'form', hideLabels: true, // added for correct display of rtl border: false, defaults: { hideLabel: true, anchor: '100%' } } if(this.items[0].items){ // The container has standard ColumnLayout configs, so pass them in directly Ext.apply(panelCfg, { layoutConfig: {columns: this.items.length}, defaults: this.defaults, items: this.items }) for(var i=0, len=this.items.length; i0 && i%rows==0){ ri++; } if(this.items[i].fieldLabel){ this.items[i].hideLabel = false; } cols[ri].items.push(this.items[i]); }; }else{ for(var i=0, len=this.items.length; i
'); this.leftTr = target.child('tr.x-toolbar-right-row', true); this.rightTr = target.child('tr.x-toolbar-left-row', true); this.extrasTr = target.child('tr.x-toolbar-extras-row', true); } var side = ct.buttonAlign == 'right' ? this.rightTr : this.leftTr, pos = 0, items = ct.items.items; for(var i = 0, len = items.length, c; i < len; i++, pos++) { c = items[i]; if(c.isFill){ side = this.rightTr; pos = -1; }else if(!c.rendered){ c.render(this.insertCell(c, side, pos)); }else{ if(!c.xtbHidden && !this.isValidParent(c, side.childNodes[pos])){ var td = this.insertCell(c, side, pos); td.appendChild(c.getPositionEl().dom); c.container = Ext.get(td); } } } //strip extra empty cells this.cleanup(this.leftTr); this.cleanup(this.rightTr); this.cleanup(this.extrasTr); this.fitToSize(target); } }); Ext.Container.LAYOUTS.toolbar = Ext.layout.ToolbarLayout; // HtmlEditor Ext.override(Ext.form.HtmlEditor, { getDocMarkup : function(){ return ''; } }); // DateField Ext.override(Ext.form.DateField, { onTriggerClick : function(){ if(this.disabled){ return; } if(this.menu == null){ this.menu = new Ext.menu.DateMenu({ hideOnClick: false }); } Ext.apply(this.menu.picker, { minDate : this.minValue, maxDate : this.maxValue, disabledDatesRE : this.disabledDatesRE, disabledDatesText : this.disabledDatesText, disabledDays : this.disabledDays, disabledDaysText : this.disabledDaysText, format : this.format, showToday : this.showToday, minText : String.format(this.minText, this.formatDate(this.minValue)), maxText : String.format(this.maxText, this.formatDate(this.maxValue)) }); this.menu.picker.setValue(this.getValue() || new Date()); this.menu.show(this.el, "tr-br?"); this.menuEvents('on'); } }); // Tabs Ext.override(Ext.TabPanel, { autoScrollTabs : function(){ this.pos = this.tabPosition=='bottom' ? this.footer : this.header; var count = this.items.length, ow = this.pos.dom.offsetWidth, tw = this.pos.dom.clientWidth, wrap = this.stripWrap, wd = wrap.dom, cw = wd.offsetWidth, pos = this.getScrollPos(), l = cw - (this.edge.getOffsetsTo(this.stripWrap)[0] + pos); if(!this.enableTabScroll || count < 1 || cw < 20){ // 20 to prevent display:none issues return; } if(l <= tw){ wrap.setWidth(tw); if(this.scrolling){ this.scrolling = false; this.pos.removeClass('x-tab-scrolling'); this.scrollLeft.hide(); this.scrollRight.hide(); // See here: http://extjs.com/forum/showthread.php?t=49308&highlight=isSafari if(Ext.isAir || Ext.isWebKit){ wd.style.marginLeft = ''; wd.style.marginRight = ''; } } wd.scrollLeft = 0; }else{ if(!this.scrolling){ this.pos.addClass('x-tab-scrolling'); // See here: http://extjs.com/forum/showthread.php?t=49308&highlight=isSafari if(Ext.isAir || Ext.isWebKit){ wd.style.marginLeft = '18px'; wd.style.marginRight = '18px'; } } tw -= wrap.getMargins('lr'); wrap.setWidth(tw > 20 ? tw : 20); if(!this.scrolling){ if(!this.scrollLeft){ this.createScrollers(); }else{ this.scrollLeft.show(); this.scrollRight.show(); } } this.scrolling = true; if(pos > (l-tw)){ // ensure it stays within bounds wd.scrollLeft = l-tw; }else{ // otherwise, make sure the active tab is still visible this.scrollToTab(this.activeTab, false); } this.updateScrollButtons(); } }, onScrollRight : function(){ var pos = this.getScrollPos(); var s = Math.max(this.getScrollWidth(), pos - this.getScrollIncrement()); if(s != pos){ this.scrollTo(s, this.animScroll); } }, onScrollLeft : function(){ var pos = this.getScrollPos(); var s = Math.min(0, pos + this.getScrollIncrement()); if(s != pos){ this.scrollTo(s, this.animScroll); } }, // private updateScrollButtons : function(){ var pos = this.getScrollPos(); this.scrollLeft[pos == 0 ? 'addClass' : 'removeClass']('x-tab-scroller-left-disabled'); this.scrollRight[pos <= this.getScrollWidth() ? 'addClass' : 'removeClass']('x-tab-scroller-right-disabled'); } }); // Grids Ext.override(Ext.grid.GridView.SplitDragZone,{ handleMouseDown : function(e){ var t = this.view.findHeaderCell(e.getTarget()); if(t && this.allowHeaderDrag(e)){ var xy = this.view.fly(t).getXY(), x = xy[0], y = xy[1]; var exy = e.getXY(), ex = exy[0]; var w = t.offsetWidth, adjust = false; if((ex - x) <= this.hw){ adjust = 0; }else if((x+w) - ex <= this.hw){ adjust = -1; } if(adjust !== false){ this.cm = this.grid.colModel; var ci = this.view.getCellIndex(t); if(adjust == -1){ if (ci + adjust < 0) { return; } while(this.cm.isHidden(ci+adjust)){ --adjust; if(ci+adjust < 0){ return; } } } this.cellIndex = ci+adjust; this.split = t.dom; if(this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)){ Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this, arguments); } }else if(this.view.columnDrag){ this.view.columnDrag.callHandleMouseDown(e); } } }, endDrag : function(e){ this.marker.hide(); var v = this.view; var endX = Math.max(this.minX, e.getPageX()); var diff = this.startPos - endX; v.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex)+diff); setTimeout(function(){ v.headersDisabled = false; }, 50); } }); Ext.override(Ext.grid.GridView, { handleHdMove : function(e, t){ var hd = this.findHeaderCell(this.activeHdRef); if(hd && !this.headersDisabled){ var hw = this.splitHandleWidth || 5, r = this.activeHdRegion, x = e.getPageX(), ss = hd.style, cur = ''; if(this.grid.enableColumnResize !== false){ if(r.right - x <= hw && this.cm.isResizable(this.activeHdIndex-1)){ cur = Ext.isAir ? 'move' : Ext.isWebKit ? 'e-resize' : 'col-resize'; // col-resize not always supported }else if(x - r.left <= (!this.activeHdBtn ? hw : 2) && this.cm.isResizable(this.activeHdIndex)){ cur = Ext.isAir ? 'move' : Ext.isWebKit ? 'w-resize' : 'col-resize'; } } } }, syncFocusEl : function(row, col, hscroll){ var xy = row; if(!Ext.isArray(xy)){ row = Math.min(row, Math.max(0, this.getRows().length-1)); xy = this.getResolvedXY(this.resolveCell(row, col, hscroll)); } var sc_xy = this.scroller.getXY() if (!xy) {xy=sc_xy;} //this.focusEl.setXY(xy||this.scroller.getXY()); this.focusEl.setTop(xy[1]-sc_xy[1]+this.scroller.getScroll().top); this.focusEl.setRight(xy[0]-sc_xy[0]); }, handleHdDown : function(e, t){ if(Ext.fly(t).hasClass('x-grid3-hd-btn')){ e.stopEvent(); var hd = this.findHeaderCell(t); Ext.fly(hd).addClass('x-grid3-hd-menu-open'); var index = this.getCellIndex(hd); this.hdCtxIndex = index; var ms = this.hmenu.items, cm = this.cm; ms.get("asc").setDisabled(!cm.isSortable(index)); ms.get("desc").setDisabled(!cm.isSortable(index)); this.hmenu.on("hide", function(){ Ext.fly(hd).removeClass('x-grid3-hd-menu-open'); }, this, {single:true}); this.hmenu.show(t, "tr-br?"); } } }); Ext.override(Ext.Layer, { hideAction : function(){ this.visible = false; if(this.useDisplay === true){ this.setDisplayed(false); }else{ this.setLeftTop(0,-10000); // negative x in firefox shows scrollbar in RTL } } }); Ext.override(Ext.form.ComboBox, { listAlign:'tr-br?' });