/** * Loads a grid for managing lexicons. * * @class MODx.grid.Lexicon * @extends MODx.grid.Grid * @param {Object} config An object of configuration properties * @xtype modx-grid-lexicon */ MODx.grid.Lexicon = function(config) { config = config || {}; Ext.applyIf(config,{ id: 'modx-grid-lexicon' ,url: MODx.config.connector_url ,fields: ['name','value','namespace','topic','language','editedon','overridden'] ,baseParams: { action: 'workspace/lexicon/getList' ,'namespace': MODx.request['ns'] ? MODx.request['ns'] : 'core' ,topic: '' ,language: MODx.config.manager_language || 'en' } ,width: '98%' ,paging: true ,autosave: true ,save_action: 'workspace/lexicon/updatefromgrid' ,columns: [{ header: _('name') ,dataIndex: 'name' ,width: 200 ,sortable: true ,renderer: this._renderStatus },{ header: _('value') ,dataIndex: 'value' ,width: 500 ,sortable: false ,editor: {xtype: 'textarea'} ,renderer: this._renderStatus },{ header: _('last_modified') ,dataIndex: 'editedon' ,width: 125 ,renderer: this._renderLastModDate }] ,tbar: [{ xtype: 'tbtext' ,text: _('namespace')+':' },{ xtype: 'modx-combo-namespace' ,id: 'modx-lexicon-filter-namespace' ,itemId: 'namespace' ,preselectValue: MODx.request['ns'] ? MODx.request['ns'] : '' ,width: 120 ,listeners: { 'select': {fn: this.changeNamespace,scope:this} } },{ xtype: 'tbtext' ,text: _('topic')+':' },{ xtype: 'modx-combo-lexicon-topic' ,id: 'modx-lexicon-filter-topic' ,itemId: 'topic' ,value: 'default' ,width: 120 ,baseParams: { action: 'workspace/lexicon/topic/getList' ,'namespace': MODx.request['ns'] ? MODx.request['ns'] : '' ,'language': 'en' } ,listeners: { 'select': {fn:this.changeTopic,scope:this} } },{ xtype: 'tbtext' ,text: _('language')+':' },{ xtype: 'modx-combo-language' ,name: 'language' ,id: 'modx-lexicon-filter-language' ,itemId: 'language' ,value: MODx.config.manager_language || 'en' ,width: 100 ,baseParams: { action: 'system/language/getlist' ,'namespace': MODx.request['ns'] ? MODx.request['ns'] : '' } ,listeners: { 'select': {fn:this.changeLanguage,scope:this} } } ,'->' ,{ xtype: 'button' ,text: _('entry_create') ,cls:'primary-button' ,handler: this.createEntry ,scope: this },{ xtype: 'textfield' ,name: 'name' ,id: 'modx-lexicon-filter-search' ,cls: 'x-form-filter' ,itemId: 'search' ,width: 120 ,emptyText: _('search')+'...' ,listeners: { 'change': {fn:this.filter.createDelegate(this,['search'],true),scope:this} ,'render': {fn: function(cmp) { new Ext.KeyMap(cmp.getEl(), { key: Ext.EventObject.ENTER ,fn: this.blur ,scope: cmp }); },scope:this} } },{ xtype: 'button' ,id: 'modx-lexicon-filter-clear' ,cls: 'x-form-filter-clear' ,itemId: 'clear' ,text: _('filter_clear') ,listeners: { 'click': {fn: this.clearFilter, scope: this}, 'mouseout': { fn: function(evt){ this.removeClass('x-btn-focus'); } } } }] ,pagingItems: [{ text: _('reload_from_base') ,handler: this.reloadFromBase ,scope: this } /* ,{ xtype: 'button' ,id: 'modx-lexicon-import-btn' ,text: _('lexicon_import') ,handler: function(btn,e) { this.loadWindow2(btn,e,{ xtype: 'modx-window-lexicon-import' ,listeners: { 'success': {fn:function(o) { var r = o.a.result.object; this.setFilterParams(r['namespace'],r.topic); },scope:this} ,'show': {fn:function() { var w = this.windows['modx-window-lexicon-import']; if (w) { var tf = w.fp.getComponent('topic'); var tb = this.getTopToolbar(); if (tf && tb) { tf.setValue(tb.getComponent('topic').getRawValue()); } } },scope: this} } }); } ,scope: this },{ xtype: 'button' ,id: 'modx-lexicon-export-btn' ,text: _('lexicon_export') ,handler: function(btn,e) { this.loadWindow2(btn,e,{ xtype: 'modx-window-lexicon-export' ,listeners: { 'success': {fn:function(o) { location.href = MODx.config.connector_url+'?action=workspace/lexicon/export&HTTP_MODAUTH='+MODx.siteId+'&download='+o.a.result.message; },scope:this} ,'show': {fn:function() { var w = this.windows['modx-window-lexicon-export']; var cb = w.fp.getComponent('topic'); if (cb) { var tb = this.getTopToolbar(); cb.setNamespace(tb.getComponent('namespace').getValue(),tb.getComponent('topic').getValue()); } },scope: this} } }); } ,scope: this }*/] }); MODx.grid.Lexicon.superclass.constructor.call(this,config); }; Ext.extend(MODx.grid.Lexicon,MODx.grid.Grid,{ console: null ,_renderStatus: function(v,md,rec,ri) { switch (rec.data.overridden) { case 1: return ''+v+'';break; case 2: return ''+v+''; default: return ''+v+''; } } ,_renderLastModDate: function(value) { if (Ext.isEmpty(value)) { return '—'; } return new Date(value*1000).format(MODx.config.manager_date_format + ' ' + MODx.config.manager_time_format); } ,filter: function(cb,r,i,name) { if (!name) {return false;} this.store.baseParams[name] = cb.getValue(); this.getBottomToolbar().changePage(1); //this.refresh(); return true; } ,clearFilter: function() { this.store.baseParams = { action: 'workspace/lexicon/getList' ,'namespace': 'core' ,topic: 'default' ,language: 'en' }; this.getBottomToolbar().changePage(1); var tb = this.getTopToolbar(); tb.getComponent('namespace').setValue('core'); var tcb = tb.getComponent('topic'); tcb.store.baseParams['namespace'] = 'core'; tcb.store.load(); tcb.setValue('default'); var tcl = tb.getComponent('language'); tcb.store.baseParams['namespace'] = 'core'; tcb.store.load(); tcl.setValue('en'); tb.getComponent('search').setValue(''); //this.refresh(); } ,changeNamespace: function(cb,nv,ov) { this.setFilterParams(cb.getValue(),'default','en'); } ,changeTopic: function(cb,nv,ov) { this.setFilterParams(null,cb.getValue()); } ,changeLanguage: function(cb,nv,ov) { this.setFilterParams(null,null,cb.getValue()); } ,setFilterParams: function(ns,t,l) { var tb = this.getTopToolbar(); if (!tb) {return false;} var tcb,tcl; if (ns) { tb.getComponent('namespace').setValue(ns); tcl = tb.getComponent('language'); if (tcl) { tcl.store.baseParams['namespace'] = ns; tcl.store.load({ callback: function() { tcl.setValue(l || 'en'); } }); } tcb = tb.getComponent('topic'); if (tcb) { tcb.store.baseParams['namespace'] = ns; tcb.store.baseParams['language'] = l ? l : (tcl ? tcl.getValue() : 'en'); tcb.store.load({ callback: function() { tcb.setValue(t || 'default'); } }); } } else if (t) { tcb = tb.getComponent('topic'); if (tcb) {tcb.setValue(t);} } var s = this.getStore(); if (s) { if (ns) {s.baseParams['namespace'] = ns;} if (t) {s.baseParams['topic'] = t || 'default';} if (l) {s.baseParams['language'] = l || 'en';} s.removeAll(); } this.getBottomToolbar().changePage(1); //this.refresh(); } ,loadWindow2: function(btn,e,o) { var tb = this.getTopToolbar(); this.menu.record = { 'namespace': tb.getComponent('namespace').getValue() ,language: tb.getComponent('language').getValue() }; if (o.xtype != 'modx-window-lexicon-import') { this.menu.record.topic = tb.getComponent('topic').getValue(); } this.loadWindow(btn, e, o); } ,reloadFromBase: function() { Ext.Ajax.timeout = 0; var topic = '/workspace/lexicon/reload/'; this.console = MODx.load({ xtype: 'modx-console' ,register: 'mgr' ,topic: topic }); this.console.on('complete',function(){ this.refresh(); },this); this.console.show(Ext.getBody()); MODx.Ajax.request({ url: this.config.url ,params: {action: 'workspace/lexicon/reloadFromBase' ,register: 'mgr' ,topic: topic} ,listeners: { 'success': {fn:function(r) { this.refresh(); },scope:this} } }); } ,revertEntry: function() { var p = this.menu.record; p.action = 'workspace/lexicon/revert'; MODx.Ajax.request({ url: this.config.url ,params: p ,listeners: { 'success': {fn:function(r) { this.refresh(); },scope:this} } }); } ,getMenu: function() { var r = this.getSelectionModel().getSelected(); var m = []; if (r.data.overridden) { m.push({ text: _('entry_revert') ,handler: this.revertEntry }); } return m; } ,createEntry: function(btn,e) { var r = this.menu.record || {}; var tb = this.getTopToolbar(); r['namespace'] = tb.getComponent('namespace').getValue(); r.language = tb.getComponent('language').getValue(); r.topic = tb.getComponent('topic').getValue(); if (!this.createEntryWindow) { this.createEntryWindow = MODx.load({ xtype: 'modx-window-lexicon-entry-create' ,record: r ,listeners: { 'success':{fn:function(o) { this.refresh(); },scope:this} } }); } this.createEntryWindow.reset(); this.createEntryWindow.setValues(r); this.createEntryWindow.show(e.target); } }); Ext.reg('modx-grid-lexicon',MODx.grid.Lexicon); /** * Generates the export lexicon window. * * @class MODx.window.ExportLexicon * @extends MODx.Window * @param {Object} config An object of options. * @xtype modx-window-lexicon-export */ MODx.window.ExportLexicon = function(config) { config = config || {}; this.ident = config.ident || 'explex'+Ext.id(); var r = config.record; Ext.applyIf(config,{ title: _('lexicon_export') ,url: MODx.config.connector_url ,action: 'workspace/lexicon/export' ,fileUpload: true ,fields: [{ html: _('lexicon_export_desc') ,border: false ,bodyStyle: 'margin: 10px;' ,id: 'modx-'+this.ident+'-desc' ,itemId: 'desc' ,anchor: '100%' },{ xtype: 'modx-combo-namespace' ,fieldLabel: _('namespace') ,name: 'namespace' ,id: 'modx-'+this.ident+'-namespace' ,itemId: 'namespace' ,anchor: '100%' ,listeners: { 'select': {fn: function(cb,r,i) { cle = this.fp.getComponent('topic'); if (cle) { cle.store.baseParams['namespace'] = cb.getValue(); cle.setValue(''); cle.store.reload(); } else {MODx.debug('cle not found');} },scope:this} } },{ xtype: 'modx-combo-lexicon-topic' ,fieldLabel: _('topic') ,name: 'topic' ,id: 'modx-'+this.ident+'-topic' ,itemId: 'topic' ,anchor: '100%' },{ xtype: 'modx-combo-language' ,fieldLabel: _('language') ,name: 'language' ,id: 'modx-'+this.ident+'-language' ,itemId: 'language' ,anchor: '100%' }] }); MODx.window.ExportLexicon.superclass.constructor.call(this,config); }; Ext.extend(MODx.window.ExportLexicon,MODx.Window); Ext.reg('modx-window-lexicon-export',MODx.window.ExportLexicon); MODx.window.LexiconEntryCreate = function(config) { config = config || {}; this.ident = config.ident || 'lexentc'+Ext.id(); var r = config.record; Ext.applyIf(config,{ title: _('entry_create') ,url: MODx.config.connector_url ,action: 'workspace/lexicon/create' ,fileUpload: true ,fields: [{ xtype: 'textfield' ,fieldLabel: _('name') ,id: 'modx-'+this.ident+'-name' ,itemId: 'name' ,name: 'name' ,anchor: '100%' },{ xtype: 'modx-combo-namespace' ,fieldLabel: _('namespace') ,name: 'namespace' ,id: 'modx-'+this.ident+'-namespace' ,itemId: 'namespace' ,anchor: '100%' ,listeners: { 'select': {fn: function(cb,r,i) { cle = this.fp.getComponent('topic'); if (cle) { cle.store.baseParams['namespace'] = cb.getValue(); cle.setValue(''); cle.store.reload(); } else {MODx.debug('cle not found');} },scope:this} } },{ xtype: 'modx-combo-lexicon-topic' ,fieldLabel: _('topic') ,name: 'topic' ,id: 'modx-'+this.ident+'-topic' ,itemId: 'topic' ,anchor: '100%' },{ xtype: 'modx-combo-language' ,fieldLabel: _('language') ,name: 'language' ,id: 'modx-'+this.ident+'-language' ,itemId: 'language' ,anchor: '100%' },{ xtype: 'textarea' ,fieldLabel: _('value') ,id: 'modx-'+this.ident+'-value' ,itemId: 'value' ,name: 'value' ,anchor: '100%' }] }); MODx.window.LexiconEntryCreate.superclass.constructor.call(this,config); }; Ext.extend(MODx.window.LexiconEntryCreate,MODx.Window); Ext.reg('modx-window-lexicon-entry-create',MODx.window.LexiconEntryCreate);