| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568 |
- /**
- * Generates the Element Tree
- *
- * @class MODx.tree.Element
- * @extends MODx.tree.Tree
- * @param {Object} config An object of options.
- * @xtype modx-tree-element
- */
- MODx.tree.Element = function(config) {
- config = config || {};
- Ext.applyIf(config,{
- rootVisible: false
- ,enableDD: !Ext.isEmpty(MODx.config.enable_dragdrop) ? true : false
- ,ddGroup: 'modx-treedrop-elements-dd'
- ,title: ''
- ,url: MODx.config.connector_url
- ,action: 'element/getnodes'
- ,sortAction: 'element/sort'
- ,useDefaultToolbar: false
- ,baseParams: {
- currentElement: MODx.request.id || 0
- ,currentAction: MODx.request.a || 0
- }
- ,tbar: [{
- cls: 'tree-new-template'
- ,tooltip: {text: _('new')+' '+_('template')}
- ,handler: function() {
- this.redirect('?a=element/template/create');
- }
- ,scope: this
- ,hidden: MODx.perm.new_template ? false : true
- },{
- cls: 'tree-new-tv'
- ,tooltip: {text: _('new')+' '+_('tv')}
- ,handler: function() {
- this.redirect('?a=element/tv/create');
- }
- ,scope: this
- ,hidden: MODx.perm.new_tv ? false : true
- },{
- cls: 'tree-new-chunk'
- ,tooltip: {text: _('new')+' '+_('chunk')}
- ,handler: function() {
- this.redirect('?a=element/chunk/create');
- }
- ,scope: this
- ,hidden: MODx.perm.new_chunk ? false : true
- },{
- cls: 'tree-new-snippet'
- ,tooltip: {text: _('new')+' '+_('snippet')}
- ,handler: function() {
- this.redirect('?a=element/snippet/create');
- }
- ,scope: this
- ,hidden: MODx.perm.new_snippet ? false : true
- },{
- cls: 'tree-new-plugin'
- ,tooltip: {text: _('new')+' '+_('plugin')}
- ,handler: function() {
- this.redirect('?a=element/plugin/create');
- }
- ,scope: this
- ,hidden: MODx.perm.new_plugin ? false : true
- },{
- cls: 'tree-new-category'
- ,tooltip: {text: _('new_category')}
- ,handler: function() {
- this.createCategory(null,{target: this.getEl()});
- }
- ,scope: this
- ,hidden: MODx.perm.new_category ? false : true
- }]
- });
- MODx.tree.Element.superclass.constructor.call(this,config);
- this.on('afterSort',this.afterSort);
- };
- Ext.extend(MODx.tree.Element,MODx.tree.Tree,{
- forms: {}
- ,windows: {}
- ,stores: {}
- ,createCategory: function(n,e) {
- var r = {};
- if (this.cm.activeNode && this.cm.activeNode.attributes.data) {
- r['parent'] = this.cm.activeNode.attributes.data.id;
- }
- var w = MODx.load({
- xtype: 'modx-window-category-create'
- ,record: r
- ,listeners: {
- success: {
- fn: function() {
- var node = (this.cm.activeNode) ? this.cm.activeNode.id : 'n_category'
- ,self = node.indexOf('_category_') !== -1;
- this.refreshNode(node, self);
- }
- ,scope: this
- }
- ,hide: {
- fn: function() {
- this.destroy();
- }
- }
- }
- });
- w.show(e.target);
- }
- ,renameCategory: function(itm,e) {
- var r = this.cm.activeNode.attributes.data;
- var w = MODx.load({
- xtype: 'modx-window-category-rename'
- ,record: r
- ,listeners: {
- 'success':{fn:function(r) {
- var c = r.a.result.object;
- var n = this.cm.activeNode;
- n.setText(c.category+' ('+c.id+')');
- Ext.get(n.getUI().getEl()).frame();
- n.attributes.data.id = c.id;
- n.attributes.data.category = c.category;
- },scope:this}
- ,'hide':{fn:function() {this.destroy();}}
- }
- });
- w.show(e.target);
- }
- ,removeCategory: function(itm,e) {
- var id = this.cm.activeNode.attributes.data.id;
- MODx.msg.confirm({
- title: _('warning')
- ,text: _('category_confirm_delete')
- ,url: MODx.config.connector_url
- ,params: {
- action: 'element/category/remove'
- ,id: id
- }
- ,listeners: {
- 'success': {fn:function() {
- this.cm.activeNode.remove();
- },scope:this}
- }
- });
- }
- ,duplicateElement: function(itm,e,id,type) {
- MODx.Ajax.request({
- url: MODx.config.connector_url
- ,params: {
- action: 'element/' + type + '/get'
- ,id: id
- }
- ,listeners: {
- 'success': {fn:function(results) {
- var r = {
- id: id
- ,type: type
- ,name: _('duplicate_of',{name: this.cm.activeNode.attributes.name})
- ,caption: _('duplicate_of',{name: this.cm.activeNode.attributes.caption})
- ,category: results.object.category
- ,source: results.object.source
- ,static: results.object.static
- ,static_file: results.object.static_file
- };
- var w = MODx.load({
- xtype: 'modx-window-element-duplicate'
- ,record: r
- ,listeners: {
- 'success': {fn:function() {this.refreshNode(this.cm.activeNode.id);},scope:this}
- ,'hide':{fn:function() {this.destroy();}}
- }
- });
- w.show(e.target);
- },scope:this}
- }
- });
- }
- ,removeElement: function(itm,e) {
- var id = this.cm.activeNode.id.substr(2);
- var oar = id.split('_');
- MODx.msg.confirm({
- title: _('warning')
- ,text: _('remove_this_confirm',{
- type: _(oar[0])
- ,name: this.cm.activeNode.attributes.name
- })
- ,url: MODx.config.connector_url
- ,params: {
- action: 'element/'+oar[0]+'/remove'
- ,id: oar[2]
- }
- ,listeners: {
- 'success': {fn:function() {
- this.cm.activeNode.remove();
- /* if editing the element being removed */
- if (MODx.request.a == 'element/'+oar[0]+'/update' && MODx.request.id == oar[2]) {
- MODx.loadPage('welcome');
- }
- },scope:this}
- }
- });
- }
- ,activatePlugin: function(itm,e) {
- var id = this.cm.activeNode.id.substr(2);
- var oar = id.split('_');
- MODx.Ajax.request({
- url: MODx.config.connector_url
- ,params: {
- action: 'element/plugin/activate'
- ,id: oar[2]
- }
- ,listeners: {
- 'success': {fn:function() {
- this.refreshParentNode();
- },scope:this}
- }
- });
- }
- ,deactivatePlugin: function(itm,e) {
- var id = this.cm.activeNode.id.substr(2);
- var oar = id.split('_');
- MODx.Ajax.request({
- url: MODx.config.connector_url
- ,params: {
- action: 'element/plugin/deactivate'
- ,id: oar[2]
- }
- ,listeners: {
- 'success': {fn:function() {
- this.refreshParentNode();
- },scope:this}
- }
- });
- }
- ,quickCreate: function(itm,e,type) {
- var r = {
- category: this.cm.activeNode.attributes.pk || ''
- };
- var w = MODx.load({
- xtype: 'modx-window-quick-create-'+type
- ,record: r
- ,listeners: {
- success: {
- fn: function() {
- this.refreshNode(this.cm.activeNode.id, true);
- }
- ,scope: this
- }
- ,hide: {
- fn: function() {
- this.destroy();
- }
- }
- }
- });
- w.setValues(r);
- w.show(e.target);
- }
- ,quickUpdate: function(itm,e,type) {
- MODx.Ajax.request({
- url: MODx.config.connector_url
- ,params: {
- action: 'element/'+type+'/get'
- ,id: this.cm.activeNode.attributes.pk
- }
- ,listeners: {
- 'success': {fn:function(r) {
- var nameField = (type == 'template') ? 'templatename' : 'name';
- var w = MODx.load({
- xtype: 'modx-window-quick-update-'+type
- ,record: r.object
- ,listeners: {
- 'success':{fn:function(r) {
- this.refreshNode(this.cm.activeNode.id);
- var newTitle = '<span dir="ltr">' + r.f.findField(nameField).getValue() + ' (' + w.record.id + ')</span>';
- w.setTitle(w.title.replace(/<span.*\/span>/, newTitle));
- },scope:this}
- ,'hide':{fn:function() {this.destroy();}}
- }
- });
- w.title += ': <span dir="ltr">' + w.record[nameField] + ' ('+ w.record.id + ')</span>';
- w.setValues(r.object);
- w.show(e.target);
- },scope:this}
- }
- });
- }
- ,_createElement: function(itm,e,t) {
- var id = this.cm.activeNode.id.substr(2);
- var oar = id.split('_');
- var type = oar[0] == 'type' ? oar[1] : oar[0];
- var cat_id = oar[0] == 'type' ? 0 : (oar[1] == 'category' ? oar[2] : oar[3]);
- var a = 'element/'+type+'/create';
- this.redirect('?a='+a+'&category='+cat_id);
- this.cm.hide();
- return false;
- }
- ,afterSort: function(o) {
- var tn = o.event.target.attributes;
- if (tn.type == 'category') {
- var dn = o.event.dropNode.attributes;
- if (tn.id != 'n_category' && dn.type == 'category') {
- o.event.target.expand();
- } else {
- this.refreshNode(o.event.target.attributes.id,true);
- this.refreshNode('n_type_'+o.event.dropNode.attributes.type,true);
- }
- }
- }
- ,_handleDrop: function(e) {
- var target = e.target;
- if (e.point == 'above' || e.point == 'below') {return false;}
- if (target.attributes.classKey != 'modCategory' && target.attributes.classKey != 'root') { return false; }
- if (!this.isCorrectType(e.dropNode,target)) {return false;}
- if (target.attributes.type == 'category' && e.point == 'append') {return true;}
- return target.getDepth() > 0;
- }
- ,isCorrectType: function(dropNode,targetNode) {
- var r = false;
- /* types must be the same */
- if(targetNode.attributes.type == dropNode.attributes.type) {
- /* do not allow anything to be dropped on an element */
- if(!(targetNode.parentNode &&
- ((dropNode.attributes.cls == 'folder'
- && targetNode.attributes.cls == 'folder'
- && dropNode.parentNode.id == targetNode.parentNode.id
- ) || targetNode.attributes.cls == 'file'))) {
- r = true;
- }
- }
- return r;
- }
- /**
- * Shows the current context menu.
- * @param {Ext.tree.TreeNode} n The current node
- * @param {Ext.EventObject} e The event object run.
- */
- ,_showContextMenu: function(n,e) {
- this.cm.activeNode = n;
- this.cm.removeAll();
- if (n.attributes.menu && n.attributes.menu.items) {
- this.addContextMenuItem(n.attributes.menu.items);
- this.cm.show(n.getUI().getEl(),'t?');
- } else {
- var m = [];
- switch (n.attributes.classKey) {
- case 'root':
- m = this._getRootMenu(n);
- break;
- case 'modCategory':
- m = this._getCategoryMenu(n);
- break;
- default:
- m = this._getElementMenu(n);
- break;
- }
- this.addContextMenuItem(m);
- this.cm.showAt(e.xy);
- }
- e.stopEvent();
- }
- ,_getQuickCreateMenu: function(n,m) {
- var ui = n.getUI();
- var mn = [];
- var types = ['template','tv','chunk','snippet','plugin'];
- var t;
- for (var i=0;i<types.length;i++) {
- t = types[i];
- if (ui.hasClass('pnew_'+t)) {
- mn.push({
- text: _(t)
- ,scope: this
- ,type: t
- ,handler: function(itm,e) {
- this.quickCreate(itm,e,itm.type);
- }
- });
- }
- }
- m.push({
- text: _('quick_create')
- ,handler: function() {return false;}
- ,menu: {
- items: mn
- }
- });
- return m;
- }
- ,_getElementMenu: function(n) {
- var a = n.attributes;
- var ui = n.getUI();
- var m = [];
- m.push({
- text: '<b>'+a.text+'</b>'
- ,handler: function() { return false; }
- ,header: true
- });
- m.push('-');
- if (ui.hasClass('pedit')) {
- m.push({
- text: _('edit_'+a.type)
- ,type: a.type
- ,pk: a.pk
- ,handler: function(itm,e) {
- MODx.loadPage('element/'+itm.type+'/update',
- 'id='+itm.pk);
- }
- });
- m.push({
- text: _('quick_update_'+a.type)
- ,type: a.type
- ,handler: function(itm,e) {
- this.quickUpdate(itm,e,itm.type);
- }
- });
- if (a.classKey == 'modPlugin') {
- if (a.active) {
- m.push({
- text: _('plugin_deactivate')
- ,type: a.type
- ,handler: this.deactivatePlugin
- });
- } else {
- m.push({
- text: _('plugin_activate')
- ,type: a.type
- ,handler: this.activatePlugin
- });
- }
- }
- }
- if (ui.hasClass('pnew')) {
- m.push({
- text: _('duplicate_'+a.type)
- ,pk: a.pk
- ,type: a.type
- ,handler: function(itm,e) {
- this.duplicateElement(itm,e,itm.pk,itm.type);
- }
- });
- }
- if (ui.hasClass('pdelete')) {
- m.push({
- text: _('remove_'+a.type)
- ,handler: this.removeElement
- });
- }
- m.push('-');
- if (ui.hasClass('pnew')) {
- m.push({
- text: _('add_to_category_'+a.type)
- ,handler: this._createElement
- });
- }
- if (ui.hasClass('pnewcat')) {
- m.push({
- text: _('new_category')
- ,handler: this.createCategory
- });
- }
- return m;
- }
- ,_getCategoryMenu: function(n) {
- var a = n.attributes;
- var ui = n.getUI();
- var m = [];
- m.push({
- text: '<b>'+a.text+'</b>'
- ,handler: function() { return false; }
- ,header: true
- });
- m.push('-');
- if (ui.hasClass('pnewcat')) {
- m.push({
- text: _('category_create')
- ,handler: this.createCategory
- });
- }
- if (ui.hasClass('peditcat')) {
- m.push({
- text: _('category_rename')
- ,handler: this.renameCategory
- });
- }
- if (m.length > 2) {m.push('-');}
- if (a.elementType) {
- m.push({
- text: _('add_to_category_'+a.type)
- ,handler: this._createElement
- });
- }
- this._getQuickCreateMenu(n,m);
- if (ui.hasClass('pdelcat')) {
- m.push('-');
- m.push({
- text: _('category_remove')
- ,handler: this.removeCategory
- });
- }
- return m;
- }
- ,_getRootMenu: function(n) {
- var a = n.attributes;
- var ui = n.getUI();
- var m = [];
- if (ui.hasClass('pnew')) {
- m.push({
- text: _('new_'+a.type)
- ,handler: this._createElement
- });
- m.push({
- text: _('quick_create_'+a.type)
- ,type: a.type
- ,handler: function(itm,e) {
- this.quickCreate(itm,e,itm.type);
- }
- });
- }
- if (ui.hasClass('pnewcat')) {
- if (ui.hasClass('pnew')) {m.push('-');}
- m.push({
- text: _('new_category')
- ,handler: this.createCategory
- });
- }
- return m;
- }
- ,handleCreateClick: function(node){
- this.cm.activeNode = node;
- var type = this.cm.activeNode.id.substr(2).split('_');
- if (type[0] != 'category') {
- this._createElement(null, null, null);
- } else {
- this.createCategory(null, {target: this});
- }
- }
- });
- Ext.reg('modx-tree-element',MODx.tree.Element);
|