fred.window.Theme = function (config) {
config = config || {};
Ext.applyIf(config, {
title: _('fred.themes.create'),
closeAction: 'close',
isUpdate: false,
url: fred.config.connectorUrl,
action: 'mgr/themes/create',
modal: true,
autoHeight: true,
fields: this.getFields(config),
keys: [
{
key: Ext.EventObject.ENTER,
shift: true,
fn: this.submit,
scope: this
}
]
});
fred.window.Theme.superclass.constructor.call(this, config);
};
Ext.extend(fred.window.Theme, MODx.Window, {
getFields: function (config) {
return [
{
xtype: 'textfield',
name: 'id',
anchor: '100%',
hidden: true
},
{
xtype: 'textfield',
fieldLabel: _('fred.themes.name'),
name: 'name',
anchor: '100%',
allowBlank: false
},
{
xtype: 'textarea',
fieldLabel: _('fred.themes.description'),
name: 'description',
anchor: '100%',
allowBlank: true
}
];
}
});
Ext.reg('fred-window-theme', fred.window.Theme);
fred.window.ThemeDuplicate = function (config) {
config = config || {};
Ext.applyIf(config, {
title: _('fred.themes.duplicate'),
closeAction: 'close',
isUpdate: false,
url: fred.config.connectorUrl,
action: 'mgr/themes/duplicate',
modal: true,
fields: this.getFields(config),
autoHeight: true,
keys: [
{
key: Ext.EventObject.ENTER,
shift: true,
fn: this.submit,
scope: this
}
]
});
fred.window.ThemeDuplicate.superclass.constructor.call(this, config);
};
Ext.extend(fred.window.ThemeDuplicate, MODx.Window, {
getFields: function (config) {
return [
{
xtype: 'hidden',
name: 'id'
},
{
xtype: 'textfield',
fieldLabel: _('fred.themes.new_name'),
name: 'name',
anchor: '100%',
allowBlank: true
},
{
xtype: 'xcheckbox',
name: 'duplicate_theme_objects',
boxLabel: _('fred.themes.duplicate_theme_objects'),
hideLabel: true,
labelSeparator: ''
},
{
xtype: 'xcheckbox',
name: 'duplicate_theme_folder',
boxLabel: _('fred.themes.duplicate_theme_folder'),
hideLabel: true,
labelSeparator: ''
},
{
xtype: 'xcheckbox',
name: 'duplicate_templates',
boxLabel: _('fred.themes.duplicate_templates'),
hideLabel: true,
labelSeparator: ''
}
]
}
});
Ext.reg('fred-window-theme-duplicate', fred.window.ThemeDuplicate);
fred.window.ThemeBuild = function (config) {
config = config || {};
Ext.applyIf(config, {
title: _('fred.themes.duplicate'),
closeAction: 'close',
isUpdate: false,
url: fred.config.connectorUrl,
action: 'mgr/themes/build',
modal: true,
fields: this.getFields(config),
autoHeight: true,
width: 800,
keys: [
{
key: Ext.EventObject.ENTER,
shift: true,
fn: this.submit,
scope: this
}
],
buttonAlign: 'left',
buttons: [
{
xtype: 'fred-button-help',
path: 'cmp/themes/#build'
}, '->', {
text: config.cancelBtnText || _('cancel'),
scope: this,
handler: function () {
config.closeAction !== 'close' ? this.hide() : this.close();
}
},
{
text: _('fred.themes.build'),
scope: this,
handler: this.submit
},
{
text: _('fred.themes.build_and_download'),
cls: 'primary-button',
scope: this,
handler: function () {
this.on('success', function () {
fred.loadPage('theme/download', {theme: this.record.id});
}, this, {single: true});
this.submit();
}
}
]
});
fred.window.ThemeBuild.superclass.constructor.call(this, config);
this.on('beforeSubmit', function () {
var dependencies = this.find('name', 'dependencies')[0];
dependencies.setValue(Ext.getCmp('fred-window-theme-build-dependencies').encode());
}, this);
this.on('failure', function(a) {
try {
var response = JSON.parse(a.a.response.responseText);
var msg = [];
if (response.data && Array.isArray(response.data)) {
response.data.forEach(function(item) {
msg.push(item.msg);
});
}
if (msg.length > 0) {
msg = msg.join('
');
} else {
msg = _('error');
}
Ext.Msg.alert(_('error'), msg);
} catch (err) {
Ext.Msg.alert(_('error'), _('error'));
}
});
};
Ext.extend(fred.window.ThemeBuild, MODx.Window, {
getFields: function (config) {
return [
{
xtype: 'hidden',
name: 'id'
},
{
html: '
' + _('fred.themes.theme_build_desc') + '
' }, { xtype: 'modx-tabs', deferredRender: false, defaults: { border: false, autoHeight: true, labelSeparator: '', layout: 'form', msgTarget: 'under' }, border: false, hideMode: 'offsets', items: [ { title: _('fred.themes.overview'), items: [ { xtype: 'textfield', fieldLabel: _('fred.themes.name'), name: 'name', anchor: '100%', regex: /^[a-z_]+$/, regexText: _('fred.err.theme_name_invalid_format'), allowBlank: false, msgTarget: 'under' }, { layout: 'column', border: false, anchor: '100%', defaults: { layout: 'form', labelAlign: 'top', labelSeparator: '', anchor: '100%', border: false }, items: [ { columnWidth: .5, border: false, defaults: { msgTarget: 'under', anchor: '100%' }, items: [ { xtype: 'textfield', fieldLabel: _('fred.themes.version'), name: 'version', anchor: '100%', allowBlank: false, regex: /^[0-9]+\.[0-9]+\.[0-9]+$/, regexText: _('fred.err.themes_version_number_format') } ] }, { columnWidth: .5, border: false, defaults: { msgTarget: 'under', anchor: '100%' }, items: [ { xtype: 'textfield', fieldLabel: _('fred.themes.release'), name: 'release', anchor: '100%', allowBlank: false, regex: /^(pl|beta|alpha)[0-9]*$/, regexText: _('fred.err.themes_release_format') } ] }, ] }, { xtype: 'fred-combo-root-category', fieldLabel: _('fred.themes.categories'), name: 'categories', hiddenName: 'categories[]', anchor: '100%' }, { xtype: 'statictextfield', fieldLabel: _('fred.themes.included_theme_folder'), anchor: '100%', value: ('/assets/themes/' + config.record.theme_folder + '/') || '' } ] }, { title: _('fred.themes.dependencies'), items: [ { html: '' + _('fred.themes.theme_build_dependencies_desc') + '
' }, { xtype: 'hidden', name: 'dependencies' }, { id: 'fred-window-theme-build-dependencies', xtype: 'fred-grid-dependencies', initValue: (config.record && config.record.dependencies) ? config.record.dependencies : [{ name: "fred", version: '*' }] } ] }, { title: _('fred.themes.changelog'), items: [ { html: '' + _('fred.themes.theme_build_changelog_desc') + '
' }, { xtype: Ext.ComponentMgr.isRegistered('modx-texteditor') ? 'modx-texteditor' : 'textarea', fieldLabel: _('fred.themes.changelog'), name: 'docs_changelog', anchor: '100%', grow: true, growMax: 300, growMin: 200, allowBlank: false } ] }, { title: _('fred.themes.readme'), items: [ { html: '' + _('fred.themes.theme_build_readme_desc') + '
' }, { xtype: Ext.ComponentMgr.isRegistered('modx-texteditor') ? 'modx-texteditor' : 'textarea', fieldLabel: _('fred.themes.readme'), name: 'docs_readme', anchor: '100%', grow: true, growMax: 300, growMin: 200, allowBlank: false } ] }, { title: _('fred.themes.license'), items: [ { html: '' + _('fred.themes.theme_build_license_desc') + '
' }, { xtype: Ext.ComponentMgr.isRegistered('modx-texteditor') ? 'modx-texteditor' : 'textarea', fieldLabel: _('fred.themes.license'), name: 'docs_license', anchor: '100%', grow: true, growMax: 300, growMin: 200, allowBlank: false } ] } ] } ] } }); Ext.reg('fred-window-theme-build', fred.window.ThemeBuild); fred.window.RemoveTheme = function (config) { config = config || {}; Ext.applyIf(config, { title: _('fred.themes.remove'), closeAction: 'close', isUpdate: false, url: fred.config.connectorUrl, action: 'mgr/themes/remove', modal: true, autoHeight: true, animCollapse: false, cls: 'x-window-dlg', fields: this.getFields(config), buttonAlign: 'center', buttons: [ { text: _('yes'), scope: this, handler: this.submit }, { text: _('no'), scope: this, handler: function () { config.closeAction !== 'close' ? this.hide() : this.close(); } } ] }); fred.window.RemoveTheme.superclass.constructor.call(this, config); }; Ext.extend(fred.window.RemoveTheme, MODx.Window, { getFields: function (config) { return [ { xtype: 'hidden', name: 'id' }, { html: '' }, { xtype: 'xcheckbox', name: 'delete_theme_folder', boxLabel: _('fred.themes.delete_theme_folder'), hideLabel: true, labelSeparator: '' } ]; }, animShow: function () { this.afterShow(); } }); Ext.reg('fred-window-remove-theme', fred.window.RemoveTheme);