| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- /**
- * Abstract class for Ext.DataView creation in MODx
- *
- * This is primarily used for the media browser
- * but in untestable cases also in a modx-package-browser-thumbs-view
- * in the package browser (when a node in the tree has the attribute "templated")
- *
- * @class MODx.DataView
- * @extends Ext.DataView
- * @constructor
- * @param {Object} config An object of options.
- * @xtype modx-dataview
- */
- MODx.DataView = function(config) {
- config = config || {};
- this._loadStore(config);
- Ext.applyIf(config.listeners || {},{
- 'loadexception': {fn:this.onLoadException, scope: this}
- ,'beforeselect': {fn:function(view){ return view.store.getRange().length > 0;}}
- ,'contextmenu': {fn:this._showContextMenu, scope: this}
- });
- Ext.applyIf(config,{
- store: this.store
- ,singleSelect: true
- ,overClass: 'x-view-over'
- ,emptyText: '<div style="padding:10px;">'+_('file_err_filter')+'</div>'
- ,closeAction: 'hide'
- });
- MODx.DataView.superclass.constructor.call(this,config);
- this.config = config;
- this.cm = new Ext.menu.Menu();
- };
- Ext.extend(MODx.DataView,Ext.DataView,{
- lookup: {}
- ,onLoadException: function(){
- this.getEl().update('<div style="padding:10px;">'+_('data_err_load')+'</div>');
- }
- /**
- * Add context menu items to the dataview.
- * @param {Object, Array} items Either an Object config or array of Object configs.
- */
- ,_addContextMenuItem: function(items) {
- var a = items, l = a.length;
- for(var i=0;i<l;i=i+1) {
- var options = a[i];
- if (options === '-') {
- this.cm.add('-');
- continue;
- }
- var h = Ext.emptyFn;
- if (options.handler) {
- h = eval(options.handler);
- } else {
- h = function(itm,e) {
- var o = itm.options;
- var id = this.cm.activeNode.id.split('_'); id = id[1];
- var w = Ext.get('modx_content');
- if (o.confirm) {
- Ext.Msg.confirm('',o.confirm,function(e) {
- if (e === 'yes') {
- var a = Ext.urlEncode(o.params || {action: o.action});
- var s = '?id='+id+'&'+a;
- if (w === null) {
- location.href = s;
- } else { w.dom.src = s; }
- }
- },this);
- } else {
- var a = Ext.urlEncode(o.params);
- var s = '?id='+id+'&'+a;
- if (w === null) {
- location.href = s;
- } else { w.dom.src = s; }
- }
- };
- }
- this.cm.add({
- id: options.id
- ,text: options.text
- ,scope: this
- ,options: options
- ,handler: h
- });
- }
- }
- ,_loadStore: function(config) {
- this.store = new Ext.data.JsonStore({
- url: config.url
- ,baseParams: config.baseParams || {
- action: 'browser/directory/getList'
- ,wctx: config.wctx || MODx.ctx
- ,dir: config.openTo || ''
- ,source: config.source || 0
- }
- ,root: config.root || 'results'
- ,fields: config.fields
- ,totalProperty: 'total'
- ,listeners: {
- 'load': {fn:function(){ this.select(0); }, scope:this, single:true}
- }
- });
- this.store.load();
- }
- ,_showContextMenu: function(v,i,n,e) {
- e.preventDefault();
- var data = this.lookup[n.id];
- var m = this.cm;
- m.removeAll();
- if (data.menu) {
- this._addContextMenuItem(data.menu);
- m.showAt(e.xy);
- }
- m.activeNode = n;
- }
- });
- Ext.reg('modx-dataview',MODx.DataView);
|