Ext.dd.DragDropMgr.getZIndex = function(element) { var body = document.body, z, zIndex = -1; var overTargetEl = element; element = Ext.getDom(element); while (element !== body) { // this fixes the problem if(!element) { this._remove(overTargetEl); // remove the drop target from the manager break; } // fix end if (!isNaN(z = Number(Ext.fly(element).getStyle('zIndex')))) { zIndex = z; } element = element.parentNode; } return zIndex; }; MODx.TreeDrop = function(config) { config = config || {}; Ext.applyIf(config,{ id: 'modx-treedrop' ,ddGroup: 'modx-treedrop-dd' }); MODx.TreeDrop.superclass.constructor.call(this,config); this.config = config; this.setup(); }; Ext.extend(MODx.TreeDrop,Ext.Component,{ setup: function() { var ddTarget = this.config.target; var ddTargetEl = this.config.targetEl; var cfg = this.config; this.targetEl = new Ext.dd.DropTarget(this.config.targetEl, { ddGroup: this.config.ddGroup ,notifyEnter: function(ddSource, e, data) { if (ddTarget.getEl) { var el = ddTarget.getEl(); if (el) { el.frame(); el.focus(); } } } ,notifyDrop: function(ddSource, e, data) { if (!data.node || !data.node.attributes || !data.node.attributes.type) return false; if (data.node.attributes.type != 'modResource' && data.node.attributes.leaf != true) return false; var v = ''; var win = false; switch (data.node.attributes.type) { case 'modResource': v = '[[~'+data.node.attributes.pk+']]'; break; case 'snippet': win = true; break; case 'chunk': win = true; break; case 'tv': win = true; break; case 'file': v = data.node.attributes.url; break; default: var dh = Ext.getCmp(data.node.attributes.type+'-drop-handler'); if (dh) { return dh.handle(data,{ ddTargetEl: ddTargetEl ,cfg: cfg ,iframe: cfg.iframe ,iframeEl: cfg.iframeEl ,onInsert: cfg.onInsert ,panel: cfg.panel }); } return false; break; } if (win) { MODx.loadInsertElement({ pk: data.node.attributes.pk ,classKey: data.node.attributes.classKey ,name: data.node.attributes.name ,output: v ,ddTargetEl: ddTargetEl ,cfg: cfg ,iframe: cfg.iframe ,iframeEl: cfg.iframeEl ,onInsert: cfg.onInsert ,panel: cfg.panel }); } else { if (cfg.iframe) { MODx.insertForRTE(v,cfg); } else { var el = Ext.get(ddTargetEl); if (el.dom.id == 'modx-static-content') { v = v.substring(1); Ext.getCmp(el.dom.id).setValue(''); } if (el.dom.id == 'modx-symlink-content' || el.dom.id == 'modx-weblink-content') { Ext.getCmp(el.dom.id).setValue(''); if(typeof data.node.attributes.pk !== undefined && data.node.attributes.pk !== undefined){ MODx.insertAtCursor(ddTargetEl,data.node.attributes.pk,cfg.onInsert); }else{ MODx.insertAtCursor(ddTargetEl,v,cfg.onInsert); } } else if (el.dom.id == 'modx-resource-parent') { v = data.node.attributes.pk; var pf = Ext.getCmp('modx-resource-parent'); if (v == pf.currentid) { MODx.msg.alert('',_('resource_err_own_parent')); return false; } pf.setValue(v); Ext.getCmp(pf.parentcmp).setValue(v); var p = Ext.getCmp(pf.formpanel); if (p) { p.markDirty(); } } else { MODx.insertAtCursor(ddTargetEl,v,cfg.onInsert); } if (cfg.panel) { var p = Ext.getCmp(cfg.panel); if (p) { p.markDirty(); } } } } return true; } }); // Allow elements & files nodes to be dropped this.targetEl.addToGroup('modx-treedrop-elements-dd'); this.targetEl.addToGroup('modx-treedrop-sources-dd'); } }); Ext.reg('modx-treedrop',MODx.TreeDrop); MODx.loadInsertElement = function(r) { if (MODx.InsertElementWindow) { MODx.InsertElementWindow.hide(); MODx.InsertElementWindow.destroy(); } MODx.InsertElementWindow = MODx.load({ xtype: 'modx-window-insert-element' ,record: r ,listeners: { 'success':{fn: function() { },scope:this} ,'hide': {fn:function() { this.destroy(); }} } }); MODx.InsertElementWindow.setValues(r); MODx.InsertElementWindow.show(); }; MODx.insertAtCursor = function(myField, myValue,h) { if (!Ext.isEmpty(h)) { var z = h(myValue); if (z != undefined) { myValue = z; } } myField.blur(); if (document.selection) { sel = document.selection.createRange(); sel.text = myValue; } else if (myField.selectionStart || myField.selectionStart == '0') { var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0, startPos)+ myValue+ myField.value.substring(endPos, myField.value.length); myField.selectionStart = startPos + myValue.length; myField.selectionEnd = myField.selectionStart; } else { myField.value += myValue; } myField.focus(); }; MODx.insertForRTE = function(v,cfg) { var fn = cfg.onInsert || false; if (fn) { fn(v,cfg); } else { if (typeof cfg.iframeEl == 'object') { var doc = cfg.iframeEl; } else { var doc = window.frames[0].document.getElementById(cfg.iframeEl); } if (doc.value) { doc.value = doc.value + v; } else { doc.innerHTML = doc.innerHTML + v; } } }; MODx.insertIntoContent = function(v,opt) { if (opt.iframe) { MODx.insertForRTE(v,opt.cfg); } else { MODx.insertAtCursor(opt.ddTargetEl,v); } } MODx.window.InsertElement = function(config) { config = config || {}; var resourceCmp = Ext.get('modx-resource-id'); var resourceId = resourceCmp !== null ? resourceCmp.getValue() : 0; Ext.applyIf(config,{ title: _('select_el_opts') ,id: 'modx-window-insert-element' ,width: 522 // match 300px fieldwidth plus the fieldset ,labelAlign: 'left' ,labelWidth: 160 ,url: MODx.config.connector_url ,action: 'element/template/create' ,fields: [{ xtype: 'hidden' ,name: 'pk' ,id: 'modx-dise-pk' },{ xtype: 'hidden' ,name: 'classKey' ,id: 'modx-dise-classkey' },{ xtype: 'xcheckbox' ,fieldLabel: _('cached') ,name: 'cached' ,id: 'modx-dise-cached' ,inputValue: 1 ,checked: true },{ xtype: 'modx-combo-property-set' ,fieldLabel: _('property_set') ,name: 'propertyset' ,id: 'modx-dise-propset' ,width: 300 ,baseParams: { action: 'element/propertyset/getList' ,showAssociated: true ,elementId: config.record.pk ,elementType: config.record.classKey } ,listeners: { 'render': {fn:function() {Ext.getCmp('modx-dise-propset').getStore().load(); Ext.getCmp('modx-dise-propset').value = '0';},scope:this} ,'select': {fn:this.changePropertySet,scope:this} } },{ id: 'modx-dise-proplist' ,autoLoad: { url: MODx.config.connector_url ,params: { 'action': 'element/getinsertproperties' ,classKey: config.record.classKey ,pk: config.record.pk ,resourceId: resourceId ,propertySet: 0 } ,scripts: true ,callback: this.onPropFormLoad ,scope: this } ,style: 'display: none;' },{ xtype: 'fieldset' ,title: _('properties') // ,autoHeight: true ,height: Ext.getBody().getViewSize().height * 0.6 ,collapsible: true ,autoScroll: true ,items: [{ html: '
' ,id: 'modx-iprops-container' // ,height: 400 // ,autoScroll: true }] }] ,modps: [] }); MODx.window.InsertElement.superclass.constructor.call(this,config); this.on('show',function() { this.center(); this.mask = new Ext.LoadMask(Ext.get('modx-iprops-container'), {msg:_('loading')}); this.mask.show(); },this); }; Ext.extend(MODx.window.InsertElement,MODx.Window,{ changePropertySet: function(cb) { var fp = Ext.getCmp('modx-iprops-fp'); if (fp) fp.destroy(); var resourceCmp = Ext.get('modx-resource-id'); var resourceId = resourceCmp !== null ? resourceCmp.getValue() : 0; var u = Ext.getCmp('modx-dise-proplist').getUpdater(); u.update({ url: MODx.config.connector_url ,params: { 'action': 'element/getinsertproperties' ,classKey: this.config.record.classKey ,pk: this.config.record.pk ,resourceId: resourceId ,propertySet: cb.getValue() } ,scripts: true ,callback: this.onPropFormLoad ,scope: this }); this.modps = []; this.mask.show(); } ,createStore: function(data) { return new Ext.data.SimpleStore({ fields: ["v","d"] ,data: data }); } ,onPropFormLoad: function(el,s,r) { this.mask.hide(); var vs = Ext.decode(r.responseText); if (!vs || vs.length <= 0) { return false; } for (var i=0;i