From 340e0ba88083806a811dccdac0b435ab87b0156f Mon Sep 17 00:00:00 2001
From: Ivan Klimchuk
Date: Fri, 20 Jul 2018 09:59:43 +0300
Subject: [PATCH 1/7] Translated descriptions for policies, policy templates
and policy template groups
Reset translation files
---
...p => transport.policy.tpl.mediasource.php} | 0
_build/data/transport.core.accesspolicies.php | 180 +++++-------------
...nsport.core.accesspolicytemplategroups.php | 58 ++----
.../transport.core.accesspolicytemplates.php | 105 ++--------
_build/resolvers/resolve.policies.php | 22 +--
_build/resolvers/resolve.policytemplates.php | 36 ++--
core/lexicon/en/policy.inc.php | 35 +++-
.../Processors/Model/GetListProcessor.php | 3 +
.../Security/Access/Policy/GetList.php | 46 +++--
.../Access/Policy/Template/GetList.php | 27 ++-
.../Access/Policy/Template/Group/GetList.php | 23 ++-
.../Access/Policy/Template/UpdateFromGrid.php | 15 +-
core/src/Revolution/modAccessPolicy.php | 46 +++++
.../Revolution/modAccessPolicyTemplate.php | 35 ++++
.../modAccessPolicyTemplateGroup.php | 34 ++++
...odx.combo.access.policy.template.groups.js | 27 +++
.../security/modx.grid.access.policy.js | 11 +-
.../modx.grid.access.policy.template.js | 37 +---
.../security/modx.panel.access.policy.js | 30 ---
.../modx.panel.access.policy.template.js | 141 ++++++++------
.../security/modx.panel.groups.roles.js | 17 +-
.../access/policy/template/update.class.php | 3 +
.../default/security/permission.class.php | 2 +
.../common/3.0-policy-description.php | 19 ++
.../3.0-policy-template-description.php | 19 ++
.../3.0-policy-template-group-description.php | 22 +++
setup/includes/upgrades/mysql/3.0.0-pl.php | 3 +
setup/includes/upgrades/sqlsrv/3.0.0-pl.php | 3 +
28 files changed, 544 insertions(+), 455 deletions(-)
rename _build/data/permissions/{transport.policy.tpl.media_source.php => transport.policy.tpl.mediasource.php} (100%)
create mode 100644 manager/assets/modext/widgets/security/modx.combo.access.policy.template.groups.js
create mode 100644 setup/includes/upgrades/common/3.0-policy-description.php
create mode 100644 setup/includes/upgrades/common/3.0-policy-template-description.php
create mode 100644 setup/includes/upgrades/common/3.0-policy-template-group-description.php
diff --git a/_build/data/permissions/transport.policy.tpl.media_source.php b/_build/data/permissions/transport.policy.tpl.mediasource.php
similarity index 100%
rename from _build/data/permissions/transport.policy.tpl.media_source.php
rename to _build/data/permissions/transport.policy.tpl.mediasource.php
diff --git a/_build/data/transport.core.accesspolicies.php b/_build/data/transport.core.accesspolicies.php
index 2920567f277..fe5725e1ecb 100644
--- a/_build/data/transport.core.accesspolicies.php
+++ b/_build/data/transport.core.accesspolicies.php
@@ -9,136 +9,54 @@
$policies = [];
-$policies['1']= $xpdo->newObject(modAccessPolicy::class);
-$policies['1']->fromArray([
- 'id' => 1,
- 'name' => 'Resource',
- 'description' => 'MODX Resource Policy with all attributes.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"add_children":true,"create":true,"copy":true,"delete":true,"list":true,"load":true,"move":true,"publish":true,"remove":true,"save":true,"steal_lock":true,"undelete":true,"unpublish":true,"view":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['2']= $xpdo->newObject(modAccessPolicy::class);
-$policies['2']->fromArray([
- 'id' => 2,
- 'name' => 'Administrator',
- 'description' => 'Context administration policy with all permissions.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"about":true,"access_permissions":true,"actions":true,"change_password":true,"change_profile":true,"charsets":true,"class_map":true,"components":true,"content_types":true,"countries":true,"create":true,"credits":true,"customize_forms":true,"dashboards":true,"database":true,"database_truncate":true,"delete_category":true,"delete_chunk":true,"delete_context":true,"delete_document":true,"delete_eventlog":true,"delete_plugin":true,"delete_propertyset":true,"delete_role":true,"delete_snippet":true,"delete_template":true,"delete_tv":true,"delete_user":true,"directory_chmod":true,"directory_create":true,"directory_list":true,"directory_remove":true,"directory_update":true,"edit_category":true,"edit_chunk":true,"edit_context":true,"edit_document":true,"edit_locked":true,"edit_plugin":true,"edit_propertyset":true,"edit_role":true,"edit_snippet":true,"edit_template":true,"edit_tv":true,"edit_user":true,"element_tree":true,"empty_cache":true,"error_log_erase":true,"error_log_view":true,"events":true,"export_static":true,"file_create":true,"file_list":true,"file_manager":true,"file_remove":true,"file_tree":true,"file_update":true,"file_upload":true,"file_unpack":true,"file_view":true,"flush_sessions":true,"frames":true,"help":true,"home":true,"import_static":true,"languages":true,"lexicons":true,"list":true,"load":true,"logout":true,"logs":true,"menus":true,"menu_reports":true,"menu_security":true,"menu_site":true,"menu_support":true,"menu_system":true,"menu_tools":true,"menu_user":true,"messages":true,"namespaces":true,"new_category":true,"new_chunk":true,"new_context":true,"new_document":true,"new_document_in_root":true,"new_plugin":true,"new_propertyset":true,"new_role":true,"new_snippet":true,"new_static_resource":true,"new_symlink":true,"new_template":true,"new_tv":true,"new_user":true,"new_weblink":true,"packages":true,"policy_delete":true,"policy_edit":true,"policy_new":true,"policy_save":true,"policy_template_delete":true,"policy_template_edit":true,"policy_template_new":true,"policy_template_save":true,"policy_template_view":true,"policy_view":true,"property_sets":true,"providers":true,"publish_document":true,"purge_deleted":true,"remove":true,"remove_locks":true,"resource_duplicate":true,"resourcegroup_delete":true,"resourcegroup_edit":true,"resourcegroup_new":true,"resourcegroup_resource_edit":true,"resourcegroup_resource_list":true,"resourcegroup_save":true,"resourcegroup_view":true,"resource_quick_create":true,"resource_quick_update":true,"resource_tree":true,"save":true,"save_category":true,"save_chunk":true,"save_context":true,"save_document":true,"save_plugin":true,"save_propertyset":true,"save_role":true,"save_snippet":true,"save_template":true,"save_tv":true,"save_user":true,"search":true,"set_sudo":true,"settings":true,"sources":true,"source_delete":true,"source_edit":true,"source_save":true,"source_view":true,"steal_locks":true,"tree_show_element_ids":true,"tree_show_resource_ids":true,"undelete_document":true,"unlock_element_properties":true,"unpublish_document":true,"usergroup_delete":true,"usergroup_edit":true,"usergroup_new":true,"usergroup_save":true,"usergroup_user_edit":true,"usergroup_user_list":true,"usergroup_view":true,"view":true,"view_category":true,"view_chunk":true,"view_context":true,"view_document":true,"view_element":true,"view_eventlog":true,"view_offline":true,"view_plugin":true,"view_propertyset":true,"view_role":true,"view_snippet":true,"view_sysinfo":true,"view_template":true,"view_tv":true,"view_unpublished":true,"view_user":true,"workspaces":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['3']= $xpdo->newObject(modAccessPolicy::class);
-$policies['3']->fromArray([
- 'id' => 3,
- 'name' => 'Load Only',
- 'description' => 'A minimal policy with permission to load an object.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"load":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['4']= $xpdo->newObject(modAccessPolicy::class);
-$policies['4']->fromArray([
- 'id' => 4,
- 'name' => 'Load, List and View',
- 'description' => 'Provides load, list and view permissions only.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"load":true,"list":true,"view":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['5']= $xpdo->newObject(modAccessPolicy::class);
-$policies['5']->fromArray([
- 'id' => 5,
- 'name' => 'Object',
- 'description' => 'An Object policy with all permissions.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"load":true,"list":true,"view":true,"save":true,"remove":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['6']= $xpdo->newObject(modAccessPolicy::class);
-$policies['6']->fromArray([
- 'id' => 6,
- 'name' => 'Element',
- 'description' => 'MODX Element policy with all attributes.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"add_children":true,"create":true,"delete":true,"list":true,"load":true,"remove":true,"save":true,"view":true,"copy":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['7']= $xpdo->newObject(modAccessPolicy::class);
-$policies['7']->fromArray([
- 'id' => 7,
- 'name' => 'Content Editor',
- 'description' => 'Context administration policy with limited, content-editing related Permissions, but no publishing.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"change_profile":true,"class_map":true,"countries":true,"edit_document":true,"frames":true,"help":true,"home":true,"load":true,"list":true,"logout":true,"menu_reports":true,"menu_site":true,"menu_support":true,"menu_tools":true,"menu_user":true,"resource_duplicate":true,"resource_tree":true,"save_document":true,"source_view":true,"tree_show_resource_ids":true,"view":true,"view_document":true,"view_template":true,"new_document":true,"delete_document":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['8']= $xpdo->newObject(modAccessPolicy::class);
-$policies['8']->fromArray([
- 'id' => 8,
- 'name' => 'Media Source Admin',
- 'description' => 'Media Source administration policy.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"create":true,"copy":true,"load":true,"list":true,"save":true,"remove":true,"view":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['9']= $xpdo->newObject(modAccessPolicy::class);
-$policies['9']->fromArray([
- 'id' => 9,
- 'name' => 'Media Source User',
- 'description' => 'Media Source user policy, with basic viewing and using - but no editing - of Media Sources.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"load":true,"list":true,"view":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['10']= $xpdo->newObject(modAccessPolicy::class);
-$policies['10']->fromArray([
- 'id' => 10,
- 'name' => 'Developer',
- 'description' => 'Context administration policy with most Permissions except Administrator and Security functions.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"about":true,"change_password":true,"change_profile":true,"charsets":true,"class_map":true,"components":true,"content_types":true,"countries":true,"create":true,"credits":true,"customize_forms":true,"dashboards":true,"database":true,"delete_category":true,"delete_chunk":true,"delete_context":true,"delete_document":true,"delete_eventlog":true,"delete_plugin":true,"delete_propertyset":true,"delete_snippet":true,"delete_template":true,"delete_tv":true,"delete_role":true,"delete_user":true,"directory_chmod":true,"directory_create":true,"directory_list":true,"directory_remove":true,"directory_update":true,"edit_category":true,"edit_chunk":true,"edit_context":true,"edit_document":true,"edit_locked":true,"edit_plugin":true,"edit_propertyset":true,"edit_role":true,"edit_snippet":true,"edit_template":true,"edit_tv":true,"edit_user":true,"element_tree":true,"empty_cache":true,"error_log_erase":true,"error_log_view":true,"export_static":true,"file_create":true,"file_list":true,"file_manager":true,"file_remove":true,"file_tree":true,"file_update":true,"file_upload":true,"file_unpack":true,"file_view":true,"frames":true,"help":true,"home":true,"import_static":true,"languages":true,"lexicons":true,"list":true,"load":true,"logout":true,"logs":true,"menu_reports":true,"menu_site":true,"menu_support":true,"menu_system":true,"menu_tools":true,"menu_user":true,"menus":true,"messages":true,"namespaces":true,"new_category":true,"new_chunk":true,"new_context":true,"new_document":true,"new_static_resource":true,"new_symlink":true,"new_weblink":true,"new_document_in_root":true,"new_plugin":true,"new_propertyset":true,"new_role":true,"new_snippet":true,"new_template":true,"new_tv":true,"new_user":true,"packages":true,"property_sets":true,"providers":true,"publish_document":true,"purge_deleted":true,"remove":true,"resource_duplicate":true,"resource_quick_create":true,"resource_quick_update":true,"resource_tree":true,"save":true,"save_category":true,"save_chunk":true,"save_context":true,"save_document":true,"save_plugin":true,"save_propertyset":true,"save_snippet":true,"save_template":true,"save_tv":true,"save_user":true,"search":true,"settings":true,"source_delete":true,"source_edit":true,"source_save":true,"source_view":true,"sources":true,"tree_show_element_ids":true,"tree_show_resource_ids":true,"undelete_document":true,"unpublish_document":true,"unlock_element_properties":true,"view":true,"view_category":true,"view_chunk":true,"view_context":true,"view_document":true,"view_element":true,"view_eventlog":true,"view_offline":true,"view_plugin":true,"view_propertyset":true,"view_role":true,"view_snippet":true,"view_sysinfo":true,"view_template":true,"view_tv":true,"view_user":true,"view_unpublished":true,"workspaces":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['11']= $xpdo->newObject(modAccessPolicy::class);
-$policies['11']->fromArray([
- 'id' => 11,
- 'name' => 'Context',
- 'description' => 'A standard Context policy that you can apply when creating Context ACLs for basic read/write and view_unpublished access within a Context.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"load":true,"list":true,"view":true,"save":true,"remove":true,"copy":true,"view_unpublished":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
-
-$policies['12']= $xpdo->newObject(modAccessPolicy::class);
-$policies['12']->fromArray([
- 'id' => 12,
- 'name' => 'Hidden Namespace',
- 'description' => 'Hidden Namespace policy, will not show Namespace in lists.',
- 'parent' => 0,
- 'class' => '',
- 'data' => '{"load":false,"list":false,"view":true}',
- 'lexicon' => 'permissions',
-], '', true, true);
+function jsonifyPermissions(array $permissions = []) {
+ $data = [];
+ foreach ($permissions as $key => $permission) {
+ if (is_string($key) && is_bool($permission)) {
+ $data[$key] = $permission;
+ } else {
+ $data[$permission] = true;
+ }
+ }
+ return json_encode($data);
+}
+
+$corePermissions = [
+ modAccessPolicy::POLICY_RESOURCE => ['add_children', 'create', 'copy', 'delete', 'list', 'load', 'move', 'publish', 'remove', 'save', 'steal_lock', 'undelete', 'unpublish', 'view'],
+ modAccessPolicy::POLICY_ADMINISTRATOR => ['about', 'access_permissions', 'actions', 'change_password', 'change_profile', 'charsets', 'class_map', 'components', 'content_types', 'countries', 'create', 'credits', 'customize_forms', 'dashboards', 'database', 'database_truncate', 'delete_category', 'delete_chunk', 'delete_context', 'delete_document', 'delete_eventlog', 'delete_plugin', 'delete_propertyset', 'delete_role', 'delete_snippet', 'delete_template', 'delete_tv', 'delete_user', 'directory_chmod', 'directory_create', 'directory_list', 'directory_remove', 'directory_update', 'edit_category', 'edit_chunk', 'edit_context', 'edit_document', 'edit_locked', 'edit_plugin', 'edit_propertyset', 'edit_role', 'edit_snippet', 'edit_template', 'edit_tv', 'edit_user', 'element_tree', 'empty_cache', 'error_log_erase', 'error_log_view', 'events', 'export_static', 'file_create', 'file_list', 'file_manager', 'file_remove', 'file_tree', 'file_update', 'file_upload', 'file_unpack', 'file_view', 'flush_sessions', 'frames', 'help', 'home', 'import_static', 'languages', 'lexicons', 'list', 'load', 'logout', 'logs', 'menus', 'menu_reports', 'menu_security', 'menu_site', 'menu_support', 'menu_system', 'menu_tools', 'menu_user', 'messages', 'namespaces', 'new_category', 'new_chunk', 'new_context', 'new_document', 'new_document_in_root', 'new_plugin', 'new_propertyset', 'new_role', 'new_snippet', 'new_static_resource', 'new_symlink', 'new_template', 'new_tv', 'new_user', 'new_weblink', 'packages', 'policy_delete', 'policy_edit', 'policy_new', 'policy_save', 'policy_template_delete', 'policy_template_edit', 'policy_template_new', 'policy_template_save', 'policy_template_view', 'policy_view', 'property_sets', 'providers', 'publish_document', 'purge_deleted', 'remove', 'remove_locks', 'resource_duplicate', 'resourcegroup_delete', 'resourcegroup_edit', 'resourcegroup_new', 'resourcegroup_resource_edit', 'resourcegroup_resource_list', 'resourcegroup_save', 'resourcegroup_view', 'resource_quick_create', 'resource_quick_update', 'resource_tree', 'save', 'save_category', 'save_chunk', 'save_context', 'save_document', 'save_plugin', 'save_propertyset', 'save_role', 'save_snippet', 'save_template', 'save_tv', 'save_user', 'search', 'set_sudo', 'settings', 'sources', 'source_delete', 'source_edit', 'source_save', 'source_view', 'steal_locks', 'tree_show_element_ids', 'tree_show_resource_ids', 'undelete_document', 'unlock_element_properties', 'unpublish_document', 'usergroup_delete', 'usergroup_edit', 'usergroup_new', 'usergroup_save', 'usergroup_user_edit', 'usergroup_user_list', 'usergroup_view', 'view', 'view_category', 'view_chunk', 'view_context', 'view_document', 'view_element', 'view_eventlog', 'view_offline', 'view_plugin', 'view_propertyset', 'view_role', 'view_snippet', 'view_sysinfo', 'view_template', 'view_tv', 'view_unpublished', 'view_user', 'workspaces'],
+ modAccessPolicy::POLICY_LOAD_ONLY => ['load'],
+ modAccessPolicy::POLICY_LOAD_LIST_VIEW => ['load', 'list', 'view'],
+ modAccessPolicy::POLICY_OBJECT => ['load', 'list', 'view', 'save', 'remove'],
+ modAccessPolicy::POLICY_ELEMENT => ['add_children', 'create', 'delete', 'list', 'load', 'remove', 'save', 'view', 'copy'],
+ modAccessPolicy::POLICY_CONTENT_EDITOR => ['change_profile', 'class_map', 'countries', 'edit_document', 'frames', 'help', 'home', 'load', 'list', 'logout', 'menu_reports', 'menu_site', 'menu_support', 'menu_tools', 'menu_user', 'resource_duplicate', 'resource_tree', 'save_document', 'source_view', 'tree_show_resource_ids', 'view', 'view_document', 'view_template', 'new_document', 'delete_document'],
+ modAccessPolicy::POLICY_MEDIA_SOURCE_ADMIN => ['create', 'copy', 'load', 'list', 'save', 'remove', 'view'],
+ modAccessPolicy::POLICY_MEDIA_SOURCE_USER => ['load', 'list', 'view'],
+ modAccessPolicy::POLICY_DEVELOPER => ['about', 'change_password', 'change_profile', 'charsets', 'class_map', 'components', 'content_types', 'countries', 'create', 'credits', 'customize_forms', 'dashboards', 'database', 'delete_category', 'delete_chunk', 'delete_context', 'delete_document', 'delete_eventlog', 'delete_plugin', 'delete_propertyset', 'delete_snippet', 'delete_template', 'delete_tv', 'delete_role', 'delete_user', 'directory_chmod', 'directory_create', 'directory_list', 'directory_remove', 'directory_update', 'edit_category', 'edit_chunk', 'edit_context', 'edit_document', 'edit_locked', 'edit_plugin', 'edit_propertyset', 'edit_role', 'edit_snippet', 'edit_template', 'edit_tv', 'edit_user', 'element_tree', 'empty_cache', 'error_log_erase', 'error_log_view', 'export_static', 'file_create', 'file_list', 'file_manager', 'file_remove', 'file_tree', 'file_update', 'file_upload', 'file_unpack', 'file_view', 'frames', 'help', 'home', 'import_static', 'languages', 'lexicons', 'list', 'load', 'logout', 'logs', 'menu_reports', 'menu_site', 'menu_support', 'menu_system', 'menu_tools', 'menu_user', 'menus', 'messages', 'namespaces', 'new_category', 'new_chunk', 'new_context', 'new_document', 'new_static_resource', 'new_symlink', 'new_weblink', 'new_document_in_root', 'new_plugin', 'new_propertyset', 'new_role', 'new_snippet', 'new_template', 'new_tv', 'new_user', 'packages', 'property_sets', 'providers', 'publish_document', 'purge_deleted', 'remove', 'resource_duplicate', 'resource_quick_create', 'resource_quick_update', 'resource_tree', 'save', 'save_category', 'save_chunk', 'save_context', 'save_document', 'save_plugin', 'save_propertyset', 'save_snippet', 'save_template', 'save_tv', 'save_user', 'search', 'settings', 'source_delete', 'source_edit', 'source_save', 'source_view', 'sources', 'tree_show_element_ids', 'tree_show_resource_ids', 'undelete_document', 'unpublish_document', 'unlock_element_properties', 'view', 'view_category', 'view_chunk', 'view_context', 'view_document', 'view_element', 'view_eventlog', 'view_offline', 'view_plugin', 'view_propertyset', 'view_role', 'view_snippet', 'view_sysinfo', 'view_template', 'view_tv', 'view_user', 'view_unpublished', 'workspaces'],
+ modAccessPolicy::POLICY_CONTEXT => ['load', 'list', 'view', 'save', 'remove', 'copy', 'view_unpublished'],
+ modAccessPolicy::POLICY_HIDDEN_NAMESPACE => ['load' => false, 'list' => false, 'view' => true],
+];
+
+foreach (modAccessPolicy::getCorePolicies() as $index => $policyName) {
+
+ $policyNameLowered = str_replace([',', ' '], ['', '_'], strtolower($policyName));
+
+ $policy = $xpdo->newObject(modAccessPolicy::class);
+ $policy->fromArray(
+ [
+ 'id' => $index + 1,
+ 'name' => $policyName,
+ 'description' => sprintf('policy_%s_desc', $policyNameLowered),
+ 'parent' => 0,
+ 'class' => '',
+ 'data' => jsonifyPermissions($corePermissions[$policyName]),
+ 'lexicon' => 'permissions',
+ ],
+ '',
+ true,
+ true
+ );
+
+ $policies[] = $policy;
+}
return $policies;
diff --git a/_build/data/transport.core.accesspolicytemplategroups.php b/_build/data/transport.core.accesspolicytemplategroups.php
index c76adc2c406..f9852b6d970 100644
--- a/_build/data/transport.core.accesspolicytemplategroups.php
+++ b/_build/data/transport.core.accesspolicytemplategroups.php
@@ -7,56 +7,24 @@
* For complete copyright and license information, see the COPYRIGHT and LICENSE
* files found in the top-level directory of this distribution.
*/
+
use MODX\Revolution\modAccessPolicyTemplateGroup;
$templateGroups = [];
-/* administrator group templates */
-$templateGroups['1']= $xpdo->newObject(modAccessPolicyTemplateGroup::class);
-$templateGroups['1']->fromArray([
- 'id' => 1,
- 'name' => 'Admin',
- 'description' => 'All admin policy templates.',
-]);
-
-/* Object group templates */
-$templateGroups['2']= $xpdo->newObject(modAccessPolicyTemplateGroup::class);
-$templateGroups['2']->fromArray([
- 'id' => 2,
- 'name' => 'Object',
- 'description' => 'All Object-based policy templates.',
-]);
-
-/* Resource group templates */
-$templateGroups['3']= $xpdo->newObject(modAccessPolicyTemplateGroup::class);
-$templateGroups['3']->fromArray([
- 'id' => 3,
- 'name' => 'Resource',
- 'description' => 'All Resource-based policy templates.',
-]);
-
-/* Element group templates */
-$templateGroups['4']= $xpdo->newObject(modAccessPolicyTemplateGroup::class);
-$templateGroups['4']->fromArray([
- 'id' => 4,
- 'name' => 'Element',
- 'description' => 'All Element-based policy templates.',
-]);
+$groups = modAccessPolicyTemplateGroup::getCoreGroups();
-/* Media Source group templates */
-$templateGroups['5']= $xpdo->newObject(modAccessPolicyTemplateGroup::class);
-$templateGroups['5']->fromArray([
- 'id' => 5,
- 'name' => 'MediaSource',
- 'description' => 'All Media Source-based policy templates.',
-]);
+foreach (modAccessPolicyTemplateGroup::getCoreGroups() as $index => $groupName) {
+ $group = $xpdo->newObject(modAccessPolicyTemplateGroup::class);
+ $group->fromArray(
+ [
+ 'id' => $index + 1,
+ 'name' => $groupName,
+ 'description' => sprintf('policy_template_group_%s_desc', strtolower($groupName)),
+ ]
+ );
-/* Namespace group templates */
-$templateGroups['6']= $xpdo->newObject(modAccessPolicyTemplateGroup::class);
-$templateGroups['6']->fromArray([
- 'id' => 6,
- 'name' => 'Namespace',
- 'description' => 'All Namespace based policy templates.',
-]);
+ $templateGroups[] = $group;
+}
return $templateGroups;
diff --git a/_build/data/transport.core.accesspolicytemplates.php b/_build/data/transport.core.accesspolicytemplates.php
index 1e831314880..6ad27c74b88 100644
--- a/_build/data/transport.core.accesspolicytemplates.php
+++ b/_build/data/transport.core.accesspolicytemplates.php
@@ -7,99 +7,34 @@
* For complete copyright and license information, see the COPYRIGHT and LICENSE
* files found in the top-level directory of this distribution.
*/
+
use MODX\Revolution\modAccessPolicyTemplate;
$templates = [];
-/* administrator template/policy */
-$templates['1']= $xpdo->newObject(modAccessPolicyTemplate::class);
-$templates['1']->fromArray([
- 'id' => 1,
- 'name' => 'AdministratorTemplate',
- 'description' => 'Context administration policy template with all permissions.',
- 'lexicon' => 'permissions',
-]);
-$permissions = include dirname(__FILE__).'/permissions/transport.policy.tpl.administrator.php';
-if (is_array($permissions)) {
- $templates['1']->addMany($permissions);
-} else { $xpdo->log(xPDO::LOG_LEVEL_ERROR,'Could not load Administrator Policy Template.'); }
-
-/* resource template/policy */
-$templates['2']= $xpdo->newObject(modAccessPolicyTemplate::class);
-$templates['2']->fromArray([
- 'id' => 2,
- 'name' => 'ResourceTemplate',
- 'description' => 'Resource Policy Template with all attributes.',
- 'lexicon' => 'permissions',
-]);
-$permissions = include dirname(__FILE__).'/permissions/transport.policy.tpl.resource.php';
-if (is_array($permissions)) {
- $templates['2']->addMany($permissions);
-} else { $xpdo->log(xPDO::LOG_LEVEL_ERROR,'Could not load Resource Template Permissions.'); }
+foreach (modAccessPolicyTemplate::getCoreTemplates() as $index => $templateName) {
-/* object template and policies */
-$templates['3']= $xpdo->newObject(modAccessPolicyTemplate::class);
-$templates['3']->fromArray([
- 'id' => 3,
- 'name' => 'ObjectTemplate',
- 'description' => 'Object Policy Template with all attributes.',
- 'lexicon' => 'permissions',
-]);
-$permissions = include dirname(__FILE__).'/permissions/transport.policy.tpl.object.php';
-if (is_array($permissions)) {
- $templates['3']->addMany($permissions);
-} else { $xpdo->log(xPDO::LOG_LEVEL_ERROR,'Could not load Object Template Permissions.'); }
+ $templateNameLowered = str_replace('template', '', strtolower($templateName));
-/* element template/policy */
-$templates['4']= $xpdo->newObject(modAccessPolicyTemplate::class);
-$templates['4']->fromArray([
- 'id' => 4,
- 'name' => 'ElementTemplate',
- 'description' => 'Element Policy Template with all attributes.',
- 'lexicon' => 'permissions',
-]);
-$permissions = include dirname(__FILE__).'/permissions/transport.policy.tpl.element.php';
-if (is_array($permissions)) {
- $templates['4']->addMany($permissions);
-} else { $xpdo->log(xPDO::LOG_LEVEL_ERROR,'Could not load Element Template Permissions.'); }
+ $template = $xpdo->newObject(modAccessPolicyTemplate::class);
+ $template->fromArray(
+ [
+ 'id' => $index + 1,
+ 'name' => $templateName,
+ 'description' => sprintf('policy_template_%s_desc', $templateNameLowered),
+ 'lexicon' => 'permissions',
+ ]
+ );
-/* media source template/policy */
-$templates['5']= $xpdo->newObject(modAccessPolicyTemplate::class);
-$templates['5']->fromArray([
- 'id' => 5,
- 'name' => 'MediaSourceTemplate',
- 'description' => 'Media Source Policy Template with all attributes.',
- 'lexicon' => 'permissions',
-]);
-$permissions = include dirname(__FILE__).'/permissions/transport.policy.tpl.media_source.php';
-if (is_array($permissions)) {
- $templates['5']->addMany($permissions);
-} else { $xpdo->log(xPDO::LOG_LEVEL_ERROR,'Could not load Media Source Template Permissions.'); }
+ $permissions = include __DIR__ . sprintf('/permissions/transport.policy.tpl.%s.php', $templateNameLowered);
-/* context template policies */
-$templates['6']= $xpdo->newObject(modAccessPolicyTemplate::class);
-$templates['6']->fromArray([
- 'id' => 6,
- 'name' => 'ContextTemplate',
- 'description' => 'Context Policy Template with all attributes.',
- 'lexicon' => 'permissions',
-]);
-$permissions = include dirname(__FILE__).'/permissions/transport.policy.tpl.context.php';
-if (is_array($permissions)) {
- $templates['6']->addMany($permissions);
-} else { $xpdo->log(xPDO::LOG_LEVEL_ERROR,'Could not load Context Template Permissions.'); }
+ if (is_array($permissions)) {
+ $template->addMany($permissions);
+ } else {
+ $xpdo->log(xPDO::LOG_LEVEL_ERROR, sprintf('Could not load %s Policy Template.', $templateName));
+ }
-/* namespace template/policy */
-$templates['7']= $xpdo->newObject(modAccessPolicyTemplate::class);
-$templates['7']->fromArray([
- 'id' => 7,
- 'name' => 'NamespaceTemplate',
- 'description' => 'Namespace Policy Template with all attributes.',
- 'lexicon' => 'permissions',
-]);
-$permissions = include dirname(__FILE__).'/permissions/transport.policy.tpl.namespace.php';
-if (is_array($permissions)) {
- $templates['7']->addMany($permissions);
-} else { $xpdo->log(xPDO::LOG_LEVEL_ERROR,'Could not load Namespace Template Permissions.'); }
+ $templates[] = $template;
+}
return $templates;
diff --git a/_build/resolvers/resolve.policies.php b/_build/resolvers/resolve.policies.php
index 4033139a56d..1d4adcc1b96 100644
--- a/_build/resolvers/resolve.policies.php
+++ b/_build/resolvers/resolve.policies.php
@@ -13,17 +13,17 @@
/* map of Policy -> Template */
$map = [
- 'Resource' => 'ResourceTemplate',
- 'Administrator' => 'AdministratorTemplate',
- 'Content Editor' => 'AdministratorTemplate',
- 'Load Only' => 'ObjectTemplate',
- 'Load, List and View' => 'ObjectTemplate',
- 'Object' => 'ObjectTemplate',
- 'Context' => 'ContextTemplate',
- 'Element' => 'ElementTemplate',
- 'Media Source Admin' => 'MediaSourceTemplate',
- 'Media Source User' => 'MediaSourceTemplate',
- 'Hidden Namespace' => 'NamespaceTemplate',
+ modAccessPolicy::POLICY_RESOURCE => modAccessPolicyTemplate::TEMPLATE_RESOURCE,
+ modAccessPolicy::POLICY_ADMINISTRATOR => modAccessPolicyTemplate::TEMPLATE_ADMINISTRATOR,
+ modAccessPolicy::POLICY_CONTENT_EDITOR => modAccessPolicyTemplate::TEMPLATE_ADMINISTRATOR,
+ modAccessPolicy::POLICY_LOAD_ONLY => modAccessPolicyTemplate::TEMPLATE_OBJECT,
+ modAccessPolicy::POLICY_LOAD_LIST_VIEW => modAccessPolicyTemplate::TEMPLATE_OBJECT,
+ modAccessPolicy::POLICY_OBJECT => modAccessPolicyTemplate::TEMPLATE_OBJECT,
+ modAccessPolicy::POLICY_CONTEXT => modAccessPolicyTemplate::TEMPLATE_CONTEXT,
+ modAccessPolicy::POLICY_ELEMENT => modAccessPolicyTemplate::TEMPLATE_ELEMENT,
+ modAccessPolicy::POLICY_MEDIA_SOURCE_ADMIN => modAccessPolicyTemplate::TEMPLATE_MEDIA_SOURCE,
+ modAccessPolicy::POLICY_MEDIA_SOURCE_USER => modAccessPolicyTemplate::TEMPLATE_MEDIA_SOURCE,
+ modAccessPolicy::POLICY_HIDDEN_NAMESPACE => modAccessPolicyTemplate::TEMPLATE_NAMESPACE,
];
$policies = $transport->xpdo->getCollection(modAccessPolicy::class);
diff --git a/_build/resolvers/resolve.policytemplates.php b/_build/resolvers/resolve.policytemplates.php
index d05986293f3..cefa170807e 100644
--- a/_build/resolvers/resolve.policytemplates.php
+++ b/_build/resolvers/resolve.policytemplates.php
@@ -3,7 +3,7 @@
* Resolve PolicyTemplates to their PolicyTemplateGroups
*
* @var xPDOTransport $transport
- * @package modx
+ * @package modx
* @subpackage build
*/
@@ -11,32 +11,40 @@
use MODX\Revolution\modAccessPolicyTemplateGroup;
use xPDO\xPDO;
-$success= false;
+$success = false;
/* map of Template -> TemplateGroup */
$map = [
- 'ResourceTemplate' => 'Resource',
- 'AdministratorTemplate' => 'Admin',
- 'ObjectTemplate' => 'Object',
- 'ContextTemplate' => 'Object',
- 'ElementTemplate' => 'Element',
- 'MediaSourceTemplate' => 'MediaSource',
- 'NamespaceTemplate' => 'Namespace',
+ modAccessPolicyTemplate::TEMPLATE_RESOURCE => modAccessPolicyTemplateGroup::GROUP_RESOURCE,
+ modAccessPolicyTemplate::TEMPLATE_ADMINISTRATOR => modAccessPolicyTemplateGroup::GROUP_ADMINISTRATOR,
+ modAccessPolicyTemplate::TEMPLATE_OBJECT => modAccessPolicyTemplateGroup::GROUP_OBJECT,
+ modAccessPolicyTemplate::TEMPLATE_CONTEXT => modAccessPolicyTemplateGroup::GROUP_CONTEXT,
+ modAccessPolicyTemplate::TEMPLATE_ELEMENT => modAccessPolicyTemplateGroup::GROUP_ELEMENT,
+ modAccessPolicyTemplate::TEMPLATE_MEDIA_SOURCE => modAccessPolicyTemplateGroup::GROUP_MEDIA_SOURCE,
+ modAccessPolicyTemplate::TEMPLATE_NAMESPACE => modAccessPolicyTemplateGroup::GROUP_NAMESPACE,
];
-$templates = $transport->xpdo->getCollection(modAccessPolicyTemplate::class);
+$templates = $transport->xpdo->getIterator(modAccessPolicyTemplate::class);
+
+/** @var modAccessPolicyTemplate $template */
foreach ($templates as $template) {
if (isset($map[$template->get('name')])) {
- $templateGroup = $transport->xpdo->getObject(modAccessPolicyTemplateGroup::class,
- ['name' => $map[$template->get('name')]]);
+ $templateGroup = $transport->xpdo->getObject(
+ modAccessPolicyTemplateGroup::class,
+ ['name' => $map[$template->get('name')]]
+ );
if ($templateGroup) {
- $template->set('template_group',$templateGroup->get('id'));
+ $template->set('template_group', $templateGroup->get('id'));
$success = $template->save();
} else {
- $transport->xpdo->log(xPDO::LOG_LEVEL_ERROR, "Core AccessPolicyTemplateGroup {$map[$template->get('name')]} is missing!");
+ $transport->xpdo->log(
+ xPDO::LOG_LEVEL_ERROR,
+ "Core AccessPolicyTemplateGroup {$map[$template->get('name')]} is missing!"
+ );
}
} else {
$success = true;
}
}
+
return $success;
diff --git a/core/lexicon/en/policy.inc.php b/core/lexicon/en/policy.inc.php
index f70124c47e6..086ca83c8d9 100644
--- a/core/lexicon/en/policy.inc.php
+++ b/core/lexicon/en/policy.inc.php
@@ -6,6 +6,7 @@
* @package modx
* @subpackage lexicon
*/
+$_lang['template_group'] = 'Template Group';
$_lang['active_of'] = '[[+active]] of [[+total]]';
$_lang['active_permissions'] = 'Active Permissions';
$_lang['no_policy_option'] = ' (no policy) ';
@@ -29,7 +30,7 @@
$_lang['policy_data'] = 'Policy Data';
$_lang['policy_desc'] = 'Access policies are generic policies that restrict or enable certain actions with MODX.';
$_lang['policy_desc_name'] = 'The name of the Access Policy';
-$_lang['policy_desc_description'] = 'Optional. A short description of the Access Policy';
+$_lang['policy_desc_description'] = 'Optional. A short description of the Access Policy. Also you might use lexicon keys here.';
$_lang['policy_desc_template'] = 'The Policy Template used for this Policy. Policies get their Permission lists from their Template.';
$_lang['policy_desc_lexicon'] = 'Optional. The Lexicon Topic that this Policy uses to translate the Permissions it owns.';
$_lang['policy_duplicate'] = 'Duplicate Policy';
@@ -55,10 +56,11 @@
$_lang['policy_remove_multiple_confirm'] = 'Are you sure you want to delete these Access Policies? This is irreversible.';
$_lang['policy_update'] = 'Edit Policy';
$_lang['policy_template'] = 'Policy Template';
-$_lang['policy_template.desc'] = 'A Policy Template defines which Permissions will show up in the Permissions grid when editing a specific Policy. You can add or delete specific Permissions from this template below. Note that deleting a Permission from a Template will delete it from any Policies that use this Template.';
+$_lang['policy_template_desc'] = 'A Policy Template defines which Permissions will show up in the Permissions grid when editing a specific Policy. You can add or remove specific Permissions from this template below. Note that removing a Permission from a Template will remove it from any Policies that use this Template.';
$_lang['policy_template_create'] = 'Create Policy Template';
$_lang['policy_template_desc_name'] = 'The name of the Access Policy Template';
-$_lang['policy_template_desc_description'] = 'Optional. A short description of the Access Policy Template';
+$_lang['policy_template_desc_description'] = 'Optional. A short description of the Access Policy Template. Also you might use lexicon keys here.';
+$_lang['policy_template_lexicon'] = 'Lexicon Topic';
$_lang['policy_template_desc_lexicon'] = 'Optional. The Lexicon Topic that this Policy Template uses to translate the Permissions it owns.';
$_lang['policy_template_desc_template_group'] = 'The Policy Template Group to use. This is used when selecting Policies from a dropdown menu; usually they are filtered by template group. Select an appropriate group for your Policy Template.';
$_lang['policy_template_duplicate'] = 'Duplicate Policy Template';
@@ -78,4 +80,29 @@
$_lang['policy_template_update'] = 'Edit Policy Template';
$_lang['policy_templates'] = 'Policy Templates';
$_lang['policy_templates.intro_msg'] = 'This is a list of Policy Templates which define lists of Permissions that are checked or unchecked in specific Policies.';
-$_lang['template_group'] = 'Template Group';
\ No newline at end of file
+$_lang['policy_template_administrator_desc'] = 'Context administration policy template with all permissions.';
+$_lang['policy_template_resource_desc'] = 'Resource Policy Template with all attributes.';
+$_lang['policy_template_object_desc'] = 'Object Policy Template with all attributes.';
+$_lang['policy_template_element_desc'] = 'Element Policy Template with all attributes.';
+$_lang['policy_template_mediasource_desc'] = 'Media Source Policy Template with all attributes.';
+$_lang['policy_template_context_desc'] = 'Context Policy Template with all attributes.';
+$_lang['policy_template_namespace_desc'] = 'Namespace Policy Template with all attributes.';
+$_lang['policy_template_group_administrator_desc'] = 'All admin policy templates.';
+$_lang['policy_template_group_object_desc'] = 'All Resource-based policy templates.';
+$_lang['policy_template_group_resource_desc'] = 'All Object-based policy templates.';
+$_lang['policy_template_group_element_desc'] = 'All Element-based policy templates.';
+$_lang['policy_template_group_mediasource_desc'] = 'All Media Source-based policy templates.';
+$_lang['policy_template_group_namespace_desc'] = 'All Namespace based policy templates.';
+$_lang['policy_template_group_context_desc'] = 'All Context based policy templates.';
+$_lang['policy_resource_desc'] = 'MODX Resource Policy with all attributes.';
+$_lang['policy_administrator_desc'] = 'Context administration policy with all permissions.';
+$_lang['policy_load_only_desc'] = 'A minimal policy with permission to load an object.';
+$_lang['policy_load_list_view_desc'] = 'Provides load, list and view permissions only.';
+$_lang['policy_object_desc'] = 'An Object policy with all permissions.';
+$_lang['policy_element_desc'] = 'MODX Element policy with all attributes.';
+$_lang['policy_content_editor_desc'] = 'Context administration policy with limited, content-editing related Permissions, but no publishing.';
+$_lang['policy_media_source_admin_desc'] = 'Media Source administration policy.';
+$_lang['policy_media_source_user_desc'] = 'Media Source user policy, with basic viewing and using - but no editing - of Media Sources.';
+$_lang['policy_developer_desc'] = 'Context administration policy with most Permissions except Administrator and Security functions.';
+$_lang['policy_context_desc'] = 'A standard Context policy that you can apply when creating Context ACLs for basic read/write and view_unpublished access within a Context.';
+$_lang['policy_hidden_namespace_desc'] = 'Hidden Namespace policy, will not show Namespace in lists.';
diff --git a/core/src/Revolution/Processors/Model/GetListProcessor.php b/core/src/Revolution/Processors/Model/GetListProcessor.php
index 62c986ee80c..e80db059d4a 100644
--- a/core/src/Revolution/Processors/Model/GetListProcessor.php
+++ b/core/src/Revolution/Processors/Model/GetListProcessor.php
@@ -25,6 +25,9 @@
*/
abstract class GetListProcessor extends ModelProcessor
{
+ const CLASS_ALLOW_EDIT = 'pedit';
+ const CLASS_ALLOW_REMOVE = 'premove';
+
/** @var string $defaultSortField The default field to sort by */
public $defaultSortField = 'name';
/** @var string $defaultSortDirection The default direction to sort */
diff --git a/core/src/Revolution/Processors/Security/Access/Policy/GetList.php b/core/src/Revolution/Processors/Security/Access/Policy/GetList.php
index 1af3847304b..5d18023313d 100644
--- a/core/src/Revolution/Processors/Security/Access/Policy/GetList.php
+++ b/core/src/Revolution/Processors/Security/Access/Policy/GetList.php
@@ -118,15 +118,12 @@ public function beforeIteration(array $list)
*/
public function prepareRow(xPDOObject $object)
{
- $core = ['Resource', 'Object', 'Administrator', 'Load Only', 'Load, List and View'];
- $policyArray = $object->toArray();
+ $policy = $object->toArray();
+
+ $policy['cls'] = $this->prepareRowClasses($object);
+
$permissions = [];
- $cls = 'pedit';
- if (!in_array($object->get('name'), $core)) {
- $cls .= ' premove';
- }
- $policyArray['cls'] = $cls;
- if (!empty($policyArray['total_permissions'])) {
+ if (!empty($policy['total_permissions'])) {
$data = $object->get('data');
$ct = 0;
if (!empty($data)) {
@@ -137,16 +134,35 @@ public function prepareRow(xPDOObject $object)
}
}
}
- $policyArray['active_permissions'] = $ct;
- $policyArray['active_of'] = $this->modx->lexicon('active_of', [
- 'active' => $policyArray['active_permissions'],
- 'total' => $policyArray['total_permissions'],
+ $policy['active_permissions'] = $ct;
+ $policy['active_of'] = $this->modx->lexicon('active_of', [
+ 'active' => $policy['active_permissions'],
+ 'total' => $policy['total_permissions'],
]);
- $policyArray['permissions'] = $permissions;
+ $policy['permissions'] = $permissions;
}
- unset($policyArray['data']);
+ unset($policy['data']);
+
+ $policy['description_trans'] = $this->modx->lexicon($policy['description']);
+
+ return $policy;
+ }
+
+ /**
+ * @param xPDOObject|modAccessPolicy $object
+ *
+ * @return string
+ */
+ protected function prepareRowClasses(xPDOObject $object)
+ {
+ if ($object->isCorePolicy($object->get('name'))) {
+ return implode(' ', [
+ static::CLASS_ALLOW_EDIT,
+ static::CLASS_ALLOW_REMOVE
+ ]);
+ }
- return $policyArray;
+ return static::CLASS_ALLOW_EDIT;
}
}
diff --git a/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php b/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php
index d726e6c8016..8e70a3869d4 100644
--- a/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php
+++ b/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php
@@ -96,15 +96,28 @@ public function prepareQueryAfterCount(xPDOQuery $c)
*/
public function prepareRow(xPDOObject $object)
{
- $core = ['ResourceTemplate', 'ObjectTemplate', 'AdministratorTemplate', 'ElementTemplate'];
+ $template = $object->toArray();
- $objectArray = $object->toArray();
- $cls = ['pedit'];
- if (!in_array($object->get('name'), $core)) {
- $cls[] = 'premove';
+ $template['description_trans'] = $this->modx->lexicon($template['description']);
+ $template['cls'] = $this->prepareRowClasses($object);
+
+ return $template;
+ }
+
+ /**
+ * @param xPDOObject|modAccessPolicyTemplate $object
+ *
+ * @return string
+ */
+ protected function prepareRowClasses(xPDOObject $object)
+ {
+ if ($object->isCoreTemplate($object->get('name'))) {
+ return implode(' ', [
+ static::CLASS_ALLOW_EDIT,
+ static::CLASS_ALLOW_REMOVE
+ ]);
}
- $objectArray['cls'] = implode(' ', $cls);
- return $objectArray;
+ return static::CLASS_ALLOW_EDIT;
}
}
diff --git a/core/src/Revolution/Processors/Security/Access/Policy/Template/Group/GetList.php b/core/src/Revolution/Processors/Security/Access/Policy/Template/Group/GetList.php
index 079f7f8ed49..43da2b89da9 100644
--- a/core/src/Revolution/Processors/Security/Access/Policy/Template/Group/GetList.php
+++ b/core/src/Revolution/Processors/Security/Access/Policy/Template/Group/GetList.php
@@ -16,11 +16,13 @@
/**
* Gets a list of policy template groups.
- * @param boolean $combo (optional) If true, will append a 'no policy' row to the beginning.
- * @param integer $start (optional) The record to start at. Defaults to 0.
- * @param integer $limit (optional) The number of records to limit to. Defaults to 10.
- * @param string $sort (optional) The column to sort by.
- * @param string $dir (optional) The direction of the sort. Default
+ *
+ * @param bool $combo (optional) If true, will append a 'no policy' row to the beginning.
+ * @param int $start (optional) The record to start at. Defaults to 0.
+ * @param int $limit (optional) The number of records to limit to. Defaults to 10.
+ * @param string $sort (optional) The column to sort by.
+ * @param string $dir (optional) The direction of the sort. Default
+ *
* @package MODX\Revolution\Processors\Security\Access\Policy\Template\Group
*/
class GetList extends GetListProcessor
@@ -33,13 +35,16 @@ class GetList extends GetListProcessor
/**
* @param xPDOObject $object
+ *
* @return array
*/
public function prepareRow(xPDOObject $object)
{
- $objectArray = $object->toArray();
- $objectArray['cls'] = 'pedit';
-
- return $objectArray;
+ $group = $object->toArray();
+
+ $group['cls'] = static::CLASS_ALLOW_EDIT;
+ $group['description'] = $this->modx->lexicon($group['description']);
+
+ return $group;
}
}
diff --git a/core/src/Revolution/Processors/Security/Access/Policy/Template/UpdateFromGrid.php b/core/src/Revolution/Processors/Security/Access/Policy/Template/UpdateFromGrid.php
index 36579844cea..2228dc87254 100644
--- a/core/src/Revolution/Processors/Security/Access/Policy/Template/UpdateFromGrid.php
+++ b/core/src/Revolution/Processors/Security/Access/Policy/Template/UpdateFromGrid.php
@@ -10,18 +10,22 @@
namespace MODX\Revolution\Processors\Security\Access\Policy\Template;
+use xPDO\xPDOException;
+
/**
* Update a policy template from a grid
- * @param integer $id The ID of the policy
- * @param string $name The name of the policy.
+ *
+ * @param int $id The ID of the policy
+ * @param string $name The name of the policy.
* @param string $description (optional) A short description
+ *
* @package MODX\Revolution\Processors\Security\Access\Policy\Template
*/
class UpdateFromGrid extends Update
{
/**
* @return bool|string|null
- * @throws \xPDO\xPDOException
+ * @throws xPDOException
*/
public function initialize()
{
@@ -36,6 +40,11 @@ public function initialize()
$this->setProperties($data);
$this->unsetProperty('data');
+ $this->setProperty(
+ 'description_trans',
+ $this->modx->lexicon($this->getProperty('description'))
+ );
+
return parent::initialize();
}
}
diff --git a/core/src/Revolution/modAccessPolicy.php b/core/src/Revolution/modAccessPolicy.php
index f725d752e6f..33e831d1ef5 100644
--- a/core/src/Revolution/modAccessPolicy.php
+++ b/core/src/Revolution/modAccessPolicy.php
@@ -25,6 +25,52 @@
*/
class modAccessPolicy extends xPDOSimpleObject
{
+ const POLICY_RESOURCE = 'Resource';
+ const POLICY_ADMINISTRATOR = 'Administrator';
+ const POLICY_LOAD_ONLY = 'Load Only';
+ const POLICY_LOAD_LIST_VIEW = 'Load, List and View';
+ const POLICY_OBJECT = 'Object';
+ const POLICY_ELEMENT = 'Element';
+ const POLICY_CONTENT_EDITOR = 'Content Editor';
+ const POLICY_MEDIA_SOURCE_ADMIN = 'Media Source Admin';
+ const POLICY_MEDIA_SOURCE_USER = 'Media Source User';
+ const POLICY_DEVELOPER = 'Developer';
+ const POLICY_CONTEXT = 'Context';
+ const POLICY_HIDDEN_NAMESPACE = 'Hidden Namespace';
+
+ /**
+ * Returns list of core Policies
+ *
+ * @return array
+ */
+ public static function getCorePolicies()
+ {
+ return [
+ self::POLICY_RESOURCE,
+ self::POLICY_ADMINISTRATOR,
+ self::POLICY_LOAD_ONLY,
+ self::POLICY_LOAD_LIST_VIEW,
+ self::POLICY_OBJECT,
+ self::POLICY_ELEMENT ,
+ self::POLICY_CONTENT_EDITOR,
+ self::POLICY_MEDIA_SOURCE_ADMIN,
+ self::POLICY_MEDIA_SOURCE_USER,
+ self::POLICY_DEVELOPER,
+ self::POLICY_CONTEXT,
+ self::POLICY_HIDDEN_NAMESPACE,
+ ];
+ }
+
+ /**
+ * @param $name string The name of access policy
+ *
+ * @return bool
+ */
+ public function isCorePolicy($name)
+ {
+ return in_array($name, static::getCorePolicies(), true);
+ }
+
/**
* Get the permissions for this access policy, in array format.
*
diff --git a/core/src/Revolution/modAccessPolicyTemplate.php b/core/src/Revolution/modAccessPolicyTemplate.php
index 684255d25c6..426706093fb 100644
--- a/core/src/Revolution/modAccessPolicyTemplate.php
+++ b/core/src/Revolution/modAccessPolicyTemplate.php
@@ -20,4 +20,39 @@
*/
class modAccessPolicyTemplate extends xPDOSimpleObject
{
+ const TEMPLATE_ADMINISTRATOR = 'AdministratorTemplate';
+ const TEMPLATE_CONTEXT = 'ContextTemplate';
+ const TEMPLATE_ELEMENT = 'ElementTemplate';
+ const TEMPLATE_MEDIA_SOURCE = 'MediaSourceTemplate';
+ const TEMPLATE_NAMESPACE = 'NamespaceTemplate';
+ const TEMPLATE_OBJECT = 'ObjectTemplate';
+ const TEMPLATE_RESOURCE = 'ResourceTemplate';
+
+ /**
+ * Returns list of core Policy Templates
+ *
+ * @return array
+ */
+ public static function getCoreTemplates()
+ {
+ return [
+ self::TEMPLATE_ADMINISTRATOR,
+ self::TEMPLATE_RESOURCE,
+ self::TEMPLATE_OBJECT,
+ self::TEMPLATE_ELEMENT,
+ self::TEMPLATE_MEDIA_SOURCE,
+ self::TEMPLATE_CONTEXT,
+ self::TEMPLATE_NAMESPACE,
+ ];
+ }
+
+ /**
+ * @param $name string The name of access policy template
+ *
+ * @return bool
+ */
+ public function isCoreTemplate($name)
+ {
+ return in_array($name, static::getCoreTemplates(), true);
+ }
}
diff --git a/core/src/Revolution/modAccessPolicyTemplateGroup.php b/core/src/Revolution/modAccessPolicyTemplateGroup.php
index f78d0af1c9c..01f3c248392 100644
--- a/core/src/Revolution/modAccessPolicyTemplateGroup.php
+++ b/core/src/Revolution/modAccessPolicyTemplateGroup.php
@@ -16,4 +16,38 @@
*/
class modAccessPolicyTemplateGroup extends xPDOSimpleObject
{
+ const GROUP_ADMINISTRATOR = 'Administrator';
+ const GROUP_OBJECT = 'Object';
+ const GROUP_RESOURCE = 'Resource';
+ const GROUP_ELEMENT = 'Element';
+ const GROUP_MEDIA_SOURCE = 'MediaSource';
+ const GROUP_NAMESPACE = 'Namespace';
+ const GROUP_CONTEXT = 'Context';
+
+ /**
+ * Returns list of core Policy Template Groups
+ * @return array
+ */
+ public static function getCoreGroups()
+ {
+ return [
+ self::GROUP_ADMINISTRATOR,
+ self::GROUP_OBJECT,
+ self::GROUP_RESOURCE,
+ self::GROUP_ELEMENT,
+ self::GROUP_MEDIA_SOURCE,
+ self::GROUP_NAMESPACE,
+ self::GROUP_CONTEXT,
+ ];
+ }
+
+ /**
+ * @param $name string The name of access policy template group
+ *
+ * @return bool
+ */
+ public function isCoreGroup($name)
+ {
+ return in_array($name, static::getCoreGroups(), true);
+ }
}
diff --git a/manager/assets/modext/widgets/security/modx.combo.access.policy.template.groups.js b/manager/assets/modext/widgets/security/modx.combo.access.policy.template.groups.js
new file mode 100644
index 00000000000..89c9beaf2a4
--- /dev/null
+++ b/manager/assets/modext/widgets/security/modx.combo.access.policy.template.groups.js
@@ -0,0 +1,27 @@
+/**
+ * @class MODx.combo.AccessPolicyTemplateGroups
+ * @extends MODx.combo.ComboBox
+ * @param {Object} config An object of options.
+ * @xtype modx-combo-access-policy-template-group
+ */
+MODx.combo.AccessPolicyTemplateGroups = function(config) {
+ config = config || {};
+ Ext.applyIf(config,{
+ name: 'template_group'
+ ,hiddenName: 'template_group'
+ ,fields: ['id','name','description']
+ ,forceSelection: true
+ ,typeAhead: false
+ ,editable: false
+ ,allowBlank: false
+ ,url: MODx.config.connector_url
+ ,baseParams: {
+ action: 'Security/Access/Policy/Template/Group/GetList'
+ }
+ ,tpl: new Ext.XTemplate('{name:htmlEncode}'
+ ,'
{description:htmlEncode}
')
+ });
+ MODx.combo.AccessPolicyTemplateGroups.superclass.constructor.call(this,config);
+};
+Ext.extend(MODx.combo.AccessPolicyTemplateGroups,MODx.combo.ComboBox);
+Ext.reg('modx-combo-access-policy-template-group',MODx.combo.AccessPolicyTemplateGroups);
diff --git a/manager/assets/modext/widgets/security/modx.grid.access.policy.js b/manager/assets/modext/widgets/security/modx.grid.access.policy.js
index 4209a15d62a..674310d05c8 100644
--- a/manager/assets/modext/widgets/security/modx.grid.access.policy.js
+++ b/manager/assets/modext/widgets/security/modx.grid.access.policy.js
@@ -50,7 +50,7 @@ MODx.grid.AccessPolicy = function(config) {
,baseParams: {
action: 'Security/Access/Policy/GetList'
}
- ,fields: ['id','name','description','class','data','parent','template','template_name','active_permissions','total_permissions','active_of','cls']
+ ,fields: ['id','name','description', 'description_trans', 'class','data','parent','template','template_name','active_permissions','total_permissions','active_of','cls']
,paging: true
,autosave: true
,save_action: 'Security/Access/Policy/UpdateFromGrid'
@@ -71,7 +71,10 @@ MODx.grid.AccessPolicy = function(config) {
header: _('description')
,dataIndex: 'description'
,width: 375
- ,editor: { xtype: 'textarea' }
+ ,renderer: function(value, metaData, record) {
+ return record['data']['description_trans'];
+ }
+ ,editable: false
},{
header: _('policy_template')
,dataIndex: 'template_name'
@@ -354,7 +357,7 @@ MODx.combo.AccessPolicyTemplate = function(config) {
Ext.applyIf(config,{
name: 'template'
,hiddenName: 'template'
- ,fields: ['id','name','description']
+ ,fields: ['id','name','description','description_trans']
,forceSelection: true
,typeAhead: false
,editable: false
@@ -365,7 +368,7 @@ MODx.combo.AccessPolicyTemplate = function(config) {
action: 'Security/Access/Policy/Template/GetList'
}
,tpl: new Ext.XTemplate('{name:htmlEncode}'
- ,'
{description:htmlEncode}
')
+ ,'{description_trans:htmlEncode}
')
});
MODx.combo.AccessPolicyTemplate.superclass.constructor.call(this,config);
};
diff --git a/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js b/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js
index 522531c0610..af2bc381184 100644
--- a/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js
+++ b/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js
@@ -50,7 +50,7 @@ MODx.grid.AccessPolicyTemplate = function(config) {
,baseParams: {
action: 'Security/Access/Policy/Template/GetList'
}
- ,fields: ['id','name','description','template_group','template_group_name','total_permissions','cls']
+ ,fields: ['id','name','description','description_trans','template_group','template_group_name','total_permissions','cls']
,paging: true
,autosave: true
,save_action: 'Security/Access/Policy/Template/UpdateFromGrid'
@@ -71,7 +71,10 @@ MODx.grid.AccessPolicyTemplate = function(config) {
header: _('description')
,dataIndex: 'description'
,width: 375
- ,editor: { xtype: 'textarea' }
+ ,editable: false
+ ,renderer: function(value, metaData, record) {
+ return record['data']['description_trans'];
+ }
,sortable: true
},{
header: _('template_group')
@@ -83,7 +86,7 @@ MODx.grid.AccessPolicyTemplate = function(config) {
,dataIndex: 'total_permissions'
,width: 100
,editable: false
- ,sortable: false
+ ,sortable: true
}]
,tbar: [{
text: _('policy_template_create')
@@ -274,34 +277,6 @@ Ext.extend(MODx.grid.AccessPolicyTemplate,MODx.grid.Grid,{
});
Ext.reg('modx-grid-access-policy-templates',MODx.grid.AccessPolicyTemplate);
-/**
- * @class MODx.combo.AccessPolicyTemplateGroups
- * @extends MODx.combo.ComboBox
- * @param {Object} config An object of options.
- * @xtype modx-combo-access-policy-template-group
- */
-MODx.combo.AccessPolicyTemplateGroups = function(config) {
- config = config || {};
- Ext.applyIf(config,{
- name: 'template_group'
- ,hiddenName: 'template_group'
- ,fields: ['id','name','description']
- ,forceSelection: true
- ,typeAhead: false
- ,editable: false
- ,allowBlank: false
- ,url: MODx.config.connector_url
- ,baseParams: {
- action: 'Security/Access/Policy/Template/Group/GetList'
- }
- ,tpl: new Ext.XTemplate('{name:htmlEncode}'
- ,'
{description:htmlEncode}
')
- });
- MODx.combo.AccessPolicyTemplateGroups.superclass.constructor.call(this,config);
-};
-Ext.extend(MODx.combo.AccessPolicyTemplateGroups,MODx.combo.ComboBox);
-Ext.reg('modx-combo-access-policy-template-group',MODx.combo.AccessPolicyTemplateGroups);
-
/**
* Generates a window for creating Access Policies.
*
diff --git a/manager/assets/modext/widgets/security/modx.panel.access.policy.js b/manager/assets/modext/widgets/security/modx.panel.access.policy.js
index 7b22e820c50..6cfd229282a 100644
--- a/manager/assets/modext/widgets/security/modx.panel.access.policy.js
+++ b/manager/assets/modext/widgets/security/modx.panel.access.policy.js
@@ -213,33 +213,3 @@ Ext.extend(MODx.grid.PolicyPermissions,MODx.grid.LocalGrid,{
}
});
Ext.reg('modx-grid-policy-permissions',MODx.grid.PolicyPermissions);
-
-/**
- * @class MODx.combo.AccessPolicyTemplate
- * @extends MODx.combo.ComboBox
- * @constructor
- * @param {Object} config An object of options.
- * @xtype modx-combo-access-policy-template
- */
-MODx.combo.AccessPolicyTemplate = function(config) {
- config = config || {};
- Ext.applyIf(config,{
- name: 'template'
- ,hiddenName: 'template'
- ,fields: ['id','name','description']
- ,forceSelection: true
- ,typeAhead: false
- ,editable: false
- ,allowBlank: false
- ,pageSize: 20
- ,url: MODx.config.connector_url
- ,baseParams: {
- action: 'Security/Access/Policy/Template/GetList'
- }
- ,tpl: new Ext.XTemplate('{name:htmlEncode}'
- ,'
{description:htmlEncode}
')
- });
- MODx.combo.AccessPolicyTemplate.superclass.constructor.call(this,config);
-};
-Ext.extend(MODx.combo.AccessPolicyTemplate,MODx.combo.ComboBox);
-Ext.reg('modx-combo-access-policy-template',MODx.combo.AccessPolicyTemplate);
diff --git a/manager/assets/modext/widgets/security/modx.panel.access.policy.template.js b/manager/assets/modext/widgets/security/modx.panel.access.policy.template.js
index 5d5f7602f6b..10ba6db36b3 100644
--- a/manager/assets/modext/widgets/security/modx.panel.access.policy.template.js
+++ b/manager/assets/modext/widgets/security/modx.panel.access.policy.template.js
@@ -8,7 +8,6 @@
*/
MODx.panel.AccessPolicyTemplate = function(config) {
config = config || {};
- var r = config.record || {};
Ext.applyIf(config,{
url: MODx.config.connector_url
,baseParams: {
@@ -34,65 +33,91 @@ MODx.panel.AccessPolicyTemplate = function(config) {
title: _('policy_template')
,layout: 'form'
,items: [{
- html: ''+_('policy_template.desc')+'
'
+ html: ''+_('policy_template_desc')+'
'
,xtype: 'modx-description'
},{
- xtype: 'panel'
- ,border: false
- ,cls:'main-wrapper'
- ,layout: 'form'
- ,defaults:{ anchor: '100%' }
- ,labelAlign: 'top'
- ,labelSeparator: ''
- ,items: [{
- xtype: 'hidden'
- ,name: 'id'
- },{
- xtype: 'textfield'
- ,fieldLabel: _('name')
- ,description: MODx.expandHelp ? '' : _('policy_template_desc_name')
- ,name: 'name'
- ,id: 'modx-policy-template-name'
- ,maxLength: 255
- ,enableKeyEvents: true
- ,allowBlank: false
- ,listeners: {
- 'keyup': {scope:this,fn:function(f,e) {
- Ext.getCmp('modx-header-breadcrumbs').updateHeader(Ext.util.Format.htmlEncode(f.getValue()));
- }}
- }
- },{
- xtype: MODx.expandHelp ? 'label' : 'hidden'
- ,forId: 'modx-policy-template-name'
- ,html: _('policy_template_desc_name')
- ,cls: 'desc-under'
-
- },{
- xtype: 'textarea'
- ,fieldLabel: _('description')
- ,description: MODx.expandHelp ? '' : _('policy_template_desc_description')
- ,name: 'description'
- ,id: 'modx-policy-template-description'
- ,grow: true
- },{
- xtype: MODx.expandHelp ? 'label' : 'hidden'
- ,forId: 'modx-policy-template-description'
- ,html: _('policy_template_desc_description')
- ,cls: 'desc-under'
-
- },{
- xtype: 'textfield'
- ,fieldLabel: _('lexicon')
- ,description: MODx.expandHelp ? '' : _('policy_template_desc_lexicon')
- ,name: 'lexicon'
- ,id: 'modx-policy-template-lexicon'
- ,allowBlank: true
- ,value: 'permissions'
- },{
- xtype: MODx.expandHelp ? 'label' : 'hidden'
- ,forId: 'modx-policy-template-lexicon'
- ,html: _('policy_template_desc_lexicon')
- ,cls: 'desc-under'
+ xtype: 'panel'
+ ,border: false
+ ,cls:'main-wrapper'
+ ,items: [{
+ xtype: 'hidden'
+ ,name: 'id'
+ },{
+ layout: 'column',
+ defaults: {msgTarget: 'under', border: true},
+ items: [{
+ columnWidth: .7
+ ,layout: 'form'
+ ,defaults:{ anchor: '100%' }
+ ,labelAlign: 'top'
+ ,labelSeparator: ''
+ ,items: [{
+ xtype: 'textfield'
+ ,fieldLabel: _('name')
+ ,description: MODx.expandHelp ? '' : _('policy_template_desc_name')
+ ,name: 'name'
+ ,id: 'modx-policy-template-name'
+ ,maxLength: 255
+ ,enableKeyEvents: true
+ ,allowBlank: false
+ ,listeners: {
+ 'keyup': {
+ scope: this, fn: function (f, e) {
+ Ext.getCmp('modx-header-breadcrumbs').updateHeader(Ext.util.Format.htmlEncode(f.getValue()));
+ }
+ }
+ }
+ },{
+ xtype: MODx.expandHelp ? 'label' : 'hidden'
+ ,forId: 'modx-policy-template-name'
+ ,html: _('policy_template_desc_name')
+ ,cls: 'desc-under'
+ },{
+ xtype: 'textarea'
+ ,fieldLabel: _('description')
+ ,description: MODx.expandHelp ? '' : _('policy_template_desc_description')
+ ,name: 'description'
+ ,id: 'modx-policy-template-description'
+ ,grow: true
+ },{
+ xtype: MODx.expandHelp ? 'label' : 'hidden'
+ ,forId: 'modx-policy-template-description'
+ ,html: _('policy_template_desc_description')
+ ,cls: 'desc-under'
+ }]
+ }, {
+ columnWidth: .3
+ ,layout: 'form'
+ ,defaults:{ anchor: '100%' }
+ ,labelAlign: 'top'
+ ,labelSeparator: ''
+ ,items: [{
+ xtype: 'modx-combo-access-policy-template-group'
+ ,fieldLabel: _('template_group')
+ ,description: MODx.expandHelp ? '' : _('policy_template_desc_template_group')
+ ,name: 'template_group'
+ ,id: 'modx-policy-template-template-group'
+ ,allowBlank: false
+ }, {
+ xtype: MODx.expandHelp ? 'label' : 'hidden'
+ ,forId: 'modx-policy-template-template-group'
+ ,html: _('policy_template_desc_template_group')
+ ,cls: 'desc-under'
+ },{
+ xtype: 'textfield'
+ ,fieldLabel: _('policy_template_lexicon')
+ ,description: MODx.expandHelp ? '' : _('policy_template_desc_lexicon')
+ ,name: 'lexicon'
+ ,id: 'modx-policy-template-lexicon'
+ ,allowBlank: true
+ ,value: 'permissions'
+ },{
+ xtype: MODx.expandHelp ? 'label' : 'hidden'
+ ,forId: 'modx-policy-template-lexicon'
+ ,html: _('policy_template_desc_lexicon')
+ ,cls: 'desc-under'
+ }]
+ }]
}]
},{
html: ''+_('permissions_desc')+'
'
diff --git a/manager/assets/modext/widgets/security/modx.panel.groups.roles.js b/manager/assets/modext/widgets/security/modx.panel.groups.roles.js
index d4101e6071e..00a43a6ab08 100644
--- a/manager/assets/modext/widgets/security/modx.panel.groups.roles.js
+++ b/manager/assets/modext/widgets/security/modx.panel.groups.roles.js
@@ -170,15 +170,16 @@ Ext.extend(MODx.panel.GroupsRoles,MODx.FormPanel,{
}
,fixPanelHeight: function() {
// fixing border layout's height regarding to tree panel's
- var treeEl = Ext.getCmp('modx-tree-usergroup');
- if (treeEl && treeEl.rendered) {
- var treeH = treeEl.getEl().getHeight();
- var cHeight = Ext.getCmp('modx-usergroup-users').getHeight(); // .main-wrapper
- var maxH = (treeH > cHeight) ? treeH : cHeight;
- maxH = maxH > 500 ? maxH : 500;
- Ext.getCmp('modx-tree-panel-usergroup').setHeight(maxH);
- Ext.getCmp('modx-content').doLayout();
+ var treeEl = Ext.getCmp('modx-tree-usergroup').getEl();
+ if (!treeEl) {
+ return;
}
+ var treeH = treeEl.getHeight();
+ var cHeight = Ext.getCmp('modx-usergroup-users').getHeight(); // .main-wrapper
+ var maxH = (treeH > cHeight) ? treeH : cHeight;
+ maxH = maxH > 500 ? maxH : 500;
+ Ext.getCmp('modx-tree-panel-usergroup').setHeight(maxH);
+ Ext.getCmp('modx-content').doLayout();
}
});
Ext.reg('modx-panel-groups-roles',MODx.panel.GroupsRoles);
diff --git a/manager/controllers/default/security/access/policy/template/update.class.php b/manager/controllers/default/security/access/policy/template/update.class.php
index ac3bfb2d5a1..bda8fe1a038 100644
--- a/manager/controllers/default/security/access/policy/template/update.class.php
+++ b/manager/controllers/default/security/access/policy/template/update.class.php
@@ -11,6 +11,7 @@
use MODX\Revolution\modAccessPermission;
use MODX\Revolution\modAccessPolicyTemplate;
use MODX\Revolution\modManagerController;
+use xPDO\xPDOException;
/**
* Loads the policy template page
@@ -45,9 +46,11 @@ public function initialize() {
/**
* Register custom CSS/JS for the page
* @return void
+ * @throws xPDOException
*/
public function loadCustomCssJs() {
$mgrUrl = $this->modx->getOption('manager_url',null,MODX_MANAGER_URL);
+ $this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.combo.access.policy.template.groups.js');
$this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.panel.access.policy.template.js');
$this->addJavascript($mgrUrl.'assets/modext/sections/security/access/policy/template/update.js');
$this->addHtml('
diff --git a/manager/controllers/default/security/permission.class.php b/manager/controllers/default/security/permission.class.php
index 322d40de735..c3d9f2c281b 100644
--- a/manager/controllers/default/security/permission.class.php
+++ b/manager/controllers/default/security/permission.class.php
@@ -31,7 +31,9 @@ public function checkPermissions() {
*/
public function loadCustomCssJs() {
$mgrUrl = $this->modx->getOption('manager_url',null,MODX_MANAGER_URL);
+
$this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.grid.access.policy.js');
+ $this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.combo.access.policy.template.groups.js');
$this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.grid.access.policy.template.js');
$this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.grid.user.js');
$this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.panel.user.group.js');
diff --git a/setup/includes/upgrades/common/3.0-policy-description.php b/setup/includes/upgrades/common/3.0-policy-description.php
new file mode 100644
index 00000000000..45081a9e3d1
--- /dev/null
+++ b/setup/includes/upgrades/common/3.0-policy-description.php
@@ -0,0 +1,19 @@
+getIterator(
+ modAccessPolicy::class,
+ ['name:IN' => modAccessPolicy::getCorePolicies()]
+);
+
+foreach ($policies as $policy) {
+ $policy->set('description', sprintf(
+ 'policy_%s_desc',
+ str_replace([',', ' '], ['', '_'], strtolower($policy->get('name')))
+ ));
+ $policy->save();
+}
diff --git a/setup/includes/upgrades/common/3.0-policy-template-description.php b/setup/includes/upgrades/common/3.0-policy-template-description.php
new file mode 100644
index 00000000000..744d75af766
--- /dev/null
+++ b/setup/includes/upgrades/common/3.0-policy-template-description.php
@@ -0,0 +1,19 @@
+getIterator(
+ modAccessPolicyTemplate::class,
+ ['name:IN' => modAccessPolicyTemplate::getCoreTemplates()]
+);
+
+foreach ($templates as $template) {
+ $template->set('description', sprintf(
+ 'policy_template_%s_desc',
+ str_replace('template', '', strtolower($template->get('name')))
+ ));
+ $template->save();
+}
diff --git a/setup/includes/upgrades/common/3.0-policy-template-group-description.php b/setup/includes/upgrades/common/3.0-policy-template-group-description.php
new file mode 100644
index 00000000000..72e1ed84fb5
--- /dev/null
+++ b/setup/includes/upgrades/common/3.0-policy-template-group-description.php
@@ -0,0 +1,22 @@
+getIterator(
+ modAccessPolicyTemplateGroup::class,
+ ['name:IN' => array_merge(modAccessPolicyTemplateGroup::getCoreGroups(), ['Admin'])]
+);
+
+foreach ($groups as $group) {
+ if ($group->get('name') === 'Admin') { // Renaming of the old Admin group to new one - Administrator
+ $group->set('name', modAccessPolicyTemplateGroup::GROUP_ADMINISTRATOR);
+ }
+ $group->set('description', sprintf(
+ 'policy_template_group_%s_desc',
+ strtolower($group->get('name'))
+ ));
+ $group->save();
+}
diff --git a/setup/includes/upgrades/mysql/3.0.0-pl.php b/setup/includes/upgrades/mysql/3.0.0-pl.php
index c83008d2c95..d0bdcc30e88 100644
--- a/setup/includes/upgrades/mysql/3.0.0-pl.php
+++ b/setup/includes/upgrades/mysql/3.0.0-pl.php
@@ -30,3 +30,6 @@
include dirname(__DIR__) . '/common/3.0.0-update-tvs-output-params.php';
include dirname(__DIR__) . '/common/3.0.0-update-sys-setting_base_help_url.php';
include dirname(__DIR__) . '/common/3.0.0-update-principal_targets.php';
+include dirname(__DIR__) . '/common/3.0-policy-template-group-description.php';
+include dirname(__DIR__) . '/common/3.0-policy-template-description.php';
+include dirname(__DIR__) . '/common/3.0-policy-description.php';
diff --git a/setup/includes/upgrades/sqlsrv/3.0.0-pl.php b/setup/includes/upgrades/sqlsrv/3.0.0-pl.php
index c83008d2c95..d0bdcc30e88 100644
--- a/setup/includes/upgrades/sqlsrv/3.0.0-pl.php
+++ b/setup/includes/upgrades/sqlsrv/3.0.0-pl.php
@@ -30,3 +30,6 @@
include dirname(__DIR__) . '/common/3.0.0-update-tvs-output-params.php';
include dirname(__DIR__) . '/common/3.0.0-update-sys-setting_base_help_url.php';
include dirname(__DIR__) . '/common/3.0.0-update-principal_targets.php';
+include dirname(__DIR__) . '/common/3.0-policy-template-group-description.php';
+include dirname(__DIR__) . '/common/3.0-policy-template-description.php';
+include dirname(__DIR__) . '/common/3.0-policy-description.php';
From 7d1a45a783a4c369c62f39a8eda99061cc5f51a4 Mon Sep 17 00:00:00 2001
From: Ivan Klimchuk
Date: Fri, 5 Mar 2021 16:16:46 +0300
Subject: [PATCH 2/7] chore: remove deleted (actually moved to one file)
upgrade scripts
---
setup/includes/upgrades/mysql/3.0.0-pl.php | 5 -----
setup/includes/upgrades/sqlsrv/3.0.0-pl.php | 5 -----
2 files changed, 10 deletions(-)
diff --git a/setup/includes/upgrades/mysql/3.0.0-pl.php b/setup/includes/upgrades/mysql/3.0.0-pl.php
index d0bdcc30e88..2c78ec486c5 100644
--- a/setup/includes/upgrades/mysql/3.0.0-pl.php
+++ b/setup/includes/upgrades/mysql/3.0.0-pl.php
@@ -12,11 +12,6 @@
include dirname(__DIR__) . '/common/3.0.0-dashboard-widgets.php';
include dirname(__DIR__) . '/common/3.0.0-remove-copy-to-clipboard.php';
include dirname(__DIR__) . '/common/3.0.0-cleanup-system-settings.php';
-include dirname(__DIR__) . '/common/3.0.0-cleanup-richtext-editor-system-settings.php';
-include dirname(__DIR__) . '/common/3.0.0-remove-tv-eval-system-setting.php';
-include dirname(__DIR__) . '/common/3.0.0-remove-upload-flash-system-setting.php';
-include dirname(__DIR__) . '/common/3.0.0-cleanup-authentication-security-system-settings.php';
-include dirname(__DIR__) . '/common/3.0.0-cleanup-lexicon-language-system-settings.php';
include dirname(__DIR__) . '/common/3.0.0-content-type-icon.php';
include dirname(__DIR__) . '/common/3.0.0-update-xtypes-system-settings.php';
include dirname(__DIR__) . '/common/3.0.0-update-sys-setting_upload_files-upload_images.php';
diff --git a/setup/includes/upgrades/sqlsrv/3.0.0-pl.php b/setup/includes/upgrades/sqlsrv/3.0.0-pl.php
index d0bdcc30e88..2c78ec486c5 100644
--- a/setup/includes/upgrades/sqlsrv/3.0.0-pl.php
+++ b/setup/includes/upgrades/sqlsrv/3.0.0-pl.php
@@ -12,11 +12,6 @@
include dirname(__DIR__) . '/common/3.0.0-dashboard-widgets.php';
include dirname(__DIR__) . '/common/3.0.0-remove-copy-to-clipboard.php';
include dirname(__DIR__) . '/common/3.0.0-cleanup-system-settings.php';
-include dirname(__DIR__) . '/common/3.0.0-cleanup-richtext-editor-system-settings.php';
-include dirname(__DIR__) . '/common/3.0.0-remove-tv-eval-system-setting.php';
-include dirname(__DIR__) . '/common/3.0.0-remove-upload-flash-system-setting.php';
-include dirname(__DIR__) . '/common/3.0.0-cleanup-authentication-security-system-settings.php';
-include dirname(__DIR__) . '/common/3.0.0-cleanup-lexicon-language-system-settings.php';
include dirname(__DIR__) . '/common/3.0.0-content-type-icon.php';
include dirname(__DIR__) . '/common/3.0.0-update-xtypes-system-settings.php';
include dirname(__DIR__) . '/common/3.0.0-update-sys-setting_upload_files-upload_images.php';
From 9d1360623831df9eb219a15803d14798f8b7d721 Mon Sep 17 00:00:00 2001
From: Ivan Klimchuk
Date: Fri, 5 Mar 2021 23:44:56 +0300
Subject: [PATCH 3/7] fix: condition which allows delete entries
---
.../Revolution/Processors/Security/Access/Policy/GetList.php | 2 +-
.../Processors/Security/Access/Policy/Template/GetList.php | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/core/src/Revolution/Processors/Security/Access/Policy/GetList.php b/core/src/Revolution/Processors/Security/Access/Policy/GetList.php
index 5d18023313d..9d9b6ed4609 100644
--- a/core/src/Revolution/Processors/Security/Access/Policy/GetList.php
+++ b/core/src/Revolution/Processors/Security/Access/Policy/GetList.php
@@ -156,7 +156,7 @@ public function prepareRow(xPDOObject $object)
*/
protected function prepareRowClasses(xPDOObject $object)
{
- if ($object->isCorePolicy($object->get('name'))) {
+ if (!$object->isCorePolicy($object->get('name'))) {
return implode(' ', [
static::CLASS_ALLOW_EDIT,
static::CLASS_ALLOW_REMOVE
diff --git a/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php b/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php
index 8e70a3869d4..62347476fac 100644
--- a/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php
+++ b/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php
@@ -111,7 +111,7 @@ public function prepareRow(xPDOObject $object)
*/
protected function prepareRowClasses(xPDOObject $object)
{
- if ($object->isCoreTemplate($object->get('name'))) {
+ if (!$object->isCoreTemplate($object->get('name'))) {
return implode(' ', [
static::CLASS_ALLOW_EDIT,
static::CLASS_ALLOW_REMOVE
From 4d8cc993ad2f647e2de610c8a7d850a2cacca7b0 Mon Sep 17 00:00:00 2001
From: Ivan Klimchuk
Date: Fri, 5 Mar 2021 23:45:52 +0300
Subject: [PATCH 4/7] fix: add html encoding for translations to avoid xss
---
.../assets/modext/widgets/security/modx.grid.access.policy.js | 2 +-
.../modext/widgets/security/modx.grid.access.policy.template.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/manager/assets/modext/widgets/security/modx.grid.access.policy.js b/manager/assets/modext/widgets/security/modx.grid.access.policy.js
index 674310d05c8..1b2b0e9a219 100644
--- a/manager/assets/modext/widgets/security/modx.grid.access.policy.js
+++ b/manager/assets/modext/widgets/security/modx.grid.access.policy.js
@@ -72,7 +72,7 @@ MODx.grid.AccessPolicy = function(config) {
,dataIndex: 'description'
,width: 375
,renderer: function(value, metaData, record) {
- return record['data']['description_trans'];
+ return Ext.util.Format.htmlEncode(record['data']['description_trans']);
}
,editable: false
},{
diff --git a/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js b/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js
index af2bc381184..604ead4122b 100644
--- a/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js
+++ b/manager/assets/modext/widgets/security/modx.grid.access.policy.template.js
@@ -73,7 +73,7 @@ MODx.grid.AccessPolicyTemplate = function(config) {
,width: 375
,editable: false
,renderer: function(value, metaData, record) {
- return record['data']['description_trans'];
+ return Ext.util.Format.htmlEncode(record['data']['description_trans']);
}
,sortable: true
},{
From 8d266e5f953f482222ab3b86e1545d60a3d0e948 Mon Sep 17 00:00:00 2001
From: Ivan Klimchuk
Date: Fri, 5 Mar 2021 23:52:46 +0300
Subject: [PATCH 5/7] fix: missed translate for changed policy description
---
core/lexicon/en/policy.inc.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/lexicon/en/policy.inc.php b/core/lexicon/en/policy.inc.php
index 086ca83c8d9..5f404187280 100644
--- a/core/lexicon/en/policy.inc.php
+++ b/core/lexicon/en/policy.inc.php
@@ -97,7 +97,7 @@
$_lang['policy_resource_desc'] = 'MODX Resource Policy with all attributes.';
$_lang['policy_administrator_desc'] = 'Context administration policy with all permissions.';
$_lang['policy_load_only_desc'] = 'A minimal policy with permission to load an object.';
-$_lang['policy_load_list_view_desc'] = 'Provides load, list and view permissions only.';
+$_lang['policy_load_list_and_view_desc'] = 'Provides load, list and view permissions only.';
$_lang['policy_object_desc'] = 'An Object policy with all permissions.';
$_lang['policy_element_desc'] = 'MODX Element policy with all attributes.';
$_lang['policy_content_editor_desc'] = 'Context administration policy with limited, content-editing related Permissions, but no publishing.';
From 098b1043b934ae688e971efaed26af4ccdc3ca66 Mon Sep 17 00:00:00 2001
From: Ivan Klimchuk
Date: Fri, 5 Mar 2021 23:53:36 +0300
Subject: [PATCH 6/7] feat: fallback to english in case translation does not
exist in the target language
---
.../Revolution/Processors/Security/Access/Policy/GetList.php | 2 +-
.../Processors/Security/Access/Policy/Template/GetList.php | 2 +-
.../Security/Access/Policy/Template/Group/GetList.php | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/core/src/Revolution/Processors/Security/Access/Policy/GetList.php b/core/src/Revolution/Processors/Security/Access/Policy/GetList.php
index 9d9b6ed4609..12a29f692be 100644
--- a/core/src/Revolution/Processors/Security/Access/Policy/GetList.php
+++ b/core/src/Revolution/Processors/Security/Access/Policy/GetList.php
@@ -33,7 +33,7 @@ class GetList extends GetListProcessor
public $checkListPermission = false;
public $objectType = 'policy';
public $permission = 'policy_view';
- public $languageTopics = ['policy'];
+ public $languageTopics = ['policy', 'en:policy'];
/**
* @return bool
diff --git a/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php b/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php
index 62347476fac..b2249bd6779 100644
--- a/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php
+++ b/core/src/Revolution/Processors/Security/Access/Policy/Template/GetList.php
@@ -32,7 +32,7 @@ class GetList extends GetListProcessor
public $checkListPermission = false;
public $objectType = 'policy_template';
public $permission = 'policy_template_view';
- public $languageTopics = ['policy'];
+ public $languageTopics = ['policy', 'en:policy'];
/**
* @return bool
diff --git a/core/src/Revolution/Processors/Security/Access/Policy/Template/Group/GetList.php b/core/src/Revolution/Processors/Security/Access/Policy/Template/Group/GetList.php
index 43da2b89da9..9ba6a537f4e 100644
--- a/core/src/Revolution/Processors/Security/Access/Policy/Template/Group/GetList.php
+++ b/core/src/Revolution/Processors/Security/Access/Policy/Template/Group/GetList.php
@@ -31,7 +31,7 @@ class GetList extends GetListProcessor
public $checkListPermission = false;
public $objectType = 'permission';
public $permission = 'policy_template_view';
- public $languageTopics = ['policy'];
+ public $languageTopics = ['policy', 'en:policy'];
/**
* @param xPDOObject $object
From 60c9b9253480e5bf399df6d3d1c298eaf5d9477c Mon Sep 17 00:00:00 2001
From: Ivan Klimchuk
Date: Fri, 19 Mar 2021 09:39:04 +0300
Subject: [PATCH 7/7] Minified javascript
---
manager/assets/modext/modx.jsgrps-min.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/manager/assets/modext/modx.jsgrps-min.js b/manager/assets/modext/modx.jsgrps-min.js
index 2682fc29de9..763ef5a4439 100644
--- a/manager/assets/modext/modx.jsgrps-min.js
+++ b/manager/assets/modext/modx.jsgrps-min.js
@@ -1,2 +1,2 @@
-Ext.onReady(function(){return"en"!=MODx.config.cultureKey&&(Date.dayNames=[_("sunday"),_("monday"),_("tuesday"),_("wednesday"),_("thursday"),_("friday"),_("saturday")],Date.monthNames=[_("january"),_("february"),_("march"),_("april"),_("may"),_("june"),_("july"),_("august"),_("september"),_("october"),_("november"),_("december")],Ext.apply(Ext.grid.GridView.prototype,{sortAscText:_("ext_sortasc"),sortDescText:_("ext_sortdesc"),lockText:_("ext_column_lock"),unlockText:_("ext_column_unlock"),columnsText:_("ext_columns"),emptyText:_("ext_emptymsg")}),Ext.apply(Ext.DatePicker.prototype,{todayText:_("today"),todayTip:_("ext_today_tip"),minText:_("ext_mindate"),maxText:_("ext_maxdate"),monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:_("ext_nextmonth"),prevText:_("ext_prevmonth"),monthYearText:_("ext_choosemonth")}),Ext.MessageBox.buttonText={yes:_("yes"),no:_("no"),ok:_("ok"),cancel:_("cancel")},Ext.apply(Ext.PagingToolbar.prototype,{afterPageText:_("ext_afterpage"),beforePageText:_("ext_beforepage"),displayMsg:_("ext_displaying"),emptyMsg:_("ext_emptymsg"),firstText:_("ext_first"),prevText:_("ext_prev"),nextText:_("ext_next"),lastText:_("ext_last"),refreshText:_("ext_refresh")}),Ext.apply(Ext.Updater.prototype,{text:_("loading")}),Ext.apply(Ext.LoadMask.prototype,{msg:_("loading")}),Ext.apply(Ext.layout.BorderLayout.SplitRegion.prototype,{splitTip:_("ext_splittip")}),Ext.apply(Ext.form.BasicForm.prototype,{waitTitle:_("please_wait")}),Ext.apply(Ext.form.ComboBox.prototype,{loadingText:_("loading")}),Ext.apply(Ext.form.Field.prototype,{invalidText:_("ext_invalidfield")}),Ext.apply(Ext.form.TextField.prototype,{minLengthText:_("ext_minlenfield"),maxLengthText:_("ext_maxlenfield"),invalidText:_("ext_invalidfield"),blankText:_("field_required")}),Ext.apply(Ext.form.NumberField.prototype,{minText:_("ext_minvalfield"),maxText:_("ext_maxvalfield"),nanText:_("ext_nanfield")}),Ext.apply(Ext.form.DateField.prototype,{disabledDaysText:_("disabled"),disabledDatesText:_("disabled"),minText:_("ext_datemin"),maxText:_("ext_datemax"),invalidText:_("ext_dateinv")}),Ext.apply(Ext.form.VTypes,{emailText:_("ext_inv_email"),urlText:_("ext_inv_url"),alphaText:_("ext_inv_alpha"),alphanumText:_("ext_inv_alphanum")}),Ext.apply(Ext.grid.GroupingView.prototype,{emptyGroupText:_("ext_emptygroup"),groupByText:_("ext_groupby"),showGroupsText:_("ext_showgroups")}),Ext.apply(Ext.grid.PropertyColumnModel.prototype,{nameText:_("name"),valueText:_("value")}),Ext.apply(Ext.form.CheckboxGroup.prototype,{blankText:_("ext_checkboxinv")}),Ext.apply(Ext.form.RadioGroup.prototype,{blankText:_("ext_checkboxinv")}),void Ext.apply(Ext.form.TimeField.prototype,{minText:_("ext_timemin"),maxText:_("ext_timemax"),invalidText:_("ext_timeinv")}))}),Ext.namespace("MODx.util.Progress"),Ext.namespace("MODx.util.Format"),MODx.util.JSONReader=function(config){config=config||{},Ext.applyIf(config,{successProperty:"success",totalProperty:"total",root:"data"}),MODx.util.JSONReader.superclass.constructor.call(this,config,["id","msg"])},Ext.extend(MODx.util.JSONReader,Ext.data.JsonReader),Ext.reg("modx-json-reader",MODx.util.JSONReader),MODx.util.Progress={id:0,time:function(v,id,msg){msg=msg||_("saving"),MODx.util.Progress.id===id&&v<11&&Ext.MessageBox.updateProgress(v/10,msg)},reset:function(){MODx.util.Progress.id=MODx.util.Progress.id+1}},MODx.LockMask=function(config){config=config||{},Ext.applyIf(config,{msg:_("locked"),msgCls:"modx-lockmask"}),MODx.LockMask.superclass.constructor.call(this,config.el,config)},Ext.extend(MODx.LockMask,Ext.LoadMask,{locked:!1,toggle:function(){this.locked?(this.hide(),this.locked=!1):(this.show(),this.locked=!0)},lock:function(){this.locked=!0,this.show()},unlock:function(){this.locked=!1,this.hide()}}),Ext.reg("modx-lockmask",MODx.LockMask),Ext.override(Ext.form.BasicForm,{clearDirty:function(nodeToRecurse){(nodeToRecurse=nodeToRecurse||this).items.each(function(f){f.getValue&&(f.items?this.clearDirty(f):f.originalValue!=f.getValue()&&(f.originalValue=f.getValue()))},this)}}),MODx.StaticTextField=Ext.extend(Ext.form.TextField,{fieldClass:"x-static-text-field",onRender:function(){this.readOnly=!0,this.disabled=!this.initialConfig.submitValue,MODx.StaticTextField.superclass.onRender.apply(this,arguments)}}),Ext.reg("statictextfield",MODx.StaticTextField),MODx.StaticBoolean=Ext.extend(Ext.form.TextField,{fieldClass:"x-static-text-field",onRender:function(tf){this.readOnly=!0,this.disabled=!this.initialConfig.submitValue,MODx.StaticBoolean.superclass.onRender.apply(this,arguments),this.on("change",this.onChange,this)},setValue:function(v){v=1===v?(this.addClass("green"),_("yes")):(this.addClass("red"),_("no")),MODx.StaticBoolean.superclass.setValue.apply(this,arguments)}}),Ext.reg("staticboolean",MODx.StaticBoolean),MODx.util.safeHtml=function(input,allowedTags,allowedAttributes){allowedTags=(((allowedTags||"
")+"").toLowerCase().match(/<[a-z][a-z0-9]*>/g)||[]).join(""),allowedAttributes=(((allowedAttributes||"href,class")+"").toLowerCase().match(/[a-z\-,]*/g)||[]).join("").concat(",");var length,tags=/<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,attributes=/([a-z][a-z0-9]*)\s*=\s*".*?"/gi;for(input=input.replace(/|<\?(?:php)?[\s\S]*?\?>/gi,"").replace(/href(\s*?=\s*?(["'])javascript:.*?\2|\s*?=\s*?javascript:.*?(?![^> ]))/gi,'href="javascript:void(0)"');length=input.length,input=function(input,allowedTags,allowedAttributes){return input.replace(tags,function($0,$1){return-1")?$0:""}).replace(attributes,function($0,$1){return-1',elbowMarkup=n.attributes.pseudoroot?'':'',index=['",'',""].join("");!0!==bulkRender&&n.nextSibling&&(nel=n.nextSibling.ui.getEl())?this.wrap=Ext.DomHelper.insertHtml("beforeBegin",nel,index):this.wrap=Ext.DomHelper.insertHtml("beforeEnd",cs,index),this.elNode=this.wrap.childNodes[0],this.ctNode=this.wrap.childNodes[1];cs=this.elNode.childNodes;this.indentNode=cs[0],this.ecNode=cs[1],this.iconNode=cs[2];index=3;cb&&(this.checkbox=cs[3],this.checkbox.defaultChecked=this.checkbox.checked,index++),this.anchor=cs[index],this.textNode=cs[index].firstChild},renderItemText:function(item){return Ext.util.Format.htmlEncode(item.text)},getChildIndent:function(){if(!this.childIndent){for(var buf=[],p=this.node;p;)(!p.isRoot||p.isRoot&&p.ownerTree.rootVisible)&&!p.attributes.pseudoroot&&(p.isLast()?buf.unshift('
'):buf.unshift('
')),p=p.parentNode;this.childIndent=buf.join("")}return this.childIndent}}),Ext.override(Ext.form.Action.Submit,{handleResponse:function(response){var m=Ext.decode(response.responseText);if(this.form.errorReader){var rs=this.form.errorReader.read(response),errors=[];if(rs.records)for(var i=0,len=rs.records.length;i{text}{text}',init:function(){this.tpl=new Ext.XTemplate(this.bdMarkup,{compiled:!0})},trail:trail,listeners:{afterrender:function(){this.renderTrail()}},renderTrail:function(){this.tpl.overwrite(this.body.dom.lastElementChild,{trail:this.trail})},updateTrail:function(trail,replace){if(void 0===replace&&(replace=!1),!0===replace)return this.trail=Array.isArray(trail)?trail:[trail],this.renderTrail(),!0;if(Array.isArray(trail)){for(var i=0;i ux-action-right {cls}" style="{style}" qtip="{qtip}">{text}
',tplRow:'ux-row-action-text" style="{hide}{style}" qtip="{qtip}">{text}
',hideMode:"visibility",widthIntercept:4,widthSlope:21,init:function(g){this.grid=g,this.id=this.id||Ext.id();var h=g.getColumnModel().lookup;delete h[void 0],(h[this.id]=this).tpl||(this.tpl=this.processActions(this.actions)),this.autoWidth&&(this.width=this.widthSlope*this.actions.length+this.widthIntercept,this.fixed=!0);var i=g.getView(),j={scope:this};j[this.actionEvent]=this.onClick,g.afterRender=g.afterRender.createSequence(function(){i.mainBody.on(j),g.on("destroy",this.purgeListeners,this)},this),this.renderer||(this.renderer=function(a,b,c,d,e,f){return b.css+=(b.css?" ":"")+"ux-row-action-cell",this.tpl.apply(this.getData(a,b,c,d,e,f))}.createDelegate(this)),i.groupTextTpl&&this.groupActions&&(i.interceptMouse=i.interceptMouse.createInterceptor(function(e){if(e.getTarget(".ux-grow-action-item"))return!1}),i.groupTextTpl=''+i.groupTextTpl+"
"+this.processActions(this.groupActions,this.tplGroup).apply()),!0===this.keepSelection&&(g.processEvent=g.processEvent.createInterceptor(function(a,e){if("mousedown"===a)return!this.getAction(e)},this))},getData:function(a,b,c,d,e,f){return c.data||{}},processActions:function(b,e){var d=[];Ext.each(b,function(o,i){o.iconCls&&"function"==typeof(o.callback||o.cb)&&(this.callbacks=this.callbacks||{},this.callbacks[o.iconCls]=o.callback||o.cb);o={cls:o.iconIndex?"{"+o.iconIndex+"}":o.iconCls||"",qtip:o.qtipIndex?"{"+o.qtipIndex+"}":o.tooltip||o.qtip?o.tooltip||o.qtip:"",text:o.textIndex?"{"+o.textIndex+"}":o.text||"",hide:o.hideIndex?''+("display"===this.hideMode?"display:none":"visibility:hidden")+";":o.hide?"display"===this.hideMode?"display:none":"visibility:hidden;":"",align:o.align||"right",style:o.style||""};d.push(o)},this);e=new Ext.XTemplate(e||this.tplRow);return new Ext.XTemplate(e.apply({actions:d}))},getAction:function(t){var a=!1,t=t.getTarget(".ux-row-action-item");return t&&(a=(a=t.className.replace(/ux-row-action-item /,""))&&(a=a.replace(/ ux-row-action-text/,"")).trim()),a},onClick:function(e,i){var b=this.grid.getView(),c=e.getTarget(".x-grid3-row"),d=b.findCellIndex(i.parentNode.parentNode),f=this.getAction(e);if(!1!==c&&!1!==d&&!1!==f){var g=this.grid.store.getAt(c.rowIndex);if(this.callbacks&&"function"==typeof this.callbacks[f]&&this.callbacks[f](this.grid,g,f,c.rowIndex,d),!0!==this.eventsSuspended&&!1===this.fireEvent("beforeaction",this.grid,g,f,c.rowIndex,d))return;!0!==this.eventsSuspended&&this.fireEvent("action",this.grid,g,f,c.rowIndex,d)}if(t=e.getTarget(".ux-grow-action-item"),t){var k,j,i=b.findGroup(i),i=i?i.id.replace(/ext-gen[0-9]+-gp-/,""):null;if(i&&(k=new RegExp(RegExp.escape(i)),j=(j=this.grid.store.queryBy(function(r){return r._groupId.match(k)}))?j.items:[]),f=t.className.replace(/ux-grow-action-item (ux-action-right )*/,""),"function"==typeof this.callbacks[f]&&this.callbacks[f](this.grid,j,f,i),!0!==this.eventsSuspended&&!1===this.fireEvent("beforegroupaction",this.grid,j,f,i))return!1;this.fireEvent("groupaction",this.grid,j,f,i)}}}),Ext.reg("rowactions",Ext.ux.grid.RowActions),Ext.SwitchButton=Ext.extend(Ext.Component,{initComponent:function(){Ext.SwitchButton.superclass.initComponent.call(this);var mc=new Ext.util.MixedCollection;mc.addAll(this.items),this.items=mc,this.addEvents("change"),this.handler&&this.on("change",this.handler,this.scope||this)},onRender:function(ct,position){var el=document.createElement("table");el.cellSpacing=0,el.className="x-rbtn",el.id=this.id;var row=document.createElement("tr");el.appendChild(document.createElement("tbody")).appendChild(row);var count=this.items.length,last=count-1;this.activeItem=this.items.get(this.activeItem);for(var i=0;idata.rowIndex&&this.rowPosition<0&&rindex--,rindexdata.rowIndex&&1','{value}
',""),MODx.grid||(MODx.grid={}),MODx.grid.ComboColumn=Ext.extend(Ext.grid.Column,{gridId:void 0,constructor:function(cfg){MODx.grid.ComboColumn.superclass.constructor.call(this,cfg),this.renderer=this.editor&&this.editor.triggerAction?MODx.grid.ComboBoxRenderer(this.editor,this.gridId,cfg.renderer):function(value){return value}}}),Ext.grid.Column.types.combocolumn=MODx.grid.ComboColumn,MODx.grid.ComboBoxRenderer=function(combo,gridId,currentRenderer){return function(value,metaData,record,rowIndex,colIndex,store){var scope;return currentRenderer&&("function"==typeof currentRenderer.fn&&(scope=currentRenderer.scope||!1,currentRenderer=currentRenderer.fn.bind(scope)),"function"==typeof currentRenderer&&(value=currentRenderer(value,metaData,record,rowIndex,colIndex,store))),0==combo.store.getCount()&&gridId?(combo.store.on("load",function(){var grid=Ext.getCmp(gridId);grid&&grid.getView().refresh()},this,{single:!0}),value):function(value){var rec=combo.store.find(combo.valueField,value),rec=combo.store.getAt(rec);return rec?rec.get(combo.displayField):value}(value)}},Ext.Button.buttonTemplate=new Ext.Template(''),Ext.Button.buttonTemplate.compile(),Ext.TabPanel.prototype.itemTpl=new Ext.Template('','{text}'),Ext.TabPanel.prototype.itemTpl.disableFormats=!0,Ext.TabPanel.prototype.itemTpl.compile(),Ext.override(Ext.form.TimeField,{initDate:"2/1/2008"}),Ext.ns("Ext.ux.form"),Ext.ux.form.DateTime=Ext.extend(Ext.form.Field,{dateValidator:null,defaultAutoCreate:{tag:"input",type:"hidden"},dtSeparator:" ",hiddenFormat:"Y-m-d H:i:s",hiddenFormatForTimeHidden:"Y-m-d 00:00:00",otherToNow:!0,timePosition:"right",timeValidator:null,timeWidth:100,dateFormat:"m/d/y",timeFormat:"g:i A",maxDateValue:"",minDateValue:"",timeIncrement:15,maxTimeValue:null,minTimeValue:null,disabledDates:null,hideTime:!1,initComponent:function(){Ext.ux.form.DateTime.superclass.initComponent.call(this),this.hasOwnProperty("offset_time")&&!isNaN(this.offset_time)||(this.offset_time=0),this.hideTime&&(this.hiddenFormat=this.hiddenFormatForTimeHidden);var timeConfig=Ext.apply({},{id:this.id+"-date",format:this.dateFormat||Ext.form.DateField.prototype.format,width:this.timeWidth,selectOnFocus:this.selectOnFocus,validator:this.dateValidator,disabledDates:this.disabledDates||null,disabledDays:this.disabledDays||[],showToday:this.showToday||!0,maxValue:this.maxDateValue||"",minValue:this.minDateValue||"",startDay:this.startDay||0,allowBlank:this.allowBlank,listeners:{blur:{scope:this,fn:this.onBlur},focus:{scope:this,fn:this.onFocus}}},this.dateConfig);this.df=new Ext.form.DateField(timeConfig),delete(this.df.ownerCt=this).dateFormat,delete this.disabledDates,delete this.disabledDays,delete this.maxDateValue,delete this.minDateValue,delete this.startDay;timeConfig=Ext.apply({},{id:this.id+"-time",format:this.timeFormat||Ext.form.TimeField.prototype.format,width:this.timeWidth,selectOnFocus:this.selectOnFocus,validator:this.timeValidator,increment:this.timeIncrement||15,maxValue:this.maxTimeValue||null,minValue:this.minTimeValue||null,hidden:this.hideTime,allowBlank:this.allowBlank,listeners:{blur:{scope:this,fn:this.onBlur},focus:{scope:this,fn:this.onFocus}}},this.timeConfig);this.tf=new Ext.form.TimeField(timeConfig),delete(this.tf.ownerCt=this).timeFormat,delete this.maxTimeValue,delete this.minTimeValue,delete this.timeIncrement,this.relayEvents(this.df,["focus","specialkey","invalid","valid"]),this.relayEvents(this.tf,["focus","specialkey","invalid","valid"]),this.on("specialkey",this.onSpecialKey,this)},onRender:function(o,position){this.isRendered||(Ext.ux.form.DateTime.superclass.onRender.call(this,o,position),o="below"===this.timePosition||"bellow"===this.timePosition?Ext.DomHelper.append(o,{tag:"table",style:"border-collapse:collapse",children:[{tag:"tr",children:[{tag:"td",style:"padding-bottom:1px",cls:"ux-datetime-date"}]},{tag:"tr",children:[{tag:"td",cls:"ux-datetime-time"}]}]},!0):Ext.DomHelper.append(o,{tag:"table",style:"border-collapse:collapse",children:[{tag:"tr",children:[{tag:"td",style:"padding-right:4px",cls:"ux-datetime-date"},{tag:"td",cls:"ux-datetime-time"}]}]},!0),this.tableEl=o,this.wrap=o.wrap({cls:"x-form-field-wrap x-datetime-wrap"}),this.wrap.on("mousedown",this.onMouseDown,this,{delay:10}),this.df.render(o.child("td.ux-datetime-date")),this.tf.render(o.child("td.ux-datetime-time")),this.df.el.swallowEvent(["keydown","keypress"]),this.tf.el.swallowEvent(["keydown","keypress"]),"side"===this.msgTarget&&((o=this.el.findParent(".x-form-element",10,!0))&&(this.errorIcon=o.createChild({cls:"x-form-invalid-icon"})),o={errorIcon:this.errorIcon,msgTarget:"side",alignErrorIcon:this.alignErrorIcon.createDelegate(this)},Ext.apply(this.df,o),Ext.apply(this.tf,o)),this.el.dom.name=this.hiddenName||this.name||this.id,this.df.el.dom.removeAttribute("name"),this.tf.el.dom.removeAttribute("name"),this.isRendered=!0,this.updateHidden())},adjustSize:Ext.BoxComponent.prototype.adjustSize,alignErrorIcon:function(){this.errorIcon.alignTo(this.tableEl,"tl-tr",[2,0])},initDateValue:function(){this.dateValue=this.otherToNow?new Date:new Date(1970,0,1,0,0,0)},clearInvalid:function(){this.df.clearInvalid(),this.tf.clearInvalid()},markInvalid:function(msg){this.df.markInvalid(msg),this.tf.markInvalid(msg)},beforeDestroy:function(){this.isRendered&&(this.wrap.removeAllListeners(),this.wrap.remove(),this.tableEl.remove(),this.df.destroy(),this.tf.destroy())},disable:function(){return this.isRendered&&(this.df.disabled=this.disabled,this.df.onDisable(),this.tf.onDisable()),this.disabled=!0,this.df.disabled=!0,this.tf.disabled=!0,this.fireEvent("disable",this),this},enable:function(){return this.rendered&&(this.df.onEnable(),this.tf.onEnable()),this.disabled=!1,this.df.disabled=!1,this.tf.disabled=!1,this.fireEvent("enable",this),this},focus:function(){this.df.focus()},getPositionEl:function(){return this.wrap},getResizeEl:function(){return this.wrap},getValue:function(){return this.dateValue?new Date(this.dateValue):""},isValid:function(){return this.df.isValid()&&this.tf.isValid()},isVisible:function(){return this.df.rendered&&this.df.getActionEl().isVisible()},onBlur:function(f){this.wrapClick&&(f.focus(),this.wrapClick=!1),f===this.df?this.updateDate():this.updateTime(),this.updateHidden(),this.validate(),function(){var v;this.df.hasFocus||this.tf.hasFocus||(v=this.getValue(),String(v)!==String(this.startValue)&&this.fireEvent("change",this,v,this.startValue),this.hasFocus=!1,this.fireEvent("blur",this))}.defer(100,this)},onFocus:function(){this.hasFocus||(this.hasFocus=!0,this.startValue=this.getValue(),this.fireEvent("focus",this))},onMouseDown:function(e){this.disabled||(this.wrapClick="td"===e.target.nodeName.toLowerCase())},onSpecialKey:function(t,e){var key=e.getKey();key===e.TAB&&(t!==this.df||e.shiftKey||(e.stopEvent(),this.tf.focus()),t===this.tf&&e.shiftKey&&(e.stopEvent(),this.df.focus()),this.updateValue()),key===e.ENTER&&this.updateValue()},reset:function(){this.df.setValue(this.originalValue),this.tf.setValue(this.originalValue)},setDate:function(date){date&&0!=this.offset_time&&(date=date.add(Date.MINUTE,60*new Number(this.offset_time))),this.df.setValue(date)},setTime:function(date){date&&0!=this.offset_time&&(date=date.add(Date.MINUTE,60*new Number(this.offset_time))),this.tf.setValue(date)},setSize:function(w,h){w&&("below"===this.timePosition?(this.df.setSize(w,h),this.tf.setSize(w,h),Ext.isIE&&(this.df.el.up("td").setWidth(w),this.tf.el.up("td").setWidth(w))):(this.df.setSize(w-this.timeWidth-4,h),this.tf.setSize(this.timeWidth,h),Ext.isIE&&(this.df.el.up("td").setWidth(w-this.timeWidth-4),this.tf.el.up("td").setWidth(this.timeWidth))))},setValue:function(da){if(da||!0!==this.emptyToNow){if(!da)return this.setDate(""),this.setTime(""),void this.updateValue();"number"==typeof da?da=new Date(da):"string"==typeof da&&this.hiddenFormat&&(da=Date.parseDate(da,this.hiddenFormat)),(da=da||new Date(1970,0,1,0,0,0))instanceof Date?(this.setDate(da),this.setTime(da),this.dateValue=new Date(Ext.isIE?da.getTime():da)):(da=da.split(this.dtSeparator),this.setDate(da[0]),da[1]&&(da[2]&&(da[1]+=da[2]),this.setTime(da[1]))),this.updateValue()}else this.setValue(new Date)},setVisible:function(visible){return visible?(this.df.show(),this.tf.show()):(this.df.hide(),this.tf.hide()),this},show:function(){return this.setVisible(!0)},hide:function(){return this.setVisible(!1)},updateDate:function(){var d=this.df.getValue();d?(this.dateValue instanceof Date||(this.initDateValue(),this.tf.getValue()||this.setTime(this.dateValue)),this.dateValue.setMonth(0),this.dateValue.setFullYear(d.getFullYear()),this.dateValue.setMonth(d.getMonth(),d.getDate())):(this.dateValue="",this.setTime(""))},updateTime:function(){var t=this.tf.getValue();!t||t instanceof Date||(t=Date.parseDate(t,this.tf.format)),t&&!this.df.getValue()&&(this.initDateValue(),this.setDate(this.dateValue)),this.dateValue instanceof Date&&(t?(this.dateValue.setHours(t.getHours()),this.dateValue.setMinutes(t.getMinutes()),this.dateValue.setSeconds(t.getSeconds())):(this.dateValue.setHours(0),this.dateValue.setMinutes(0),this.dateValue.setSeconds(0)))},updateHidden:function(){var value;this.isRendered&&(value="",this.dateValue instanceof Date&&(value=this.dateValue.add(Date.MINUTE,0-60*new Number(this.offset_time)).format(this.hiddenFormat)),this.el.dom.value=value)},updateValue:function(){this.updateDate(),this.updateTime(),this.updateHidden()},validate:function(){return this.df.validate()&&this.tf.validate()},renderer:function(field){var format=field.editor.dateFormat||Ext.ux.form.DateTime.prototype.dateFormat;return format+=" "+(field.editor.timeFormat||Ext.ux.form.DateTime.prototype.timeFormat),function(val){return Ext.util.Format.date(val,format)}}}),Ext.reg("xdatetime",Ext.ux.form.DateTime),Ext.namespace("Ext.ux.Utils"),Ext.ux.Utils.EventQueue=function(handler,scope){if(!handler)throw"Handler is required.";this.handler=handler,this.scope=scope||window,this.queue=[],this.is_processing=!1,this.postEvent=function(event,data){data=data||null,this.queue.push({event:event,data:data}),this.is_processing||this.process()},this.flushEventQueue=function(){this.queue=[]},this.process=function(){for(;0 ").compile()},createForm:function(){this.form=Ext.DomHelper.append(this.body,{tag:"form",method:"post",action:this.url,style:"position: absolute; left: -100px; top: -100px; width: 100px; height: 100px; clear: both;"})},createProgressBar:function(){this.progress_bar=this.add(new Ext.ProgressBar({x:0,y:0,anchor:"0",value:0,text:this.i18n.progress_waiting_text}))},createGrid:function(){var store=new Ext.data.Store({proxy:new Ext.data.MemoryProxy([]),reader:new Ext.data.JsonReader({},Ext.ux.UploadDialog.FileRecord),sortInfo:{field:"state",direction:"DESC"},pruneModifiedRecords:!0}),cm=new Ext.grid.ColumnModel([{header:this.i18n.state_col_title,width:this.i18n.state_col_width,resizable:!1,dataIndex:"state",sortable:!0,renderer:this.renderStateCell.createDelegate(this)},{header:this.i18n.filename_col_title,width:this.i18n.filename_col_width,dataIndex:"filename",sortable:!0,renderer:this.renderFilenameCell.createDelegate(this)},{header:this.i18n.note_col_title,width:this.i18n.note_col_width,dataIndex:"note",sortable:!0,renderer:this.renderNoteCell.createDelegate(this)}]);this.grid_panel=new Ext.grid.GridPanel({ds:store,cm:cm,layout:"fit",height:this.height-100,region:"center",x:0,y:22,border:!0,viewConfig:{autoFill:!0,forceFit:!0},bbar:new Ext.Toolbar}),this.grid_panel.on("render",this.onGridRender,this),this.add(this.grid_panel),this.grid_panel.getSelectionModel().on("selectionchange",this.onGridSelectionChange,this)},fillToolbar:function(){var tb=this.grid_panel.getBottomToolbar();tb.x_buttons={},tb.x_buttons.add=tb.addItem(new Ext.ux.UploadDialog.TBBrowseButton({input_name:this.post_var_name,text:this.i18n.add_btn_text,tooltip:this.i18n.add_btn_tip,iconCls:"ext-ux-uploaddialog-addbtn",handler:this.onAddButtonFileSelected,scope:this})),tb.x_buttons.remove=tb.addButton({text:this.i18n.remove_btn_text,tooltip:this.i18n.remove_btn_tip,iconCls:"ext-ux-uploaddialog-removebtn",handler:this.onRemoveButtonClick,scope:this}),tb.x_buttons.reset=tb.addButton({text:this.i18n.reset_btn_text,tooltip:this.i18n.reset_btn_tip,iconCls:"ext-ux-uploaddialog-resetbtn",handler:this.onResetButtonClick,scope:this}),tb.x_buttons.upload=tb.addButton({text:this.i18n.upload_btn_start_text,tooltip:this.i18n.upload_btn_start_tip,iconCls:"ext-ux-uploaddialog-uploadstartbtn",handler:this.onUploadButtonClick,scope:this}),tb.x_buttons.close=tb.addButton({text:this.i18n.close_btn_text,tooltip:this.i18n.close_btn_tip,handler:this.onCloseButtonClick,scope:this})},renderStateCell:function(data,cell,record,row_index,column_index,store){return this.state_tpl.apply({state:data})},renderFilenameCell:function(data,cell,record,row_index,column_index,store){var view=this.grid_panel.getView();return function(){try{Ext.fly(view.getCell(row_index,column_index)).child(".x-grid3-cell-inner").dom.qtip=data}catch(e){}}.defer(1e3),data},renderNoteCell:function(data,cell,record,row_index,column_index,store){var view=this.grid_panel.getView();return function(){try{Ext.fly(view.getCell(row_index,column_index)).child(".x-grid3-cell-inner").dom.qtip=data}catch(e){}}.defer(1e3),data},getFileExtension:function(parts){var result=null,parts=parts.split(".");return 1((?:.|\n)*)<\/pre>$/i);filter&&(rt=filter[1]),json_response=Ext.util.JSON.decode(rt)}catch(e){}data={record:data.record,response:json_response};"success"in json_response&&json_response.success?this.fsa.postEvent("file-upload-success",data):this.fsa.postEvent("file-upload-error",data)},onAjaxFailure:function(response,data){data={record:data.record,response:{success:!1,error:this.i18n.note_upload_failed}};this.fsa.postEvent("file-upload-failed",data)},startUpload:function(){this.fsa.postEvent("start-upload")},stopUpload:function(){this.fsa.postEvent("stop-upload")},getUrl:function(){return this.url},setUrl:function(url){this.url=url},getBaseParams:function(){return this.base_params},setBaseParams:function(params){this.base_params=params},getUploadAutostart:function(){return this.upload_autostart},setUploadAutostart:function(value){this.upload_autostart=value},getMakeReload:function(){return this.Make_Reload},setMakeReload:function(value){this.Make_Reload=value},getAllowCloseOnUpload:function(){return this.allow_close_on_upload},setAllowCloseOnUpload:function(value){this.allow_close_on_upload},getResetOnHide:function(){return this.reset_on_hide},setResetOnHide:function(value){this.reset_on_hide=value},getPermittedExtensions:function(){return this.permitted_extensions},setPermittedExtensions:function(value){this.permitted_extensions=value},isUploading:function(){return this.is_uploading},isNotEmptyQueue:function(){return 0=this.minChars||valuesQuery&&!Ext.isEmpty(q))&&(forcedAdd||this.forceSameValueQuery||this.shouldQuery(q)?(this.lastQuery=q,"local"==this.mode?(this.selectedIndex=-1,forceAll?this.store.clearFilter():this.store.filter(this.displayField,q),this.onLoad()):(this.store.baseParams[this.queryParam]=q,this.store.baseParams[this.queryValuesIndicator]=valuesQuery,this.store.load({params:this.getParams(q)}),forcedAdd||this.expand())):(this.selectedIndex=-1,this.onLoad()))},onStoreLoad:function(params,records,options){var q=options.params[this.queryParam]||params.baseParams[this.queryParam]||"",params=options.params[this.queryValuesIndicator]||params.baseParams[this.queryValuesIndicator];this.removeValuesFromStore&&this.store.each(function(record){this.usedRecords.containsKey(record.get(this.valueField))&&this.store.remove(record)},this),params&&(params=q.split(this.queryValuesDelimiter),Ext.each(params,function(rec){this.remoteLookup.remove(rec);rec=this.findRecord(this.valueField,rec);rec&&this.addRecord(rec)},this),this.setOriginal&&(this.setOriginal=!1,this.originalValue=this.getValue())),""!==q&&this.allowAddNewData&&Ext.each(this.remoteLookup,function(rec){"object"==typeof rec&&rec[this.valueField]===q&&(this.remoteLookup.remove(rec),records.length&&records[0].get(this.valueField)===q?this.addRecord(records[0]):(rec=this.createRecord(rec),this.store.add(rec),this.addRecord(rec),this.addedRecords.push(rec),function(){this.isExpanded()&&this.collapse()}.defer(10,this)))},this);var re,toAdd=[];""===q?Ext.each(this.addedRecords,function(rec){this.preventDuplicates&&this.usedRecords.containsKey(rec.get(this.valueField))||toAdd.push(rec)},this):(re=new RegExp(Ext.escapeRe(q)+".*","i"),Ext.each(this.addedRecords,function(rec){this.preventDuplicates&&this.usedRecords.containsKey(rec.get(this.valueField))||re.test(rec.get(this.displayField))&&toAdd.push(rec)},this)),this.store.add(toAdd),this.sortStore(),0===this.store.getCount()&&this.isExpanded()&&this.collapse()}}),Ext.reg("superboxselect",Ext.ux.form.SuperBoxSelect),Ext.ux.form.SuperBoxSelectItem=function(config){Ext.apply(this,config),Ext.ux.form.SuperBoxSelectItem.superclass.constructor.call(this)},Ext.ux.form.SuperBoxSelectItem=Ext.extend(Ext.ux.form.SuperBoxSelectItem,Ext.Component,{initComponent:function(){Ext.ux.form.SuperBoxSelectItem.superclass.initComponent.call(this)},onElClick:function(e){var o=this.owner;o.clearCurrentFocus().collapse(),o.navigateItemsWithTab?this.focus():(o.el.dom.focus(),function(){this.onLnkFocus(),o.currentFocus=this}.defer(10,this))},onLnkClick:function(e){e&&e.stopEvent(),this.preDestroy(),this.owner.navigateItemsWithTab||this.owner.el.focus()},onLnkFocus:function(){this.el.addClass("x-superboxselect-item-focus"),this.owner.outerWrapEl.addClass("x-form-focus")},onLnkBlur:function(){this.el.removeClass("x-superboxselect-item-focus"),this.owner.outerWrapEl.removeClass("x-form-focus")},enableElListeners:function(){this.el.on("click",this.onElClick,this,{stopEvent:!0}),this.el.addClassOnOver("x-superboxselect-item x-superboxselect-item-hover")},enableLnkListeners:function(){this.lnk.on({click:this.onLnkClick,focus:this.onLnkFocus,blur:this.onLnkBlur,scope:this})},enableAllListeners:function(){this.enableElListeners(),this.enableLnkListeners()},disableAllListeners:function(){this.el.removeAllListeners(),this.lnk.un("click",this.onLnkClick,this),this.lnk.un("focus",this.onLnkFocus,this),this.lnk.un("blur",this.onLnkBlur,this)},onRender:function(cfg,el){Ext.ux.form.SuperBoxSelectItem.superclass.onRender.call(this,cfg,el);el=this.el;el&&el.remove(),this.el=el=cfg.createChild({tag:"li"},cfg.last()),el.addClass("x-superboxselect-item");var btnEl=this.owner.navigateItemsWithTab?"a":"span";this.key;Ext.apply(el,{focus:function(){var c=this.down(btnEl+".x-superboxselect-item-close");c&&c.focus()},preDestroy:function(){this.preDestroy()}.createDelegate(this)}),this.enableElListeners(),el.update(this.caption);cfg={tag:btnEl,class:"x-superboxselect-item-close",tabIndex:this.owner.navigateItemsWithTab?"0":"-1"};"a"==btnEl&&(cfg.href="#"),this.lnk=el.createChild(cfg),this.disabled?this.disableAllListeners():this.enableLnkListeners(),this.on({disable:this.disableAllListeners,enable:this.enableAllListeners,scope:this}),this.setupKeyMap()},setupKeyMap:function(){this.keyMap=new Ext.KeyMap(this.lnk,[{key:[Ext.EventObject.BACKSPACE,Ext.EventObject.DELETE,Ext.EventObject.SPACE],fn:this.preDestroy,scope:this},{key:[Ext.EventObject.RIGHT,Ext.EventObject.DOWN],fn:function(){this.moveFocus("right")},scope:this},{key:[Ext.EventObject.LEFT,Ext.EventObject.UP],fn:function(){this.moveFocus("left")},scope:this},{key:[Ext.EventObject.HOME],fn:function(){var l=this.owner.items.get(0).el.focus();l&&l.el.focus()},scope:this},{key:[Ext.EventObject.END],fn:function(){this.owner.el.focus()},scope:this},{key:Ext.EventObject.ENTER,fn:function(){}}]),this.keyMap.stopEvent=!0},moveFocus:function(el){el=this.el["left"==el?"prev":"next"]()||this.owner.el;el.focus.defer(100,el)},preDestroy:function(supressEffect){if(!1!==this.fireEvent("remove",this)){function actionDestroy(){this.owner.navigateItemsWithTab&&this.moveFocus("right"),this.hidden.remove(),this.hidden=null,this.destroy()}return supressEffect?actionDestroy.call(this):this.el.hide({duration:.2,callback:actionDestroy,scope:this}),this}},kill:function(){this.hidden.remove(),this.hidden=null,this.purgeListeners(),this.destroy()},onDisable:function(){this.hidden&&this.hidden.dom.setAttribute("disabled","disabled"),this.keyMap.disable(),Ext.ux.form.SuperBoxSelectItem.superclass.onDisable.call(this)},onEnable:function(){this.hidden&&this.hidden.dom.removeAttribute("disabled"),this.keyMap.enable(),Ext.ux.form.SuperBoxSelectItem.superclass.onEnable.call(this)},onDestroy:function(){Ext.destroy(this.lnk,this.el),Ext.ux.form.SuperBoxSelectItem.superclass.onDestroy.call(this)}}),MODx.Component=function(config){config=config||{},MODx.Component.superclass.constructor.call(this,config),this.config=config,this._loadForm(),this.config.tabs&&this._loadTabs(),this._loadComponents(),this._loadActionButtons(),MODx.activePage=this},Ext.extend(MODx.Component,Ext.Component,{fields:{},form:null,action:!1,_loadForm:function(){if(!this.config.form)return!1;if(this.form=new Ext.form.BasicForm(Ext.get(this.config.form),{errorReader:MODx.util.JSONReader}),this.config.fields)for(var i in this.config.fields){var f;this.config.fields.hasOwnProperty(i)&&((f=this.config.fields[i]).xtype&&(f=Ext.ComponentMgr.create(f)),this.fields[i]=f,this.form.add(f))}return this.form.render()},_loadActionButtons:function(){return!!this.config.buttons&&(this.ab=MODx.load({xtype:"modx-actionbuttons",form:this.form||null,formpanel:this.config.formpanel||null,actions:this.config.actions||null,items:this.config.buttons||[]}),this.ab)},_loadTabs:function(){if(!this.config.tabs)return!1;var o=this.config.tabOptions||{};return Ext.applyIf(o,{xtype:"modx-tabs",renderTo:this.config.tabs_div||"tabs_div",items:this.config.tabs}),MODx.load(o)},_loadComponents:function(){if(!this.config.components)return!1;for(var l=this.config.components.length,cp=Ext.getCmp("modx-content"),i=0;i","<-",""," "].indexOf(el)||el.xtype&&"switch"==el.xtype)MODx.toolbar.ActionButtons.superclass.add.call(this,el);else{var id=el.id||Ext.id();if(Ext.applyIf(el,{xtype:"button",cls:el.icon?"x-btn-icon bmenu":"x-btn-text bmenu",scope:this,disabled:!!el.checkDirty,listeners:{},id:id}),el.button&&MODx.toolbar.ActionButtons.superclass.add.call(this,el),null===el.handler&&null===el.menu?el.handler=this.checkConfirm:el.confirm&&el.handler?el.handler=function(){Ext.Msg.confirm(_("warning"),el.confirm,function(e){"yes"===e&&Ext.callback(el.handler,this)},el.scope||this)}:el.handler||(el.handler=this.handleClick),el.javascript&&(el.listeners.click={fn:this.evalJS,scope:this}),"button"==el.xtype&&(el.listeners.render={fn:function(btn){el.checkDirty&&btn&&this.checkDirtyBtns.push(btn)},scope:this}),el.keys){el.keyMap=new Ext.KeyMap(Ext.get(document));for(var j=0;j'+_("file_err_filter")+"",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(''+_("data_err_load")+"
")},_addContextMenuItem:function(items){for(var a=items,l=a.length,i=0;i ').compile()}),MODx.Button.superclass.constructor.call(this,config)},Ext.extend(MODx.Button,Ext.Button,{onRender:function(ct,position){this.template||(Ext.Button.buttonTemplate||(Ext.Button.buttonTemplate=new Ext.Template(' '),Ext.Button.buttonTemplate.compile()),this.template=Ext.Button.buttonTemplate);var btn=this.getTemplateArgs();btn.iconCls=this.iconCls,btn=position?this.template.insertBefore(position,btn,!0):this.template.append(ct,btn,!0),this.btnEl=btn.child("i"),this.mon(this.btnEl,{scope:this,focus:this.onFocus,blur:this.onBlur}),this.initButtonEl(btn,this.btnEl),Ext.ButtonToggleMgr.register(this)}}),Ext.reg("modx-button",MODx.Button),MODx.SearchBar=function(config){config=config||{},Ext.applyIf(config,{renderTo:"modx-manager-search",listClass:"modx-manager-search-results",emptyText:_("search"),id:"modx-uberbar",maxHeight:this.getViewPortSize(),typeAhead:!0,listAlign:["tl-bl?",[-12,12]],triggerConfig:{tag:"button",id:"modx-uberbar-trigger",type:"submit","aria-label":"Go",cls:"x-form-trigger icon icon-large icon-search"},defaultAutoCreate:{tag:"input",type:"text",size:"24",autocomplete:"off",tabindex:"0",hasfocus:!0,"aria-label":_("search")},hasfocus:!0,minChars:1,displayField:"name",valueField:"_action",width:380,itemSelector:".x-combo-list-item",tpl:new Ext.XTemplate('','","",{getClass:function(values){if(values.icon)return values.icon;if(values.class)switch(values.class){case"MODX\\Revolution\\modDocument":return"file";case"MODX\\Revolution\\modSymLink":return"files-o";case"MODX\\Revolution\\modWebLink":return"link";case"MODX\\Revolution\\modStaticResource":return"file-text-o"}switch(values.type){case"resources":return"file";case"chunks":return"th-large";case"templates":return"columns";case"snippets":return"code";case"tvs":return"list-alt";case"plugins":return"cogs";case"users":return"user";case"actions":return"mail-forward"}},getLabel:function(values){return values.label||_("search_resulttype_"+values.type)}}),store:new Ext.data.JsonStore({url:MODx.config.connector_url,baseParams:{action:"Search/Search"},root:"results",totalProperty:"total",fields:["name","_action","description","type","icon","label","class"],listeners:{beforeload:function(store,options){if(options.params._action)return!1}}}),listeners:{beforequery:{fn:function(){this.tpl.type=null}},focus:this.focusBar,blur:this.blurBar,afterrender:function(){document.getElementById("modx-manager-search").onclick=function(e){e.stopPropagation()}},scope:this}}),MODx.SearchBar.superclass.constructor.call(this,config),this.blur(),this.setKeyMap()},Ext.extend(MODx.SearchBar,Ext.form.ComboBox,{setKeyMap:function(){new Ext.KeyMap(document,{key:27,handler:function(){this.hideBar()},scope:this,stopEvent:!1})},initList:function(){var cls,lw;this.list||(cls="x-combo-list",lw=Ext.getDom(this.getListParent()||Ext.getBody()),this.list=new Ext.Layer({parentEl:lw,shadow:this.shadow,cls:[cls,this.listClass].join(" "),constrain:!1,zindex:this.getZIndex(lw)}),this.list.on("click",function(e){e.stopPropagation()}),lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth),this.list.setSize(lw,0),this.list.swallowEvent("mousewheel"),this.assetHeight=0,!1!==this.syncFont&&this.list.setStyle("font-size",this.el.getStyle("font-size")),this.title&&(this.header=this.list.createChild({cls:cls+"-hd",html:this.title}),this.assetHeight+=this.header.getHeight()),this.innerList=this.list.createChild({cls:cls+"-inner"}),this.mon(this.innerList,"mouseover",this.onViewOver,this),this.mon(this.innerList,"mousemove",this.onViewMove,this),this.innerList.setWidth(lw-this.list.getFrameWidth("lr")),this.pageSize&&(this.footer=this.list.createChild({cls:cls+"-ft"}),this.pageTb=new Ext.PagingToolbar({store:this.store,pageSize:this.pageSize,renderTo:this.footer}),this.assetHeight+=this.footer.getHeight()),this.tpl||(this.tpl='{'+this.displayField+"}
"),this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:!0,selectedClass:this.selectedClass,itemSelector:this.itemSelector||"."+cls+"-item",emptyText:this.listEmptyText,deferEmptyText:!1}),this.view.on("click",function(view,index,node,vent){view.select(node),window.event||(window.event=vent),this.onViewClick()},this),this.bindStore(this.store,!0),this.resizable&&(this.resizer=new Ext.Resizable(this.list,{pinned:!0,handles:"se"}),this.mon(this.resizer,"resize",function(r,w,h){this.maxHeight=h-this.handleHeight-this.list.getFrameWidth("tb")-this.assetHeight,this.listWidth=w,this.innerList.setWidth(w-this.list.getFrameWidth("lr")),this.restrictHeight()},this),this[this.pageSize?"footer":"innerList"].setStyle("margin-bottom",this.handleHeight+"px")))},onTypeAhead:function(){},onSelect:function(target,index){var e=Ext.EventObject;e.stopPropagation(),e.preventDefault();target="?a="+target.data._action;if(e.ctrlKey||e.metaKey||e.shiftKey)return window.open(target);MODx.loadPage(target)},hideBar:function(){},focusBar:function(){this.selectText()},blurBar:function(){},getViewPortSize:function(){var height=300;return void 0!==window.innerHeight&&(height=window.innerHeight),height-70}}),Ext.reg("modx-searchbar",MODx.SearchBar),Ext.namespace("MODx.panel"),MODx.Panel=function(config){config=config||{},Ext.applyIf(config,{cls:"modx-panel",title:""}),MODx.Panel.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.Panel,Ext.Panel),Ext.reg("modx-panel",MODx.Panel),MODx.FormPanel=function(config){config=config||{},Ext.applyIf(config,{autoHeight:!0,collapsible:!0,bodyStyle:"",layout:"anchor",border:!1,header:!1,method:"POST",cls:"modx-form",allowDrop:!0,errorReader:MODx.util.JSONReader,checkDirty:!0,useLoadingMask:!1,defaults:{collapsible:!1,autoHeight:!0,border:!1}}),config.items&&this.addChangeEvent(config.items),MODx.FormPanel.superclass.constructor.call(this,config),this.config=config,this.addEvents({setup:!0,fieldChange:!0,ready:!0,beforeSubmit:!0,success:!0,failure:!0,save:!0,actionNew:!0,actionContinue:!0,actionClose:!0,postReady:!0}),this.getForm().addEvents({success:!0,failure:!0}),this.dropTargets=[],this.on("ready",this.onReady),this.config.useLoadingMask&&this.on("render",function(){this.mask=new Ext.LoadMask(this.getEl()),this.mask.show()}),this.fireEvent("setup",config)&&this.clearDirty(),this.focusFirstField()},Ext.extend(MODx.FormPanel,Ext.FormPanel,{isReady:!1,defaultValues:[],initialized:!1,submit:function(o){var fm=this.getForm();return!(!fm.isValid()&&!o.bypassValidCheck)&&((o=o||{}).headers={"Powered-By":"MODx",modAuth:MODx.siteId},this.fireEvent("beforeSubmit",{form:fm,options:o,config:this.config})&&fm.submit({waitMsg:this.config.saveMsg||_("saving"),scope:this,headers:o.headers,clientValidation:!o.bypassValidCheck,failure:function(f,a){this.fireEvent("failure",{form:f,result:a.result,options:o,config:this.config})&&MODx.form.Handler.errorExt(a.result,f)},success:function(f,initFocus){this.config.success&&Ext.callback(this.config.success,this.config.scope||this,[f,initFocus]),this.fireEvent("success",{form:f,result:initFocus.result,options:o,config:this.config}),this.clearDirty(),this.fireEvent("setup",this.config);initFocus=Ext.state.Manager.get("curFocus");initFocus&&""!=initFocus&&(Ext.state.Manager.clear("curFocus"),(initFocus=document.getElementById(initFocus))&&initFocus.focus())}}),!0)},focusFirstField:function(){var fld;0",border:!1},MODx.TemplatePanel=function(config){config=config||{},Ext.applyIf(config,{frame:!1,startingMarkup:'',startingText:"Loading...",markup:null,plain:!0,border:!1}),MODx.TemplatePanel.superclass.constructor.call(this,config),this.on("render",this.init,this)},Ext.extend(MODx.TemplatePanel,Ext.Panel,{init:function(){this.defaultMarkup=new Ext.XTemplate(this.startingMarkup,{compiled:!0}),this.reset(),this.tpl=new Ext.XTemplate(this.markup,{compiled:!0})},reset:function(){this.body.hide(),this.defaultMarkup.overwrite(this.body,{text:this.startingText}),this.body.slideIn("r",{stopFx:!0,duration:.2}),setTimeout(function(){Ext.getCmp("modx-content").doLayout()},500)},updateDetail:function(data){this.body.hide(),this.tpl.overwrite(this.body,data),this.body.slideIn("r",{stopFx:!0,duration:.2}),setTimeout(function(){Ext.getCmp("modx-content").doLayout()},500)}}),Ext.reg("modx-template-panel",MODx.TemplatePanel),MODx.BreadcrumbsPanel=function(config){config=config||{},Ext.applyIf(config,{frame:!1,plain:!0,border:!1,desc:"This the description part of this panel",bdMarkup:'",root:{text:"Home",className:"first",root:!0,pnl:""},bodyCssClass:"breadcrumbs"}),MODx.BreadcrumbsPanel.superclass.constructor.call(this,config),this.on("render",this.init,this)},Ext.extend(MODx.BreadcrumbsPanel,Ext.Panel,{data:{trail:[]},init:function(){this.tpl=new Ext.XTemplate(this.bdMarkup,{compiled:!0}),this.reset(this.desc),this.body.on("click",this.onClick,this)},getResetText:function(srcInstance){if("object"!=typeof srcInstance||null==srcInstance)return srcInstance;var i,newInstance=srcInstance.constructor();for(i in srcInstance)newInstance[i]=this.getResetText(srcInstance[i]);return newInstance.hasOwnProperty("pnl")&&delete newInstance.pnl,newInstance},updateDetail:function(data){(this.data=data).hasOwnProperty("trail")&&data.trail.unshift(this.root),this._updatePanel(data)},getData:function(){return this.data},reset:function(msg){void 0===this.resetText&&(this.resetText=this.getResetText(this.root)),this.data={text:msg,trail:[this.resetText]},this._updatePanel(this.data)},onClick:function(panel){for(var last=panel.getTarget(),index=1,parent=last.parentElement;null!=(parent=parent.previousSibling);)index+=1;for(var remove=this.data.trail.length-index;0{name:htmlEncode}',"
{description:htmlEncode}
")}),MODx.combo.UserGroup.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.UserGroup,MODx.combo.ComboBox),Ext.reg("modx-combo-usergroup",MODx.combo.UserGroup),MODx.combo.UserGroupRole=function(config){config=config||{},Ext.applyIf(config,{name:"role",hiddenName:"role",displayField:"name",valueField:"id",fields:["name","id"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/Role/GetList"}}),MODx.combo.UserGroupRole.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.UserGroupRole,MODx.combo.ComboBox),Ext.reg("modx-combo-usergrouprole",MODx.combo.UserGroupRole),MODx.combo.EventGroup=function(config){config=config||{},Ext.applyIf(config,{name:"group",hiddenName:"group",displayField:"name",valueField:"name",fields:["name"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"System/Event/GroupList"},tpl:new Ext.XTemplate('{name:htmlEncode}',"
")}),MODx.combo.EventGroup.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.EventGroup,MODx.combo.ComboBox),Ext.reg("modx-combo-eventgroup",MODx.combo.EventGroup),MODx.combo.ResourceGroup=function(config){config=config||{},Ext.applyIf(config,{name:"resourcegroup",hiddenName:"resourcegroup",displayField:"name",valueField:"id",fields:["name","id"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/ResourceGroup/GetList"}}),MODx.combo.ResourceGroup.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ResourceGroup,MODx.combo.ComboBox),Ext.reg("modx-combo-resourcegroup",MODx.combo.ResourceGroup),MODx.combo.Context=function(config){config=config||{},Ext.applyIf(config,{name:"context",hiddenName:"context",displayField:"key",valueField:"key",fields:["key","name"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Context/GetList",exclude:config.exclude||""},tpl:new Ext.XTemplate('{name:htmlEncode} ({key:htmlEncode})
')}),MODx.combo.Context.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Context,MODx.combo.ComboBox),Ext.reg("modx-combo-context",MODx.combo.Context),MODx.combo.Policy=function(config){config=config||{},Ext.applyIf(config,{name:"policy",hiddenName:"policy",displayField:"name",valueField:"id",fields:["id","name","permissions"],allowBlank:!1,editable:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/Access/Policy/GetList"}}),MODx.combo.Policy.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Policy,MODx.combo.ComboBox),Ext.reg("modx-combo-policy",MODx.combo.Policy),MODx.combo.Template=function(config){config=config||{},Ext.applyIf(config,{name:"template",hiddenName:"template",displayField:"templatename",valueField:"id",pageSize:20,fields:["id","templatename","description","category_name"],tpl:new Ext.XTemplate('{templatename:htmlEncode}',' - {category_name:htmlEncode}',"
{description:htmlEncode()}
"),url:MODx.config.connector_url,baseParams:{action:"Element/Template/GetList",combo:1},allowBlank:!0}),MODx.combo.Template.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Template,MODx.combo.ComboBox),Ext.reg("modx-combo-template",MODx.combo.Template),MODx.combo.Category=function(config){config=config||{},Ext.applyIf(config,{name:"category",hiddenName:"category",displayField:"name",valueField:"id",mode:"remote",fields:["id","category","parent","name"],forceSelection:!0,typeAhead:!1,allowBlank:!0,editable:!1,enableKeyEvents:!0,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Element/Category/GetList",showNone:!0,limit:0}}),MODx.combo.Category.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Category,MODx.combo.ComboBox,{_onblur:function(t,e){var v=this.getRawValue();this.setRawValue(v),this.setValue(v,!0)}}),Ext.reg("modx-combo-category",MODx.combo.Category),MODx.combo.Language=function(config){config=config||{},Ext.applyIf(config,{name:"language",hiddenName:"language",displayField:"name",valueField:"name",fields:["name"],typeAhead:!0,minChars:1,editable:!0,allowBlank:!0,url:MODx.config.connector_url,baseParams:{action:"System/Language/GetList"}}),MODx.combo.Language.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Language,MODx.combo.ComboBox),Ext.reg("modx-combo-language",MODx.combo.Language),MODx.combo.Charset=function(config){config=config||{},Ext.applyIf(config,{name:"charset",hiddenName:"charset",displayField:"text",valueField:"value",fields:["value","text"],forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,url:MODx.config.connector_url,baseParams:{action:"System/Charset/GetList"}}),MODx.combo.Charset.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Charset,MODx.combo.ComboBox),Ext.reg("modx-combo-charset",MODx.combo.Charset),MODx.combo.RTE=function(config){config=config||{},Ext.applyIf(config,{name:"rte",hiddenName:"rte",displayField:"value",valueField:"value",fields:["value"],forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,url:MODx.config.connector_url,baseParams:{action:"System/Rte/GetList"}}),MODx.combo.RTE.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.RTE,MODx.combo.ComboBox),Ext.reg("modx-combo-rte",MODx.combo.RTE),MODx.combo.Role=function(config){config=config||{},Ext.applyIf(config,{name:"role",hiddenName:"role",forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/Role/GetList",addNone:!0}}),MODx.combo.Role.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Role,MODx.combo.ComboBox),Ext.reg("modx-combo-role",MODx.combo.Role),MODx.combo.ContentType=function(config){config=config||{},Ext.applyIf(config,{name:"content_type",hiddenName:"content_type",forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"System/ContentType/GetList"}}),MODx.combo.ContentType.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ContentType,MODx.combo.ComboBox),Ext.reg("modx-combo-content-type",MODx.combo.ContentType),MODx.combo.ContentDisposition=function(config){config=config||{},Ext.applyIf(config,{store:new Ext.data.SimpleStore({fields:["d","v"],data:[[_("inline"),0],[_("attachment"),1]]}),name:"content_dispo",hiddenName:"content_dispo",displayField:"d",valueField:"v",mode:"local",triggerAction:"all",editable:!1,pageSize:20,selectOnFocus:!1,preventRender:!0}),MODx.combo.ContentDisposition.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ContentDisposition,MODx.combo.ComboBox),Ext.reg("modx-combo-content-disposition",MODx.combo.ContentDisposition),MODx.combo.ClassMap=function(config){config=config||{},Ext.applyIf(config,{name:"class",hiddenName:"class",url:MODx.config.connector_url,baseParams:{action:"System/ClassMap/GetList"},displayField:"class",valueField:"class",fields:["class"],editable:!1,pageSize:20}),MODx.combo.ClassMap.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ClassMap,MODx.combo.ComboBox),Ext.reg("modx-combo-class-map",MODx.combo.ClassMap),MODx.combo.ClassDerivatives=function(config){config=config||{},Ext.applyIf(config,{name:"class",hiddenName:"class",url:MODx.config.connector_url,baseParams:{action:"System/Derivatives/GetList",class:"MODX\\Revolution\\modResource"},displayField:"name",valueField:"id",fields:["id","name"],forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,pageSize:20}),MODx.combo.ClassDerivatives.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ClassDerivatives,MODx.combo.ComboBox),Ext.reg("modx-combo-class-derivatives",MODx.combo.ClassDerivatives),MODx.combo.Namespace=function(config){config=config||{},Ext.applyIf(config,{name:"namespace",hiddenName:"namespace",typeAhead:!0,minChars:1,queryParam:"search",editable:!0,allowBlank:!0,preselectValue:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Workspace/PackageNamespace/GetList"},fields:["name"],displayField:"name",valueField:"name"}),MODx.combo.Namespace.superclass.constructor.call(this,config),!1!==config.preselectValue&&(this.store.on("load",this.preselectFirstValue,this,{single:!0}),this.store.load())},Ext.extend(MODx.combo.Namespace,MODx.combo.ComboBox,{preselectFirstValue:function(item){var found;(item=""!=this.config.preselectValue&&-1!=(found=item.find("name",this.config.preselectValue))?item.getAt(found):item.getAt(0))&&(this.setValue(item.data.name),this.fireEvent("select",this,item))}}),Ext.reg("modx-combo-namespace",MODx.combo.Namespace),MODx.combo.Browser=function(config){config=config||{},Ext.applyIf(config,{width:400,triggerAction:"all",triggerClass:"x-form-file-trigger",source:config.source||MODx.config.default_media_source}),MODx.combo.Browser.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.combo.Browser,Ext.form.TriggerField,{browser:null,onTriggerClick:function(btn){return!this.disabled&&(this.browser=MODx.load({xtype:"modx-browser",closeAction:"close",id:Ext.id(),multiple:!0,source:this.config.source||MODx.config.default_media_source,hideFiles:this.config.hideFiles||!1,rootVisible:this.config.rootVisible||!1,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web",openTo:this.config.openTo||"",rootId:this.config.rootId||"/",hideSourceCombo:this.config.hideSourceCombo||!1,listeners:{select:{fn:function(data){this.setValue(data.relativeUrl),this.fireEvent("select",data)},scope:this}}}),this.browser.show(btn),!0)},onDestroy:function(){MODx.combo.Browser.superclass.onDestroy.call(this)}}),Ext.reg("modx-combo-browser",MODx.combo.Browser),MODx.combo.Country=function(config){config=config||{},Ext.applyIf(config,{name:"country",hiddenName:"country",url:MODx.config.connector_url,baseParams:{action:"System/Country/GetList",combo:1},displayField:"country",valueField:"iso",fields:["iso","country","value"],editable:!0,typeAhead:!0}),MODx.combo.Country.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Country,MODx.combo.ComboBox),Ext.reg("modx-combo-country",MODx.combo.Country),MODx.combo.Gender=function(config){config=config||{},Ext.applyIf(config,{store:new Ext.data.SimpleStore({fields:["d","v"],data:[["",0],[_("user_male"),1],[_("user_female"),2],[_("user_other"),3]]}),displayField:"d",valueField:"v",mode:"local",triggerAction:"all",editable:!1,selectOnFocus:!1}),MODx.combo.Gender.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Gender,Ext.form.ComboBox),Ext.reg("modx-combo-gender",MODx.combo.Gender),MODx.combo.PropertySet=function(config){config=config||{},Ext.applyIf(config,{name:"propertyset",hiddenName:"propertyset",url:MODx.config.connector_url,baseParams:{action:"Element/PropertySet/GetList"},displayField:"name",valueField:"id",fields:["id","name"],editable:!1,pageSize:20,width:300}),MODx.combo.PropertySet.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.PropertySet,MODx.combo.ComboBox),Ext.reg("modx-combo-property-set",MODx.combo.PropertySet),MODx.ChangeParentField=function(config){config=config||{},Ext.applyIf(config,{triggerAction:"all",editable:!1,readOnly:!1,formpanel:"modx-panel-resource",parentcmp:"modx-resource-parent-hidden",contextcmp:"modx-resource-context-key",currentid:MODx.request.id}),MODx.ChangeParentField.superclass.constructor.call(this,config),this.config=config,this.on("click",this.onTriggerClick,this),this.addEvents({end:!0}),this.on("end",this.end,this)},Ext.extend(MODx.ChangeParentField,Ext.form.TriggerField,{oldValue:!1,oldDisplayValue:!1,end:function(p){var t=Ext.getCmp("modx-resource-tree");t&&(p.d=p.d||p.v,t.removeListener("click",this.handleChangeParent,this),t.on("click",t._handleClick,t),t.disableHref=!1,MODx.debug("Setting parent to: "+p.v),Ext.getCmp(this.config.parentcmp).setValue(p.v),this.setValue(p.d),this.oldValue=!1,Ext.getCmp(this.config.formpanel).fireEvent("fieldChange"))},onTriggerClick:function(){if(this.disabled)return!1;if(this.oldValue)return this.fireEvent("end",{v:this.oldValue,d:this.oldDisplayValue}),!1;if(MODx.debug("onTriggerClick"),!Ext.getCmp("modx-resource-tree")){MODx.debug("no tree found, trying to activate");var tp=Ext.getCmp("modx-leftbar-tabpanel");return tp?(tp.on("tabchange",function(tbp,tab){"modx-resource-tree-ct"==tab.id&&this.disableTreeClick()},this),tp.activate("modx-resource-tree-ct")):MODx.debug("no tabpanel"),!1}this.disableTreeClick()},disableTreeClick:function(){return MODx.debug("Disabling tree click"),t=Ext.getCmp("modx-resource-tree"),t?(this.oldDisplayValue=this.getValue(),this.oldValue=Ext.getCmp(this.config.parentcmp).getValue(),this.setValue(_("resource_parent_select_node")),t.expand(),t.removeListener("click",t._handleClick),t.on("click",this.handleChangeParent,this),t.disableHref=!0):(MODx.debug("No tree found in disableTreeClick!"),!1)},handleChangeParent:function(node,e){var ctxv=Ext.getCmp("modx-resource-tree");if(!ctxv)return!1;ctxv.disableHref=!0;var id=node.id.split("_");if((id=id[1])==this.config.currentid)return MODx.msg.alert("",_("resource_err_own_parent")),!1;var ctxf=Ext.getCmp(this.config.contextcmp);return ctxf&&(ctxv=ctxf.getValue(),node.attributes&&node.attributes.ctx!=ctxv&&ctxf.setValue(node.attributes.ctx)),this.fireEvent("end",{v:"modContext"!=node.attributes.type?id:node.attributes.pk,d:Ext.util.Format.stripTags(node.text)}),e.preventDefault(),e.stopEvent(),!0}}),Ext.reg("modx-field-parent-change",MODx.ChangeParentField),MODx.combo.TVWidget=function(config){config=config||{},Ext.applyIf(config,{name:"widget",hiddenName:"widget",displayField:"name",valueField:"value",fields:["value","name"],editable:!1,url:MODx.config.connector_url,baseParams:{action:"Element/TemplateVar/Renders/GetOutputs"},value:"default"}),MODx.combo.TVWidget.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.TVWidget,MODx.combo.ComboBox),Ext.reg("modx-combo-tv-widget",MODx.combo.TVWidget),MODx.combo.TVInputType=function(config){config=config||{},Ext.applyIf(config,{name:"type",hiddenName:"type",displayField:"name",valueField:"value",editable:!1,fields:["value","name"],url:MODx.config.connector_url,baseParams:{action:"Element/TemplateVar/Renders/GetInputs"},value:"text"}),MODx.combo.TVInputType.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.TVInputType,MODx.combo.ComboBox),Ext.reg("modx-combo-tv-input-type",MODx.combo.TVInputType),MODx.combo.Dashboard=function(config){config=config||{},Ext.applyIf(config,{name:"dashboard",hiddenName:"dashboard",displayField:"name",valueField:"id",fields:["id","name","description"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"System/Dashboard/GetList"},tpl:new Ext.XTemplate('','','
{name:htmlEncode}
','
{description:htmlEncode}
',"
")}),MODx.combo.Dashboard.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Dashboard,MODx.combo.ComboBox),Ext.reg("modx-combo-dashboard",MODx.combo.Dashboard),MODx.combo.MediaSource=function(config){config=config||{},Ext.applyIf(config,{name:"source",hiddenName:"source",displayField:"name",valueField:"id",fields:["id","name","description"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Source/GetList"},tpl:new Ext.XTemplate('','','
{name:htmlEncode}
','
{description:htmlEncode}
',"
")}),MODx.combo.MediaSource.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.MediaSource,MODx.combo.ComboBox),Ext.reg("modx-combo-source",MODx.combo.MediaSource),MODx.combo.MediaSourceType=function(config){config=config||{},Ext.applyIf(config,{name:"class_key",hiddenName:"class_key",displayField:"name",valueField:"class",fields:["id","class","name","description"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Source/Type/GetList"},tpl:new Ext.XTemplate('','','
{name:htmlEncode}
','
{description:htmlEncode}
',"
")}),MODx.combo.MediaSourceType.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.MediaSourceType,MODx.combo.ComboBox),Ext.reg("modx-combo-source-type",MODx.combo.MediaSourceType),MODx.combo.Authority=function(config){config=config||{},Ext.applyIf(config,{name:"authority",hiddenName:"authority",forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/Role/GetAuthorityList",addNone:!0}}),MODx.combo.Authority.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Authority,MODx.combo.ComboBox),Ext.reg("modx-combo-authority",MODx.combo.Authority),MODx.combo.ManagerTheme=function(config){config=config||{},Ext.applyIf(config,{name:"theme",hiddenName:"theme",displayField:"theme",valueField:"theme",fields:["theme"],url:MODx.config.connector_url,baseParams:{action:"Workspace/Theme/GetList"},typeAhead:!1,editable:!1}),MODx.combo.ManagerTheme.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ManagerTheme,MODx.combo.ComboBox),Ext.reg("modx-combo-manager-theme",MODx.combo.ManagerTheme),MODx.combo.SettingKey=function(config){config=config||{},Ext.applyIf(config,{name:"key",hiddenName:"key",displayField:"key",valueField:"key",fields:["key"],url:MODx.config.connector_url,baseParams:{action:"System/Settings/GetList"},typeAhead:!1,triggerAction:"all",editable:!0,forceSelection:!1,queryParam:"key",pageSize:20}),MODx.combo.SettingKey.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.SettingKey,MODx.combo.ComboBox),Ext.reg("modx-combo-setting-key",MODx.combo.SettingKey),MODx.combo.Visibility=function(config){config=config||{},Ext.applyIf(config,{name:"visibility",hiddenName:"visibility",store:new Ext.data.SimpleStore({fields:["d","v"],data:[[_("file_folder_visibility_public"),"public"],[_("file_folder_visibility_private"),"private"]]}),displayField:"d",valueField:"v",mode:"local",triggerAction:"all",editable:!1,selectOnFocus:!1,preventRender:!0,forceSelection:!0,enableKeyEvents:!0}),MODx.combo.Visibility.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Visibility,MODx.combo.ComboBox),Ext.reg("modx-combo-visibility",MODx.combo.Visibility),MODx.combo.Permission=function(config){config=config||{},Ext.applyIf(config,{name:"permission",hiddenName:"permission",displayField:"name",valueField:"name",fields:["name","description"],editable:!0,typeAhead:!1,forceSelection:!1,enableKeyEvents:!0,autoSelect:!1,pageSize:20,tpl:new Ext.XTemplate('{name:htmlEncode}','
{description:htmlEncode}
'),url:MODx.config.connector_url,baseParams:{action:"Security/Access/Permission/GetList"}}),MODx.combo.Permission.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Permission,MODx.combo.ComboBox),Ext.reg("modx-combo-permission",MODx.combo.Permission),Ext.namespace("MODx.grid"),MODx.grid.Grid=function(config){if(config=config||{},this.config=config,this._loadStore(),this._loadColumnModel(),Ext.applyIf(config,{store:this.store,cm:this.cm,sm:new Ext.grid.RowSelectionModel({singleSelect:!0}),paging:!!config.bbar,loadMask:!0,autoHeight:!0,collapsible:!0,stripeRows:!0,header:!1,cls:"modx-grid",preventRender:!0,preventSaveRefresh:!0,showPerPage:!0,stateful:!1,showActionsColumn:!0,disableContextMenuAction:!1,menuConfig:{defaultAlign:"tl-b?",enableScrolling:!1},viewConfig:{forceFit:!0,enableRowBody:!0,autoFill:!0,showPreview:!0,scrollOffset:0,emptyText:config.emptyText||_("ext_emptymsg")},groupingConfig:{enableGroupingMenu:!0}}),config.paging){var pgItms=config.showPerPage?[_("per_page")+":",{xtype:"textfield",cls:"x-tbar-page-size",value:config.pageSize||parseInt(MODx.config.default_per_page)||20,listeners:{change:{fn:this.onChangePerPage,scope:this},render:{fn:function(cmp){new Ext.KeyMap(cmp.getEl(),{key:Ext.EventObject.ENTER,fn:this.blur,scope:cmp})},scope:this}}}]:[];if(config.pagingItems)for(var i=0;i 1 ? "'+(config.pluralText||_("records"))+'" : "'+(config.singleText||_("record"))+'"]})'},Ext.applyIf(config.groupingConfig,isPercentage),Ext.applyIf(config,{view:new Ext.grid.GroupingView(config.groupingConfig)})),config.tbar)for(var ix=0;ix":"")+data.msg},this),Ext.isEmpty(msg)&&(msg=this.autosaveErrorMsg||_("error")),MODx.msg.alert(_("error"),msg))},onChangePerPage:function(tf,nv){if(Ext.isEmpty(nv))return!1;nv=parseInt(nv),this.getBottomToolbar().pageSize=nv,this.store.load({params:{start:0,limit:nv}})},loadWindow:function(btn,e,win,or){var r=this.menu.record;this.windows[win.xtype]&&!win.force||(Ext.applyIf(win,{record:win.blankValues?{}:r,grid:this,listeners:{success:{fn:win.success||this.refresh,scope:win.scope||this}}}),or&&Ext.apply(win,or),this.windows[win.xtype]=Ext.ComponentMgr.create(win)),this.windows[win.xtype].setValues&&!0!==win.blankValues&&null!=r&&this.windows[win.xtype].setValues(r),this.windows[win.xtype].show(e.target)},confirm:function(type,text){var p={action:type},k=this.config.primaryKey||"id";p[k]=this.menu.record[k],MODx.msg.confirm({title:_(type),text:_(text)||_("confirm_remove"),url:this.config.url,params:p,listeners:{success:{fn:this.refresh,scope:this}}})},remove:function(text,action){if(this.destroying)return MODx.grid.Grid.superclass.remove.apply(this,arguments);var r=this.menu.record;text=text||"confirm_remove";var p=this.config.saveParams||{};Ext.apply(p,{action:action||"remove"});var k=this.config.primaryKey||"id";p[k]=r[k],this.fireEvent("beforeRemoveRow",r)&&MODx.msg.confirm({title:_("warning"),text:_(text,r),url:this.config.url,params:p,listeners:{success:{fn:function(){this.removeActiveRow(r)},scope:this}}})},removeActiveRow:function(rx){this.fireEvent("afterRemoveRow",rx)&&(rx=this.getSelectionModel().getSelected(),this.getStore().remove(rx))},_loadMenu:function(){this.menu=new Ext.menu.Menu(this.config.menuConfig)},_showMenu:function(g,ri,e){var m;e.stopEvent(),e.preventDefault(),this.menu.record=this.getStore().getAt(ri).data,this.getSelectionModel().isSelected(ri)||this.getSelectionModel().selectRow(ri),this.menu.removeAll(),!this.getMenu||(m=this.getMenu(g,ri,e))&&m.length&&0',{compiled:!0})},actionsColumnRenderer:function(value,metaData,record,rowIndex,colIndex,actions){actions=this.getActions.apply(this,[record,rowIndex,colIndex,actions]);return!0!==this.config.disableContextMenuAction&&actions.push({text:_("context_menu"),action:"contextMenu",icon:"gear"}),this._getActionsColumnTpl().apply({actions:actions})},renderLink:function(v,attr){var i,el=new Ext.Element(document.createElement("a"));for(i in el.addClass("x-grid-link"),el.dom.title=_("edit"),attr)el.dom[i]=attr[i];return el.dom.innerHTML=Ext.util.Format.htmlEncode(v),el.dom.outerHTML},getActions:function(record,rowIndex,colIndex,store){return[]},onClickHandler:function(e){var actionHandler,record,recordIndex=e.getTarget();recordIndex.classList.contains("x-grid-action")&&(!recordIndex.dataset.action||(this[actionHandler="action"+recordIndex.dataset.action.charAt(0).toUpperCase()+recordIndex.dataset.action.slice(1)]&&"function"==typeof this[actionHandler]||this[actionHandler=recordIndex.dataset.action]&&"function"==typeof this[actionHandler])&&(record=this.getSelectionModel().getSelected(),recordIndex=this.store.indexOf(record),this.menu.record=record.data,this[actionHandler](record,recordIndex,e)))},actionContextMenu:function(record,recordIndex,e){this._showMenu(this,recordIndex,e)},makeUrl:function(){if(Array.isArray(this.config.urlFilters)&&0 1 ? "'+(config.pluralText||_("records"))+'" : "'+(config.singleText||_("record"))+'"]})'})}),config.tbar)for(var i=0;i',{compiled:!0})},actionsColumnRenderer:function(value,metaData,record,rowIndex,colIndex,store){var actions=this.getActions.apply(this,arguments);return!0!==this.config.disableContextMenuAction&&actions.push({text:_("context_menu"),action:"contextMenu",icon:"gear"}),this._getActionsColumnTpl().apply({actions:actions})},renderLink:function(v,attr){var i,el=new Ext.Element(document.createElement("a"));for(i in el.addClass("x-grid-link"),el.dom.title=_("edit"),attr)el.dom[i]=attr[i];return el.dom.innerHTML=Ext.util.Format.htmlEncode(v),el.dom.outerHTML},getActions:function(value,metaData,record,rowIndex,colIndex,store){return[]},onClick:function(e){var actionHandler,record,recordIndex=e.getTarget();recordIndex.classList.contains("x-grid-action")&&(!recordIndex.dataset.action||(this[actionHandler="action"+recordIndex.dataset.action.charAt(0).toUpperCase()+recordIndex.dataset.action.slice(1)]&&"function"==typeof this[actionHandler]||this[actionHandler=recordIndex.dataset.action]&&"function"==typeof this[actionHandler])&&(record=this.getSelectionModel().getSelected(),recordIndex=this.store.indexOf(record),this.menu.record=record.data,this[actionHandler](record,recordIndex,e)))},actionContextMenu:function(record,recordIndex,e){this._showMenu(this,recordIndex,e)}}),Ext.reg("grid-local",MODx.grid.LocalGrid),Ext.reg("modx-grid-local",MODx.grid.LocalGrid),Ext.ns("Ext.ux.grid"),Ext.ux.grid.RowExpander=Ext.extend(Ext.util.Observable,{expandOnEnter:!0,expandOnDblClick:!0,header:"",width:20,sortable:!1,fixed:!0,hideable:!1,menuDisabled:!0,dataIndex:"",id:"expander",lazyRender:!0,enableCaching:!0,constructor:function(config){Ext.apply(this,config),this.addEvents({beforeexpand:!0,expand:!0,beforecollapse:!0,collapse:!0}),Ext.ux.grid.RowExpander.superclass.constructor.call(this),this.tpl&&("string"==typeof this.tpl&&(this.tpl=new Ext.Template(this.tpl)),this.tpl.compile()),this.state={},this.bodyContent={}},getRowClass:function(record,rowIndex,p,ds){p.cols=p.cols-1;var content=this.bodyContent[record.id];return content||this.lazyRender||(content=this.getBodyContent(record,rowIndex)),content&&(p.body=content),this.state[record.id]?"x-grid3-row-expanded":"x-grid3-row-collapsed"},init:function(grid){var view=(this.grid=grid).getView();view.getRowClass=this.getRowClass.createDelegate(this),view.enableRowBody=!0,grid.on("render",this.onRender,this),grid.on("destroy",this.onDestroy,this)},onRender:function(){var grid=this.grid;grid.getView().mainBody.on("mousedown",this.onMouseDown,this,{delegate:".x-grid3-row-expander"}),this.expandOnEnter&&(this.keyNav=new Ext.KeyNav(this.grid.getGridEl(),{enter:this.onEnter,scope:this})),this.expandOnDblClick&&grid.on("rowdblclick",this.onRowDblClick,this)},onDestroy:function(){this.keyNav&&(this.keyNav.disable(),delete this.keyNav);var mainBody=this.grid.getView().mainBody;mainBody&&mainBody.un("mousedown",this.onMouseDown,this)},onRowDblClick:function(grid,rowIdx,e){this.toggleRow(rowIdx)},onEnter:function(e){for(var g=this.grid,sels=g.getSelectionModel().getSelections(),i=0,len=sels.length;i '},beforeExpand:function(record,body,rowIndex){return!1!==this.fireEvent("beforeexpand",this,record,body,rowIndex)&&(this.tpl&&this.lazyRender&&(body.innerHTML=this.getBodyContent(record,rowIndex)),!0)},toggleRow:function(row){"number"==typeof row&&(row=this.grid.view.getRow(row)),this[Ext.fly(row).hasClass("x-grid3-row-collapsed")?"expandRow":"collapseRow"](row)},expandRow:function(row){"number"==typeof row&&(row=this.grid.view.getRow(row));var record=this.grid.store.getAt(row.rowIndex),body=Ext.DomQuery.selectNode("tr:nth(2) div.x-grid3-row-body",row);this.beforeExpand(record,body,row.rowIndex)&&(this.state[record.id]=!0,Ext.fly(row).replaceClass("x-grid3-row-collapsed","x-grid3-row-expanded"),this.fireEvent("expand",this,record,body,row.rowIndex))},collapseRow:function(row){"number"==typeof row&&(row=this.grid.view.getRow(row));var record=this.grid.store.getAt(row.rowIndex),body=Ext.fly(row).child("tr:nth(1) div.x-grid3-row-body",!0);!1!==this.fireEvent("beforecollapse",this,record,body,row.rowIndex)&&(this.state[record.id]=!1,Ext.fly(row).replaceClass("x-grid3-row-expanded","x-grid3-row-collapsed"),this.fireEvent("collapse",this,record,body,row.rowIndex))}}),Ext.preg("rowexpander",Ext.ux.grid.RowExpander),Ext.grid.RowExpander=Ext.ux.grid.RowExpander,Ext.ns("Ext.ux.grid"),Ext.ux.grid.CheckColumn=function(a){Ext.apply(this,a),this.id||(this.id=Ext.id()),this.renderer=this.renderer.createDelegate(this)},Ext.ux.grid.CheckColumn.prototype={init:function(b){this.grid=b,this.grid.on("render",function(){this.grid.getView().mainBody.on("mousedown",this.onMouseDown,this)},this),this.grid.on("destroy",this.onDestroy,this)},onMouseDown:function(sv,b){this.grid.fireEvent("rowclick"),b.className&&-1!=b.className.indexOf("x-grid3-cc-"+this.id)&&(sv.stopEvent(),sv=this.grid.getView().findRowIndex(b),sv=(b=this.grid.store.getAt(sv)).data[this.dataIndex],b.set(this.dataIndex,!sv),this.grid.fireEvent("afteredit",{grid:this.grid,record:b,field:this.dataIndex,originalValue:sv,value:b.data[this.dataIndex],cancel:!1}))},renderer:function(v,p,a){return p.css+=" x-grid3-check-col-td",'
'},onDestroy:function(){var mainBody=this.grid.getView().mainBody;mainBody&&mainBody.un("mousedown",this.onMouseDown,this)}},Ext.preg("checkcolumn",Ext.ux.grid.CheckColumn),Ext.grid.CheckColumn=Ext.ux.grid.CheckColumn,Ext.grid.PropertyColumnModel=function(a,c){var g=Ext.grid,f=Ext.form;this.grid=a,g.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,width:50,sortable:!0,dataIndex:"name",id:"name",menuDisabled:!0},{header:this.valueText,width:50,resizable:!1,dataIndex:"value",id:"value",menuDisabled:!0}]),this.store=c;c=new f.Field({autoCreate:{tag:"select",children:[{tag:"option",value:"true",html:"true"},{tag:"option",value:"false",html:"false"}]},getValue:function(){return"true"==this.el.dom.value}});this.editors={date:new g.GridEditor(new f.DateField({selectOnFocus:!0})),string:new g.GridEditor(new f.TextField({selectOnFocus:!0})),number:new g.GridEditor(new f.NumberField({selectOnFocus:!0,style:"text-align:left;"})),boolean:new g.GridEditor(c)},this.renderCellDelegate=this.renderCell.createDelegate(this),this.renderPropDelegate=this.renderProp.createDelegate(this)},Ext.extend(Ext.grid.PropertyColumnModel,Ext.grid.ColumnModel,{nameText:"Name",valueText:"Value",dateFormat:"m/j/Y",renderDate:function(a){return a.dateFormat(this.dateFormat)},renderBool:function(a){return a?"true":"false"},isCellEditable:function(a,b){return 1==a},getRenderer:function(a){return 1==a?this.renderCellDelegate:this.renderPropDelegate},renderProp:function(v){return this.getPropertyName(v)},renderCell:function(a){var b=a;return Ext.isDate(a)?b=this.renderDate(a):"boolean"==typeof a&&(b=this.renderBool(a)),Ext.util.Format.htmlEncode(b)},getPropertyName:function(a){var b=this.grid.propertyNames;return b&&b[a]?b[a]:a},getCellEditor:function(a,n){var val=this.store.getProperty(n),n=val.data.name,val=val.data.value;return this.grid.customEditors[n]||(Ext.isDate(val)?this.editors.date:"number"==typeof val?this.editors.number:"boolean"==typeof val?this.editors.boolean:this.editors.string)},destroy:function(){for(var a in Ext.grid.PropertyColumnModel.superclass.destroy.call(this),this.editors)Ext.destroy(a)}}),MODx.grid.JsonGrid=function(config){config=config||{},this.ident=config.ident||"jsongrid-mecitem"+Ext.id(),this.hiddenField=new Ext.form.TextArea({name:config.hiddenName||config.name,hidden:!0}),this.fieldConfig=config.fieldConfig||[{name:"key"},{name:"value"}],this.fieldConfig.push({name:"id",hidden:!0}),this.fieldColumns=[],this.fieldNames=[],Ext.each(this.fieldConfig,function(el){this.fieldNames.push(el.name),this.fieldColumns.push({header:el.header||_(el.name),dataIndex:el.name,editable:!0,menuDisabled:!0,hidden:el.hidden||!1,editor:{xtype:el.xtype||"textfield",allowBlank:el.allowBlank||!0,enableKeyEvents:!0,fieldname:el.name,listeners:{change:{fn:this.saveValue,scope:this},keyup:{fn:function(sb){var record=this.getSelectionModel().getSelected();record&&(record.set(sb.fieldname,sb.el.dom.value),this.saveValue())},scope:this}}},renderer:function(value,metadata){return metadata.css+="x-editable-column ",value},width:el.width||100})},this),Ext.applyIf(config,{id:this.ident+"-json-grid",fields:this.fieldNames,autoHeight:!0,store:new Ext.data.JsonStore({fields:this.fieldNames,data:this.loadValue(config.value)}),enableDragDrop:!0,ddGroup:this.ident+"-json-grid-dd",labelStyle:"position: absolute",columns:this.fieldColumns,disableContextMenuAction:!0,tbar:["->",{text:' '+_("add"),cls:"primary-button",handler:this.addElement,scope:this}],listeners:{render:{fn:this.renderListener,scope:this}}}),MODx.grid.JsonGrid.superclass.constructor.call(this,config)},Ext.extend(MODx.grid.JsonGrid,MODx.grid.LocalGrid,{getMenu:function(){var m=[];return m.push({text:_("remove"),handler:this.removeElement}),m},getActions:function(){return[{action:"removeElement",icon:"trash-o",text:_("remove")}]},addElement:function(){var ds=this.getStore(),row={};Ext.each(this.fieldNames,function(fieldname){row[fieldname]=""}),row.id=this.getStore().getCount(),this.getStore().insert(this.getStore().getCount(),new ds.recordType(row)),this.getView().refresh(),this.getSelectionModel().selectRow(0)},removeElement:function(){Ext.Msg.confirm(_("remove")||"",_("confirm_remove")||"",function(e){if("yes"===e){var ds=this.getStore(),rows=this.getSelectionModel().getSelections();if(!rows.length)return!1;for(var i=0;i',{compiled:!0})},actionsColumnRenderer:function(value,metaData,record,rowIndex,colIndex,store){return this._getActionsColumnTpl().apply({actions:this.getActions()})},onClick:function(e){var actionHandler,record,recordIndex=e.getTarget();recordIndex.classList.contains("x-grid-action")&&(!recordIndex.dataset.action||(this[actionHandler="action"+recordIndex.dataset.action.charAt(0).toUpperCase()+recordIndex.dataset.action.slice(1)]&&"function"==typeof this[actionHandler]||this[actionHandler=recordIndex.dataset.action]&&"function"==typeof this[actionHandler])&&(record=this.getSelectionModel().getSelected(),recordIndex=this.store.indexOf(record),this.menu.record=record.data,this[actionHandler](record,recordIndex,e)))}}),Ext.reg("grid-json",MODx.grid.JsonGrid),Ext.reg("modx-grid-json",MODx.grid.JsonGrid),MODx.Console=function(config){config=config||{},Ext.Updater.defaults.showLoadIndicator=!1,Ext.applyIf(config,{title:_("console"),modal:!Ext.isIE,closeAction:"hide",resizable:!1,collapsible:!1,closable:!0,maximizable:!0,autoScroll:!0,height:400,width:600,refreshRate:2,cls:"modx-window modx-console",items:[{itemId:"header",cls:"modx-console-text",html:_("console_running"),border:!1},{xtype:"panel",itemId:"body",cls:"x-panel-bwrap modx-console-text"}],buttons:[{text:_("console_download_output"),handler:this.download,scope:this},{text:_("ok"),cls:"primary-button",itemId:"okBtn",disabled:!0,scope:this,handler:this.hideConsole}],keys:[{key:Ext.EventObject.S,ctrl:!0,fn:this.download,scope:this},{key:Ext.EventObject.ENTER,fn:this.hideConsole,scope:this}]}),MODx.Console.superclass.constructor.call(this,config),this.config=config,this.addEvents({shutdown:!0,complete:!0}),this.on("show",this.init,this),this.on("hide",function(){if(this.provider&&this.provider.disconnect)try{this.provider.disconnect()}catch(e){}this.fireEvent("shutdown"),this.destroy()}),this.on("complete",this.onComplete,this)},Ext.extend(MODx.Console,Ext.Window,{mgr:null,running:!1,init:function(){Ext.Msg.hide(),this.fbar.setDisabled(!0),this.keyMap.setDisabled(!0),this.getComponent("body").el.dom.innerHTML="",this.provider=new Ext.direct.PollingProvider({type:"polling",url:MODx.config.connector_url,interval:1e3,baseParams:{action:"System/Console",register:this.config.register||"",topic:this.config.topic||"",clear:!1,show_filename:this.config.show_filename||0,format:this.config.format||"html_log"}}),Ext.Direct.addProvider(this.provider),Ext.Direct.on("message",this.onMessage,this)},onMessage:function(e,p){var out=this.getComponent("body");out&&(out.el.insertHtml("beforeEnd",e.data),e.data="",out.el.scroll("b",out.el.getHeight(),!0)),e.complete&&this.fireEvent("complete"),delete e},onComplete:function(){if(this.provider&&this.provider.disconnect)try{this.provider.disconnect()}catch(e){}this.fbar.setDisabled(!1),this.keyMap.setDisabled(!1)},download:function(){var c=this.getComponent("body").getEl().dom.innerHTML||" ";MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"System/DownloadOutput",data:c},listeners:{success:{fn:function(r){location.href=MODx.config.connector_url+"?action=System/DownloadOutput&HTTP_MODAUTH="+MODx.siteId+"&download="+r.message},scope:this}}})},setRegister:function(register,topic){this.config.register=register,this.config.topic=topic},hideConsole:function(){this.hide()}}),Ext.reg("modx-console",MODx.Console),Ext.namespace("MODx.portal"),Ext.ux.Portal=Ext.extend(Ext.Panel,{layout:"column",cls:"x-portal",defaultType:"portalcolumn",initComponent:function(){Ext.ux.Portal.superclass.initComponent.call(this),this.addEvents({validatedrop:!0,beforedragover:!0,dragover:!0,beforedrop:!0,drop:!0})},initEvents:function(){Ext.ux.Portal.superclass.initEvents.call(this),this.dd=new Ext.ux.Portal.DropZone(this,this.dropConfig)},beforeDestroy:function(){this.dd&&this.dd.unreg(),Ext.ux.Portal.superclass.beforeDestroy.call(this)}}),Ext.reg("portal",Ext.ux.Portal),Ext.ux.Portal.DropZone=function(a,b){this.portal=a,Ext.dd.ScrollManager.register(a.body),Ext.ux.Portal.DropZone.superclass.constructor.call(this,a.bwrap.dom,b),a.body.ddScrollConfig=this.ddScrollConfig},Ext.extend(Ext.ux.Portal.DropZone,Ext.dd.DropTarget,{ddScrollConfig:{vthresh:50,hthresh:-1,animate:!0,increment:200},createEvent:function(a,e,b,d,c,f){return{portal:this.portal,panel:b.panel,columnIndex:d,column:c,position:f,data:b,source:a,rawEvent:e,status:this.dropAllowed}},notifyOver:function(a,e,j){var d=e.getXY(),portal=this.portal,px=a.proxy;this.grid||(this.grid=this.getGrid());var c=portal.body.dom.clientWidth;this.lastCW?this.lastCW!=c&&(this.lastCW=c,portal.doLayout(),this.grid=this.getGrid()):this.lastCW=c;for(var g=0,xs=this.grid.columnX,cmatch=!1,i=xs.length;gd[1]){match=!0;break}}pos=(match&&p?pos:c.items.getCount())+(overSelf?-1:0);j=this.createEvent(a,e,j,g,c,pos);return!1!==portal.fireEvent("validatedrop",j)&&!1!==portal.fireEvent("beforedragover",j)&&(px.getProxy().setWidth("auto"),p?px.moveProxy(p.el.dom.parentNode,match?p.el.dom:null):px.moveProxy(c.el.dom,null),this.lastPos={c:c,col:g,p:!!(overSelf||match&&p)&&pos},this.scrollPos=portal.body.getScroll(),portal.fireEvent("dragover",j)),j.status},notifyOut:function(){delete this.grid},notifyDrop:function(a,e,b){var c,pos,f,g,d;delete this.grid,this.lastPos&&(c=this.lastPos.c,f=this.lastPos.col,pos=this.lastPos.p,f=this.createEvent(a,e,b,f,c,!1!==pos?pos:c.items.getCount()),!1!==this.portal.fireEvent("validatedrop",f)&&!1!==this.portal.fireEvent("beforedrop",f)&&(a.proxy.getProxy().remove(),a.panel.el.dom.parentNode.removeChild(a.panel.el.dom),!1!==pos?(c==a.panel.ownerCt&&c.items.items.indexOf(a.panel)<=pos&&pos++,c.insert(pos,a.panel)):c.add(a.panel),c.doLayout(),this.portal.fireEvent("drop",f),(g=this.scrollPos.top)&&(d=this.portal.body.dom,setTimeout(function(){d.scrollTop=g},10))),delete this.lastPos)},getGrid:function(){var a=this.portal.bwrap.getBox();return a.columnX=[],this.portal.items.each(function(c){a.columnX.push({x:c.el.getX(),w:c.el.getWidth()})}),a},unreg:function(){Ext.ux.Portal.DropZone.superclass.unreg.call(this)}}),MODx.portal.Column=Ext.extend(Ext.Container,{layout:"anchor",defaultType:"portlet",cls:"x-portal-column",style:"padding:10px;",columnWidth:1,defaults:{collapsible:!0,autoHeight:!0,titleCollapse:!0,draggable:!0,style:"padding: 5px 0;",bodyStyle:"padding: 15px;"}}),Ext.reg("portalcolumn",MODx.portal.Column),MODx.portal.Portlet=Ext.extend(Ext.Panel,{anchor:Ext.isSafari?"98%":"100%",frame:!0,collapsible:!0,draggable:!0,cls:"x-portlet",stateful:!1,layout:"form"}),Ext.reg("portlet",MODx.portal.Portlet),MODx.window.DuplicateResource=function(config){config=config||{},this.ident=config.ident||"dupres"+Ext.id(),Ext.applyIf(config,{title:config.pagetitle?_("duplicate")+" "+config.pagetitle:_("duplication_options"),id:this.ident}),MODx.window.DuplicateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.DuplicateResource,MODx.Window,{_loadForm:function(){if(this.checkIfLoaded(this.config.record))return!(this.fp.getForm().baseParams={action:"Resource/Updateduplicate",prefixDuplicate:!0,id:this.config.resource});var items=[];items.push({xtype:"textfield",id:"modx-"+this.ident+"-name",fieldLabel:_("resource_name_new"),name:"name",anchor:"100%",value:""}),this.config.hasChildren&&items.push({xtype:"xcheckbox",boxLabel:_("duplicate_children")+" ("+this.config.childCount+")",hideLabel:!0,name:"duplicate_children",id:"modx-"+this.ident+"-duplicate-children",checked:!0}),items.push({xtype:"xcheckbox",boxLabel:_("duplicate_redirect"),hideLabel:!0,name:"redirect",id:"modx-"+this.ident+"-duplicate-redirect",checked:this.config.redirect});var pov=MODx.config.default_duplicate_publish_option||"preserve";items.push({xtype:"fieldset",title:_("publishing_options"),items:[{xtype:"radiogroup",hideLabel:!0,columns:1,value:pov,items:[{boxLabel:_("po_make_all_unpub"),hideLabel:!0,name:"published_mode",inputValue:"unpublish"},{boxLabel:_("po_make_all_pub"),hideLabel:!0,name:"published_mode",inputValue:"publish"},{boxLabel:_("po_preserve"),hideLabel:!0,name:"published_mode",inputValue:"preserve"}]}]}),this.fp=this.createForm({url:this.config.url||MODx.config.connector_url,baseParams:this.config.baseParams||{action:"Resource/Duplicate",id:this.config.resource,prefixDuplicate:!0},labelWidth:125,defaultType:"textfield",autoHeight:!0,items:items}),this.renderForm()}}),Ext.reg("modx-window-resource-duplicate",MODx.window.DuplicateResource),MODx.window.DuplicateElement=function(config){config=config||{},this.ident=config.ident||"dupeel-"+Ext.id();var flds=[{xtype:"hidden",name:"id",id:"modx-"+this.ident+"-id"},{xtype:"hidden",name:"source",id:"modx-"+this.ident+"-source"},{xtype:"textfield",fieldLabel:_("element_name_new"),name:"template"==config.record.type?"templatename":"name",id:"modx-"+this.ident+"-name",anchor:"100%",enableKeyEvents:!0,listeners:{afterRender:{scope:this,fn:function(f,e){this.setStaticElementsPath(f)}},keyup:{scope:this,fn:function(f,e){this.setStaticElementsPath(f)}}}}];"tv"==config.record.type&&(flds.push({xtype:"textfield",fieldLabel:_("element_caption_new"),name:"caption",id:"modx-"+this.ident+"-caption",anchor:"100%"}),flds.push({xtype:"xcheckbox",hideLabel:!0,boxLabel:_("element_duplicate_values"),labelSeparator:"",name:"duplicateValues",id:"modx-"+this.ident+"-duplicate-values",anchor:"100%",inputValue:1,checked:!1})),!0===config.record.static&&flds.push({xtype:"textfield",fieldLabel:_("static_file"),name:"static_file",id:"modx-"+this.ident+"-static_file",anchor:"100%"}),flds.push({xtype:"xcheckbox",boxLabel:_("duplicate_redirect"),hideLabel:!0,name:"redirect",id:"modx-"+this.ident+"-duplicate-redirect",checked:config.redirect}),Ext.applyIf(config,{title:_("duplicate_"+config.record.type),url:MODx.config.connector_url,action:"element/"+config.record.type+"/duplicate",width:600,fields:flds,labelWidth:150}),MODx.window.DuplicateElement.superclass.constructor.call(this,config)},Ext.extend(MODx.window.DuplicateElement,MODx.Window,{setStaticElementsPath:function(f){var category,path;!0===this.config.record.static&&("number"!=typeof(category=this.config.record.category)?(0"+_("session_logging_out")+"
",xtype:"modx-description"},{xtype:"textfield",id:"modx-"+this.ident+"-username",fieldLabel:_("username"),name:"username",anchor:"100%"},{xtype:"textfield",inputType:"password",id:"modx-"+this.ident+"-password",fieldLabel:_("password"),name:"password",anchor:"100%"},{xtype:"hidden",name:"rememberme",value:1}],buttons:[{text:_("logout"),scope:this,handler:function(){location.href="?logout=1"}},{text:_("login"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.Login.superclass.constructor.call(this,config),this.on("success",this.onLogin,this)},Ext.extend(MODx.window.Login,MODx.Window,{onLogin:function(r){r=r.a.result;r.object&&r.object.token&&(Ext.Ajax.defaultHeaders={modAuth:r.object.token},Ext.Ajax.extraParams={HTTP_MODAUTH:r.object.token},MODx.siteId=r.object.token,MODx.msg.status({message:_("session_extended")}))}}),Ext.reg("modx-window-login",MODx.window.Login),function(window){"use strict";var CanvasPrototype=window.HTMLCanvasElement&&window.HTMLCanvasElement.prototype,hasBlobConstructor=window.Blob&&function(){try{return Boolean(new Blob)}catch(e){return!1}}(),hasArrayBufferViewSupport=hasBlobConstructor&&window.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(e){return!1}}(),BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,dataURLtoBlob=(hasBlobConstructor||BlobBuilder)&&window.atob&&window.ArrayBuffer&&window.Uint8Array&&function(bb){for(var mimeString,byteString=(0<=bb.split(",")[0].indexOf("base64")?atob:decodeURIComponent)(bb.split(",")[1]),arrayBuffer=new ArrayBuffer(byteString.length),intArray=new Uint8Array(arrayBuffer),i=0;i>2,enc2=(3&enc2)<<4|byte2>>4;isNaN(byte2)?enc3=enc4=64:(enc3=(15&byte2)<<2|byte3>>6,enc4=isNaN(byte3)?64:63&byte3),outStr+=b64.charAt(enc1)+b64.charAt(enc2)+b64.charAt(enc3)+b64.charAt(enc4)}return outStr}};function _emit(target,fn,name,evt,ext){evt={type:name.type||name,target:target,result:evt};_extend(evt,ext),fn(evt)}function _hasSupportReadAs(method){return FileReader&&FileReader.prototype["readAs"+method]}function _readAs(file,fn,method,encoding){if(api.isBlob(file)&&_hasSupportReadAs(method)){var Reader=new FileReader;_on(Reader,_readerEvents,function _fn(evt){var type=evt.type;"progress"==type?_emit(file,fn,evt,evt.target.result,{loaded:evt.loaded,total:evt.total}):"loadend"==type?(_off(Reader,_readerEvents,_fn),Reader=null):_emit(file,fn,evt,evt.target.result)});try{encoding?Reader["readAs"+method](file,encoding):Reader["readAs"+method](file)}catch(err){_emit(file,fn,"error",void 0,{error:err.toString()})}}else _emit(file,fn,"error",void 0,{error:"filreader_not_support_"+method})}function _isEntry(item){return item&&(item.isFile||item.isDirectory)}function _getAsEntry(item){var entry;return item.getAsEntry?entry=item.getAsEntry():item.webkitGetAsEntry&&(entry=item.webkitGetAsEntry()),entry}function isInputFile(el){return _rinput.test(el&&el.tagName)}function _getDataTransfer(evt){return(evt.originalEvent||evt||"").dataTransfer||{}}api.addInfoReader(/^image/,function(file,callback){var defer;file.__dimensions||(defer=file.__dimensions=api.defer(),api.readAsImage(file,function(evt){var img=evt.target;defer.resolve("load"!=evt.type&&"error",{width:img.width,height:img.height}),img.src=api.EMPTY_PNG,img=null})),file.__dimensions.then(callback)}),api.event.dnd=function(el,onHover,onDrop){var _id,_type;onDrop||(onDrop=onHover,onHover=api.F),FileReader?(_on(el,"dragenter dragleave dragover",onHover.ff=onHover.ff||function(evt){for(var types=_getDataTransfer(evt).types,i=types&&types.length,debounceTrigger=!1;i--;)if(~types[i].indexOf("File")){evt.preventDefault(),_type!==evt.type&&("dragleave"!=(_type=evt.type)&&onHover.call(evt.currentTarget,!0,evt),debounceTrigger=!0);break}debounceTrigger&&(clearTimeout(_id),_id=setTimeout(function(){onHover.call(evt.currentTarget,"dragleave"!=_type,evt)},50))}),_on(el,"drop",onDrop.ff=onDrop.ff||function(evt){evt.preventDefault(),_type=0,api.getDropFiles(evt,function(files,all){onDrop.call(evt.currentTarget,files,all,evt)}),onHover.call(evt.currentTarget,!1,evt)})):api.log("Drag'n'Drop -- not supported")},api.event.dnd.off=function(el,onHover,onDrop){_off(el,"dragenter dragleave dragover",onHover.ff),_off(el,"drop",onDrop.ff)},jQuery&&!jQuery.fn.dnd&&(jQuery.fn.dnd=function(onHover,onDrop){return this.each(function(){api.event.dnd(this,onHover,onDrop)})},jQuery.fn.offdnd=function(onHover,onDrop){return this.each(function(){api.event.dnd.off(this,onHover,onDrop)})}),window.FileAPI=_extend(api,window.FileAPI),api.log("FileAPI: "+api.version),api.log("protocol: "+window.location.protocol),api.log("doctype: ["+doctype.name+"] "+doctype.publicId+" "+doctype.systemId),_each(document.getElementsByTagName("meta"),function(meta){/x-ua-compatible/i.test(meta.getAttribute("http-equiv"))&&api.log("meta.http-equiv: "+meta.getAttribute("content"))});try{_supportConsoleLog=!!console.log,_supportConsoleLogApply=!!console.log.apply}catch(err){}api.flashUrl||(api.flashUrl=api.staticPath+"FileAPI.flash.swf"),api.flashImageUrl||(api.flashImageUrl=api.staticPath+"FileAPI.flash.image.swf"),api.flashWebcamUrl||(api.flashWebcamUrl=api.staticPath+"FileAPI.flash.camera.swf")}(window),function(api,document){"use strict";function getCanvas(){return document.createElement("canvas")}var min=Math.min,round=Math.round,support=!1,exifOrientation={8:270,3:180,6:90,7:270,4:180,5:90};try{support=-1params.maxWidth||img.height>params.maxHeight)&&ImgTrans.resize(params.maxWidth,params.maxHeight,"max"),params.crop&&(crop=params.crop,ImgTrans.crop(0|crop.x,0|crop.y,crop.w||crop.width,crop.h||crop.height)),void 0===params.rotate&&autoOrientation&&(params.rotate="auto"),ImgTrans.set({type:ImgTrans.matrix.type||params.type||file.type||"image/png"}),isFn||ImgTrans.set({deg:params.rotate,overlay:params.overlay,filter:params.filter,quality:params.quality||1}),queue.inc(),ImgTrans.toData(function(err,image){err?queue.fail():(images[name]=image,queue.next())}))})}file.width?_transform(!1,file):api.getInfo(file,_transform)},api.each(["TOP","CENTER","BOTTOM"],function(x,i){api.each(["LEFT","CENTER","RIGHT"],function(y,j){Image[x+"_"+y]=3*i+j,Image[y+"_"+x]=3*i+j})}),Image.toCanvas=function(el){var canvas=document.createElement("canvas");return canvas.width=el.videoWidth||el.width,canvas.height=el.videoHeight||el.height,canvas.getContext("2d").drawImage(el,0,0),canvas},Image.fromDataURL=function(img,size,callback){img=api.newImage(img);api.extend(img,size),callback(img)},Image.applyFilter=function(canvas,filter,doneFn){"function"==typeof filter?filter(canvas,doneFn):window.Caman&&window.Caman("IMG"==canvas.tagName?Image.toCanvas(canvas):canvas,function(){"string"==typeof filter?this[filter]():api.each(filter,function(val,method){this[method](val)},this),this.render(doneFn)})},api.renderImageToCanvas=function(canvas,img,sx,sy,sw,sh,dx,dy,dw,dh){try{return canvas.getContext("2d").drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh)}catch(ex){throw api.log("renderImageToCanvas failed"),ex}},api.support.canvas=api.support.transform=support,api.Image=Image}(FileAPI,document),function(){"use strict";!function(loadImage){"use strict";if(!window.navigator||!window.navigator.platform||!/iP(hone|od|ad)/.test(window.navigator.platform))return;var originalRenderMethod=loadImage.renderImageToCanvas;loadImage.detectSubsampling=function(img){var canvas,context;if(img.width*img.height>1024*1024){canvas=document.createElement("canvas");canvas.width=canvas.height=1;context=canvas.getContext("2d");context.drawImage(img,-img.width+1,0);return context.getImageData(0,0,1,1).data[3]===0}return false},loadImage.detectVerticalSquash=function(img,subsampled){var naturalHeight=img.naturalHeight||img.height,canvas=document.createElement("canvas"),context=canvas.getContext("2d"),data,sy,ey,py,alpha;if(subsampled)naturalHeight/=2;canvas.width=1;canvas.height=naturalHeight;context.drawImage(img,0,0);data=context.getImageData(0,0,1,naturalHeight).data;sy=0;ey=naturalHeight;py=naturalHeight;while(py>sy){alpha=data[(py-1)*4+3];if(alpha===0)ey=py;else sy=py;py=ey+sy>>1}return py/naturalHeight||1},loadImage.renderImageToCanvas=function(canvas,img,sourceX,sourceY,sourceWidth,sourceHeight,destX,destY,destWidth,destHeight){if(img._type==="image/jpeg"){var context=canvas.getContext("2d"),tmpCanvas=document.createElement("canvas"),tileSize=1024,tmpContext=tmpCanvas.getContext("2d"),subsampled,vertSquashRatio,tileX,tileY;tmpCanvas.width=tileSize;tmpCanvas.height=tileSize;context.save();subsampled=loadImage.detectSubsampling(img);if(subsampled){sourceX/=2;sourceY/=2;sourceWidth/=2;sourceHeight/=2}vertSquashRatio=loadImage.detectVerticalSquash(img,subsampled);if(subsampled||vertSquashRatio!==1){sourceY*=vertSquashRatio;destWidth=Math.ceil(tileSize*destWidth/sourceWidth);destHeight=Math.ceil(tileSize*destHeight/sourceHeight/vertSquashRatio);destY=0;tileY=0;while(tileY'+(slice&&options.url.indexOf("=?")<0?'':"")+"";var form=xhr.getElementsByTagName("form")[0],transport=xhr.getElementsByTagName("iframe")[0];form.appendChild(data),api.log(form.parentNode.innerHTML),document.body.appendChild(xhr),_this.xhr.node=xhr,_this.readyState=2;try{form.submit()}catch(err){api.log("iframe.error: "+err)}form=null}else url=url.replace(/([a-z]+)=(\?)&?/i,""),this.xhr&&this.xhr.aborted?api.log("Error: already aborted"):(xhr=_this.xhr=api.getXHR(),data.params&&(url+=(url.indexOf("?")<0?"?":"&")+data.params.join("&")),xhr.open("POST",url,!0),api.withCredentials&&(xhr.withCredentials="true"),options.headers&&options.headers["X-Requested-With"]||xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),api.each(options.headers,function(val,key){xhr.setRequestHeader(key,val)}),options._chunked?(xhr.upload&&xhr.upload.addEventListener("progress",api.throttle(function(evt){data.retry||options.progress({type:evt.type,total:data.size,loaded:data.start+evt.loaded,totalSize:data.size},_this,options)},100),!1),xhr.onreadystatechange=function(){var delay,lkb=parseInt(xhr.getResponseHeader("X-Last-Known-Byte"),10);if(_this.status=xhr.status,_this.statusText=xhr.statusText,_this.readyState=xhr.readyState,4==xhr.readyState){for(var k in _xhrResponsePostfix)_this["response"+k]=xhr["response"+k];xhr.onreadystatechange=null,!xhr.status||0').replace(/#(\w+)#/gi,function(a,name){return opts[name]})}function _css(el,css){var key,val;if(el&&el.style)for(key in css){"number"==typeof(val=css[key])&&(val+="px");try{el.style[key]=val}catch(e){}}}function _inherit(obj,methods){_each(methods,function(fn,name){var prev=obj[name];obj[name]=function(){return this.parent=prev,fn.apply(this,arguments)}})}function _isHtmlFile(file){return file&&!file.flashId}function _wrap(fn){var id=fn.wid=api.uid();return flash._fn[id]=fn,"FileAPI.Flash._fn."+id}function _unwrap(fn){try{flash._fn[fn.wid]=null,delete flash._fn[fn.wid]}catch(e){}}function _getUrl(url,params){var path;return _rhttp.test(url)||(!/^\.\//.test(url)&&"/"==url.charAt(0)||(url=((path=(path=location.pathname).substr(0,path.lastIndexOf("/")))+"/"+url).replace("/./","/")),"//"!=url.substr(0,2)&&(url="//"+location.host+url),_rhttp.test(url)||(url=location.protocol+url)),params&&(url+=(/\?/.test(url)?"&":"?")+params),url}function _makeFlashImage(opts,base64,fn){var key,flashId=api.uid(),el=document.createElement("div"),attempts=10;for(key in opts)el.setAttribute(key,opts[key]),el[key]=opts[key];_css(el,opts),opts.width="100%",opts.height="100%",el.innerHTML=_makeFlashHTML(api.extend({id:flashId,src:_getUrl(api.flashImageUrl,"r="+api.uid()),wmode:"opaque",flashvars:"scale="+opts.scale+"&callback="+_wrap(function _(){return _unwrap(_),0<--attempts&&function(){try{flash.get(flashId).setImage(base64)}catch(e){api.log('[err] FlashAPI.Preview.setImage -- can not set "base64":',e)}}(),!0})},opts)),fn(!1,el),el=null}api.support.flash=!1,api.support.flash&&(!api.html5||!api.support.html5||api.cors&&!api.support.cors||api.media&&!api.support.media||api.insecureChrome)&&(_attr=api.uid(),_retry=0,_files={},_rhttp=/^https?:/i,flash={_fn:{},init:function(){var child=document.body&&document.body.firstChild;if(child)do{if(1==child.nodeType){api.log("FlashAPI.state: awaiting");var dummy=document.createElement("div");return dummy.id="_"+_attr,_css(dummy,{top:1,right:1,width:5,height:5,position:"absolute",zIndex:"2147483647"}),child.parentNode.insertBefore(dummy,child),void flash.publish(dummy,_attr)}}while(child=child.nextSibling);_retry<10&&setTimeout(flash.init,50*++_retry)},publish:function(el,id,opts){opts=opts||{},el.innerHTML=_makeFlashHTML({id:id,src:_getUrl(api.flashUrl,"r="+api.version),wmode:opts.camera?"":"transparent",flashvars:"callback="+(opts.onEvent||"FileAPI.Flash.onEvent")+"&flashId="+id+"&storeKey="+navigator.userAgent.match(/\d/gi).join("")+"_"+api.version+(flash.isReady||(api.pingUrl?"&ping="+api.pingUrl:""))+"&timeout="+api.flashAbortTimeout+(opts.camera?"&useCamera="+_getUrl(api.flashWebcamUrl):"")+"&debug="+(api.debug?"1":"")})},ready:function(){api.log("FlashAPI.state: ready"),flash.ready=api.F,flash.isReady=!0,flash.patch(),flash.patchCamera&&flash.patchCamera(),api.event.on(document,"mouseover",flash.mouseover),api.event.on(document,"click",function(evt){flash.mouseover(evt)&&(evt.preventDefault?evt.preventDefault():evt.returnValue=!0)})},getEl:function(){return document.getElementById("_"+_attr)},getWrapper:function(node){do{if(/js-fileapi-wrapper/.test(node.className))return node}while((node=node.parentNode)&&node!==document.body)},mouseover:function(box){var target=api.event.fix(box).target;if(/input/i.test(target.nodeName)&&"file"==target.type&&!target.disabled){var dummy=target.getAttribute(_attr),box=flash.getWrapper(target);if(api.multiFlash){if("i"==dummy||"r"==dummy)return!1;if("p"!=dummy){target.setAttribute(_attr,"i");dummy=document.createElement("div");if(!box)return void api.log("[err] FlashAPI.mouseover: js-fileapi-wrapper not found");_css(dummy,{top:0,left:0,width:target.offsetWidth,height:target.offsetHeight,zIndex:"2147483647",position:"absolute"}),box.appendChild(dummy),flash.publish(dummy,api.uid()),target.setAttribute(_attr,"p")}return!0}box&&(box=function(docEl){var box=docEl.getBoundingClientRect(),body=document.body,docEl=(docEl&&docEl.ownerDocument).documentElement;return{top:box.top+(window.pageYOffset||docEl.scrollTop)-(docEl.clientTop||body.clientTop||0),left:box.left+(window.pageXOffset||docEl.scrollLeft)-(docEl.clientLeft||body.clientLeft||0),width:box.right-box.left,height:box.bottom-box.top}}(box),_css(flash.getEl(),box),flash.curInp=target)}else/object|embed/i.test(target.nodeName)||_css(flash.getEl(),{top:1,left:1,width:5,height:5})},onEvent:function(evt){var type=evt.type;if("ready"==type){try{flash.getInput(evt.flashId).setAttribute(_attr,"r")}catch(e){}return flash.ready(),setTimeout(function(){flash.mouseenter(evt)},50),!0}"ping"===type?api.log("(flash -> js).ping:",[evt.status,evt.savedStatus],evt.error):"log"===type?api.log("(flash -> js).log:",evt.target):type in flash&&setTimeout(function(){api.log("FlashAPI.event."+evt.type+":",evt),flash[type](evt)},1)},mouseenter:function(evt){var accept,exts,node=flash.getInput(evt.flashId);node&&(flash.cmd(evt,"multiple",null!=node.getAttribute("multiple")),accept=[],exts={},_each((node.getAttribute("accept")||"").split(/,\s*/),function(mime){api.accept[mime]&&_each(api.accept[mime].split(" "),function(ext){exts[ext]=1})}),_each(exts,function(i,ext){accept.push(ext)}),flash.cmd(evt,"accept",accept.length?accept.join(",")+","+accept.join(",").toUpperCase():"*"))},get:function(id){return document[id]||window[id]||document.embeds[id]},getInput:function(id){if(!api.multiFlash)return flash.curInp;try{var node=flash.getWrapper(flash.get(id));if(node)return node.getElementsByTagName("input")[0]}catch(e){api.log('[err] Can not find "input" by flashId:',id,e)}},select:function(files){var event,inp=flash.getInput(files.flashId),uid=api.uid(inp),files=files.target.files;_each(files,function(file){api.checkFileObj(file)}),_files[uid]=files,document.createEvent?((event=document.createEvent("Event")).files=files,event.initEvent("change",!0,!0),inp.dispatchEvent(event)):jQuery?jQuery(inp).trigger({type:"change",files:files}):((event=document.createEventObject()).files=files,inp.fireEvent("onchange",event))},cmd:function(id,name,data,last){try{return api.log("(js -> flash)."+name+":",data),flash.get(id.flashId||id).cmd(name,data)}catch(err){api.log("(js -> flash).onError:",err.toString()),last||setTimeout(function(){flash.cmd(id,name,data,!0)},50)}},patch:function(){api.flashEngine=!0,_inherit(api,{getFiles:function(files,filter,callback){if(callback)return api.filterFiles(api.getFiles(files),filter,callback),null;files=api.isArray(files)?files:_files[api.uid(files.target||files.srcElement||files)];return files?(filter&&(filter=api.getFilesFilter(filter),files=api.filter(files,function(file){return filter.test(file.name)})),files):this.parent.apply(this,arguments)},getInfo:function(file,fn){var defer;_isHtmlFile(file)?this.parent.apply(this,arguments):file.isShot?fn(null,file.info={width:file.width,height:file.height}):(file.__info||(defer=file.__info=api.defer(),flash.cmd(file,"getFileInfo",{id:file.id,callback:_wrap(function _(err,info){_unwrap(_),defer.resolve(err,file.info=info)})})),file.__info.then(fn))}}),api.support.transform=!0,api.Image&&_inherit(api.Image.prototype,{get:function(fn,scaleMode){return this.set({scaleMode:scaleMode||"noScale"}),this.parent(fn)},_load:function(file,fn){var _this;api.log("FlashAPI.Image._load:",file),_isHtmlFile(file)?this.parent.apply(this,arguments):(_this=this,api.getInfo(file,function(err){fn.call(_this,err,file)}))},_apply:function(file,fn){var m,doneFn;api.log("FlashAPI.Image._apply:",file),_isHtmlFile(file)?this.parent.apply(this,arguments):(m=this.getMatrix(file.info),doneFn=fn,flash.cmd(file,"imageTransform",{id:file.id,matrix:m,callback:_wrap(function _(err,base64){api.log("FlashAPI.Image._apply.callback:",err),_unwrap(_),err?doneFn(err):api.support.html5||api.support.dataURI&&!(3e4 "+fileId),_this.xhr={headers:{},abort:function(){flash.cmd(flashId,"abort",{id:fileId})},getResponseHeader:function(name){return this.headers[name]},getAllResponseHeaders:function(){return this.headers}};var queue=api.queue(function(){flash.cmd(flashId,"upload",{url:_getUrl(options.url.replace(/([a-z]+)=(\?)&?/i,"")),data:data,files:fileId?files:null,headers:options.headers||{},callback:_wrap(function upload(evt){var type=evt.type,result=evt.result;api.log("FlashAPI.upload."+type),"progress"==type?(evt.loaded=Math.min(evt.loaded,evt.total),evt.lengthComputable=!0,options.progress(evt)):"complete"==type?(_unwrap(upload),"string"==typeof result&&(_this.responseText=result.replace(/%22/g,'"').replace(/%5c/g,"\\").replace(/%26/g,"&").replace(/%25/g,"%")),_this.end(evt.status||200)):"abort"!=type&&"error"!=type||(_this.end(evt.status||0,evt.message),_unwrap(upload))})})});_each(files,function(file){queue.inc(),api.getInfo(file,queue.next)}),queue.check()}})}},api.Flash=flash,api.newImage("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",function(err,img){api.support.dataURI=!(1!=img.width||1!=img.height),flash.init()}))}(window,window.jQuery,FileAPI),function(api){"use strict";var flash,_each=api.each,_cameraQueue=[];function _wrap(fn){var id=fn.wid=api.uid();return api.Flash._fn[id]=fn,"FileAPI.Flash._fn."+id}function _unwrap(fn){try{api.Flash._fn[fn.wid]=null,delete api.Flash._fn[fn.wid]}catch(e){}}!api.support.flash||!api.media||api.support.media&&api.html5&&!api.insecureChrome||(flash=api.Flash,api.extend(api.Flash,{patchCamera:function(){api.Camera.fallback=function(el,options,callback){var camId=api.uid();api.log("FlashAPI.Camera.publish: "+camId),flash.publish(el,camId,api.extend(options,{camera:!0,onEvent:_wrap(function _(evt){"camera"===evt.type&&(_unwrap(_),evt.error?(api.log("FlashAPI.Camera.publish.error: "+evt.error),callback(evt.error)):(api.log("FlashAPI.Camera.publish.success: "+camId),callback(null)))})}))},_each(_cameraQueue,function(args){api.Camera.fallback.apply(api.Camera,args)}),_cameraQueue=[],api.extend(api.Camera.prototype,{_id:function(){return this.video.id},start:function(callback){var _this=this;flash.cmd(this._id(),"camera.on",{callback:_wrap(function _(evt){_unwrap(_),evt.error?(api.log("FlashAPI.camera.on.error: "+evt.error),callback(evt.error,_this)):(api.log("FlashAPI.camera.on.success: "+_this._id()),_this._active=!0,callback(null,_this))})})},stop:function(){this._active=!1,flash.cmd(this._id(),"camera.off")},shot:function(){api.log("FlashAPI.Camera.shot:",this._id());var shot=api.Flash.cmd(this._id(),"shot",{});return shot.type="image/png",shot.flashId=this._id(),shot.isShot=!0,new api.Camera.Shot(shot)}})}}),api.Camera.fallback=function(){_cameraQueue.push(arguments)})}((window,window.jQuery,FileAPI)),"function"==typeof define&&define.amd&&define("FileAPI",[],function(){return FileAPI}),function(){Ext.namespace("MODx.util.MultiUploadDialog");var maxFileSize=parseInt(MODx.config.upload_maxsize,10),permittedFileTypes=MODx.config.upload_files.toLowerCase().split(",");FileAPI.debug=!1,FileAPI.support.flash=!1,FileAPI.staticPath=MODx.config.manager_url+"assets/fileapi/";var api={humanFileSize:function(bytes,units){var thresh=units?1e3:1024;if(bytes"+i+": "+this.errors[i]+"
");""!=errors&&MODx.msg.alert(_("error"),errors),this.errors={}}}),MODx.util.MultiUploadDialog.BrowseButton=Ext.extend(Ext.Button,{input_name:"file",input_file:null,original_handler:null,original_scope:null,initComponent:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.initComponent.call(this),this.original_handler=this.handler||null,this.original_scope=this.scope||window,this.handler=null,this.scope=null},onRender:function(ct,position){MODx.util.MultiUploadDialog.BrowseButton.superclass.onRender.call(this,ct,position),this.createInputFile()},createInputFile:function(){var button_container=this.el.child("button").wrap();this.input_file=button_container.createChild({tag:"input",type:"file",size:1,name:this.input_name||Ext.id(this.el),style:"cursor: pointer; display: inline-block; opacity: 0; position: absolute; top: 0; left: 0; width: 100%; height: 100%;",multiple:!0}),this.handleMouseEvents&&(this.input_file.on("mouseover",this.onMouseOver,this),this.input_file.on("mousedown",this.onMouseDown,this)),this.tooltip&&("object"==typeof this.tooltip?Ext.QuickTips.register(Ext.apply({target:this.input_file},this.tooltip)):this.input_file.dom[this.tooltipType]=this.tooltip),this.input_file.on("change",this.onInputFileChange,this),this.input_file.on("click",function(e){e.stopPropagation()})},detachInputFile:function(no_create){var result=this.input_file;return"object"==typeof this.tooltip?Ext.QuickTips.unregister(this.input_file):this.input_file.dom[this.tooltipType]=null,this.input_file.removeAllListeners(),this.input_file=null,result},getInputFile:function(){return this.input_file},disable:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.disable.call(this),this.input_file.dom.disabled=!0},enable:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.enable.call(this),this.input_file.dom.disabled=!1},destroy:function(){this.detachInputFile(!0).remove(),MODx.util.MultiUploadDialog.BrowseButton.superclass.destroy.call(this)},reset:function(){var form=new Ext.Element(document.createElement("form")),buttonParent=this.input_file.parent();form.appendChild(this.input_file),form.dom.reset(),buttonParent.appendChild(this.input_file)},onInputFileChange:function(ev){this.original_handler&&this.original_handler.call(this.original_scope,this,ev),this.fireEvent("click",this,ev)}}),Ext.reg("multiupload-browse-btn",MODx.util.MultiUploadDialog.BrowseButton),MODx.util.MultiUploadDialog.FilesGrid=function(config){config=config||{},Ext.applyIf(config,{height:300,autoScroll:!0,border:!1,fields:["name","size","file","permitted","message","uploaded"],paging:!1,remoteSort:!1,viewConfig:{forceFit:!0,getRowClass:function(record,index,rowParams){return record.get("permitted")?record.get("uploaded")?"upload-success":void 0:"upload-error"}},sortInfo:{field:"name",direction:"ASC"},deferRowRender:!0,anchor:"100%",autoExpandColumn:"state",columns:[{header:_("upload.columns.file"),dataIndex:"name",sortable:!0,width:200,renderer:function(value,meta,record){var id=Ext.id();return FileAPI.Image(record.get("file")).resize(100,50,"max").get(function(err,img){err||(img=new Ext.Element(img).addClass("upload-thumb"),Ext.get(id).insertFirst(img))}),'"}},{header:_("upload.columns.state"),id:"state",width:100,renderer:function(value,meta,record){if(!record.get("permitted")||record.get("uploaded"))return''+record.get("message")+"
";var id=Ext.id();return function(){record.progressbar=new Ext.ProgressBar({renderTo:id,value:0,text:"0 / "+record.get("size")})}.defer(25),''}}],getMenu:function(){return[{text:_("upload.contextmenu.remove_entry"),handler:this.removeFile}]}}),MODx.util.MultiUploadDialog.FilesGrid.superclass.constructor.call(this,config)},Ext.extend(MODx.util.MultiUploadDialog.FilesGrid,MODx.grid.LocalGrid,{removeFile:function(){var selected=this.getSelectionModel().getSelections();this.getStore().remove(selected)}}),Ext.reg("multiupload-grid-files",MODx.util.MultiUploadDialog.FilesGrid),MODx.util.MultiUploadDialog.Dialog=function(config){this.filesGridId=Ext.id(),config=config||{},Ext.applyIf(config,{permitted_extensions:permittedFileTypes,autoHeight:!0,width:600,closeAction:"hide",layout:"anchor",listeners:{show:{fn:this.onShow},hide:{fn:this.onHide}},items:[{xtype:"multiupload-grid-files",id:this.filesGridId,anchor:"100%"}],buttons:[{xtype:"multiupload-browse-btn",text:_("upload.buttons.choose"),cls:"primary-button",listeners:{click:{scope:this,fn:function(btn,files){files=FileAPI.getFiles(files);this.addFiles(files),btn.reset()}}}},{xtype:"splitbutton",text:_("upload.buttons.clear"),listeners:{click:{scope:this,fn:this.clearStore}},menu:new Ext.menu.Menu({items:[{text:_("upload.clear_list.all"),listeners:{click:{scope:this,fn:this.clearStore}}},{text:_("upload.clear_list.notpermitted"),listeners:{click:{scope:this,fn:this.clearNotPermittedItems}}}]})},{xtype:"button",text:_("upload.buttons.upload"),cls:"primary-button",listeners:{click:{scope:this,fn:this.startUpload}}},{xtype:"button",text:_("upload.buttons.close"),listeners:{click:{scope:this,fn:this.hideDialog}}}]}),MODx.util.MultiUploadDialog.Dialog.superclass.constructor.call(this,config)};var originalWindowOnShow=Ext.Window.prototype.onShow,originalWindowOnHide=Ext.Window.prototype.onHide;Ext.extend(MODx.util.MultiUploadDialog.Dialog,Ext.Window,{addFiles:function(files){var store=Ext.getCmp(this.filesGridId).getStore(),dialog=this;FileAPI.each(files,function(file){var permitted=!0,p="";api.isFileSizePermitted(file.size)||(p=_("upload.notpermitted.filesize",{size:api.humanFileSize(file.size),max:api.humanFileSize(maxFileSize)}),permitted=!1),api.isFileTypePermitted(file.name,dialog.permitted_extensions)||(p=_("upload.notpermitted.extension",{ext:api.getFileExtension(file.name)}),permitted=!1);p={name:file.name,size:api.humanFileSize(file.size),file:file,permitted:permitted,message:p,uploaded:!1},p=new store.recordType(p);store.insert(0,p)})},startUpload:function(){var dialog=this,files=[],params=Ext.apply(this.base_params,{HTTP_MODAUTH:MODx.siteId});Ext.getCmp(this.filesGridId).getStore().each(function(){var file=this.get("file");this.get("permitted")&&!this.get("uploaded")&&(file.record=this,files.push(file))});FileAPI.upload({url:this.url,data:params,files:{file:files},fileprogress:function(evt,file){file.record.progressbar.updateProgress(evt.loaded/evt.total,_("upload.upload_progress",{loaded:api.humanFileSize(evt.loaded),total:file.record.get("size")}),!0)},filecomplete:function(err,resp,file,options){err?401!==resp.status&&MODx.msg.alert(_("upload.msg.title.error"),err):(resp=Ext.util.JSON.decode(resp.response)).success?(file.record.set("uploaded",!0),file.record.set("message",_("upload.upload.success"))):(file.record.set("permitted",!1),file.record.set("message",resp.message))},complete:function(err,xhr){dialog.fireEvent("uploadsuccess")}})},removeEntry:function(record){Ext.getCmp(this.filesGridId).getStore().remove(record)},clearStore:function(){Ext.getCmp(this.filesGridId).getStore().removeAll()},clearNotPermittedItems:function(){var store=Ext.getCmp(this.filesGridId).getStore(),notPermitted=store.query("permitted",!1);store.remove(notPermitted.getRange())},hideDialog:function(){this.hide()},onDDrag:function(ev){ev&&ev.preventDefault()},onDDrop:function(ev){ev&&ev.preventDefault();var dialog=this;FileAPI.getDropFiles(ev.browserEvent,function(files){files.length&&dialog.addFiles(files)})},onShow:function(){var ret=originalWindowOnShow.apply(this,arguments);return Ext.getCmp(this.filesGridId).getStore().removeAll(),this.isDDSet||(this.el.on("dragenter",this.onDDrag,this),this.el.on("dragover",this.onDDrag,this),this.el.on("dragleave",this.onDDrag,this),this.el.on("drop",this.onDDrop,this),this.isDDSet=!0),ret},onHide:function(){var ret=originalWindowOnHide.apply(this,arguments);return this.el.un("dragenter",this.onDDrag,this),this.el.un("dragover",this.onDDrag,this),this.el.un("dragleave",this.onDDrag,this),this.el.un("drop",this.onDDrop,this),this.isDDSet=!1,ret},setBaseParams:function(params){this.base_params=params,this.setTitle(_("upload.title.destination_path",{path:this.base_params.path}))}}),Ext.reg("multiupload-window-dialog",MODx.util.MultiUploadDialog.Dialog)}(),Ext.namespace("MODx.tree"),MODx.tree.Tree=function(config){var tl,root;if(config=config||{},Ext.applyIf(config,{baseParams:{},action:"getNodes",loaderConfig:{}}),config.action&&(config.baseParams.action=config.action),config.loaderConfig.dataUrl=config.url,config.loaderConfig.baseParams=config.baseParams,Ext.applyIf(config.loaderConfig,{preloadChildren:!0,clearOnLoad:!0}),this.config=config,root=this.config.url?((tl=new MODx.tree.TreeLoader(config.loaderConfig)).on("beforeload",function(l,node){tl.dataUrl=this.config.url+"?action="+this.config.action+"&id="+node.attributes.id,node.attributes.type&&(tl.dataUrl+="&type="+node.attributes.type)},this),tl.on("load",this.onLoad,this),{nodeType:"async",text:config.root_name||config.rootName||"",qtip:config.root_qtip||config.rootQtip||"",draggable:!1,id:config.root_id||config.rootId||"root",pseudoroot:!0,attributes:{pseudoroot:!0},cls:"tree-pseudoroot-node",iconCls:config.root_iconCls||config.rootIconCls||""}):(tl=new Ext.tree.TreeLoader({preloadChildren:!0,baseAttrs:{uiProvider:MODx.tree.CheckboxNodeUI}}),new Ext.tree.TreeNode({text:this.config.rootName||"",draggable:!1,id:this.config.rootId||"root",children:this.config.data||[],pseudoroot:!0})),Ext.applyIf(config,{useArrows:!0,autoScroll:!0,animate:!0,enableDD:!0,enableDrop:!0,ddAppendOnly:!1,containerScroll:!0,collapsible:!0,border:!1,autoHeight:!0,rootVisible:!0,loader:tl,header:!1,hideBorders:!0,bodyBorder:!1,cls:"modx-tree",root:root,preventRender:!1,stateful:!0,menuConfig:{defaultAlign:"tl-b?",enableScrolling:!1,listeners:{show:function(){var node=this.activeNode;node&&node.ui.addClass("x-tree-selected")},hide:function(){var node=this.activeNode;node&&(node.isSelected()||node.ui&&node.ui.removeClass("x-tree-selected"))}}}}),!0!==config.remoteToolbar||void 0!==config.tbar&&null!==config.tbar){var tb=this.getToolbar();if(config.tbar&&config.useDefaultToolbar)for(var i=0;i"+node.attributes.text+"",target:this}),node:node,handler:function(btn,evt){evt.stopPropagation(evt),node.getOwnerTree().handleDirectCreateClick(node)},iconCls:"icon-plus-circle",renderTo:elId,listeners:{mouseover:function(button,e){button.tooltip.onTargetOver(e)},mouseout:function(button,e){button.tooltip.onTargetOut(e)}}}))},_showContextMenu:function(node,e){var m;this.cm.activeNode=node,this.cm.removeAll();var h,handled=!1;Ext.isEmpty(node.attributes.treeHandler)&&(!node.isRoot||Ext.isEmpty(node.childNodes[0].attributes.treeHandler))||(h=Ext.getCmp((node.isRoot?node.childNodes[0]:node).attributes.treeHandler))&&(node.isRoot&&(node.attributes.type="root"),m=h.getMenu(this,node,e),handled=!0),handled||(this.getMenu?m=this.getMenu(node,e):node.attributes.menu&&node.attributes.menu.items&&(m=node.attributes.menu.items)),m&&0s[i].length&&(f=!0):s.splice(i,1);f||s.push(p)}}else for(s=s.remove(p),i=0;i',id:"modx-iprops-container"}]}],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 resourceId=Ext.getCmp("modx-iprops-fp");resourceId&&resourceId.destroy();resourceId=Ext.get("modx-resource-id"),resourceId=null!==resourceId?resourceId.getValue():0;Ext.getCmp("modx-dise-proplist").getUpdater().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:!0,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!1;for(var i=0;i]+)>)/gi,"")))),(isfolderFieldCmb=Ext.getCmp("modx-resource-menuindex"))&&void 0!==o.result.object.menuindex&&isfolderFieldCmb.setValue(o.result.object.menuindex),(isfolderFieldCmb=Ext.getCmp("modx-resource-isfolder"))&&"boolean"==typeof o.result.object.isfolder&&isfolderFieldCmb.setValue(o.result.object.isfolder))},_handleDrop:function(e){var dropNode=e.dropNode,targetParent=e.target;if(null!==targetParent.findChild("id",dropNode.attributes.id))return!1;if("modContext"==dropNode.attributes.type&&(1'+newTitle.f.findField("pagetitle").getValue()+" ("+w.record.id+")";w.setTitle(w.title.replace(//,newTitle))},scope:this},hide:{fn:function(){this.destroy()}}}});w.title+=': '+Ext.util.Format.htmlEncode(w.record.pagetitle)+" ("+w.record.id+")",w.setValues(r.object),w.show(e.target,function(){Ext.isSafari?w.setPosition(null,30):w.center()},this)},scope:this}}})},_getModContextMenu:function(m){var a=m.attributes,ui=m.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pedit")&&m.push({text:_("edit_context"),handler:function(){var at=this.cm.activeNode.attributes;this.loadAction("a=context/update&key="+at.pk)}}),m.push({text:_("context_refresh"),handler:function(){this.refreshNode(this.cm.activeNode.id,!0)}}),ui.hasClass("pnewdoc")&&(m.push("-"),this._getCreateMenus(m,"0",ui)),ui.hasClass("pnew")&&m.push({text:_("context_duplicate"),handler:this.duplicateContext}),ui.hasClass("pdelete")&&(m.push("-"),m.push({text:_("context_remove"),handler:this.removeContext})),ui.hasClass("x-tree-node-leaf")||(m.push("-"),m.push(this._getSortMenu())),m},overviewResource:function(){this.loadAction("a=resource/data")},quickUpdateResource:function(itm,e){this.quickUpdate(itm,e,itm.classKey)},editResource:function(){this.loadAction("a=resource/update")},_getModResourceMenu:function(m){var a=m.attributes,ui=m.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pview")&&m.push({text:_("resource_overview"),handler:this.overviewResource}),ui.hasClass("pedit")&&m.push({text:_("resource_edit"),handler:this.editResource}),ui.hasClass("pqupdate")&&m.push({text:_("quick_update_resource"),classKey:a.classKey,handler:this.quickUpdateResource}),ui.hasClass("pduplicate")&&m.push({text:_("resource_duplicate"),handler:this.duplicateResource}),m.push({text:_("resource_refresh"),handler:this.refreshResource,scope:this}),ui.hasClass("pnew")&&(m.push("-"),this._getCreateMenus(m,null,ui)),ui.hasClass("psave")&&(m.push("-"),ui.hasClass("ppublish")&&ui.hasClass("unpublished")?m.push({text:_("resource_publish"),handler:this.publishDocument}):ui.hasClass("punpublish")&&m.push({text:_("resource_unpublish"),handler:this.unpublishDocument}),ui.hasClass("pundelete")&&ui.hasClass("deleted")?m.push({text:_("resource_undelete"),handler:this.undeleteDocument}):ui.hasClass("pdelete")&&!ui.hasClass("deleted")&&m.push({text:_("resource_delete"),handler:this.deleteDocument})),ui.hasClass("x-tree-node-leaf")||(m.push("-"),m.push(this._getSortMenu())),ui.hasClass("pview")&&""!=a.preview_url&&(m.push("-"),m.push({text:_("resource_view"),handler:this.preview})),m},refreshResource:function(){this.refreshNode(this.cm.activeNode.id)},createResourceHere:function(itm){var at=this.cm.activeNode.attributes,p=itm.usePk||at.pk;this.loadAction("a=resource/create&class_key="+itm.classKey+"&parent="+p+(at.ctx?"&context_key="+at.ctx:""))},createResource:function(itm,e){var at=this.cm.activeNode.attributes,p=itm.usePk||at.pk;this.quickCreate(itm,e,itm.classKey,at.ctx,p)},_getCreateMenus:function(m,pk,ui){var types=MODx.config.resource_classes,o=this.fireEvent("loadCreateMenus",types);Ext.isObject(o)&&Ext.apply(types,o);var k,coreTypes=["MODX\\Revolution\\modDocument","MODX\\Revolution\\modWebLink","MODX\\Revolution\\modSymLink","MODX\\Revolution\\modStaticResource"],ct=[],qct=[];for(k in types)-1!=coreTypes.indexOf(k)&&!ui.hasClass("pnew_"+k)||(ct.push({text:types[k].text_create_here,classKey:k,usePk:pk||!1,handler:this.createResourceHere,scope:this}),ui&&ui.hasClass("pqcreate")&&qct.push({text:types[k].text_create,classKey:k,handler:this.createResource,scope:this}));return m.push({text:_("create"),handler:function(){return!1},menu:{items:ct}}),ui&&ui.hasClass("pqcreate")&&m.push({text:_("quick_create"),handler:function(){return!1},menu:{items:qct}}),m},_handleDrag:function(dropEvent){var encNodes=Ext.encode(function simplifyNodes(node){for(var resultNode={},kids=node.childNodes,len=kids.length,i=0;i[[*pagetitle]]
"+_("resource_pagetitle_help"),anchor:"100%",allowBlank:!1},{xtype:"textfield",name:"longtitle",id:"modx-"+this.ident+"-longtitle",fieldLabel:_("resource_longtitle"),description:"[[*longtitle]]
"+_("resource_longtitle_help"),anchor:"100%"},{xtype:"textarea",name:"description",id:"modx-"+this.ident+"-description",fieldLabel:_("resource_description"),description:"[[*description]]
"+_("resource_description_help"),anchor:"100%",grow:!1,height:50},{xtype:"textarea",name:"introtext",id:"modx-"+this.ident+"-introtext",fieldLabel:_("resource_summary"),description:"[[*introtext]]
"+_("resource_summary_help"),anchor:"100%",height:50}]},{columnWidth:.4,border:!1,layout:"form",items:[{xtype:"modx-combo-template",name:"template",id:"modx-"+this.ident+"-template",fieldLabel:_("resource_template"),description:"[[*template]]
"+_("resource_template_help"),editable:!1,anchor:"100%",baseParams:{action:"Element/Template/GetList",combo:"1",limit:0},value:MODx.config.default_template},{xtype:"textfield",name:"alias",id:"modx-"+this.ident+"-alias",fieldLabel:_("resource_alias"),description:"[[*alias]]
"+_("resource_alias_help"),anchor:"100%"},{xtype:"textfield",name:"menutitle",id:"modx-"+this.ident+"-menutitle",fieldLabel:_("resource_menutitle"),description:"[[*menutitle]]
"+_("resource_menutitle_help"),anchor:"100%"},{xtype:"textfield",fieldLabel:_("resource_link_attributes"),description:"[[*link_attributes]]
"+_("resource_link_attributes_help"),name:"link_attributes",id:"modx-"+this.ident+"-attributes",maxLength:255,anchor:"100%"},{xtype:"xcheckbox",boxLabel:_("resource_hide_from_menus"),description:"[[*hidemenu]]
"+_("resource_hide_from_menus_help"),hideLabel:!0,name:"hidemenu",id:"modx-"+this.ident+"-hidemenu",inputValue:1,checked:"1"==MODx.config.hidemenu_default?1:0},{xtype:"xcheckbox",boxLabel:_("resource_published"),description:"[[*published]]
"+_("resource_published_help"),hideLabel:!0,name:"published",id:"modx-"+this.ident+"-published",inputValue:1,checked:"1"==MODx.config.publish_default?1:0},{xtype:"xcheckbox",boxLabel:_("deleted"),description:"[[*deleted]]
"+_("resource_delete"),hideLabel:!0,name:"deleted",id:"modx-"+this.ident+"-deleted",inputValue:1,checked:"1"==MODx.config.deleted_default?1:0}]}]},MODx.getQRContentField(this.ident,config.record.class_key)]},{id:"modx-"+this.ident+"-settings",title:_("settings"),layout:"form",cls:"modx-panel",autoHeight:!0,forceLayout:!0,labelWidth:100,defaults:{autoHeight:!0,border:!1},items:MODx.getQRSettings(this.ident,config.record)}]}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}]}),MODx.window.QuickCreateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickCreateResource,MODx.Window),Ext.reg("modx-window-quick-create-modResource",MODx.window.QuickCreateResource),MODx.window.QuickUpdateResource=function(config){config=config||{},this.ident=config.ident||"qur"+Ext.id(),Ext.applyIf(config,{title:_("quick_update_resource"),id:this.ident,action:"Resource/Update",buttons:[{text:config.cancelBtnText||_("cancel"),scope:this,handler:function(){this.hide()}},{text:config.saveBtnText||_("save"),scope:this,handler:function(){this.submit(!1)}},{text:config.saveBtnText||_("save_and_close"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.QuickUpdateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickUpdateResource,MODx.window.QuickCreateResource),Ext.reg("modx-window-quick-update-modResource",MODx.window.QuickUpdateResource),MODx.getQRContentField=function(id,cls){id=id||"qur",cls=cls||"MODX\\Revolution\\modDocument";Ext.getBody().getViewSize();var o={};switch(cls){case"MODX\\Revolution\\modSymLink":o={xtype:"textfield",fieldLabel:_("symlink"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255};break;case"MODX\\Revolution\\modWebLink":o={xtype:"textfield",fieldLabel:_("weblink"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255,value:"http://"};break;case"MODX\\Revolution\\modStaticResource":o={xtype:"modx-combo-browser",browserEl:"modx-browser",prependPath:!1,prependUrl:!1,fieldLabel:_("static_resource"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255,value:"",listeners:{select:{fn:function(data){"/"==data.url.substring(0,1)&&Ext.getCmp("modx-"+id+"-content").setValue(data.url.substring(1))},scope:this}}};break;case"MODX\\Revolution\\modResource":case"MODX\\Revolution\\modDocument":default:o={xtype:"textarea",name:"content",id:"modx-"+id+"-content",fieldLabel:_("content"),labelSeparator:"",anchor:"100%",style:"min-height: 200px",grow:!0}}return o},MODx.getQRSettings=function(id,va){return[{layout:"column",border:!1,anchor:"100%",defaults:{labelSeparator:"",labelAlign:"top",border:!1,layout:"form"},items:[{columnWidth:.5,items:[{xtype:"hidden",name:"parent",id:"modx-"+(id=id||"qur")+"-parent",value:va.parent},{xtype:"hidden",name:"context_key",id:"modx-"+id+"-context_key",value:va.context_key},{xtype:"hidden",name:"class_key",id:"modx-"+id+"-class_key",value:va.class_key},{xtype:"hidden",name:"publishedon",id:"modx-"+id+"-publishedon",value:va.publishedon},{xtype:"modx-field-parent-change",fieldLabel:_("resource_parent"),description:"[[*parent]]
"+_("resource_parent_help"),name:"parent-cmb",id:"modx-"+id+"-parent-change",value:va.parent||0,anchor:"100%",parentcmp:"modx-"+id+"-parent",contextcmp:"modx-"+id+"-context_key",currentid:va.id},{xtype:"modx-combo-class-derivatives",fieldLabel:_("resource_type"),description:"[[*class_key]]
",name:"class_key",hiddenName:"class_key",id:"modx-"+id+"-class-key",anchor:"100%",value:null!=va.class_key?va.class_key:"MODX\\Revolution\\modDocument"},{xtype:"modx-combo-content-type",fieldLabel:_("resource_content_type"),description:"[[*content_type]]
"+_("resource_content_type_help"),name:"content_type",hiddenName:"content_type",id:"modx-"+id+"-type",anchor:"100%",value:null!=va.content_type?va.content_type:MODx.config.default_content_type||1},{xtype:"modx-combo-content-disposition",fieldLabel:_("resource_contentdispo"),description:"[[*content_dispo]]
"+_("resource_contentdispo_help"),name:"content_dispo",hiddenName:"content_dispo",id:"modx-"+id+"-dispo",anchor:"100%",value:null!=va.content_dispo?va.content_dispo:0},{xtype:"numberfield",fieldLabel:_("resource_menuindex"),description:"[[*menuindex]]
"+_("resource_menuindex_help"),name:"menuindex",id:"modx-"+id+"-menuindex",width:75,value:va.menuindex||0}]},{columnWidth:.5,items:[{xtype:"xdatetime",fieldLabel:_("resource_publishedon"),description:"[[*publishedon]]
"+_("resource_publishedon_help"),name:"publishedon",id:"modx-"+id+"-publishedon",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.publishedon},{xtype:va.canpublish?"xdatetime":"hidden",fieldLabel:_("resource_publishdate"),description:"[[*pub_date]]
"+_("resource_publishdate_help"),name:"pub_date",id:"modx-"+id+"-pub-date",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.pub_date},{xtype:va.canpublish?"xdatetime":"hidden",fieldLabel:_("resource_unpublishdate"),description:"[[*unpub_date]]
"+_("resource_unpublishdate_help"),name:"unpub_date",id:"modx-"+id+"-unpub-date",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.unpub_date},{xtype:"xcheckbox",boxLabel:_("resource_folder"),description:_("resource_folder_help"),hideLabel:!0,name:"isfolder",id:"modx-"+id+"-isfolder",inputValue:1,checked:null!=va.isfolder&&va.isfolder},{xtype:"xcheckbox",boxLabel:_("resource_show_in_tree"),description:_("resource_show_in_tree_help"),hideLabel:!0,name:"show_in_tree",id:"modx-"+id+"-show_in_tree",inputValue:1,checked:null!=va.show_in_tree?va.show_in_tree:1},{xtype:"xcheckbox",boxLabel:_("resource_hide_children_in_tree"),description:_("resource_hide_children_in_tree_help"),hideLabel:!0,name:"hide_children_in_tree",id:"modx-"+id+"-hide_children_in_tree",inputValue:1,checked:null!=va.hide_children_in_tree&&va.hide_children_in_tree},{xtype:"xcheckbox",boxLabel:_("resource_alias_visible"),description:_("resource_alias_visible_help"),hideLabel:!0,name:"alias_visible",id:"modx-"+id+"-alias-visible",inputValue:1,checked:null!=va.alias_visible?va.alias_visible:1},{xtype:"xcheckbox",boxLabel:_("resource_uri_override"),description:_("resource_uri_override_help"),hideLabel:!0,name:"uri_override",id:"modx-"+id+"-uri-override",value:1,checked:!!parseInt(va.uri_override),listeners:{check:{fn:MODx.handleFreezeUri}}},{xtype:"textfield",fieldLabel:_("resource_uri"),description:"[[*uri]]
"+_("resource_uri_help"),name:"uri",id:"modx-"+id+"-uri",maxLength:255,anchor:"100%",value:va.uri||"",hidden:!va.uri_override},{xtype:"xcheckbox",boxLabel:_("resource_richtext"),description:_("resource_richtext_help"),hideLabel:!0,name:"richtext",id:"modx-"+id+"-richtext",inputValue:1,checked:void 0!==va.richtext?va.richtext?1:0:"1"==MODx.config.richtext_default?1:0},{xtype:"xcheckbox",boxLabel:_("resource_searchable"),description:_("resource_searchable_help"),hideLabel:!0,name:"searchable",id:"modx-"+id+"-searchable",inputValue:1,checked:void 0!==va.searchable?va.searchable?1:0:"1"==MODx.config.search_default?1:0,listeners:{check:{fn:MODx.handleQUCB}}},{xtype:"xcheckbox",boxLabel:_("resource_cacheable"),description:_("resource_cacheable_help"),hideLabel:!0,name:"cacheable",id:"modx-"+id+"-cacheable",inputValue:1,checked:void 0!==va.cacheable?va.cacheable?1:0:"1"==MODx.config.cache_default?1:0},{xtype:"xcheckbox",name:"clearCache",id:"modx-"+id+"-clearcache",boxLabel:_("resource_syncsite"),description:_("resource_syncsite_help"),hideLabel:!0,inputValue:1,checked:void 0!==va.clearCache?va.clearCache?1:0:"1"==MODx.config.syncsite_default?1:0}]}]}]},MODx.handleQUCB=function(cb){var h=Ext.getCmp(cb.id+"-hd");cb.checked&&h?(cb.setValue(1),h.setValue(1)):h&&(cb.setValue(0),h.setValue(0))},MODx.handleFreezeUri=function(cb){var uri=Ext.getCmp(cb.id.replace("-override",""));if(!uri)return!1;cb.checked?uri.show():uri.hide()},Ext.override(Ext.tree.AsyncTreeNode,{listeners:{click:{fn:function(){return console.log("Clicked me!",arguments),!1},scope:this}}}),MODx.tree.Element=function(config){config=config||{},Ext.applyIf(config,{rootVisible:!1,enableDD:!Ext.isEmpty(MODx.config.enable_dragdrop),ddGroup:"modx-treedrop-elements-dd",title:"",url:MODx.config.connector_url,action:"Element/GetNodes",sortAction:"Element/Sort",baseParams:{currentElement:MODx.request.id||0,currentAction:MODx.request.a||0}}),MODx.tree.Element.superclass.constructor.call(this,config),this.on("afterSort",this.afterSort)},Ext.extend(MODx.tree.Element,MODx.tree.Tree,{forms:{},windows:{},stores:{},getToolbar:function(){return[]},createCategory:function(n,e){var r={};this.cm.activeNode&&this.cm.activeNode.attributes.data&&(r.parent=this.cm.activeNode.attributes.data.id),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=-1!==node.indexOf("_category_");this.refreshNode(node,self)},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},renameCategory:function(itm,e){var r=this.cm.activeNode.attributes.data;MODx.load({xtype:"modx-window-category-rename",record:r,listeners:{success:{fn:function(n){var c=n.a.result.object,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()}}}}).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 rec={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};MODx.load({xtype:"modx-window-element-duplicate",record:rec,redirect:!1,listeners:{success:{fn:function(response){response=Ext.decode(response.a.response.responseText);response.object.redirect?MODx.loadPage("element/"+rec.type+"/update","id="+response.object.id):this.refreshNode(this.cm.activeNode.id)},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},removeElement:function(itm,e){var oar=this.cm.activeNode.id.substr(2).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(),MODx.request.a=="element/"+oar[0]+"/update"&&MODx.request.id==oar[2]&&MODx.loadPage("welcome")},scope:this}}})},activatePlugin:function(itm,e){var oar=this.cm.activeNode.id.substr(2).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 oar=this.cm.activeNode.id.substr(2).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,w){var r={category:this.cm.activeNode.attributes.pk||""},w=MODx.load({xtype:"modx-window-quick-create-"+w,record:r,listeners:{success:{fn:function(){this.refreshNode(this.cm.activeNode.id,!0)},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="template"==type?"templatename":"name",w=MODx.load({xtype:"modx-window-quick-update-"+type,record:r.object,listeners:{success:{fn:function(newTitle){this.refreshNode(this.cm.activeNode.id);newTitle=''+newTitle.f.findField(nameField).getValue()+" ("+w.record.id+")";w.setTitle(w.title.replace(//,newTitle))},scope:this},hide:{fn:function(){this.destroy()}}}});w.title+=': '+w.record[nameField]+" ("+w.record.id+")",w.setValues(r.object),w.show(e.target)},scope:this}}})},_createElement:function(itm,e,t){var cat_id=this.cm.activeNode.id.substr(2).split("_"),a="type"==cat_id[0]?cat_id[1]:cat_id[0],cat_id="type"==cat_id[0]?0:"category"==cat_id[1]?cat_id[2]:cat_id[3],a="element/"+a+"/create";return this.redirect("?a="+a+"&category="+cat_id),this.cm.hide(),!1},afterSort:function(o){var dn,tn=o.event.target.attributes;"category"==tn.type&&(dn=o.event.dropNode.attributes,"n_category"!=tn.id&&"category"==dn.type?o.event.target.expand():(this.refreshNode(o.event.target.attributes.id,!0),this.refreshNode("n_type_"+o.event.dropNode.attributes.type,!0)))},_handleDrop:function(e){var target=e.target;return"above"!=e.point&&"below"!=e.point&&(("MODX\\Revolution\\modCategory"==target.attributes.classKey||"root"==target.attributes.classKey)&&(!!this.isCorrectType(e.dropNode,target)&&("category"==target.attributes.type&&"append"==e.point||0"+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),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)}}),"modPlugin"==a.classKey&&(a.active?m.push({text:_("plugin_deactivate"),type:a.type,handler:this.deactivatePlugin}):m.push({text:_("plugin_activate"),type:a.type,handler:this.activatePlugin}))),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)}}),ui.hasClass("pdelete")&&m.push({text:_("remove_"+a.type),handler:this.removeElement}),m.push("-"),ui.hasClass("pnew")&&m.push({text:_("add_to_category_"+a.type),handler:this._createElement}),ui.hasClass("pnewcat")&&m.push({text:_("new_category"),handler:this.createCategory}),m},_getCategoryMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pnewcat")&&m.push({text:_("category_create"),handler:this.createCategory}),ui.hasClass("peditcat")&&m.push({text:_("category_rename"),handler:this.renameCategory}),2",{cls:"x-btn-icon icon-file_manager",tooltip:{text:_("modx_browser")},handler:this.loadFileManager,scope:this,hidden:!(MODx.perm.file_manager&&!MODx.browserOpen)}],tbarCfg:{id:config.id+"-tbar"}}),MODx.tree.Directory.superclass.constructor.call(this,config),this.addEvents({beforeUpload:!0,afterUpload:!0,afterQuickCreate:!0,afterRename:!0,afterRemove:!0,fileBrowserSelect:!0,changeSource:!0,afterSort:!0}),this.on("click",function(n,e){n.select(),this.cm.activeNode=n},this),this.on("render",function(){var el=Ext.get(this.config.id);el.createChild({tag:"div",id:this.config.id+"_tb"}),el.createChild({tag:"div",id:this.config.id+"_filter"}),this.addSourceToolbar()},this),this.on("show",function(){if(!this.config.hideSourceCombo)try{this.sourceCombo.show()}catch(e){}},this),this._init(),this.on("afterrender",this.showRefresh,this),this.on("afterSort",this._handleAfterDrop,this),this.on("click",function(e){null!=this.uploader&&this.uploader.setBaseParams({path:e.id})}),this.uploader=new MODx.util.MultiUploadDialog.Upload({url:MODx.config.connector_url,base_params:{action:"Browser/File/Upload",wctx:MODx.ctx||"",source:this.getSource()}}),this.uploader.on("beforeupload",this.beforeUpload,this),this.uploader.on("uploadsuccess",this.uploadSuccess,this),this.uploader.on("uploaderror",this.uploadError,this),this.uploader.on("uploadfailed",this.uploadFailed,this)},Ext.extend(MODx.tree.Directory,MODx.tree.Tree,{windows:{},getRootMenu:function(node){var menu=[];return MODx.perm.directory_create&&menu.push({text:_("file_folder_create"),handler:this.createDirectory,scope:this}),MODx.perm.file_create&&menu.push({text:_("file_create"),handler:this.createFile,scope:this}),MODx.perm.file_upload&&menu.push({text:_("upload_files"),handler:this.uploadFiles,scope:this}),node.ownerTree.el.hasClass("pupdate")&&menu.push(["-",{text:_("update"),handler:function(){MODx.loadPage("source/update","id="+node.ownerTree.source)}}]),menu},_showContextMenu:function(node,e){var m;this.cm.activeNode=node,this.cm.removeAll(),node.isRoot?m=this.getRootMenu(node):node.attributes.menu&&node.attributes.menu.items&&(m=node.attributes.menu.items),m&&0]+)>)/gi,"")))),targetNode.reload(!0)},_handleDrag:function(dropEvent){var from=dropEvent.dropNode.attributes.id,to=dropEvent.target.attributes.id,orgSource="number"==typeof dropEvent.dropNode.attributes.sid?dropEvent.dropNode.attributes.sid:this.config.baseParams.source,destSource=(destSource="number"==typeof dropEvent.target.attributes.sid?dropEvent.target.attributes.sid:0)||dropEvent.tree.source;MODx.Ajax.request({url:this.config.url,params:{source:orgSource,from:from,destSource:destSource,to:to,action:this.config.sortAction||"Browser/Directory/Sort",point:dropEvent.point},listeners:{success:{fn:function(r){var el=dropEvent.dropNode.getUI().getTextEl();el&&Ext.get(el).frame(),this.fireEvent("afterSort",{event:dropEvent,result:r})},scope:this},failure:{fn:function(r){return MODx.form.Handler.errorJSON(r),this.refresh(),""!=r.message?MODx.msg.alert(_("error"),r.message):r.data&&r.data[0]&&MODx.msg.alert(r.data[0].id,r.data[0].msg),!1},scope:this}}})},getPath:function(node){var p,a,path="";if(null!=node&&null!=node)if(node!==this.root){for(p=node.parentNode,a=[node.text];p&&p!==this.root;)a.unshift(p.text),p=p.parentNode;a.unshift(this.root.attributes.path||""),path=a.join(this.pathSeparator)}else path=node.attributes.path||"";return(path=path.replace(/^[\/\.]*/,""))+"/"},editFile:function(itm,e){MODx.loadPage("system/file/edit","file="+this.cm.activeNode.attributes.id+"&source="+this.config.source)},openFile:function(itm,e){this.cm.activeNode.attributes.urlExternal&&window.open(this.cm.activeNode.attributes.urlExternal)},quickUpdateFile:function(itm,e){var node=this.cm.activeNode;MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Get",file:node.attributes.id,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:function(r){r={file:node.attributes.id,name:node.text,path:node.attributes.pathRelative,source:this.getSource(),content:r.object.content};MODx.load({xtype:"modx-window-file-quick-update",record:r,listeners:{hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},createFile:function(itm,e){var path=this.cm.activeNode,dir="";path&&path.attributes&&(path.isRoot||"dir"===path.attributes.type?dir=path.attributes.id:"file"===path.attributes.type&&(dir=(path=path.attributes.path).substr(0,path.lastIndexOf("/")+1))),MODx.loadPage("system/file/create","directory="+dir+"&source="+this.getSource())},quickCreateFile:function(itm,e){var r={directory:this.cm.activeNode.attributes.id,source:this.getSource()};MODx.load({xtype:"modx-window-file-quick-create",record:r,listeners:{success:{fn:function(r){this.fireEvent("afterQuickCreate"),this.refreshActiveNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},browser:null,loadFileManager:function(btn,e){var refresh=!1;null===this.browser?this.browser=MODx.load({xtype:"modx-browser",hideFiles:MODx.config.modx_browser_tree_hide_files,rootId:"/",wctx:MODx.ctx,source:this.config.baseParams.source,listeners:{select:{fn:function(data){this.fireEvent("fileBrowserSelect",data)},scope:this}}}):refresh=!0,this.browser&&(this.browser.setSource(this.config.baseParams.source),refresh&&this.browser.win.tree.refresh(),this.browser.show())},renameNode:function(field,nv,ov){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Rename",new_name:nv,old_name:ov,file:this.treeEditor.editNode.id,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:function(r){this.fireEvent("afterRename"),this.refreshActiveNode()},scope:this}}})},renameDirectory:function(item,e){var r=this.cm.activeNode,r={old_name:r.text,name:r.text,path:r.attributes.pathRelative,source:this.getSource()};MODx.load({xtype:"modx-window-directory-rename",record:r,listeners:{success:{fn:this.refreshParentNode,scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},renameFile:function(item,e){var r=this.cm.activeNode,r={old_name:r.text,name:r.text,path:r.attributes.pathRelative,source:this.getSource()};MODx.load({xtype:"modx-window-file-rename",record:r,listeners:{success:{fn:function(r){this.fireEvent("afterRename"),this.refreshParentNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},createDirectory:function(item,e){var r=!(!this.cm||!this.cm.activeNode)&&this.cm.activeNode,r={parent:r&&"dir"==r.attributes.type?r.attributes.pathRelative:"/",source:this.getSource()};MODx.load({xtype:"modx-window-directory-create",record:r,listeners:{success:{fn:function(){var parent=Ext.getCmp("folder-parent").getValue();this.cm.activeNode&&"constructor"===this.cm.activeNode.constructor.name||""===parent||"/"===parent?this.refresh():this.refreshActiveNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e?e.target:Ext.getBody())},setVisibility:function(item,e){var r=this.cm.activeNode,r={path:r.attributes.path,visibility:r.attributes.visibility,source:this.getSource()};MODx.load({xtype:"modx-window-set-visibility",record:r,listeners:{success:{fn:this.refreshParentNode,scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},removeDirectory:function(item,e){var node=this.cm.activeNode;MODx.msg.confirm({text:_("file_folder_remove_confirm"),url:MODx.config.connector_url,params:{action:"Browser/Directory/Remove",dir:node.attributes.path,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:this._afterRemove,scope:this}}})},removeFile:function(item,e){var node=this.cm.activeNode;MODx.msg.confirm({text:_("file_confirm_remove"),url:MODx.config.connector_url,params:{action:"Browser/File/Remove",file:node.attributes.pathRelative,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:this._afterRemove,scope:this}}})},_afterRemove:function(){this.fireEvent("afterRemove"),this.refreshParentNode(),this.cm.activeNode=null},unpackFile:function(item,e){var node=this.cm.activeNode;MODx.msg.confirm({text:_("file_download_unzip")+" "+node.attributes.id,url:MODx.config.connectors_url,params:{action:"Browser/File/Unpack",file:node.attributes.id,wctx:MODx.ctx||"",source:this.getSource(),path:node.attributes.directory},listeners:{success:{fn:this.refreshParentNode,scope:this}}})},downloadFile:function(item,e){var node=this.cm.activeNode;location.href=MODx.config.connector_url+"?action=Browser/File/Download&download=1&file="+node.attributes.pathRelative+"&HTTP_MODAUTH="+MODx.siteId+"&source="+this.getSource()+"&wctx="+MODx.ctx},copyRelativePath:function(item,e){var node=this.cm.activeNode,dummyRelativePathInput=document.createElement("input");document.body.appendChild(dummyRelativePathInput),dummyRelativePathInput.setAttribute("value",node.attributes.pathRelative),dummyRelativePathInput.select(),document.execCommand("copy"),document.body.removeChild(dummyRelativePathInput)},getSource:function(){return this.config.baseParams.source},uploadFiles:function(){this.uploader.setBaseParams({source:this.getSource()}),this.uploader.browser=MODx.config.browserview,this.uploader.show()},uploadError:function(dlg,file,data,rec){},uploadFailed:function(dlg,file,rec){},uploadSuccess:function(){var node,pn;this.cm.activeNode?(node=this.cm.activeNode).isLeaf()?((pn=node.isLeaf()?node.parentNode:node)?pn.reload():node.id.match(/.*?\/$/)&&this.refreshActiveNode(),this.fireEvent("afterUpload",node)):this.refreshActiveNode():(this.refresh(),this.fireEvent("afterUpload"))},beforeUpload:function(){var path=this.config.openTo||this.config.rootId||"/";this.cm.activeNode&&(path=this.getPath(this.cm.activeNode),this.cm.activeNode.isLeaf()&&(path=this.getPath(this.cm.activeNode.parentNode))),this.uploader.setBaseParams({action:"Browser/File/Upload",path:path,wctx:MODx.ctx||"",source:this.getSource()}),this.fireEvent("beforeUpload",this.cm.activeNode)}}),Ext.reg("modx-tree-directory",MODx.tree.Directory),MODx.window.CreateDirectory=function(config){config=config||{},Ext.applyIf(config,{title:_("file_folder_create"),url:MODx.config.connector_url,action:"Browser/Directory/Create",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{fieldLabel:_("file_folder_parent"),id:"folder-parent",name:"parent",xtype:"textfield",anchor:"100%"}]}),MODx.window.CreateDirectory.superclass.constructor.call(this,config)},Ext.extend(MODx.window.CreateDirectory,MODx.Window),Ext.reg("modx-window-directory-create",MODx.window.CreateDirectory),MODx.window.SetVisibility=function(config){config=config||{},Ext.applyIf(config,{title:_("file_folder_visibility"),url:MODx.config.connector_url,action:"Browser/Visibility",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{name:"path",fieldLabel:_("file_folder_path"),xtype:"statictextfield",anchor:"100%",submitValue:!0},{fieldLabel:_("file_folder_visibility_label"),name:"visibility",xtype:"modx-combo-visibility",anchor:"100%",allowBlank:!1},{hideLabel:!0,xtype:"displayfield",value:_("file_folder_visibility_desc"),anchor:"100%",allowBlank:!1}]}),MODx.window.SetVisibility.superclass.constructor.call(this,config)},Ext.extend(MODx.window.SetVisibility,MODx.Window),Ext.reg("modx-window-set-visibility",MODx.window.SetVisibility),MODx.window.RenameDirectory=function(config){config=config||{},Ext.applyIf(config,{title:_("rename"),url:MODx.config.connector_url,action:"Browser/Directory/Rename",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",submitValue:!0,anchor:"100%"},{fieldLabel:_("old_name"),name:"old_name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("new_name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1}]}),MODx.window.RenameDirectory.superclass.constructor.call(this,config)},Ext.extend(MODx.window.RenameDirectory,MODx.Window),Ext.reg("modx-window-directory-rename",MODx.window.RenameDirectory),MODx.window.RenameFile=function(config){config=config||{},Ext.applyIf(config,{title:_("rename"),url:MODx.config.connector_url,action:"Browser/File/Rename",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",submitValue:!0,anchor:"100%"},{fieldLabel:_("old_name"),name:"old_name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("new_name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{name:"dir",xtype:"hidden"}]}),MODx.window.RenameFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.RenameFile,MODx.Window),Ext.reg("modx-window-file-rename",MODx.window.RenameFile),MODx.window.QuickUpdateFile=function(config){config=config||{},Ext.applyIf(config,{title:_("file_quick_update"),width:600,layout:"anchor",url:MODx.config.connector_url,action:"Browser/File/Update",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{xtype:"hidden",name:"file"},{fieldLabel:_("name"),name:"name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("content"),xtype:"textarea",name:"content",anchor:"100%",height:200}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}],buttons:[{text:config.cancelBtnText||_("cancel"),scope:this,handler:function(){this.hide()}},{text:config.saveBtnText||_("save"),scope:this,handler:function(){this.submit(!1)}},{text:config.saveBtnText||_("save_and_close"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.QuickUpdateFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickUpdateFile,MODx.Window),Ext.reg("modx-window-file-quick-update",MODx.window.QuickUpdateFile),MODx.window.QuickCreateFile=function(config){config=config||{},Ext.applyIf(config,{title:_("file_quick_create"),width:600,layout:"anchor",url:MODx.config.connector_url,action:"Browser/File/Create",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("directory"),name:"directory",submitValue:!0,xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{fieldLabel:_("content"),xtype:"textarea",name:"content",anchor:"100%",height:200}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}]}),MODx.window.QuickCreateFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickCreateFile,MODx.Window),Ext.reg("modx-window-file-quick-create",MODx.window.QuickCreateFile),MODx.panel.FileTree=function(config){config=config||{},Ext.applyIf(config,{_treePrefix:"source-tree-",autoHeight:!0,defaults:{autoHeight:!0,border:!1}}),MODx.panel.FileTree.superclass.constructor.call(this,config),this.on("render",this.getSourceList,this)},Ext.extend(MODx.panel.FileTree,Ext.Container,{getSourceList:function(){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Source/GetList",limit:0},listeners:{success:{fn:function(data){this.onSourceListReceived(data.results)},scope:this},failure:{fn:function(data){return 0"))},formatData:function(data){var size;return data.shortName=Ext.util.Format.ellipsis(data.name,18),data.sizeString=0!=data.size?(size=data.size)<1024?size+" "+_("file_size_bytes"):Math.round(10*size/1024)/10+" "+_("file_size_kilobytes"):0,data.imageSizeString=0!=data.preview?data.image_width+"x"+data.image_height+"px":0,data.imageSizeString="xpx"===data.imageSizeString?0:data.imageSizeString,data.dateString=Ext.isEmpty(data.lastmod)?0:new Date(data.lastmod).format(MODx.config.manager_date_format+" "+MODx.config.manager_time_format),this.lookup[data.name]=data},_initTemplates:function(){this.templates.thumb=new Ext.XTemplate('','','
',' ','

',"
","",'
',' ","","
{shortName}","
",""),this.templates.thumb.compile(),this.templates.list=new Ext.XTemplate('','',' ',' {name}',' ',' {sizeString}'," ",' ',' {imageSizeString}'," "," ","
",""),this.templates.list.compile(),this.templates.details=new Ext.XTemplate('','
',' ',' ",'

',"
"," ",' ',' "," ",' '," "+_("file_name")+":"," {name}",' '," "+_("file_size")+":"," {sizeString}"," ",' '," "+_("image_size")+":"," {imageSizeString}"," ",' '," "+_("file_last_modified")+":"," {dateString}"," ",' '," "+_("visibility")+":"," {visibility}"," ","
"," ","
"),this.templates.details.compile()},_showContextMenu:function(v,i,n,e){e.preventDefault(),this.select(n.id);var data=this.lookup[n.id],m=this.cm;if(m.removeAll(),data.menu){var menu=[];if(1",{xtype:"button",id:this.ident+"-cancel-btn",text:_("cancel"),minWidth:75,handler:this.onCancel,scope:this},{xtype:"button",id:this.ident+"-ok-btn",text:_("ok"),cls:"primary-button",minWidth:75,handler:this.onSelect,scope:this}]}]}),MODx.browser.RTE.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.browser.RTE,Ext.Viewport,{returnEl:null,filter:function(){var filter=Ext.getCmp(this.ident+"filter");this.view.store.filter("name",filter.getValue(),!0),this.view.select(0)},load:function(dir){dir=dir||(Ext.isEmpty(this.config.openTo)?"":this.config.openTo),this.view.run({dir:dir,source:this.config.source,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web"}),this.sortStore()},sortStore:function(){var v=Ext.getCmp(this.ident+"sortSelect").getValue();this.view.store.sort(v,"name"==v?"ASC":"DESC"),this.view.select(0)},changeViewmode:function(){var v=Ext.getCmp(this.ident+"viewSelect").getValue();this.view.setTemplate(v),this.view.select(0)},reset:function(){this.rendered&&(Ext.getCmp(this.ident+"filter").reset(),this.view.getEl().dom.scrollTop=0),this.view.store.clearFilter(),this.view.select(0)},getToolbar:function(){return[{text:_("filter")+":",xtype:"label"},{xtype:"textfield",id:this.ident+"filter",selectOnFocus:!0,width:200,listeners:{render:{fn:function(){Ext.getCmp(this.ident+"filter").getEl().on("keyup",function(){this.filter()},this,{buffer:500})},scope:this}}},{text:_("sort_by")+":",xtype:"label"},{id:this.ident+"sortSelect",xtype:"combo",typeAhead:!0,triggerAction:"all",width:130,editable:!1,mode:"local",displayField:"desc",valueField:"name",lazyInit:!1,value:MODx.config.modx_browser_default_sort||"name",store:new Ext.data.SimpleStore({fields:["name","desc"],data:[["name",_("name")],["size",_("file_size")],["lastmod",_("last_modified")]]}),listeners:{select:{fn:this.sortStore,scope:this}}},"-",{text:_("files_viewmode")+":",xtype:"label"},"-",{id:this.ident+"viewSelect",xtype:"combo",typeAhead:!1,triggerAction:"all",width:100,editable:!1,mode:"local",displayField:"desc",valueField:"type",lazyInit:!1,value:MODx.config.modx_browser_default_viewmode||"grid",store:new Ext.data.SimpleStore({fields:["type","desc"],data:[["grid",_("files_viewmode_grid")],["list",_("files_viewmode_list")]]}),listeners:{select:{fn:this.changeViewmode,scope:this}}}]},getPathbar:function(){return{cls:"modx-browser-pathbbar",items:[{xtype:"textfield",id:this.ident+"-filepath",cls:"modx-browser-filepath",listeners:{focus:{fn:function(el){setTimeout(function(){var selRange,field=el.getEl().dom;field.createTextRange?((selRange=field.createTextRange()).collapse(!0),selRange.moveStart("character",0),selRange.moveEnd("character",field.value.length),selRange.select()):field.setSelectionRange?field.setSelectionRange(0,field.value.length):field.selectionStart&&(field.selectionStart=0,field.selectionEnd=field.value.length)},50)},scope:this}}}]}},setReturn:function(el){this.returnEl=el},onSelect:function(data){var selNode=this.view.getSelectedNodes()[0],callback=this.config.onSelect||this.onSelectHandler,lookup=this.view.lookup,scope=this.config.scope;callback&&(data=selNode?lookup[selNode.id]:null,Ext.callback(callback,scope||this,[data]),this.fireEvent("select",data),window.top.opener&&(window.top.close(),window.top.opener.focus()))},onCancel:function(){var callback=this.config.onSelect||this.onSelectHandler,scope=this.config.scope;Ext.callback(callback,scope||this,[null]),this.fireEvent("select",null),window.top.opener&&(window.top.close(),window.top.opener.focus())},onSelectHandler:function(data){Ext.get(this.returnEl).dom.value=unescape(data.url)}}),Ext.reg("modx-browser-rte",MODx.browser.RTE),Ext.apply(Ext,{isFirebug:window.console&&window.console.firebug}),MODx.Layout=function(config){config=config||{},Ext.BLANK_IMAGE_URL=MODx.config.manager_url+"assets/ext3/resources/images/default/s.gif",Ext.Ajax.defaultHeaders={modAuth:config.auth},Ext.Ajax.extraParams={HTTP_MODAUTH:config.auth},MODx.siteId=config.auth,MODx.expandHelp=!!+MODx.config.inline_help;var sp=new MODx.HttpProvider;Ext.state.Manager.setProvider(sp),sp.initState(MODx.defaultState),config.showTree=!1,config.search&&new MODx.SearchBar,Ext.applyIf(config,{layout:"border",id:"modx-layout",stateSave:!0,items:this.buildLayout(config)}),MODx.Layout.superclass.constructor.call(this,config),this.config=config,this.addEvents({afterLayout:!0,loadKeyMap:!0,loadTabs:!0}),this.loadKeys(),config.showTree||Ext.getCmp("modx-leftbar-tabs").collapse(!1),this.fireEvent("afterLayout")},Ext.extend(MODx.Layout,Ext.Viewport,{buildLayout:function(east){var items=[],north=this.getNorth(east),west=this.getWest(east),center=this.getCenter(east),south=this.getSouth(east),east=this.getEast(east);return north&&Ext.isObject(north)&&items.push(north),west&&Ext.isObject(west)&&items.push(west),center&&Ext.isObject(center)&&items.push(center),south&&Ext.isObject(south)&&items.push(south),east&&Ext.isObject(east)&&items.push(east),items},getNorth:function(config){return window.innerWidth<=640&&{xtype:"box",region:"north",applyTo:"modx-header",listeners:{afterrender:this.initPopper,scope:this}}},getWest:function(config){return window.innerWidth<=640?this.getTree(config):{region:"west",xtype:"box",id:"modx-header",applyTo:"modx-header",autoScroll:!0,width:80,listeners:{afterrender:this.initPopper,scope:this}}},getCenter:function(tree){var center={region:"center",applyTo:"modx-content",padding:"0 1px 0 0",style:"width:100%",bodyStyle:"background-color:transparent;",id:"modx-content",autoScroll:!0};if(window.innerWidth<=640)return center;tree=this.getTree(tree);return center.margins={right:-80,left:-8},tree.margins={left:80},{region:"center",layout:"border",id:"modx-split-wrapper",items:[tree,center]}},getSouth:function(config){},getEast:function(config){},getTree:function(config){var tabs=[];MODx.perm.resource_tree&&(tabs.push({title:_("resources"),xtype:"modx-tree-resource",id:"modx-resource-tree"}),config.showTree=!0),MODx.perm.element_tree&&(tabs.push({title:_("elements"),xtype:"modx-tree-element",id:"modx-tree-element"}),config.showTree=!0),MODx.perm.file_tree&&(tabs.push({title:_("files"),xtype:"modx-panel-filetree",id:"modx-file-tree"}),config.showTree=!0);return{region:"west",applyTo:"modx-leftbar",id:"modx-leftbar-tabs",split:!0,width:310,minSize:288,autoScroll:!0,unstyled:!0,useSplitTips:!0,monitorResize:!0,layout:"anchor",headerCfg:window.innerWidth<=640?{}:{tag:"div",cls:"none",id:"modx-leftbar-header",html:MODx.config.site_name},items:[{xtype:"modx-tabs",plain:!0,defaults:{autoScroll:!0,fitToFrame:!0},id:"modx-leftbar-tabpanel",border:!1,anchor:"100%",activeTab:0,stateful:!0,stateEvents:["tabchange"],getState:function(){return{activeTab:this.items.indexOf(this.getActiveTab())}},items:tabs,listeners:{afterrender:function(){var tabs=this;MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Resource/GetToolbar"},listeners:{success:{fn:function(res){for(var i in res.object)if(res.object.hasOwnProperty(i)&&null!=res.object[i].id&&"emptifier"==res.object[i].id){var tab=tabs.add({id:"modx-trash-link",title:'',handler:res.object[i].handler});res.object[i].disabled||tab.tabEl.classList.add("active"),res.object[i].tooltip&&(tab.tooltip=new Ext.ToolTip({target:new Ext.Element(tab.tabEl),title:res.object[i].tooltip}));break}},scope:this}}});var html,el,header=Ext.get("modx-leftbar-header");header&&((html="")!==MODx.config.manager_logo&&void 0!==MODx.config.manager_logo&&(html+='
'),(el=document.createElement("a")).href=MODx.config.default_site_url||MODx.config.site_url,el.title=MODx.config.site_name,el.innerText=Ext.util.Format.ellipsis(MODx.config.site_name,45,!0),el.target="_blank",html+=el.outerHTML,header.dom.innerHTML=html)},beforetabchange:{fn:function(panel,tree){if(tree&&"modx-trash-link"==tree.id)return!tree.tabEl.classList.contains("active")||(tree=Ext.getCmp("modx-resource-tree"))&&tree.redirect("?a=resource/trash"),!1},scope:this}}}],getState:function(){return{collapsed:this.collapsed,width:this.width}},collapse:function(animate){if(!this.collapsed&&!this.el.hasFxBlock()&&!1!==this.fireEvent("beforecollapse",this,animate))return animate&&960
")+"").toLowerCase().match(/<[a-z][a-z0-9]*>/g)||[]).join(""),allowedAttributes=(((allowedAttributes||"href,class")+"").toLowerCase().match(/[a-z\-,]*/g)||[]).join("").concat(",");var length,tags=/<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,attributes=/([a-z][a-z0-9]*)\s*=\s*".*?"/gi;for(input=input.replace(/|<\?(?:php)?[\s\S]*?\?>/gi,"").replace(/href(\s*?=\s*?(["'])javascript:.*?\2|\s*?=\s*?javascript:.*?(?![^> ]))/gi,'href="javascript:void(0)"');length=input.length,input=function(input,allowedTags,allowedAttributes){return input.replace(tags,function($0,$1){return-1")?$0:""}).replace(attributes,function($0,$1){return-1',elbowMarkup=n.attributes.pseudoroot?'':'',index=['",'',""].join("");!0!==bulkRender&&n.nextSibling&&(nel=n.nextSibling.ui.getEl())?this.wrap=Ext.DomHelper.insertHtml("beforeBegin",nel,index):this.wrap=Ext.DomHelper.insertHtml("beforeEnd",cs,index),this.elNode=this.wrap.childNodes[0],this.ctNode=this.wrap.childNodes[1];cs=this.elNode.childNodes;this.indentNode=cs[0],this.ecNode=cs[1],this.iconNode=cs[2];index=3;cb&&(this.checkbox=cs[3],this.checkbox.defaultChecked=this.checkbox.checked,index++),this.anchor=cs[index],this.textNode=cs[index].firstChild},renderItemText:function(item){return Ext.util.Format.htmlEncode(item.text)},getChildIndent:function(){if(!this.childIndent){for(var buf=[],p=this.node;p;)(!p.isRoot||p.isRoot&&p.ownerTree.rootVisible)&&!p.attributes.pseudoroot&&(p.isLast()?buf.unshift('
'):buf.unshift('
')),p=p.parentNode;this.childIndent=buf.join("")}return this.childIndent}}),Ext.override(Ext.form.Action.Submit,{handleResponse:function(response){var m=Ext.decode(response.responseText);if(this.form.errorReader){var rs=this.form.errorReader.read(response),errors=[];if(rs.records)for(var i=0,len=rs.records.length;i{text}{text}',init:function(){this.tpl=new Ext.XTemplate(this.bdMarkup,{compiled:!0})},trail:trail,listeners:{afterrender:function(){this.renderTrail()}},renderTrail:function(){this.tpl.overwrite(this.body.dom.lastElementChild,{trail:this.trail})},updateTrail:function(trail,replace){if(void 0===replace&&(replace=!1),!0===replace)return this.trail=Array.isArray(trail)?trail:[trail],this.renderTrail(),!0;if(Array.isArray(trail)){for(var i=0;i ux-action-right {cls}" style="{style}" qtip="{qtip}">{text}
',tplRow:'ux-row-action-text" style="{hide}{style}" qtip="{qtip}">{text}
',hideMode:"visibility",widthIntercept:4,widthSlope:21,init:function(g){this.grid=g,this.id=this.id||Ext.id();var h=g.getColumnModel().lookup;delete h[void 0],(h[this.id]=this).tpl||(this.tpl=this.processActions(this.actions)),this.autoWidth&&(this.width=this.widthSlope*this.actions.length+this.widthIntercept,this.fixed=!0);var i=g.getView(),j={scope:this};j[this.actionEvent]=this.onClick,g.afterRender=g.afterRender.createSequence(function(){i.mainBody.on(j),g.on("destroy",this.purgeListeners,this)},this),this.renderer||(this.renderer=function(a,b,c,d,e,f){return b.css+=(b.css?" ":"")+"ux-row-action-cell",this.tpl.apply(this.getData(a,b,c,d,e,f))}.createDelegate(this)),i.groupTextTpl&&this.groupActions&&(i.interceptMouse=i.interceptMouse.createInterceptor(function(e){if(e.getTarget(".ux-grow-action-item"))return!1}),i.groupTextTpl=''+i.groupTextTpl+"
"+this.processActions(this.groupActions,this.tplGroup).apply()),!0===this.keepSelection&&(g.processEvent=g.processEvent.createInterceptor(function(a,e){if("mousedown"===a)return!this.getAction(e)},this))},getData:function(a,b,c,d,e,f){return c.data||{}},processActions:function(b,e){var d=[];Ext.each(b,function(o,i){o.iconCls&&"function"==typeof(o.callback||o.cb)&&(this.callbacks=this.callbacks||{},this.callbacks[o.iconCls]=o.callback||o.cb);o={cls:o.iconIndex?"{"+o.iconIndex+"}":o.iconCls||"",qtip:o.qtipIndex?"{"+o.qtipIndex+"}":o.tooltip||o.qtip?o.tooltip||o.qtip:"",text:o.textIndex?"{"+o.textIndex+"}":o.text||"",hide:o.hideIndex?''+("display"===this.hideMode?"display:none":"visibility:hidden")+";":o.hide?"display"===this.hideMode?"display:none":"visibility:hidden;":"",align:o.align||"right",style:o.style||""};d.push(o)},this);e=new Ext.XTemplate(e||this.tplRow);return new Ext.XTemplate(e.apply({actions:d}))},getAction:function(t){var a=!1,t=t.getTarget(".ux-row-action-item");return t&&(a=(a=t.className.replace(/ux-row-action-item /,""))&&(a=a.replace(/ ux-row-action-text/,"")).trim()),a},onClick:function(e,i){var b=this.grid.getView(),c=e.getTarget(".x-grid3-row"),d=b.findCellIndex(i.parentNode.parentNode),f=this.getAction(e);if(!1!==c&&!1!==d&&!1!==f){var g=this.grid.store.getAt(c.rowIndex);if(this.callbacks&&"function"==typeof this.callbacks[f]&&this.callbacks[f](this.grid,g,f,c.rowIndex,d),!0!==this.eventsSuspended&&!1===this.fireEvent("beforeaction",this.grid,g,f,c.rowIndex,d))return;!0!==this.eventsSuspended&&this.fireEvent("action",this.grid,g,f,c.rowIndex,d)}if(t=e.getTarget(".ux-grow-action-item"),t){var k,j,i=b.findGroup(i),i=i?i.id.replace(/ext-gen[0-9]+-gp-/,""):null;if(i&&(k=new RegExp(RegExp.escape(i)),j=(j=this.grid.store.queryBy(function(r){return r._groupId.match(k)}))?j.items:[]),f=t.className.replace(/ux-grow-action-item (ux-action-right )*/,""),"function"==typeof this.callbacks[f]&&this.callbacks[f](this.grid,j,f,i),!0!==this.eventsSuspended&&!1===this.fireEvent("beforegroupaction",this.grid,j,f,i))return!1;this.fireEvent("groupaction",this.grid,j,f,i)}}}),Ext.reg("rowactions",Ext.ux.grid.RowActions),Ext.SwitchButton=Ext.extend(Ext.Component,{initComponent:function(){Ext.SwitchButton.superclass.initComponent.call(this);var mc=new Ext.util.MixedCollection;mc.addAll(this.items),this.items=mc,this.addEvents("change"),this.handler&&this.on("change",this.handler,this.scope||this)},onRender:function(ct,position){var el=document.createElement("table");el.cellSpacing=0,el.className="x-rbtn",el.id=this.id;var row=document.createElement("tr");el.appendChild(document.createElement("tbody")).appendChild(row);var count=this.items.length,last=count-1;this.activeItem=this.items.get(this.activeItem);for(var i=0;idata.rowIndex&&this.rowPosition<0&&rindex--,rindexdata.rowIndex&&1','{value}
',""),MODx.grid||(MODx.grid={}),MODx.grid.ComboColumn=Ext.extend(Ext.grid.Column,{gridId:void 0,constructor:function(cfg){MODx.grid.ComboColumn.superclass.constructor.call(this,cfg),this.renderer=this.editor&&this.editor.triggerAction?MODx.grid.ComboBoxRenderer(this.editor,this.gridId,cfg.renderer):function(value){return value}}}),Ext.grid.Column.types.combocolumn=MODx.grid.ComboColumn,MODx.grid.ComboBoxRenderer=function(combo,gridId,currentRenderer){return function(value,metaData,record,rowIndex,colIndex,store){var scope;return currentRenderer&&("function"==typeof currentRenderer.fn&&(scope=currentRenderer.scope||!1,currentRenderer=currentRenderer.fn.bind(scope)),"function"==typeof currentRenderer&&(value=currentRenderer(value,metaData,record,rowIndex,colIndex,store))),0==combo.store.getCount()&&gridId?(combo.store.on("load",function(){var grid=Ext.getCmp(gridId);grid&&grid.getView().refresh()},this,{single:!0}),value):function(value){var rec=combo.store.find(combo.valueField,value),rec=combo.store.getAt(rec);return rec?rec.get(combo.displayField):value}(value)}},Ext.Button.buttonTemplate=new Ext.Template(''),Ext.Button.buttonTemplate.compile(),Ext.TabPanel.prototype.itemTpl=new Ext.Template('','{text}'),Ext.TabPanel.prototype.itemTpl.disableFormats=!0,Ext.TabPanel.prototype.itemTpl.compile(),Ext.override(Ext.form.TimeField,{initDate:"2/1/2008"}),Ext.ns("Ext.ux.form"),Ext.ux.form.DateTime=Ext.extend(Ext.form.Field,{dateValidator:null,defaultAutoCreate:{tag:"input",type:"hidden"},dtSeparator:" ",hiddenFormat:"Y-m-d H:i:s",hiddenFormatForTimeHidden:"Y-m-d 00:00:00",otherToNow:!0,timePosition:"right",timeValidator:null,timeWidth:100,dateFormat:"m/d/y",timeFormat:"g:i A",maxDateValue:"",minDateValue:"",timeIncrement:15,maxTimeValue:null,minTimeValue:null,disabledDates:null,hideTime:!1,initComponent:function(){Ext.ux.form.DateTime.superclass.initComponent.call(this),this.hasOwnProperty("offset_time")&&!isNaN(this.offset_time)||(this.offset_time=0),this.hideTime&&(this.hiddenFormat=this.hiddenFormatForTimeHidden);var timeConfig=Ext.apply({},{id:this.id+"-date",format:this.dateFormat||Ext.form.DateField.prototype.format,width:this.timeWidth,selectOnFocus:this.selectOnFocus,validator:this.dateValidator,disabledDates:this.disabledDates||null,disabledDays:this.disabledDays||[],showToday:this.showToday||!0,maxValue:this.maxDateValue||"",minValue:this.minDateValue||"",startDay:this.startDay||0,allowBlank:this.allowBlank,listeners:{blur:{scope:this,fn:this.onBlur},focus:{scope:this,fn:this.onFocus}}},this.dateConfig);this.df=new Ext.form.DateField(timeConfig),delete(this.df.ownerCt=this).dateFormat,delete this.disabledDates,delete this.disabledDays,delete this.maxDateValue,delete this.minDateValue,delete this.startDay;timeConfig=Ext.apply({},{id:this.id+"-time",format:this.timeFormat||Ext.form.TimeField.prototype.format,width:this.timeWidth,selectOnFocus:this.selectOnFocus,validator:this.timeValidator,increment:this.timeIncrement||15,maxValue:this.maxTimeValue||null,minValue:this.minTimeValue||null,hidden:this.hideTime,allowBlank:this.allowBlank,listeners:{blur:{scope:this,fn:this.onBlur},focus:{scope:this,fn:this.onFocus}}},this.timeConfig);this.tf=new Ext.form.TimeField(timeConfig),delete(this.tf.ownerCt=this).timeFormat,delete this.maxTimeValue,delete this.minTimeValue,delete this.timeIncrement,this.relayEvents(this.df,["focus","specialkey","invalid","valid"]),this.relayEvents(this.tf,["focus","specialkey","invalid","valid"]),this.on("specialkey",this.onSpecialKey,this)},onRender:function(o,position){this.isRendered||(Ext.ux.form.DateTime.superclass.onRender.call(this,o,position),o="below"===this.timePosition||"bellow"===this.timePosition?Ext.DomHelper.append(o,{tag:"table",style:"border-collapse:collapse",children:[{tag:"tr",children:[{tag:"td",style:"padding-bottom:1px",cls:"ux-datetime-date"}]},{tag:"tr",children:[{tag:"td",cls:"ux-datetime-time"}]}]},!0):Ext.DomHelper.append(o,{tag:"table",style:"border-collapse:collapse",children:[{tag:"tr",children:[{tag:"td",style:"padding-right:4px",cls:"ux-datetime-date"},{tag:"td",cls:"ux-datetime-time"}]}]},!0),this.tableEl=o,this.wrap=o.wrap({cls:"x-form-field-wrap x-datetime-wrap"}),this.wrap.on("mousedown",this.onMouseDown,this,{delay:10}),this.df.render(o.child("td.ux-datetime-date")),this.tf.render(o.child("td.ux-datetime-time")),this.df.el.swallowEvent(["keydown","keypress"]),this.tf.el.swallowEvent(["keydown","keypress"]),"side"===this.msgTarget&&((o=this.el.findParent(".x-form-element",10,!0))&&(this.errorIcon=o.createChild({cls:"x-form-invalid-icon"})),o={errorIcon:this.errorIcon,msgTarget:"side",alignErrorIcon:this.alignErrorIcon.createDelegate(this)},Ext.apply(this.df,o),Ext.apply(this.tf,o)),this.el.dom.name=this.hiddenName||this.name||this.id,this.df.el.dom.removeAttribute("name"),this.tf.el.dom.removeAttribute("name"),this.isRendered=!0,this.updateHidden())},adjustSize:Ext.BoxComponent.prototype.adjustSize,alignErrorIcon:function(){this.errorIcon.alignTo(this.tableEl,"tl-tr",[2,0])},initDateValue:function(){this.dateValue=this.otherToNow?new Date:new Date(1970,0,1,0,0,0)},clearInvalid:function(){this.df.clearInvalid(),this.tf.clearInvalid()},markInvalid:function(msg){this.df.markInvalid(msg),this.tf.markInvalid(msg)},beforeDestroy:function(){this.isRendered&&(this.wrap.removeAllListeners(),this.wrap.remove(),this.tableEl.remove(),this.df.destroy(),this.tf.destroy())},disable:function(){return this.isRendered&&(this.df.disabled=this.disabled,this.df.onDisable(),this.tf.onDisable()),this.disabled=!0,this.df.disabled=!0,this.tf.disabled=!0,this.fireEvent("disable",this),this},enable:function(){return this.rendered&&(this.df.onEnable(),this.tf.onEnable()),this.disabled=!1,this.df.disabled=!1,this.tf.disabled=!1,this.fireEvent("enable",this),this},focus:function(){this.df.focus()},getPositionEl:function(){return this.wrap},getResizeEl:function(){return this.wrap},getValue:function(){return this.dateValue?new Date(this.dateValue):""},isValid:function(){return this.df.isValid()&&this.tf.isValid()},isVisible:function(){return this.df.rendered&&this.df.getActionEl().isVisible()},onBlur:function(f){this.wrapClick&&(f.focus(),this.wrapClick=!1),f===this.df?this.updateDate():this.updateTime(),this.updateHidden(),this.validate(),function(){var v;this.df.hasFocus||this.tf.hasFocus||(v=this.getValue(),String(v)!==String(this.startValue)&&this.fireEvent("change",this,v,this.startValue),this.hasFocus=!1,this.fireEvent("blur",this))}.defer(100,this)},onFocus:function(){this.hasFocus||(this.hasFocus=!0,this.startValue=this.getValue(),this.fireEvent("focus",this))},onMouseDown:function(e){this.disabled||(this.wrapClick="td"===e.target.nodeName.toLowerCase())},onSpecialKey:function(t,e){var key=e.getKey();key===e.TAB&&(t!==this.df||e.shiftKey||(e.stopEvent(),this.tf.focus()),t===this.tf&&e.shiftKey&&(e.stopEvent(),this.df.focus()),this.updateValue()),key===e.ENTER&&this.updateValue()},reset:function(){this.df.setValue(this.originalValue),this.tf.setValue(this.originalValue)},setDate:function(date){date&&0!=this.offset_time&&(date=date.add(Date.MINUTE,60*new Number(this.offset_time))),this.df.setValue(date)},setTime:function(date){date&&0!=this.offset_time&&(date=date.add(Date.MINUTE,60*new Number(this.offset_time))),this.tf.setValue(date)},setSize:function(w,h){w&&("below"===this.timePosition?(this.df.setSize(w,h),this.tf.setSize(w,h),Ext.isIE&&(this.df.el.up("td").setWidth(w),this.tf.el.up("td").setWidth(w))):(this.df.setSize(w-this.timeWidth-4,h),this.tf.setSize(this.timeWidth,h),Ext.isIE&&(this.df.el.up("td").setWidth(w-this.timeWidth-4),this.tf.el.up("td").setWidth(this.timeWidth))))},setValue:function(da){if(da||!0!==this.emptyToNow){if(!da)return this.setDate(""),this.setTime(""),void this.updateValue();"number"==typeof da?da=new Date(da):"string"==typeof da&&this.hiddenFormat&&(da=Date.parseDate(da,this.hiddenFormat)),(da=da||new Date(1970,0,1,0,0,0))instanceof Date?(this.setDate(da),this.setTime(da),this.dateValue=new Date(Ext.isIE?da.getTime():da)):(da=da.split(this.dtSeparator),this.setDate(da[0]),da[1]&&(da[2]&&(da[1]+=da[2]),this.setTime(da[1]))),this.updateValue()}else this.setValue(new Date)},setVisible:function(visible){return visible?(this.df.show(),this.tf.show()):(this.df.hide(),this.tf.hide()),this},show:function(){return this.setVisible(!0)},hide:function(){return this.setVisible(!1)},updateDate:function(){var d=this.df.getValue();d?(this.dateValue instanceof Date||(this.initDateValue(),this.tf.getValue()||this.setTime(this.dateValue)),this.dateValue.setMonth(0),this.dateValue.setFullYear(d.getFullYear()),this.dateValue.setMonth(d.getMonth(),d.getDate())):(this.dateValue="",this.setTime(""))},updateTime:function(){var t=this.tf.getValue();!t||t instanceof Date||(t=Date.parseDate(t,this.tf.format)),t&&!this.df.getValue()&&(this.initDateValue(),this.setDate(this.dateValue)),this.dateValue instanceof Date&&(t?(this.dateValue.setHours(t.getHours()),this.dateValue.setMinutes(t.getMinutes()),this.dateValue.setSeconds(t.getSeconds())):(this.dateValue.setHours(0),this.dateValue.setMinutes(0),this.dateValue.setSeconds(0)))},updateHidden:function(){var value;this.isRendered&&(value="",this.dateValue instanceof Date&&(value=this.dateValue.add(Date.MINUTE,0-60*new Number(this.offset_time)).format(this.hiddenFormat)),this.el.dom.value=value)},updateValue:function(){this.updateDate(),this.updateTime(),this.updateHidden()},validate:function(){return this.df.validate()&&this.tf.validate()},renderer:function(field){var format=field.editor.dateFormat||Ext.ux.form.DateTime.prototype.dateFormat;return format+=" "+(field.editor.timeFormat||Ext.ux.form.DateTime.prototype.timeFormat),function(val){return Ext.util.Format.date(val,format)}}}),Ext.reg("xdatetime",Ext.ux.form.DateTime),Ext.namespace("Ext.ux.Utils"),Ext.ux.Utils.EventQueue=function(handler,scope){if(!handler)throw"Handler is required.";this.handler=handler,this.scope=scope||window,this.queue=[],this.is_processing=!1,this.postEvent=function(event,data){data=data||null,this.queue.push({event:event,data:data}),this.is_processing||this.process()},this.flushEventQueue=function(){this.queue=[]},this.process=function(){for(;0 ").compile()},createForm:function(){this.form=Ext.DomHelper.append(this.body,{tag:"form",method:"post",action:this.url,style:"position: absolute; left: -100px; top: -100px; width: 100px; height: 100px; clear: both;"})},createProgressBar:function(){this.progress_bar=this.add(new Ext.ProgressBar({x:0,y:0,anchor:"0",value:0,text:this.i18n.progress_waiting_text}))},createGrid:function(){var store=new Ext.data.Store({proxy:new Ext.data.MemoryProxy([]),reader:new Ext.data.JsonReader({},Ext.ux.UploadDialog.FileRecord),sortInfo:{field:"state",direction:"DESC"},pruneModifiedRecords:!0}),cm=new Ext.grid.ColumnModel([{header:this.i18n.state_col_title,width:this.i18n.state_col_width,resizable:!1,dataIndex:"state",sortable:!0,renderer:this.renderStateCell.createDelegate(this)},{header:this.i18n.filename_col_title,width:this.i18n.filename_col_width,dataIndex:"filename",sortable:!0,renderer:this.renderFilenameCell.createDelegate(this)},{header:this.i18n.note_col_title,width:this.i18n.note_col_width,dataIndex:"note",sortable:!0,renderer:this.renderNoteCell.createDelegate(this)}]);this.grid_panel=new Ext.grid.GridPanel({ds:store,cm:cm,layout:"fit",height:this.height-100,region:"center",x:0,y:22,border:!0,viewConfig:{autoFill:!0,forceFit:!0},bbar:new Ext.Toolbar}),this.grid_panel.on("render",this.onGridRender,this),this.add(this.grid_panel),this.grid_panel.getSelectionModel().on("selectionchange",this.onGridSelectionChange,this)},fillToolbar:function(){var tb=this.grid_panel.getBottomToolbar();tb.x_buttons={},tb.x_buttons.add=tb.addItem(new Ext.ux.UploadDialog.TBBrowseButton({input_name:this.post_var_name,text:this.i18n.add_btn_text,tooltip:this.i18n.add_btn_tip,iconCls:"ext-ux-uploaddialog-addbtn",handler:this.onAddButtonFileSelected,scope:this})),tb.x_buttons.remove=tb.addButton({text:this.i18n.remove_btn_text,tooltip:this.i18n.remove_btn_tip,iconCls:"ext-ux-uploaddialog-removebtn",handler:this.onRemoveButtonClick,scope:this}),tb.x_buttons.reset=tb.addButton({text:this.i18n.reset_btn_text,tooltip:this.i18n.reset_btn_tip,iconCls:"ext-ux-uploaddialog-resetbtn",handler:this.onResetButtonClick,scope:this}),tb.x_buttons.upload=tb.addButton({text:this.i18n.upload_btn_start_text,tooltip:this.i18n.upload_btn_start_tip,iconCls:"ext-ux-uploaddialog-uploadstartbtn",handler:this.onUploadButtonClick,scope:this}),tb.x_buttons.close=tb.addButton({text:this.i18n.close_btn_text,tooltip:this.i18n.close_btn_tip,handler:this.onCloseButtonClick,scope:this})},renderStateCell:function(data,cell,record,row_index,column_index,store){return this.state_tpl.apply({state:data})},renderFilenameCell:function(data,cell,record,row_index,column_index,store){var view=this.grid_panel.getView();return function(){try{Ext.fly(view.getCell(row_index,column_index)).child(".x-grid3-cell-inner").dom.qtip=data}catch(e){}}.defer(1e3),data},renderNoteCell:function(data,cell,record,row_index,column_index,store){var view=this.grid_panel.getView();return function(){try{Ext.fly(view.getCell(row_index,column_index)).child(".x-grid3-cell-inner").dom.qtip=data}catch(e){}}.defer(1e3),data},getFileExtension:function(parts){var result=null,parts=parts.split(".");return 1((?:.|\n)*)<\/pre>$/i);filter&&(rt=filter[1]),json_response=Ext.util.JSON.decode(rt)}catch(e){}data={record:data.record,response:json_response};"success"in json_response&&json_response.success?this.fsa.postEvent("file-upload-success",data):this.fsa.postEvent("file-upload-error",data)},onAjaxFailure:function(response,data){data={record:data.record,response:{success:!1,error:this.i18n.note_upload_failed}};this.fsa.postEvent("file-upload-failed",data)},startUpload:function(){this.fsa.postEvent("start-upload")},stopUpload:function(){this.fsa.postEvent("stop-upload")},getUrl:function(){return this.url},setUrl:function(url){this.url=url},getBaseParams:function(){return this.base_params},setBaseParams:function(params){this.base_params=params},getUploadAutostart:function(){return this.upload_autostart},setUploadAutostart:function(value){this.upload_autostart=value},getMakeReload:function(){return this.Make_Reload},setMakeReload:function(value){this.Make_Reload=value},getAllowCloseOnUpload:function(){return this.allow_close_on_upload},setAllowCloseOnUpload:function(value){this.allow_close_on_upload},getResetOnHide:function(){return this.reset_on_hide},setResetOnHide:function(value){this.reset_on_hide=value},getPermittedExtensions:function(){return this.permitted_extensions},setPermittedExtensions:function(value){this.permitted_extensions=value},isUploading:function(){return this.is_uploading},isNotEmptyQueue:function(){return 0=this.minChars||valuesQuery&&!Ext.isEmpty(q))&&(forcedAdd||this.forceSameValueQuery||this.shouldQuery(q)?(this.lastQuery=q,"local"==this.mode?(this.selectedIndex=-1,forceAll?this.store.clearFilter():this.store.filter(this.displayField,q),this.onLoad()):(this.store.baseParams[this.queryParam]=q,this.store.baseParams[this.queryValuesIndicator]=valuesQuery,this.store.load({params:this.getParams(q)}),forcedAdd||this.expand())):(this.selectedIndex=-1,this.onLoad()))},onStoreLoad:function(params,records,options){var q=options.params[this.queryParam]||params.baseParams[this.queryParam]||"",params=options.params[this.queryValuesIndicator]||params.baseParams[this.queryValuesIndicator];this.removeValuesFromStore&&this.store.each(function(record){this.usedRecords.containsKey(record.get(this.valueField))&&this.store.remove(record)},this),params&&(params=q.split(this.queryValuesDelimiter),Ext.each(params,function(rec){this.remoteLookup.remove(rec);rec=this.findRecord(this.valueField,rec);rec&&this.addRecord(rec)},this),this.setOriginal&&(this.setOriginal=!1,this.originalValue=this.getValue())),""!==q&&this.allowAddNewData&&Ext.each(this.remoteLookup,function(rec){"object"==typeof rec&&rec[this.valueField]===q&&(this.remoteLookup.remove(rec),records.length&&records[0].get(this.valueField)===q?this.addRecord(records[0]):(rec=this.createRecord(rec),this.store.add(rec),this.addRecord(rec),this.addedRecords.push(rec),function(){this.isExpanded()&&this.collapse()}.defer(10,this)))},this);var re,toAdd=[];""===q?Ext.each(this.addedRecords,function(rec){this.preventDuplicates&&this.usedRecords.containsKey(rec.get(this.valueField))||toAdd.push(rec)},this):(re=new RegExp(Ext.escapeRe(q)+".*","i"),Ext.each(this.addedRecords,function(rec){this.preventDuplicates&&this.usedRecords.containsKey(rec.get(this.valueField))||re.test(rec.get(this.displayField))&&toAdd.push(rec)},this)),this.store.add(toAdd),this.sortStore(),0===this.store.getCount()&&this.isExpanded()&&this.collapse()}}),Ext.reg("superboxselect",Ext.ux.form.SuperBoxSelect),Ext.ux.form.SuperBoxSelectItem=function(config){Ext.apply(this,config),Ext.ux.form.SuperBoxSelectItem.superclass.constructor.call(this)},Ext.ux.form.SuperBoxSelectItem=Ext.extend(Ext.ux.form.SuperBoxSelectItem,Ext.Component,{initComponent:function(){Ext.ux.form.SuperBoxSelectItem.superclass.initComponent.call(this)},onElClick:function(e){var o=this.owner;o.clearCurrentFocus().collapse(),o.navigateItemsWithTab?this.focus():(o.el.dom.focus(),function(){this.onLnkFocus(),o.currentFocus=this}.defer(10,this))},onLnkClick:function(e){e&&e.stopEvent(),this.preDestroy(),this.owner.navigateItemsWithTab||this.owner.el.focus()},onLnkFocus:function(){this.el.addClass("x-superboxselect-item-focus"),this.owner.outerWrapEl.addClass("x-form-focus")},onLnkBlur:function(){this.el.removeClass("x-superboxselect-item-focus"),this.owner.outerWrapEl.removeClass("x-form-focus")},enableElListeners:function(){this.el.on("click",this.onElClick,this,{stopEvent:!0}),this.el.addClassOnOver("x-superboxselect-item x-superboxselect-item-hover")},enableLnkListeners:function(){this.lnk.on({click:this.onLnkClick,focus:this.onLnkFocus,blur:this.onLnkBlur,scope:this})},enableAllListeners:function(){this.enableElListeners(),this.enableLnkListeners()},disableAllListeners:function(){this.el.removeAllListeners(),this.lnk.un("click",this.onLnkClick,this),this.lnk.un("focus",this.onLnkFocus,this),this.lnk.un("blur",this.onLnkBlur,this)},onRender:function(cfg,el){Ext.ux.form.SuperBoxSelectItem.superclass.onRender.call(this,cfg,el);el=this.el;el&&el.remove(),this.el=el=cfg.createChild({tag:"li"},cfg.last()),el.addClass("x-superboxselect-item");var btnEl=this.owner.navigateItemsWithTab?"a":"span";this.key;Ext.apply(el,{focus:function(){var c=this.down(btnEl+".x-superboxselect-item-close");c&&c.focus()},preDestroy:function(){this.preDestroy()}.createDelegate(this)}),this.enableElListeners(),el.update(this.caption);cfg={tag:btnEl,class:"x-superboxselect-item-close",tabIndex:this.owner.navigateItemsWithTab?"0":"-1"};"a"==btnEl&&(cfg.href="#"),this.lnk=el.createChild(cfg),this.disabled?this.disableAllListeners():this.enableLnkListeners(),this.on({disable:this.disableAllListeners,enable:this.enableAllListeners,scope:this}),this.setupKeyMap()},setupKeyMap:function(){this.keyMap=new Ext.KeyMap(this.lnk,[{key:[Ext.EventObject.BACKSPACE,Ext.EventObject.DELETE,Ext.EventObject.SPACE],fn:this.preDestroy,scope:this},{key:[Ext.EventObject.RIGHT,Ext.EventObject.DOWN],fn:function(){this.moveFocus("right")},scope:this},{key:[Ext.EventObject.LEFT,Ext.EventObject.UP],fn:function(){this.moveFocus("left")},scope:this},{key:[Ext.EventObject.HOME],fn:function(){var l=this.owner.items.get(0).el.focus();l&&l.el.focus()},scope:this},{key:[Ext.EventObject.END],fn:function(){this.owner.el.focus()},scope:this},{key:Ext.EventObject.ENTER,fn:function(){}}]),this.keyMap.stopEvent=!0},moveFocus:function(el){el=this.el["left"==el?"prev":"next"]()||this.owner.el;el.focus.defer(100,el)},preDestroy:function(supressEffect){if(!1!==this.fireEvent("remove",this)){function actionDestroy(){this.owner.navigateItemsWithTab&&this.moveFocus("right"),this.hidden.remove(),this.hidden=null,this.destroy()}return supressEffect?actionDestroy.call(this):this.el.hide({duration:.2,callback:actionDestroy,scope:this}),this}},kill:function(){this.hidden.remove(),this.hidden=null,this.purgeListeners(),this.destroy()},onDisable:function(){this.hidden&&this.hidden.dom.setAttribute("disabled","disabled"),this.keyMap.disable(),Ext.ux.form.SuperBoxSelectItem.superclass.onDisable.call(this)},onEnable:function(){this.hidden&&this.hidden.dom.removeAttribute("disabled"),this.keyMap.enable(),Ext.ux.form.SuperBoxSelectItem.superclass.onEnable.call(this)},onDestroy:function(){Ext.destroy(this.lnk,this.el),Ext.ux.form.SuperBoxSelectItem.superclass.onDestroy.call(this)}}),MODx.Component=function(config){config=config||{},MODx.Component.superclass.constructor.call(this,config),this.config=config,this._loadForm(),this.config.tabs&&this._loadTabs(),this._loadComponents(),this._loadActionButtons(),MODx.activePage=this},Ext.extend(MODx.Component,Ext.Component,{fields:{},form:null,action:!1,_loadForm:function(){if(!this.config.form)return!1;if(this.form=new Ext.form.BasicForm(Ext.get(this.config.form),{errorReader:MODx.util.JSONReader}),this.config.fields)for(var i in this.config.fields){var f;this.config.fields.hasOwnProperty(i)&&((f=this.config.fields[i]).xtype&&(f=Ext.ComponentMgr.create(f)),this.fields[i]=f,this.form.add(f))}return this.form.render()},_loadActionButtons:function(){return!!this.config.buttons&&(this.ab=MODx.load({xtype:"modx-actionbuttons",form:this.form||null,formpanel:this.config.formpanel||null,actions:this.config.actions||null,items:this.config.buttons||[]}),this.ab)},_loadTabs:function(){if(!this.config.tabs)return!1;var o=this.config.tabOptions||{};return Ext.applyIf(o,{xtype:"modx-tabs",renderTo:this.config.tabs_div||"tabs_div",items:this.config.tabs}),MODx.load(o)},_loadComponents:function(){if(!this.config.components)return!1;for(var l=this.config.components.length,cp=Ext.getCmp("modx-content"),i=0;i","<-",""," "].indexOf(el)||el.xtype&&"switch"==el.xtype)MODx.toolbar.ActionButtons.superclass.add.call(this,el);else{var id=el.id||Ext.id();if(Ext.applyIf(el,{xtype:"button",cls:el.icon?"x-btn-icon bmenu":"x-btn-text bmenu",scope:this,disabled:!!el.checkDirty,listeners:{},id:id}),el.button&&MODx.toolbar.ActionButtons.superclass.add.call(this,el),null===el.handler&&null===el.menu?el.handler=this.checkConfirm:el.confirm&&el.handler?el.handler=function(){Ext.Msg.confirm(_("warning"),el.confirm,function(e){"yes"===e&&Ext.callback(el.handler,this)},el.scope||this)}:el.handler||(el.handler=this.handleClick),el.javascript&&(el.listeners.click={fn:this.evalJS,scope:this}),"button"==el.xtype&&(el.listeners.render={fn:function(btn){el.checkDirty&&btn&&this.checkDirtyBtns.push(btn)},scope:this}),el.keys){el.keyMap=new Ext.KeyMap(Ext.get(document));for(var j=0;j'+_("file_err_filter")+"",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(''+_("data_err_load")+"
")},_addContextMenuItem:function(items){for(var a=items,l=a.length,i=0;i ').compile()}),MODx.Button.superclass.constructor.call(this,config)},Ext.extend(MODx.Button,Ext.Button,{onRender:function(ct,position){this.template||(Ext.Button.buttonTemplate||(Ext.Button.buttonTemplate=new Ext.Template(' '),Ext.Button.buttonTemplate.compile()),this.template=Ext.Button.buttonTemplate);var btn=this.getTemplateArgs();btn.iconCls=this.iconCls,btn=position?this.template.insertBefore(position,btn,!0):this.template.append(ct,btn,!0),this.btnEl=btn.child("i"),this.mon(this.btnEl,{scope:this,focus:this.onFocus,blur:this.onBlur}),this.initButtonEl(btn,this.btnEl),Ext.ButtonToggleMgr.register(this)}}),Ext.reg("modx-button",MODx.Button),MODx.SearchBar=function(config){config=config||{},Ext.applyIf(config,{renderTo:"modx-manager-search",listClass:"modx-manager-search-results",emptyText:_("search"),id:"modx-uberbar",maxHeight:this.getViewPortSize(),typeAhead:!0,listAlign:["tl-bl?",[-12,12]],triggerConfig:{tag:"button",id:"modx-uberbar-trigger",type:"submit","aria-label":"Go",cls:"x-form-trigger icon icon-large icon-search"},defaultAutoCreate:{tag:"input",type:"text",size:"24",autocomplete:"off",tabindex:"0",hasfocus:!0,"aria-label":_("search")},hasfocus:!0,minChars:1,displayField:"name",valueField:"_action",width:380,itemSelector:".x-combo-list-item",tpl:new Ext.XTemplate('','","",{getClass:function(values){if(values.icon)return values.icon;if(values.class)switch(values.class){case"MODX\\Revolution\\modDocument":return"file";case"MODX\\Revolution\\modSymLink":return"files-o";case"MODX\\Revolution\\modWebLink":return"link";case"MODX\\Revolution\\modStaticResource":return"file-text-o"}switch(values.type){case"resources":return"file";case"chunks":return"th-large";case"templates":return"columns";case"snippets":return"code";case"tvs":return"list-alt";case"plugins":return"cogs";case"users":return"user";case"actions":return"mail-forward"}},getLabel:function(values){return values.label||_("search_resulttype_"+values.type)}}),store:new Ext.data.JsonStore({url:MODx.config.connector_url,baseParams:{action:"Search/Search"},root:"results",totalProperty:"total",fields:["name","_action","description","type","icon","label","class"],listeners:{beforeload:function(store,options){if(options.params._action)return!1}}}),listeners:{beforequery:{fn:function(){this.tpl.type=null}},focus:this.focusBar,blur:this.blurBar,afterrender:function(){document.getElementById("modx-manager-search").onclick=function(e){e.stopPropagation()}},scope:this}}),MODx.SearchBar.superclass.constructor.call(this,config),this.blur(),this.setKeyMap()},Ext.extend(MODx.SearchBar,Ext.form.ComboBox,{setKeyMap:function(){new Ext.KeyMap(document,{key:27,handler:function(){this.hideBar()},scope:this,stopEvent:!1})},initList:function(){var cls,lw;this.list||(cls="x-combo-list",lw=Ext.getDom(this.getListParent()||Ext.getBody()),this.list=new Ext.Layer({parentEl:lw,shadow:this.shadow,cls:[cls,this.listClass].join(" "),constrain:!1,zindex:this.getZIndex(lw)}),this.list.on("click",function(e){e.stopPropagation()}),lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth),this.list.setSize(lw,0),this.list.swallowEvent("mousewheel"),this.assetHeight=0,!1!==this.syncFont&&this.list.setStyle("font-size",this.el.getStyle("font-size")),this.title&&(this.header=this.list.createChild({cls:cls+"-hd",html:this.title}),this.assetHeight+=this.header.getHeight()),this.innerList=this.list.createChild({cls:cls+"-inner"}),this.mon(this.innerList,"mouseover",this.onViewOver,this),this.mon(this.innerList,"mousemove",this.onViewMove,this),this.innerList.setWidth(lw-this.list.getFrameWidth("lr")),this.pageSize&&(this.footer=this.list.createChild({cls:cls+"-ft"}),this.pageTb=new Ext.PagingToolbar({store:this.store,pageSize:this.pageSize,renderTo:this.footer}),this.assetHeight+=this.footer.getHeight()),this.tpl||(this.tpl='{'+this.displayField+"}
"),this.view=new Ext.DataView({applyTo:this.innerList,tpl:this.tpl,singleSelect:!0,selectedClass:this.selectedClass,itemSelector:this.itemSelector||"."+cls+"-item",emptyText:this.listEmptyText,deferEmptyText:!1}),this.view.on("click",function(view,index,node,vent){view.select(node),window.event||(window.event=vent),this.onViewClick()},this),this.bindStore(this.store,!0),this.resizable&&(this.resizer=new Ext.Resizable(this.list,{pinned:!0,handles:"se"}),this.mon(this.resizer,"resize",function(r,w,h){this.maxHeight=h-this.handleHeight-this.list.getFrameWidth("tb")-this.assetHeight,this.listWidth=w,this.innerList.setWidth(w-this.list.getFrameWidth("lr")),this.restrictHeight()},this),this[this.pageSize?"footer":"innerList"].setStyle("margin-bottom",this.handleHeight+"px")))},onTypeAhead:function(){},onSelect:function(target,index){var e=Ext.EventObject;e.stopPropagation(),e.preventDefault();target="?a="+target.data._action;if(e.ctrlKey||e.metaKey||e.shiftKey)return window.open(target);MODx.loadPage(target)},hideBar:function(){},focusBar:function(){this.selectText()},blurBar:function(){},getViewPortSize:function(){var height=300;return void 0!==window.innerHeight&&(height=window.innerHeight),height-70}}),Ext.reg("modx-searchbar",MODx.SearchBar),Ext.namespace("MODx.panel"),MODx.Panel=function(config){config=config||{},Ext.applyIf(config,{cls:"modx-panel",title:""}),MODx.Panel.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.Panel,Ext.Panel),Ext.reg("modx-panel",MODx.Panel),MODx.FormPanel=function(config){config=config||{},Ext.applyIf(config,{autoHeight:!0,collapsible:!0,bodyStyle:"",layout:"anchor",border:!1,header:!1,method:"POST",cls:"modx-form",allowDrop:!0,errorReader:MODx.util.JSONReader,checkDirty:!0,useLoadingMask:!1,defaults:{collapsible:!1,autoHeight:!0,border:!1}}),config.items&&this.addChangeEvent(config.items),MODx.FormPanel.superclass.constructor.call(this,config),this.config=config,this.addEvents({setup:!0,fieldChange:!0,ready:!0,beforeSubmit:!0,success:!0,failure:!0,save:!0,actionNew:!0,actionContinue:!0,actionClose:!0,postReady:!0}),this.getForm().addEvents({success:!0,failure:!0}),this.dropTargets=[],this.on("ready",this.onReady),this.config.useLoadingMask&&this.on("render",function(){this.mask=new Ext.LoadMask(this.getEl()),this.mask.show()}),this.fireEvent("setup",config)&&this.clearDirty(),this.focusFirstField()},Ext.extend(MODx.FormPanel,Ext.FormPanel,{isReady:!1,defaultValues:[],initialized:!1,submit:function(o){var fm=this.getForm();return!(!fm.isValid()&&!o.bypassValidCheck)&&((o=o||{}).headers={"Powered-By":"MODx",modAuth:MODx.siteId},this.fireEvent("beforeSubmit",{form:fm,options:o,config:this.config})&&fm.submit({waitMsg:this.config.saveMsg||_("saving"),scope:this,headers:o.headers,clientValidation:!o.bypassValidCheck,failure:function(f,a){this.fireEvent("failure",{form:f,result:a.result,options:o,config:this.config})&&MODx.form.Handler.errorExt(a.result,f)},success:function(f,initFocus){this.config.success&&Ext.callback(this.config.success,this.config.scope||this,[f,initFocus]),this.fireEvent("success",{form:f,result:initFocus.result,options:o,config:this.config}),this.clearDirty(),this.fireEvent("setup",this.config);initFocus=Ext.state.Manager.get("curFocus");initFocus&&""!=initFocus&&(Ext.state.Manager.clear("curFocus"),(initFocus=document.getElementById(initFocus))&&initFocus.focus())}}),!0)},focusFirstField:function(){var fld;0",border:!1},MODx.TemplatePanel=function(config){config=config||{},Ext.applyIf(config,{frame:!1,startingMarkup:'',startingText:"Loading...",markup:null,plain:!0,border:!1}),MODx.TemplatePanel.superclass.constructor.call(this,config),this.on("render",this.init,this)},Ext.extend(MODx.TemplatePanel,Ext.Panel,{init:function(){this.defaultMarkup=new Ext.XTemplate(this.startingMarkup,{compiled:!0}),this.reset(),this.tpl=new Ext.XTemplate(this.markup,{compiled:!0})},reset:function(){this.body.hide(),this.defaultMarkup.overwrite(this.body,{text:this.startingText}),this.body.slideIn("r",{stopFx:!0,duration:.2}),setTimeout(function(){Ext.getCmp("modx-content").doLayout()},500)},updateDetail:function(data){this.body.hide(),this.tpl.overwrite(this.body,data),this.body.slideIn("r",{stopFx:!0,duration:.2}),setTimeout(function(){Ext.getCmp("modx-content").doLayout()},500)}}),Ext.reg("modx-template-panel",MODx.TemplatePanel),MODx.BreadcrumbsPanel=function(config){config=config||{},Ext.applyIf(config,{frame:!1,plain:!0,border:!1,desc:"This the description part of this panel",bdMarkup:'",root:{text:"Home",className:"first",root:!0,pnl:""},bodyCssClass:"breadcrumbs"}),MODx.BreadcrumbsPanel.superclass.constructor.call(this,config),this.on("render",this.init,this)},Ext.extend(MODx.BreadcrumbsPanel,Ext.Panel,{data:{trail:[]},init:function(){this.tpl=new Ext.XTemplate(this.bdMarkup,{compiled:!0}),this.reset(this.desc),this.body.on("click",this.onClick,this)},getResetText:function(srcInstance){if("object"!=typeof srcInstance||null==srcInstance)return srcInstance;var i,newInstance=srcInstance.constructor();for(i in srcInstance)newInstance[i]=this.getResetText(srcInstance[i]);return newInstance.hasOwnProperty("pnl")&&delete newInstance.pnl,newInstance},updateDetail:function(data){(this.data=data).hasOwnProperty("trail")&&data.trail.unshift(this.root),this._updatePanel(data)},getData:function(){return this.data},reset:function(msg){void 0===this.resetText&&(this.resetText=this.getResetText(this.root)),this.data={text:msg,trail:[this.resetText]},this._updatePanel(this.data)},onClick:function(panel){for(var last=panel.getTarget(),index=1,parent=last.parentElement;null!=(parent=parent.previousSibling);)index+=1;for(var remove=this.data.trail.length-index;0{name:htmlEncode}',"
{description:htmlEncode}
")}),MODx.combo.UserGroup.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.UserGroup,MODx.combo.ComboBox),Ext.reg("modx-combo-usergroup",MODx.combo.UserGroup),MODx.combo.UserGroupRole=function(config){config=config||{},Ext.applyIf(config,{name:"role",hiddenName:"role",displayField:"name",valueField:"id",fields:["name","id"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/Role/GetList"}}),MODx.combo.UserGroupRole.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.UserGroupRole,MODx.combo.ComboBox),Ext.reg("modx-combo-usergrouprole",MODx.combo.UserGroupRole),MODx.combo.EventGroup=function(config){config=config||{},Ext.applyIf(config,{name:"group",hiddenName:"group",displayField:"name",valueField:"name",fields:["name"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"System/Event/GroupList"},tpl:new Ext.XTemplate('{name:htmlEncode}',"
")}),MODx.combo.EventGroup.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.EventGroup,MODx.combo.ComboBox),Ext.reg("modx-combo-eventgroup",MODx.combo.EventGroup),MODx.combo.ResourceGroup=function(config){config=config||{},Ext.applyIf(config,{name:"resourcegroup",hiddenName:"resourcegroup",displayField:"name",valueField:"id",fields:["name","id"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/ResourceGroup/GetList"}}),MODx.combo.ResourceGroup.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ResourceGroup,MODx.combo.ComboBox),Ext.reg("modx-combo-resourcegroup",MODx.combo.ResourceGroup),MODx.combo.Context=function(config){config=config||{},Ext.applyIf(config,{name:"context",hiddenName:"context",displayField:"key",valueField:"key",fields:["key","name"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Context/GetList",exclude:config.exclude||""},tpl:new Ext.XTemplate('{name:htmlEncode} ({key:htmlEncode})
')}),MODx.combo.Context.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Context,MODx.combo.ComboBox),Ext.reg("modx-combo-context",MODx.combo.Context),MODx.combo.Policy=function(config){config=config||{},Ext.applyIf(config,{name:"policy",hiddenName:"policy",displayField:"name",valueField:"id",fields:["id","name","permissions"],allowBlank:!1,editable:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/Access/Policy/GetList"}}),MODx.combo.Policy.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Policy,MODx.combo.ComboBox),Ext.reg("modx-combo-policy",MODx.combo.Policy),MODx.combo.Template=function(config){config=config||{},Ext.applyIf(config,{name:"template",hiddenName:"template",displayField:"templatename",valueField:"id",pageSize:20,fields:["id","templatename","description","category_name"],tpl:new Ext.XTemplate('{templatename:htmlEncode}',' - {category_name:htmlEncode}',"
{description:htmlEncode()}
"),url:MODx.config.connector_url,baseParams:{action:"Element/Template/GetList",combo:1},allowBlank:!0}),MODx.combo.Template.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Template,MODx.combo.ComboBox),Ext.reg("modx-combo-template",MODx.combo.Template),MODx.combo.Category=function(config){config=config||{},Ext.applyIf(config,{name:"category",hiddenName:"category",displayField:"name",valueField:"id",mode:"remote",fields:["id","category","parent","name"],forceSelection:!0,typeAhead:!1,allowBlank:!0,editable:!1,enableKeyEvents:!0,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Element/Category/GetList",showNone:!0,limit:0}}),MODx.combo.Category.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Category,MODx.combo.ComboBox,{_onblur:function(t,e){var v=this.getRawValue();this.setRawValue(v),this.setValue(v,!0)}}),Ext.reg("modx-combo-category",MODx.combo.Category),MODx.combo.Language=function(config){config=config||{},Ext.applyIf(config,{name:"language",hiddenName:"language",displayField:"name",valueField:"name",fields:["name"],typeAhead:!0,minChars:1,editable:!0,allowBlank:!0,url:MODx.config.connector_url,baseParams:{action:"System/Language/GetList"}}),MODx.combo.Language.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Language,MODx.combo.ComboBox),Ext.reg("modx-combo-language",MODx.combo.Language),MODx.combo.Charset=function(config){config=config||{},Ext.applyIf(config,{name:"charset",hiddenName:"charset",displayField:"text",valueField:"value",fields:["value","text"],forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,url:MODx.config.connector_url,baseParams:{action:"System/Charset/GetList"}}),MODx.combo.Charset.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Charset,MODx.combo.ComboBox),Ext.reg("modx-combo-charset",MODx.combo.Charset),MODx.combo.RTE=function(config){config=config||{},Ext.applyIf(config,{name:"rte",hiddenName:"rte",displayField:"value",valueField:"value",fields:["value"],forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,url:MODx.config.connector_url,baseParams:{action:"System/Rte/GetList"}}),MODx.combo.RTE.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.RTE,MODx.combo.ComboBox),Ext.reg("modx-combo-rte",MODx.combo.RTE),MODx.combo.Role=function(config){config=config||{},Ext.applyIf(config,{name:"role",hiddenName:"role",forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/Role/GetList",addNone:!0}}),MODx.combo.Role.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Role,MODx.combo.ComboBox),Ext.reg("modx-combo-role",MODx.combo.Role),MODx.combo.ContentType=function(config){config=config||{},Ext.applyIf(config,{name:"content_type",hiddenName:"content_type",forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"System/ContentType/GetList"}}),MODx.combo.ContentType.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ContentType,MODx.combo.ComboBox),Ext.reg("modx-combo-content-type",MODx.combo.ContentType),MODx.combo.ContentDisposition=function(config){config=config||{},Ext.applyIf(config,{store:new Ext.data.SimpleStore({fields:["d","v"],data:[[_("inline"),0],[_("attachment"),1]]}),name:"content_dispo",hiddenName:"content_dispo",displayField:"d",valueField:"v",mode:"local",triggerAction:"all",editable:!1,pageSize:20,selectOnFocus:!1,preventRender:!0}),MODx.combo.ContentDisposition.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ContentDisposition,MODx.combo.ComboBox),Ext.reg("modx-combo-content-disposition",MODx.combo.ContentDisposition),MODx.combo.ClassMap=function(config){config=config||{},Ext.applyIf(config,{name:"class",hiddenName:"class",url:MODx.config.connector_url,baseParams:{action:"System/ClassMap/GetList"},displayField:"class",valueField:"class",fields:["class"],editable:!1,pageSize:20}),MODx.combo.ClassMap.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ClassMap,MODx.combo.ComboBox),Ext.reg("modx-combo-class-map",MODx.combo.ClassMap),MODx.combo.ClassDerivatives=function(config){config=config||{},Ext.applyIf(config,{name:"class",hiddenName:"class",url:MODx.config.connector_url,baseParams:{action:"System/Derivatives/GetList",class:"MODX\\Revolution\\modResource"},displayField:"name",valueField:"id",fields:["id","name"],forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,pageSize:20}),MODx.combo.ClassDerivatives.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ClassDerivatives,MODx.combo.ComboBox),Ext.reg("modx-combo-class-derivatives",MODx.combo.ClassDerivatives),MODx.combo.Namespace=function(config){config=config||{},Ext.applyIf(config,{name:"namespace",hiddenName:"namespace",typeAhead:!0,minChars:1,queryParam:"search",editable:!0,allowBlank:!0,preselectValue:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Workspace/PackageNamespace/GetList"},fields:["name"],displayField:"name",valueField:"name"}),MODx.combo.Namespace.superclass.constructor.call(this,config),!1!==config.preselectValue&&(this.store.on("load",this.preselectFirstValue,this,{single:!0}),this.store.load())},Ext.extend(MODx.combo.Namespace,MODx.combo.ComboBox,{preselectFirstValue:function(item){var found;(item=""!=this.config.preselectValue&&-1!=(found=item.find("name",this.config.preselectValue))?item.getAt(found):item.getAt(0))&&(this.setValue(item.data.name),this.fireEvent("select",this,item))}}),Ext.reg("modx-combo-namespace",MODx.combo.Namespace),MODx.combo.Browser=function(config){config=config||{},Ext.applyIf(config,{width:400,triggerAction:"all",triggerClass:"x-form-file-trigger",source:config.source||MODx.config.default_media_source}),MODx.combo.Browser.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.combo.Browser,Ext.form.TriggerField,{browser:null,onTriggerClick:function(btn){return!this.disabled&&(this.browser=MODx.load({xtype:"modx-browser",closeAction:"close",id:Ext.id(),multiple:!0,source:this.config.source||MODx.config.default_media_source,hideFiles:this.config.hideFiles||!1,rootVisible:this.config.rootVisible||!1,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web",openTo:this.config.openTo||"",rootId:this.config.rootId||"/",hideSourceCombo:this.config.hideSourceCombo||!1,listeners:{select:{fn:function(data){this.setValue(data.relativeUrl),this.fireEvent("select",data)},scope:this}}}),this.browser.show(btn),!0)},onDestroy:function(){MODx.combo.Browser.superclass.onDestroy.call(this)}}),Ext.reg("modx-combo-browser",MODx.combo.Browser),MODx.combo.Country=function(config){config=config||{},Ext.applyIf(config,{name:"country",hiddenName:"country",url:MODx.config.connector_url,baseParams:{action:"System/Country/GetList",combo:1},displayField:"country",valueField:"iso",fields:["iso","country","value"],editable:!0,typeAhead:!0}),MODx.combo.Country.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Country,MODx.combo.ComboBox),Ext.reg("modx-combo-country",MODx.combo.Country),MODx.combo.Gender=function(config){config=config||{},Ext.applyIf(config,{store:new Ext.data.SimpleStore({fields:["d","v"],data:[["",0],[_("user_male"),1],[_("user_female"),2],[_("user_other"),3]]}),displayField:"d",valueField:"v",mode:"local",triggerAction:"all",editable:!1,selectOnFocus:!1}),MODx.combo.Gender.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Gender,Ext.form.ComboBox),Ext.reg("modx-combo-gender",MODx.combo.Gender),MODx.combo.PropertySet=function(config){config=config||{},Ext.applyIf(config,{name:"propertyset",hiddenName:"propertyset",url:MODx.config.connector_url,baseParams:{action:"Element/PropertySet/GetList"},displayField:"name",valueField:"id",fields:["id","name"],editable:!1,pageSize:20,width:300}),MODx.combo.PropertySet.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.PropertySet,MODx.combo.ComboBox),Ext.reg("modx-combo-property-set",MODx.combo.PropertySet),MODx.ChangeParentField=function(config){config=config||{},Ext.applyIf(config,{triggerAction:"all",editable:!1,readOnly:!1,formpanel:"modx-panel-resource",parentcmp:"modx-resource-parent-hidden",contextcmp:"modx-resource-context-key",currentid:MODx.request.id}),MODx.ChangeParentField.superclass.constructor.call(this,config),this.config=config,this.on("click",this.onTriggerClick,this),this.addEvents({end:!0}),this.on("end",this.end,this)},Ext.extend(MODx.ChangeParentField,Ext.form.TriggerField,{oldValue:!1,oldDisplayValue:!1,end:function(p){var t=Ext.getCmp("modx-resource-tree");t&&(p.d=p.d||p.v,t.removeListener("click",this.handleChangeParent,this),t.on("click",t._handleClick,t),t.disableHref=!1,MODx.debug("Setting parent to: "+p.v),Ext.getCmp(this.config.parentcmp).setValue(p.v),this.setValue(p.d),this.oldValue=!1,Ext.getCmp(this.config.formpanel).fireEvent("fieldChange"))},onTriggerClick:function(){if(this.disabled)return!1;if(this.oldValue)return this.fireEvent("end",{v:this.oldValue,d:this.oldDisplayValue}),!1;if(MODx.debug("onTriggerClick"),!Ext.getCmp("modx-resource-tree")){MODx.debug("no tree found, trying to activate");var tp=Ext.getCmp("modx-leftbar-tabpanel");return tp?(tp.on("tabchange",function(tbp,tab){"modx-resource-tree-ct"==tab.id&&this.disableTreeClick()},this),tp.activate("modx-resource-tree-ct")):MODx.debug("no tabpanel"),!1}this.disableTreeClick()},disableTreeClick:function(){return MODx.debug("Disabling tree click"),t=Ext.getCmp("modx-resource-tree"),t?(this.oldDisplayValue=this.getValue(),this.oldValue=Ext.getCmp(this.config.parentcmp).getValue(),this.setValue(_("resource_parent_select_node")),t.expand(),t.removeListener("click",t._handleClick),t.on("click",this.handleChangeParent,this),t.disableHref=!0):(MODx.debug("No tree found in disableTreeClick!"),!1)},handleChangeParent:function(node,e){var ctxv=Ext.getCmp("modx-resource-tree");if(!ctxv)return!1;ctxv.disableHref=!0;var id=node.id.split("_");if((id=id[1])==this.config.currentid)return MODx.msg.alert("",_("resource_err_own_parent")),!1;var ctxf=Ext.getCmp(this.config.contextcmp);return ctxf&&(ctxv=ctxf.getValue(),node.attributes&&node.attributes.ctx!=ctxv&&ctxf.setValue(node.attributes.ctx)),this.fireEvent("end",{v:"modContext"!=node.attributes.type?id:node.attributes.pk,d:Ext.util.Format.stripTags(node.text)}),e.preventDefault(),e.stopEvent(),!0}}),Ext.reg("modx-field-parent-change",MODx.ChangeParentField),MODx.combo.TVWidget=function(config){config=config||{},Ext.applyIf(config,{name:"widget",hiddenName:"widget",displayField:"name",valueField:"value",fields:["value","name"],editable:!1,url:MODx.config.connector_url,baseParams:{action:"Element/TemplateVar/Renders/GetOutputs"},value:"default"}),MODx.combo.TVWidget.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.TVWidget,MODx.combo.ComboBox),Ext.reg("modx-combo-tv-widget",MODx.combo.TVWidget),MODx.combo.TVInputType=function(config){config=config||{},Ext.applyIf(config,{name:"type",hiddenName:"type",displayField:"name",valueField:"value",editable:!1,fields:["value","name"],url:MODx.config.connector_url,baseParams:{action:"Element/TemplateVar/Renders/GetInputs"},value:"text"}),MODx.combo.TVInputType.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.TVInputType,MODx.combo.ComboBox),Ext.reg("modx-combo-tv-input-type",MODx.combo.TVInputType),MODx.combo.Dashboard=function(config){config=config||{},Ext.applyIf(config,{name:"dashboard",hiddenName:"dashboard",displayField:"name",valueField:"id",fields:["id","name","description"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"System/Dashboard/GetList"},tpl:new Ext.XTemplate('','','
{name:htmlEncode}
','
{description:htmlEncode}
',"
")}),MODx.combo.Dashboard.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Dashboard,MODx.combo.ComboBox),Ext.reg("modx-combo-dashboard",MODx.combo.Dashboard),MODx.combo.MediaSource=function(config){config=config||{},Ext.applyIf(config,{name:"source",hiddenName:"source",displayField:"name",valueField:"id",fields:["id","name","description"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Source/GetList"},tpl:new Ext.XTemplate('','','
{name:htmlEncode}
','
{description:htmlEncode}
',"
")}),MODx.combo.MediaSource.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.MediaSource,MODx.combo.ComboBox),Ext.reg("modx-combo-source",MODx.combo.MediaSource),MODx.combo.MediaSourceType=function(config){config=config||{},Ext.applyIf(config,{name:"class_key",hiddenName:"class_key",displayField:"name",valueField:"class",fields:["id","class","name","description"],pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Source/Type/GetList"},tpl:new Ext.XTemplate('','','
{name:htmlEncode}
','
{description:htmlEncode}
',"
")}),MODx.combo.MediaSourceType.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.MediaSourceType,MODx.combo.ComboBox),Ext.reg("modx-combo-source-type",MODx.combo.MediaSourceType),MODx.combo.Authority=function(config){config=config||{},Ext.applyIf(config,{name:"authority",hiddenName:"authority",forceSelection:!0,typeAhead:!1,editable:!1,allowBlank:!1,pageSize:20,url:MODx.config.connector_url,baseParams:{action:"Security/Role/GetAuthorityList",addNone:!0}}),MODx.combo.Authority.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Authority,MODx.combo.ComboBox),Ext.reg("modx-combo-authority",MODx.combo.Authority),MODx.combo.ManagerTheme=function(config){config=config||{},Ext.applyIf(config,{name:"theme",hiddenName:"theme",displayField:"theme",valueField:"theme",fields:["theme"],url:MODx.config.connector_url,baseParams:{action:"Workspace/Theme/GetList"},typeAhead:!1,editable:!1}),MODx.combo.ManagerTheme.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.ManagerTheme,MODx.combo.ComboBox),Ext.reg("modx-combo-manager-theme",MODx.combo.ManagerTheme),MODx.combo.SettingKey=function(config){config=config||{},Ext.applyIf(config,{name:"key",hiddenName:"key",displayField:"key",valueField:"key",fields:["key"],url:MODx.config.connector_url,baseParams:{action:"System/Settings/GetList"},typeAhead:!1,triggerAction:"all",editable:!0,forceSelection:!1,queryParam:"key",pageSize:20}),MODx.combo.SettingKey.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.SettingKey,MODx.combo.ComboBox),Ext.reg("modx-combo-setting-key",MODx.combo.SettingKey),MODx.combo.Visibility=function(config){config=config||{},Ext.applyIf(config,{name:"visibility",hiddenName:"visibility",store:new Ext.data.SimpleStore({fields:["d","v"],data:[[_("file_folder_visibility_public"),"public"],[_("file_folder_visibility_private"),"private"]]}),displayField:"d",valueField:"v",mode:"local",triggerAction:"all",editable:!1,selectOnFocus:!1,preventRender:!0,forceSelection:!0,enableKeyEvents:!0}),MODx.combo.Visibility.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Visibility,MODx.combo.ComboBox),Ext.reg("modx-combo-visibility",MODx.combo.Visibility),MODx.combo.Permission=function(config){config=config||{},Ext.applyIf(config,{name:"permission",hiddenName:"permission",displayField:"name",valueField:"name",fields:["name","description"],editable:!0,typeAhead:!1,forceSelection:!1,enableKeyEvents:!0,autoSelect:!1,pageSize:20,tpl:new Ext.XTemplate('{name:htmlEncode}','
{description:htmlEncode}
'),url:MODx.config.connector_url,baseParams:{action:"Security/Access/Permission/GetList"}}),MODx.combo.Permission.superclass.constructor.call(this,config)},Ext.extend(MODx.combo.Permission,MODx.combo.ComboBox),Ext.reg("modx-combo-permission",MODx.combo.Permission),Ext.namespace("MODx.grid"),MODx.grid.Grid=function(config){if(config=config||{},this.config=config,this._loadStore(),this._loadColumnModel(),Ext.applyIf(config,{store:this.store,cm:this.cm,sm:new Ext.grid.RowSelectionModel({singleSelect:!0}),paging:!!config.bbar,loadMask:!0,autoHeight:!0,collapsible:!0,stripeRows:!0,header:!1,cls:"modx-grid",preventRender:!0,preventSaveRefresh:!0,showPerPage:!0,stateful:!1,showActionsColumn:!0,disableContextMenuAction:!1,menuConfig:{defaultAlign:"tl-b?",enableScrolling:!1},viewConfig:{forceFit:!0,enableRowBody:!0,autoFill:!0,showPreview:!0,scrollOffset:0,emptyText:config.emptyText||_("ext_emptymsg")},groupingConfig:{enableGroupingMenu:!0}}),config.paging){var pgItms=config.showPerPage?[_("per_page")+":",{xtype:"textfield",cls:"x-tbar-page-size",value:config.pageSize||parseInt(MODx.config.default_per_page)||20,listeners:{change:{fn:this.onChangePerPage,scope:this},render:{fn:function(cmp){new Ext.KeyMap(cmp.getEl(),{key:Ext.EventObject.ENTER,fn:this.blur,scope:cmp})},scope:this}}}]:[];if(config.pagingItems)for(var i=0;i 1 ? "'+(config.pluralText||_("records"))+'" : "'+(config.singleText||_("record"))+'"]})'},Ext.applyIf(config.groupingConfig,isPercentage),Ext.applyIf(config,{view:new Ext.grid.GroupingView(config.groupingConfig)})),config.tbar)for(var ix=0;ix":"")+data.msg},this),Ext.isEmpty(msg)&&(msg=this.autosaveErrorMsg||_("error")),MODx.msg.alert(_("error"),msg))},onChangePerPage:function(tf,nv){if(Ext.isEmpty(nv))return!1;nv=parseInt(nv),this.getBottomToolbar().pageSize=nv,this.store.load({params:{start:0,limit:nv}})},loadWindow:function(btn,e,win,or){var r=this.menu.record;this.windows[win.xtype]&&!win.force||(Ext.applyIf(win,{record:win.blankValues?{}:r,grid:this,listeners:{success:{fn:win.success||this.refresh,scope:win.scope||this}}}),or&&Ext.apply(win,or),this.windows[win.xtype]=Ext.ComponentMgr.create(win)),this.windows[win.xtype].setValues&&!0!==win.blankValues&&null!=r&&this.windows[win.xtype].setValues(r),this.windows[win.xtype].show(e.target)},confirm:function(type,text){var p={action:type},k=this.config.primaryKey||"id";p[k]=this.menu.record[k],MODx.msg.confirm({title:_(type),text:_(text)||_("confirm_remove"),url:this.config.url,params:p,listeners:{success:{fn:this.refresh,scope:this}}})},remove:function(text,action){if(this.destroying)return MODx.grid.Grid.superclass.remove.apply(this,arguments);var r=this.menu.record;text=text||"confirm_remove";var p=this.config.saveParams||{};Ext.apply(p,{action:action||"remove"});var k=this.config.primaryKey||"id";p[k]=r[k],this.fireEvent("beforeRemoveRow",r)&&MODx.msg.confirm({title:_("warning"),text:_(text,r),url:this.config.url,params:p,listeners:{success:{fn:function(){this.removeActiveRow(r)},scope:this}}})},removeActiveRow:function(rx){this.fireEvent("afterRemoveRow",rx)&&(rx=this.getSelectionModel().getSelected(),this.getStore().remove(rx))},_loadMenu:function(){this.menu=new Ext.menu.Menu(this.config.menuConfig)},_showMenu:function(g,ri,e){var m;e.stopEvent(),e.preventDefault(),this.menu.record=this.getStore().getAt(ri).data,this.getSelectionModel().isSelected(ri)||this.getSelectionModel().selectRow(ri),this.menu.removeAll(),!this.getMenu||(m=this.getMenu(g,ri,e))&&m.length&&0',{compiled:!0})},actionsColumnRenderer:function(value,metaData,record,rowIndex,colIndex,actions){actions=this.getActions.apply(this,[record,rowIndex,colIndex,actions]);return!0!==this.config.disableContextMenuAction&&actions.push({text:_("context_menu"),action:"contextMenu",icon:"gear"}),this._getActionsColumnTpl().apply({actions:actions})},renderLink:function(v,attr){var i,el=new Ext.Element(document.createElement("a"));for(i in el.addClass("x-grid-link"),el.dom.title=_("edit"),attr)el.dom[i]=attr[i];return el.dom.innerHTML=Ext.util.Format.htmlEncode(v),el.dom.outerHTML},getActions:function(record,rowIndex,colIndex,store){return[]},onClickHandler:function(e){var actionHandler,record,recordIndex=e.getTarget();recordIndex.classList.contains("x-grid-action")&&(!recordIndex.dataset.action||(this[actionHandler="action"+recordIndex.dataset.action.charAt(0).toUpperCase()+recordIndex.dataset.action.slice(1)]&&"function"==typeof this[actionHandler]||this[actionHandler=recordIndex.dataset.action]&&"function"==typeof this[actionHandler])&&(record=this.getSelectionModel().getSelected(),recordIndex=this.store.indexOf(record),this.menu.record=record.data,this[actionHandler](record,recordIndex,e)))},actionContextMenu:function(record,recordIndex,e){this._showMenu(this,recordIndex,e)},makeUrl:function(){if(Array.isArray(this.config.urlFilters)&&0 1 ? "'+(config.pluralText||_("records"))+'" : "'+(config.singleText||_("record"))+'"]})'})}),config.tbar)for(var i=0;i',{compiled:!0})},actionsColumnRenderer:function(value,metaData,record,rowIndex,colIndex,store){var actions=this.getActions.apply(this,arguments);return!0!==this.config.disableContextMenuAction&&actions.push({text:_("context_menu"),action:"contextMenu",icon:"gear"}),this._getActionsColumnTpl().apply({actions:actions})},renderLink:function(v,attr){var i,el=new Ext.Element(document.createElement("a"));for(i in el.addClass("x-grid-link"),el.dom.title=_("edit"),attr)el.dom[i]=attr[i];return el.dom.innerHTML=Ext.util.Format.htmlEncode(v),el.dom.outerHTML},getActions:function(value,metaData,record,rowIndex,colIndex,store){return[]},onClick:function(e){var actionHandler,record,recordIndex=e.getTarget();recordIndex.classList.contains("x-grid-action")&&(!recordIndex.dataset.action||(this[actionHandler="action"+recordIndex.dataset.action.charAt(0).toUpperCase()+recordIndex.dataset.action.slice(1)]&&"function"==typeof this[actionHandler]||this[actionHandler=recordIndex.dataset.action]&&"function"==typeof this[actionHandler])&&(record=this.getSelectionModel().getSelected(),recordIndex=this.store.indexOf(record),this.menu.record=record.data,this[actionHandler](record,recordIndex,e)))},actionContextMenu:function(record,recordIndex,e){this._showMenu(this,recordIndex,e)}}),Ext.reg("grid-local",MODx.grid.LocalGrid),Ext.reg("modx-grid-local",MODx.grid.LocalGrid),Ext.ns("Ext.ux.grid"),Ext.ux.grid.RowExpander=Ext.extend(Ext.util.Observable,{expandOnEnter:!0,expandOnDblClick:!0,header:"",width:20,sortable:!1,fixed:!0,hideable:!1,menuDisabled:!0,dataIndex:"",id:"expander",lazyRender:!0,enableCaching:!0,constructor:function(config){Ext.apply(this,config),this.addEvents({beforeexpand:!0,expand:!0,beforecollapse:!0,collapse:!0}),Ext.ux.grid.RowExpander.superclass.constructor.call(this),this.tpl&&("string"==typeof this.tpl&&(this.tpl=new Ext.Template(this.tpl)),this.tpl.compile()),this.state={},this.bodyContent={}},getRowClass:function(record,rowIndex,p,ds){p.cols=p.cols-1;var content=this.bodyContent[record.id];return content||this.lazyRender||(content=this.getBodyContent(record,rowIndex)),content&&(p.body=content),this.state[record.id]?"x-grid3-row-expanded":"x-grid3-row-collapsed"},init:function(grid){var view=(this.grid=grid).getView();view.getRowClass=this.getRowClass.createDelegate(this),view.enableRowBody=!0,grid.on("render",this.onRender,this),grid.on("destroy",this.onDestroy,this)},onRender:function(){var grid=this.grid;grid.getView().mainBody.on("mousedown",this.onMouseDown,this,{delegate:".x-grid3-row-expander"}),this.expandOnEnter&&(this.keyNav=new Ext.KeyNav(this.grid.getGridEl(),{enter:this.onEnter,scope:this})),this.expandOnDblClick&&grid.on("rowdblclick",this.onRowDblClick,this)},onDestroy:function(){this.keyNav&&(this.keyNav.disable(),delete this.keyNav);var mainBody=this.grid.getView().mainBody;mainBody&&mainBody.un("mousedown",this.onMouseDown,this)},onRowDblClick:function(grid,rowIdx,e){this.toggleRow(rowIdx)},onEnter:function(e){for(var g=this.grid,sels=g.getSelectionModel().getSelections(),i=0,len=sels.length;i '},beforeExpand:function(record,body,rowIndex){return!1!==this.fireEvent("beforeexpand",this,record,body,rowIndex)&&(this.tpl&&this.lazyRender&&(body.innerHTML=this.getBodyContent(record,rowIndex)),!0)},toggleRow:function(row){"number"==typeof row&&(row=this.grid.view.getRow(row)),this[Ext.fly(row).hasClass("x-grid3-row-collapsed")?"expandRow":"collapseRow"](row)},expandRow:function(row){"number"==typeof row&&(row=this.grid.view.getRow(row));var record=this.grid.store.getAt(row.rowIndex),body=Ext.DomQuery.selectNode("tr:nth(2) div.x-grid3-row-body",row);this.beforeExpand(record,body,row.rowIndex)&&(this.state[record.id]=!0,Ext.fly(row).replaceClass("x-grid3-row-collapsed","x-grid3-row-expanded"),this.fireEvent("expand",this,record,body,row.rowIndex))},collapseRow:function(row){"number"==typeof row&&(row=this.grid.view.getRow(row));var record=this.grid.store.getAt(row.rowIndex),body=Ext.fly(row).child("tr:nth(1) div.x-grid3-row-body",!0);!1!==this.fireEvent("beforecollapse",this,record,body,row.rowIndex)&&(this.state[record.id]=!1,Ext.fly(row).replaceClass("x-grid3-row-expanded","x-grid3-row-collapsed"),this.fireEvent("collapse",this,record,body,row.rowIndex))}}),Ext.preg("rowexpander",Ext.ux.grid.RowExpander),Ext.grid.RowExpander=Ext.ux.grid.RowExpander,Ext.ns("Ext.ux.grid"),Ext.ux.grid.CheckColumn=function(a){Ext.apply(this,a),this.id||(this.id=Ext.id()),this.renderer=this.renderer.createDelegate(this)},Ext.ux.grid.CheckColumn.prototype={init:function(b){this.grid=b,this.grid.on("render",function(){this.grid.getView().mainBody.on("mousedown",this.onMouseDown,this)},this),this.grid.on("destroy",this.onDestroy,this)},onMouseDown:function(sv,b){this.grid.fireEvent("rowclick"),b.className&&-1!=b.className.indexOf("x-grid3-cc-"+this.id)&&(sv.stopEvent(),sv=this.grid.getView().findRowIndex(b),sv=(b=this.grid.store.getAt(sv)).data[this.dataIndex],b.set(this.dataIndex,!sv),this.grid.fireEvent("afteredit",{grid:this.grid,record:b,field:this.dataIndex,originalValue:sv,value:b.data[this.dataIndex],cancel:!1}))},renderer:function(v,p,a){return p.css+=" x-grid3-check-col-td",'
'},onDestroy:function(){var mainBody=this.grid.getView().mainBody;mainBody&&mainBody.un("mousedown",this.onMouseDown,this)}},Ext.preg("checkcolumn",Ext.ux.grid.CheckColumn),Ext.grid.CheckColumn=Ext.ux.grid.CheckColumn,Ext.grid.PropertyColumnModel=function(a,c){var g=Ext.grid,f=Ext.form;this.grid=a,g.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,width:50,sortable:!0,dataIndex:"name",id:"name",menuDisabled:!0},{header:this.valueText,width:50,resizable:!1,dataIndex:"value",id:"value",menuDisabled:!0}]),this.store=c;c=new f.Field({autoCreate:{tag:"select",children:[{tag:"option",value:"true",html:"true"},{tag:"option",value:"false",html:"false"}]},getValue:function(){return"true"==this.el.dom.value}});this.editors={date:new g.GridEditor(new f.DateField({selectOnFocus:!0})),string:new g.GridEditor(new f.TextField({selectOnFocus:!0})),number:new g.GridEditor(new f.NumberField({selectOnFocus:!0,style:"text-align:left;"})),boolean:new g.GridEditor(c)},this.renderCellDelegate=this.renderCell.createDelegate(this),this.renderPropDelegate=this.renderProp.createDelegate(this)},Ext.extend(Ext.grid.PropertyColumnModel,Ext.grid.ColumnModel,{nameText:"Name",valueText:"Value",dateFormat:"m/j/Y",renderDate:function(a){return a.dateFormat(this.dateFormat)},renderBool:function(a){return a?"true":"false"},isCellEditable:function(a,b){return 1==a},getRenderer:function(a){return 1==a?this.renderCellDelegate:this.renderPropDelegate},renderProp:function(v){return this.getPropertyName(v)},renderCell:function(a){var b=a;return Ext.isDate(a)?b=this.renderDate(a):"boolean"==typeof a&&(b=this.renderBool(a)),Ext.util.Format.htmlEncode(b)},getPropertyName:function(a){var b=this.grid.propertyNames;return b&&b[a]?b[a]:a},getCellEditor:function(a,n){var val=this.store.getProperty(n),n=val.data.name,val=val.data.value;return this.grid.customEditors[n]||(Ext.isDate(val)?this.editors.date:"number"==typeof val?this.editors.number:"boolean"==typeof val?this.editors.boolean:this.editors.string)},destroy:function(){for(var a in Ext.grid.PropertyColumnModel.superclass.destroy.call(this),this.editors)Ext.destroy(a)}}),MODx.grid.JsonGrid=function(config){config=config||{},this.ident=config.ident||"jsongrid-mecitem"+Ext.id(),this.hiddenField=new Ext.form.TextArea({name:config.hiddenName||config.name,hidden:!0}),this.fieldConfig=config.fieldConfig||[{name:"key"},{name:"value"}],this.fieldConfig.push({name:"id",hidden:!0}),this.fieldColumns=[],this.fieldNames=[],Ext.each(this.fieldConfig,function(el){this.fieldNames.push(el.name),this.fieldColumns.push({header:el.header||_(el.name),dataIndex:el.name,editable:!0,menuDisabled:!0,hidden:el.hidden||!1,editor:{xtype:el.xtype||"textfield",allowBlank:el.allowBlank||!0,enableKeyEvents:!0,fieldname:el.name,listeners:{change:{fn:this.saveValue,scope:this},keyup:{fn:function(sb){var record=this.getSelectionModel().getSelected();record&&(record.set(sb.fieldname,sb.el.dom.value),this.saveValue())},scope:this}}},renderer:function(value,metadata){return metadata.css+="x-editable-column ",value},width:el.width||100})},this),Ext.applyIf(config,{id:this.ident+"-json-grid",fields:this.fieldNames,autoHeight:!0,store:new Ext.data.JsonStore({fields:this.fieldNames,data:this.loadValue(config.value)}),enableDragDrop:!0,ddGroup:this.ident+"-json-grid-dd",labelStyle:"position: absolute",columns:this.fieldColumns,disableContextMenuAction:!0,tbar:["->",{text:' '+_("add"),cls:"primary-button",handler:this.addElement,scope:this}],listeners:{render:{fn:this.renderListener,scope:this}}}),MODx.grid.JsonGrid.superclass.constructor.call(this,config)},Ext.extend(MODx.grid.JsonGrid,MODx.grid.LocalGrid,{getMenu:function(){var m=[];return m.push({text:_("remove"),handler:this.removeElement}),m},getActions:function(){return[{action:"removeElement",icon:"trash-o",text:_("remove")}]},addElement:function(){var ds=this.getStore(),row={};Ext.each(this.fieldNames,function(fieldname){row[fieldname]=""}),row.id=this.getStore().getCount(),this.getStore().insert(this.getStore().getCount(),new ds.recordType(row)),this.getView().refresh(),this.getSelectionModel().selectRow(0)},removeElement:function(){Ext.Msg.confirm(_("remove")||"",_("confirm_remove")||"",function(e){if("yes"===e){var ds=this.getStore(),rows=this.getSelectionModel().getSelections();if(!rows.length)return!1;for(var i=0;i',{compiled:!0})},actionsColumnRenderer:function(value,metaData,record,rowIndex,colIndex,store){return this._getActionsColumnTpl().apply({actions:this.getActions()})},onClick:function(e){var actionHandler,record,recordIndex=e.getTarget();recordIndex.classList.contains("x-grid-action")&&(!recordIndex.dataset.action||(this[actionHandler="action"+recordIndex.dataset.action.charAt(0).toUpperCase()+recordIndex.dataset.action.slice(1)]&&"function"==typeof this[actionHandler]||this[actionHandler=recordIndex.dataset.action]&&"function"==typeof this[actionHandler])&&(record=this.getSelectionModel().getSelected(),recordIndex=this.store.indexOf(record),this.menu.record=record.data,this[actionHandler](record,recordIndex,e)))}}),Ext.reg("grid-json",MODx.grid.JsonGrid),Ext.reg("modx-grid-json",MODx.grid.JsonGrid),MODx.Console=function(config){config=config||{},Ext.Updater.defaults.showLoadIndicator=!1,Ext.applyIf(config,{title:_("console"),modal:!Ext.isIE,closeAction:"hide",resizable:!1,collapsible:!1,closable:!0,maximizable:!0,autoScroll:!0,height:400,width:600,refreshRate:2,cls:"modx-window modx-console",items:[{itemId:"header",cls:"modx-console-text",html:_("console_running"),border:!1},{xtype:"panel",itemId:"body",cls:"x-panel-bwrap modx-console-text"}],buttons:[{text:_("console_download_output"),handler:this.download,scope:this},{text:_("ok"),cls:"primary-button",itemId:"okBtn",disabled:!0,scope:this,handler:this.hideConsole}],keys:[{key:Ext.EventObject.S,ctrl:!0,fn:this.download,scope:this},{key:Ext.EventObject.ENTER,fn:this.hideConsole,scope:this}]}),MODx.Console.superclass.constructor.call(this,config),this.config=config,this.addEvents({shutdown:!0,complete:!0}),this.on("show",this.init,this),this.on("hide",function(){if(this.provider&&this.provider.disconnect)try{this.provider.disconnect()}catch(e){}this.fireEvent("shutdown"),this.destroy()}),this.on("complete",this.onComplete,this)},Ext.extend(MODx.Console,Ext.Window,{mgr:null,running:!1,init:function(){Ext.Msg.hide(),this.fbar.setDisabled(!0),this.keyMap.setDisabled(!0),this.getComponent("body").el.dom.innerHTML="",this.provider=new Ext.direct.PollingProvider({type:"polling",url:MODx.config.connector_url,interval:1e3,baseParams:{action:"System/Console",register:this.config.register||"",topic:this.config.topic||"",clear:!1,show_filename:this.config.show_filename||0,format:this.config.format||"html_log"}}),Ext.Direct.addProvider(this.provider),Ext.Direct.on("message",this.onMessage,this)},onMessage:function(e,p){var out=this.getComponent("body");out&&(out.el.insertHtml("beforeEnd",e.data),e.data="",out.el.scroll("b",out.el.getHeight(),!0)),e.complete&&this.fireEvent("complete"),delete e},onComplete:function(){if(this.provider&&this.provider.disconnect)try{this.provider.disconnect()}catch(e){}this.fbar.setDisabled(!1),this.keyMap.setDisabled(!1)},download:function(){var c=this.getComponent("body").getEl().dom.innerHTML||" ";MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"System/DownloadOutput",data:c},listeners:{success:{fn:function(r){location.href=MODx.config.connector_url+"?action=System/DownloadOutput&HTTP_MODAUTH="+MODx.siteId+"&download="+r.message},scope:this}}})},setRegister:function(register,topic){this.config.register=register,this.config.topic=topic},hideConsole:function(){this.hide()}}),Ext.reg("modx-console",MODx.Console),Ext.namespace("MODx.portal"),Ext.ux.Portal=Ext.extend(Ext.Panel,{layout:"column",cls:"x-portal",defaultType:"portalcolumn",initComponent:function(){Ext.ux.Portal.superclass.initComponent.call(this),this.addEvents({validatedrop:!0,beforedragover:!0,dragover:!0,beforedrop:!0,drop:!0})},initEvents:function(){Ext.ux.Portal.superclass.initEvents.call(this),this.dd=new Ext.ux.Portal.DropZone(this,this.dropConfig)},beforeDestroy:function(){this.dd&&this.dd.unreg(),Ext.ux.Portal.superclass.beforeDestroy.call(this)}}),Ext.reg("portal",Ext.ux.Portal),Ext.ux.Portal.DropZone=function(a,b){this.portal=a,Ext.dd.ScrollManager.register(a.body),Ext.ux.Portal.DropZone.superclass.constructor.call(this,a.bwrap.dom,b),a.body.ddScrollConfig=this.ddScrollConfig},Ext.extend(Ext.ux.Portal.DropZone,Ext.dd.DropTarget,{ddScrollConfig:{vthresh:50,hthresh:-1,animate:!0,increment:200},createEvent:function(a,e,b,d,c,f){return{portal:this.portal,panel:b.panel,columnIndex:d,column:c,position:f,data:b,source:a,rawEvent:e,status:this.dropAllowed}},notifyOver:function(a,e,j){var d=e.getXY(),portal=this.portal,px=a.proxy;this.grid||(this.grid=this.getGrid());var c=portal.body.dom.clientWidth;this.lastCW?this.lastCW!=c&&(this.lastCW=c,portal.doLayout(),this.grid=this.getGrid()):this.lastCW=c;for(var g=0,xs=this.grid.columnX,cmatch=!1,i=xs.length;gd[1]){match=!0;break}}pos=(match&&p?pos:c.items.getCount())+(overSelf?-1:0);j=this.createEvent(a,e,j,g,c,pos);return!1!==portal.fireEvent("validatedrop",j)&&!1!==portal.fireEvent("beforedragover",j)&&(px.getProxy().setWidth("auto"),p?px.moveProxy(p.el.dom.parentNode,match?p.el.dom:null):px.moveProxy(c.el.dom,null),this.lastPos={c:c,col:g,p:!!(overSelf||match&&p)&&pos},this.scrollPos=portal.body.getScroll(),portal.fireEvent("dragover",j)),j.status},notifyOut:function(){delete this.grid},notifyDrop:function(a,e,b){var c,pos,f,g,d;delete this.grid,this.lastPos&&(c=this.lastPos.c,f=this.lastPos.col,pos=this.lastPos.p,f=this.createEvent(a,e,b,f,c,!1!==pos?pos:c.items.getCount()),!1!==this.portal.fireEvent("validatedrop",f)&&!1!==this.portal.fireEvent("beforedrop",f)&&(a.proxy.getProxy().remove(),a.panel.el.dom.parentNode.removeChild(a.panel.el.dom),!1!==pos?(c==a.panel.ownerCt&&c.items.items.indexOf(a.panel)<=pos&&pos++,c.insert(pos,a.panel)):c.add(a.panel),c.doLayout(),this.portal.fireEvent("drop",f),(g=this.scrollPos.top)&&(d=this.portal.body.dom,setTimeout(function(){d.scrollTop=g},10))),delete this.lastPos)},getGrid:function(){var a=this.portal.bwrap.getBox();return a.columnX=[],this.portal.items.each(function(c){a.columnX.push({x:c.el.getX(),w:c.el.getWidth()})}),a},unreg:function(){Ext.ux.Portal.DropZone.superclass.unreg.call(this)}}),MODx.portal.Column=Ext.extend(Ext.Container,{layout:"anchor",defaultType:"portlet",cls:"x-portal-column",style:"padding:10px;",columnWidth:1,defaults:{collapsible:!0,autoHeight:!0,titleCollapse:!0,draggable:!0,style:"padding: 5px 0;",bodyStyle:"padding: 15px;"}}),Ext.reg("portalcolumn",MODx.portal.Column),MODx.portal.Portlet=Ext.extend(Ext.Panel,{anchor:Ext.isSafari?"98%":"100%",frame:!0,collapsible:!0,draggable:!0,cls:"x-portlet",stateful:!1,layout:"form"}),Ext.reg("portlet",MODx.portal.Portlet),MODx.window.DuplicateResource=function(config){config=config||{},this.ident=config.ident||"dupres"+Ext.id(),Ext.applyIf(config,{title:config.pagetitle?_("duplicate")+" "+config.pagetitle:_("duplication_options"),id:this.ident}),MODx.window.DuplicateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.DuplicateResource,MODx.Window,{_loadForm:function(){if(this.checkIfLoaded(this.config.record))return!(this.fp.getForm().baseParams={action:"Resource/Updateduplicate",prefixDuplicate:!0,id:this.config.resource});var items=[];items.push({xtype:"textfield",id:"modx-"+this.ident+"-name",fieldLabel:_("resource_name_new"),name:"name",anchor:"100%",value:""}),this.config.hasChildren&&items.push({xtype:"xcheckbox",boxLabel:_("duplicate_children")+" ("+this.config.childCount+")",hideLabel:!0,name:"duplicate_children",id:"modx-"+this.ident+"-duplicate-children",checked:!0}),items.push({xtype:"xcheckbox",boxLabel:_("duplicate_redirect"),hideLabel:!0,name:"redirect",id:"modx-"+this.ident+"-duplicate-redirect",checked:this.config.redirect});var pov=MODx.config.default_duplicate_publish_option||"preserve";items.push({xtype:"fieldset",title:_("publishing_options"),items:[{xtype:"radiogroup",hideLabel:!0,columns:1,value:pov,items:[{boxLabel:_("po_make_all_unpub"),hideLabel:!0,name:"published_mode",inputValue:"unpublish"},{boxLabel:_("po_make_all_pub"),hideLabel:!0,name:"published_mode",inputValue:"publish"},{boxLabel:_("po_preserve"),hideLabel:!0,name:"published_mode",inputValue:"preserve"}]}]}),this.fp=this.createForm({url:this.config.url||MODx.config.connector_url,baseParams:this.config.baseParams||{action:"Resource/Duplicate",id:this.config.resource,prefixDuplicate:!0},labelWidth:125,defaultType:"textfield",autoHeight:!0,items:items}),this.renderForm()}}),Ext.reg("modx-window-resource-duplicate",MODx.window.DuplicateResource),MODx.window.DuplicateElement=function(config){config=config||{},this.ident=config.ident||"dupeel-"+Ext.id();var flds=[{xtype:"hidden",name:"id",id:"modx-"+this.ident+"-id"},{xtype:"hidden",name:"source",id:"modx-"+this.ident+"-source"},{xtype:"textfield",fieldLabel:_("element_name_new"),name:"template"==config.record.type?"templatename":"name",id:"modx-"+this.ident+"-name",anchor:"100%",enableKeyEvents:!0,listeners:{afterRender:{scope:this,fn:function(f,e){this.setStaticElementsPath(f)}},keyup:{scope:this,fn:function(f,e){this.setStaticElementsPath(f)}}}}];"tv"==config.record.type&&(flds.push({xtype:"textfield",fieldLabel:_("element_caption_new"),name:"caption",id:"modx-"+this.ident+"-caption",anchor:"100%"}),flds.push({xtype:"xcheckbox",hideLabel:!0,boxLabel:_("element_duplicate_values"),labelSeparator:"",name:"duplicateValues",id:"modx-"+this.ident+"-duplicate-values",anchor:"100%",inputValue:1,checked:!1})),!0===config.record.static&&flds.push({xtype:"textfield",fieldLabel:_("static_file"),name:"static_file",id:"modx-"+this.ident+"-static_file",anchor:"100%"}),flds.push({xtype:"xcheckbox",boxLabel:_("duplicate_redirect"),hideLabel:!0,name:"redirect",id:"modx-"+this.ident+"-duplicate-redirect",checked:config.redirect}),Ext.applyIf(config,{title:_("duplicate_"+config.record.type),url:MODx.config.connector_url,action:"element/"+config.record.type+"/duplicate",width:600,fields:flds,labelWidth:150}),MODx.window.DuplicateElement.superclass.constructor.call(this,config)},Ext.extend(MODx.window.DuplicateElement,MODx.Window,{setStaticElementsPath:function(f){var category,path;!0===this.config.record.static&&("number"!=typeof(category=this.config.record.category)?(0"+_("session_logging_out")+"",xtype:"modx-description"},{xtype:"textfield",id:"modx-"+this.ident+"-username",fieldLabel:_("username"),name:"username",anchor:"100%"},{xtype:"textfield",inputType:"password",id:"modx-"+this.ident+"-password",fieldLabel:_("password"),name:"password",anchor:"100%"},{xtype:"hidden",name:"rememberme",value:1}],buttons:[{text:_("logout"),scope:this,handler:function(){location.href="?logout=1"}},{text:_("login"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.Login.superclass.constructor.call(this,config),this.on("success",this.onLogin,this)},Ext.extend(MODx.window.Login,MODx.Window,{onLogin:function(r){r=r.a.result;r.object&&r.object.token&&(Ext.Ajax.defaultHeaders={modAuth:r.object.token},Ext.Ajax.extraParams={HTTP_MODAUTH:r.object.token},MODx.siteId=r.object.token,MODx.msg.status({message:_("session_extended")}))}}),Ext.reg("modx-window-login",MODx.window.Login),function(window){"use strict";var CanvasPrototype=window.HTMLCanvasElement&&window.HTMLCanvasElement.prototype,hasBlobConstructor=window.Blob&&function(){try{return Boolean(new Blob)}catch(e){return!1}}(),hasArrayBufferViewSupport=hasBlobConstructor&&window.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(e){return!1}}(),BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,dataURLtoBlob=(hasBlobConstructor||BlobBuilder)&&window.atob&&window.ArrayBuffer&&window.Uint8Array&&function(bb){for(var mimeString,byteString=(0<=bb.split(",")[0].indexOf("base64")?atob:decodeURIComponent)(bb.split(",")[1]),arrayBuffer=new ArrayBuffer(byteString.length),intArray=new Uint8Array(arrayBuffer),i=0;i>2,enc2=(3&enc2)<<4|byte2>>4;isNaN(byte2)?enc3=enc4=64:(enc3=(15&byte2)<<2|byte3>>6,enc4=isNaN(byte3)?64:63&byte3),outStr+=b64.charAt(enc1)+b64.charAt(enc2)+b64.charAt(enc3)+b64.charAt(enc4)}return outStr}};function _emit(target,fn,name,evt,ext){evt={type:name.type||name,target:target,result:evt};_extend(evt,ext),fn(evt)}function _hasSupportReadAs(method){return FileReader&&FileReader.prototype["readAs"+method]}function _readAs(file,fn,method,encoding){if(api.isBlob(file)&&_hasSupportReadAs(method)){var Reader=new FileReader;_on(Reader,_readerEvents,function _fn(evt){var type=evt.type;"progress"==type?_emit(file,fn,evt,evt.target.result,{loaded:evt.loaded,total:evt.total}):"loadend"==type?(_off(Reader,_readerEvents,_fn),Reader=null):_emit(file,fn,evt,evt.target.result)});try{encoding?Reader["readAs"+method](file,encoding):Reader["readAs"+method](file)}catch(err){_emit(file,fn,"error",void 0,{error:err.toString()})}}else _emit(file,fn,"error",void 0,{error:"filreader_not_support_"+method})}function _isEntry(item){return item&&(item.isFile||item.isDirectory)}function _getAsEntry(item){var entry;return item.getAsEntry?entry=item.getAsEntry():item.webkitGetAsEntry&&(entry=item.webkitGetAsEntry()),entry}function isInputFile(el){return _rinput.test(el&&el.tagName)}function _getDataTransfer(evt){return(evt.originalEvent||evt||"").dataTransfer||{}}api.addInfoReader(/^image/,function(file,callback){var defer;file.__dimensions||(defer=file.__dimensions=api.defer(),api.readAsImage(file,function(evt){var img=evt.target;defer.resolve("load"!=evt.type&&"error",{width:img.width,height:img.height}),img.src=api.EMPTY_PNG,img=null})),file.__dimensions.then(callback)}),api.event.dnd=function(el,onHover,onDrop){var _id,_type;onDrop||(onDrop=onHover,onHover=api.F),FileReader?(_on(el,"dragenter dragleave dragover",onHover.ff=onHover.ff||function(evt){for(var types=_getDataTransfer(evt).types,i=types&&types.length,debounceTrigger=!1;i--;)if(~types[i].indexOf("File")){evt.preventDefault(),_type!==evt.type&&("dragleave"!=(_type=evt.type)&&onHover.call(evt.currentTarget,!0,evt),debounceTrigger=!0);break}debounceTrigger&&(clearTimeout(_id),_id=setTimeout(function(){onHover.call(evt.currentTarget,"dragleave"!=_type,evt)},50))}),_on(el,"drop",onDrop.ff=onDrop.ff||function(evt){evt.preventDefault(),_type=0,api.getDropFiles(evt,function(files,all){onDrop.call(evt.currentTarget,files,all,evt)}),onHover.call(evt.currentTarget,!1,evt)})):api.log("Drag'n'Drop -- not supported")},api.event.dnd.off=function(el,onHover,onDrop){_off(el,"dragenter dragleave dragover",onHover.ff),_off(el,"drop",onDrop.ff)},jQuery&&!jQuery.fn.dnd&&(jQuery.fn.dnd=function(onHover,onDrop){return this.each(function(){api.event.dnd(this,onHover,onDrop)})},jQuery.fn.offdnd=function(onHover,onDrop){return this.each(function(){api.event.dnd.off(this,onHover,onDrop)})}),window.FileAPI=_extend(api,window.FileAPI),api.log("FileAPI: "+api.version),api.log("protocol: "+window.location.protocol),api.log("doctype: ["+doctype.name+"] "+doctype.publicId+" "+doctype.systemId),_each(document.getElementsByTagName("meta"),function(meta){/x-ua-compatible/i.test(meta.getAttribute("http-equiv"))&&api.log("meta.http-equiv: "+meta.getAttribute("content"))});try{_supportConsoleLog=!!console.log,_supportConsoleLogApply=!!console.log.apply}catch(err){}api.flashUrl||(api.flashUrl=api.staticPath+"FileAPI.flash.swf"),api.flashImageUrl||(api.flashImageUrl=api.staticPath+"FileAPI.flash.image.swf"),api.flashWebcamUrl||(api.flashWebcamUrl=api.staticPath+"FileAPI.flash.camera.swf")}(window),function(api,document){"use strict";function getCanvas(){return document.createElement("canvas")}var min=Math.min,round=Math.round,support=!1,exifOrientation={8:270,3:180,6:90,7:270,4:180,5:90};try{support=-1params.maxWidth||img.height>params.maxHeight)&&ImgTrans.resize(params.maxWidth,params.maxHeight,"max"),params.crop&&(crop=params.crop,ImgTrans.crop(0|crop.x,0|crop.y,crop.w||crop.width,crop.h||crop.height)),void 0===params.rotate&&autoOrientation&&(params.rotate="auto"),ImgTrans.set({type:ImgTrans.matrix.type||params.type||file.type||"image/png"}),isFn||ImgTrans.set({deg:params.rotate,overlay:params.overlay,filter:params.filter,quality:params.quality||1}),queue.inc(),ImgTrans.toData(function(err,image){err?queue.fail():(images[name]=image,queue.next())}))})}file.width?_transform(!1,file):api.getInfo(file,_transform)},api.each(["TOP","CENTER","BOTTOM"],function(x,i){api.each(["LEFT","CENTER","RIGHT"],function(y,j){Image[x+"_"+y]=3*i+j,Image[y+"_"+x]=3*i+j})}),Image.toCanvas=function(el){var canvas=document.createElement("canvas");return canvas.width=el.videoWidth||el.width,canvas.height=el.videoHeight||el.height,canvas.getContext("2d").drawImage(el,0,0),canvas},Image.fromDataURL=function(img,size,callback){img=api.newImage(img);api.extend(img,size),callback(img)},Image.applyFilter=function(canvas,filter,doneFn){"function"==typeof filter?filter(canvas,doneFn):window.Caman&&window.Caman("IMG"==canvas.tagName?Image.toCanvas(canvas):canvas,function(){"string"==typeof filter?this[filter]():api.each(filter,function(val,method){this[method](val)},this),this.render(doneFn)})},api.renderImageToCanvas=function(canvas,img,sx,sy,sw,sh,dx,dy,dw,dh){try{return canvas.getContext("2d").drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh)}catch(ex){throw api.log("renderImageToCanvas failed"),ex}},api.support.canvas=api.support.transform=support,api.Image=Image}(FileAPI,document),function(){"use strict";!function(loadImage){"use strict";if(!window.navigator||!window.navigator.platform||!/iP(hone|od|ad)/.test(window.navigator.platform))return;var originalRenderMethod=loadImage.renderImageToCanvas;loadImage.detectSubsampling=function(img){var canvas,context;if(img.width*img.height>1024*1024){canvas=document.createElement("canvas");canvas.width=canvas.height=1;context=canvas.getContext("2d");context.drawImage(img,-img.width+1,0);return context.getImageData(0,0,1,1).data[3]===0}return false},loadImage.detectVerticalSquash=function(img,subsampled){var naturalHeight=img.naturalHeight||img.height,canvas=document.createElement("canvas"),context=canvas.getContext("2d"),data,sy,ey,py,alpha;if(subsampled)naturalHeight/=2;canvas.width=1;canvas.height=naturalHeight;context.drawImage(img,0,0);data=context.getImageData(0,0,1,naturalHeight).data;sy=0;ey=naturalHeight;py=naturalHeight;while(py>sy){alpha=data[(py-1)*4+3];if(alpha===0)ey=py;else sy=py;py=ey+sy>>1}return py/naturalHeight||1},loadImage.renderImageToCanvas=function(canvas,img,sourceX,sourceY,sourceWidth,sourceHeight,destX,destY,destWidth,destHeight){if(img._type==="image/jpeg"){var context=canvas.getContext("2d"),tmpCanvas=document.createElement("canvas"),tileSize=1024,tmpContext=tmpCanvas.getContext("2d"),subsampled,vertSquashRatio,tileX,tileY;tmpCanvas.width=tileSize;tmpCanvas.height=tileSize;context.save();subsampled=loadImage.detectSubsampling(img);if(subsampled){sourceX/=2;sourceY/=2;sourceWidth/=2;sourceHeight/=2}vertSquashRatio=loadImage.detectVerticalSquash(img,subsampled);if(subsampled||vertSquashRatio!==1){sourceY*=vertSquashRatio;destWidth=Math.ceil(tileSize*destWidth/sourceWidth);destHeight=Math.ceil(tileSize*destHeight/sourceHeight/vertSquashRatio);destY=0;tileY=0;while(tileY'+(slice&&options.url.indexOf("=?")<0?'':"")+"";var form=xhr.getElementsByTagName("form")[0],transport=xhr.getElementsByTagName("iframe")[0];form.appendChild(data),api.log(form.parentNode.innerHTML),document.body.appendChild(xhr),_this.xhr.node=xhr,_this.readyState=2;try{form.submit()}catch(err){api.log("iframe.error: "+err)}form=null}else url=url.replace(/([a-z]+)=(\?)&?/i,""),this.xhr&&this.xhr.aborted?api.log("Error: already aborted"):(xhr=_this.xhr=api.getXHR(),data.params&&(url+=(url.indexOf("?")<0?"?":"&")+data.params.join("&")),xhr.open("POST",url,!0),api.withCredentials&&(xhr.withCredentials="true"),options.headers&&options.headers["X-Requested-With"]||xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),api.each(options.headers,function(val,key){xhr.setRequestHeader(key,val)}),options._chunked?(xhr.upload&&xhr.upload.addEventListener("progress",api.throttle(function(evt){data.retry||options.progress({type:evt.type,total:data.size,loaded:data.start+evt.loaded,totalSize:data.size},_this,options)},100),!1),xhr.onreadystatechange=function(){var delay,lkb=parseInt(xhr.getResponseHeader("X-Last-Known-Byte"),10);if(_this.status=xhr.status,_this.statusText=xhr.statusText,_this.readyState=xhr.readyState,4==xhr.readyState){for(var k in _xhrResponsePostfix)_this["response"+k]=xhr["response"+k];xhr.onreadystatechange=null,!xhr.status||0').replace(/#(\w+)#/gi,function(a,name){return opts[name]})}function _css(el,css){var key,val;if(el&&el.style)for(key in css){"number"==typeof(val=css[key])&&(val+="px");try{el.style[key]=val}catch(e){}}}function _inherit(obj,methods){_each(methods,function(fn,name){var prev=obj[name];obj[name]=function(){return this.parent=prev,fn.apply(this,arguments)}})}function _isHtmlFile(file){return file&&!file.flashId}function _wrap(fn){var id=fn.wid=api.uid();return flash._fn[id]=fn,"FileAPI.Flash._fn."+id}function _unwrap(fn){try{flash._fn[fn.wid]=null,delete flash._fn[fn.wid]}catch(e){}}function _getUrl(url,params){var path;return _rhttp.test(url)||(!/^\.\//.test(url)&&"/"==url.charAt(0)||(url=((path=(path=location.pathname).substr(0,path.lastIndexOf("/")))+"/"+url).replace("/./","/")),"//"!=url.substr(0,2)&&(url="//"+location.host+url),_rhttp.test(url)||(url=location.protocol+url)),params&&(url+=(/\?/.test(url)?"&":"?")+params),url}function _makeFlashImage(opts,base64,fn){var key,flashId=api.uid(),el=document.createElement("div"),attempts=10;for(key in opts)el.setAttribute(key,opts[key]),el[key]=opts[key];_css(el,opts),opts.width="100%",opts.height="100%",el.innerHTML=_makeFlashHTML(api.extend({id:flashId,src:_getUrl(api.flashImageUrl,"r="+api.uid()),wmode:"opaque",flashvars:"scale="+opts.scale+"&callback="+_wrap(function _(){return _unwrap(_),0<--attempts&&function(){try{flash.get(flashId).setImage(base64)}catch(e){api.log('[err] FlashAPI.Preview.setImage -- can not set "base64":',e)}}(),!0})},opts)),fn(!1,el),el=null}api.support.flash=!1,api.support.flash&&(!api.html5||!api.support.html5||api.cors&&!api.support.cors||api.media&&!api.support.media||api.insecureChrome)&&(_attr=api.uid(),_retry=0,_files={},_rhttp=/^https?:/i,flash={_fn:{},init:function(){var child=document.body&&document.body.firstChild;if(child)do{if(1==child.nodeType){api.log("FlashAPI.state: awaiting");var dummy=document.createElement("div");return dummy.id="_"+_attr,_css(dummy,{top:1,right:1,width:5,height:5,position:"absolute",zIndex:"2147483647"}),child.parentNode.insertBefore(dummy,child),void flash.publish(dummy,_attr)}}while(child=child.nextSibling);_retry<10&&setTimeout(flash.init,50*++_retry)},publish:function(el,id,opts){opts=opts||{},el.innerHTML=_makeFlashHTML({id:id,src:_getUrl(api.flashUrl,"r="+api.version),wmode:opts.camera?"":"transparent",flashvars:"callback="+(opts.onEvent||"FileAPI.Flash.onEvent")+"&flashId="+id+"&storeKey="+navigator.userAgent.match(/\d/gi).join("")+"_"+api.version+(flash.isReady||(api.pingUrl?"&ping="+api.pingUrl:""))+"&timeout="+api.flashAbortTimeout+(opts.camera?"&useCamera="+_getUrl(api.flashWebcamUrl):"")+"&debug="+(api.debug?"1":"")})},ready:function(){api.log("FlashAPI.state: ready"),flash.ready=api.F,flash.isReady=!0,flash.patch(),flash.patchCamera&&flash.patchCamera(),api.event.on(document,"mouseover",flash.mouseover),api.event.on(document,"click",function(evt){flash.mouseover(evt)&&(evt.preventDefault?evt.preventDefault():evt.returnValue=!0)})},getEl:function(){return document.getElementById("_"+_attr)},getWrapper:function(node){do{if(/js-fileapi-wrapper/.test(node.className))return node}while((node=node.parentNode)&&node!==document.body)},mouseover:function(box){var target=api.event.fix(box).target;if(/input/i.test(target.nodeName)&&"file"==target.type&&!target.disabled){var dummy=target.getAttribute(_attr),box=flash.getWrapper(target);if(api.multiFlash){if("i"==dummy||"r"==dummy)return!1;if("p"!=dummy){target.setAttribute(_attr,"i");dummy=document.createElement("div");if(!box)return void api.log("[err] FlashAPI.mouseover: js-fileapi-wrapper not found");_css(dummy,{top:0,left:0,width:target.offsetWidth,height:target.offsetHeight,zIndex:"2147483647",position:"absolute"}),box.appendChild(dummy),flash.publish(dummy,api.uid()),target.setAttribute(_attr,"p")}return!0}box&&(box=function(docEl){var box=docEl.getBoundingClientRect(),body=document.body,docEl=(docEl&&docEl.ownerDocument).documentElement;return{top:box.top+(window.pageYOffset||docEl.scrollTop)-(docEl.clientTop||body.clientTop||0),left:box.left+(window.pageXOffset||docEl.scrollLeft)-(docEl.clientLeft||body.clientLeft||0),width:box.right-box.left,height:box.bottom-box.top}}(box),_css(flash.getEl(),box),flash.curInp=target)}else/object|embed/i.test(target.nodeName)||_css(flash.getEl(),{top:1,left:1,width:5,height:5})},onEvent:function(evt){var type=evt.type;if("ready"==type){try{flash.getInput(evt.flashId).setAttribute(_attr,"r")}catch(e){}return flash.ready(),setTimeout(function(){flash.mouseenter(evt)},50),!0}"ping"===type?api.log("(flash -> js).ping:",[evt.status,evt.savedStatus],evt.error):"log"===type?api.log("(flash -> js).log:",evt.target):type in flash&&setTimeout(function(){api.log("FlashAPI.event."+evt.type+":",evt),flash[type](evt)},1)},mouseenter:function(evt){var accept,exts,node=flash.getInput(evt.flashId);node&&(flash.cmd(evt,"multiple",null!=node.getAttribute("multiple")),accept=[],exts={},_each((node.getAttribute("accept")||"").split(/,\s*/),function(mime){api.accept[mime]&&_each(api.accept[mime].split(" "),function(ext){exts[ext]=1})}),_each(exts,function(i,ext){accept.push(ext)}),flash.cmd(evt,"accept",accept.length?accept.join(",")+","+accept.join(",").toUpperCase():"*"))},get:function(id){return document[id]||window[id]||document.embeds[id]},getInput:function(id){if(!api.multiFlash)return flash.curInp;try{var node=flash.getWrapper(flash.get(id));if(node)return node.getElementsByTagName("input")[0]}catch(e){api.log('[err] Can not find "input" by flashId:',id,e)}},select:function(files){var event,inp=flash.getInput(files.flashId),uid=api.uid(inp),files=files.target.files;_each(files,function(file){api.checkFileObj(file)}),_files[uid]=files,document.createEvent?((event=document.createEvent("Event")).files=files,event.initEvent("change",!0,!0),inp.dispatchEvent(event)):jQuery?jQuery(inp).trigger({type:"change",files:files}):((event=document.createEventObject()).files=files,inp.fireEvent("onchange",event))},cmd:function(id,name,data,last){try{return api.log("(js -> flash)."+name+":",data),flash.get(id.flashId||id).cmd(name,data)}catch(err){api.log("(js -> flash).onError:",err.toString()),last||setTimeout(function(){flash.cmd(id,name,data,!0)},50)}},patch:function(){api.flashEngine=!0,_inherit(api,{getFiles:function(files,filter,callback){if(callback)return api.filterFiles(api.getFiles(files),filter,callback),null;files=api.isArray(files)?files:_files[api.uid(files.target||files.srcElement||files)];return files?(filter&&(filter=api.getFilesFilter(filter),files=api.filter(files,function(file){return filter.test(file.name)})),files):this.parent.apply(this,arguments)},getInfo:function(file,fn){var defer;_isHtmlFile(file)?this.parent.apply(this,arguments):file.isShot?fn(null,file.info={width:file.width,height:file.height}):(file.__info||(defer=file.__info=api.defer(),flash.cmd(file,"getFileInfo",{id:file.id,callback:_wrap(function _(err,info){_unwrap(_),defer.resolve(err,file.info=info)})})),file.__info.then(fn))}}),api.support.transform=!0,api.Image&&_inherit(api.Image.prototype,{get:function(fn,scaleMode){return this.set({scaleMode:scaleMode||"noScale"}),this.parent(fn)},_load:function(file,fn){var _this;api.log("FlashAPI.Image._load:",file),_isHtmlFile(file)?this.parent.apply(this,arguments):(_this=this,api.getInfo(file,function(err){fn.call(_this,err,file)}))},_apply:function(file,fn){var m,doneFn;api.log("FlashAPI.Image._apply:",file),_isHtmlFile(file)?this.parent.apply(this,arguments):(m=this.getMatrix(file.info),doneFn=fn,flash.cmd(file,"imageTransform",{id:file.id,matrix:m,callback:_wrap(function _(err,base64){api.log("FlashAPI.Image._apply.callback:",err),_unwrap(_),err?doneFn(err):api.support.html5||api.support.dataURI&&!(3e4 "+fileId),_this.xhr={headers:{},abort:function(){flash.cmd(flashId,"abort",{id:fileId})},getResponseHeader:function(name){return this.headers[name]},getAllResponseHeaders:function(){return this.headers}};var queue=api.queue(function(){flash.cmd(flashId,"upload",{url:_getUrl(options.url.replace(/([a-z]+)=(\?)&?/i,"")),data:data,files:fileId?files:null,headers:options.headers||{},callback:_wrap(function upload(evt){var type=evt.type,result=evt.result;api.log("FlashAPI.upload."+type),"progress"==type?(evt.loaded=Math.min(evt.loaded,evt.total),evt.lengthComputable=!0,options.progress(evt)):"complete"==type?(_unwrap(upload),"string"==typeof result&&(_this.responseText=result.replace(/%22/g,'"').replace(/%5c/g,"\\").replace(/%26/g,"&").replace(/%25/g,"%")),_this.end(evt.status||200)):"abort"!=type&&"error"!=type||(_this.end(evt.status||0,evt.message),_unwrap(upload))})})});_each(files,function(file){queue.inc(),api.getInfo(file,queue.next)}),queue.check()}})}},api.Flash=flash,api.newImage("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",function(err,img){api.support.dataURI=!(1!=img.width||1!=img.height),flash.init()}))}(window,window.jQuery,FileAPI),function(api){"use strict";var flash,_each=api.each,_cameraQueue=[];function _wrap(fn){var id=fn.wid=api.uid();return api.Flash._fn[id]=fn,"FileAPI.Flash._fn."+id}function _unwrap(fn){try{api.Flash._fn[fn.wid]=null,delete api.Flash._fn[fn.wid]}catch(e){}}!api.support.flash||!api.media||api.support.media&&api.html5&&!api.insecureChrome||(flash=api.Flash,api.extend(api.Flash,{patchCamera:function(){api.Camera.fallback=function(el,options,callback){var camId=api.uid();api.log("FlashAPI.Camera.publish: "+camId),flash.publish(el,camId,api.extend(options,{camera:!0,onEvent:_wrap(function _(evt){"camera"===evt.type&&(_unwrap(_),evt.error?(api.log("FlashAPI.Camera.publish.error: "+evt.error),callback(evt.error)):(api.log("FlashAPI.Camera.publish.success: "+camId),callback(null)))})}))},_each(_cameraQueue,function(args){api.Camera.fallback.apply(api.Camera,args)}),_cameraQueue=[],api.extend(api.Camera.prototype,{_id:function(){return this.video.id},start:function(callback){var _this=this;flash.cmd(this._id(),"camera.on",{callback:_wrap(function _(evt){_unwrap(_),evt.error?(api.log("FlashAPI.camera.on.error: "+evt.error),callback(evt.error,_this)):(api.log("FlashAPI.camera.on.success: "+_this._id()),_this._active=!0,callback(null,_this))})})},stop:function(){this._active=!1,flash.cmd(this._id(),"camera.off")},shot:function(){api.log("FlashAPI.Camera.shot:",this._id());var shot=api.Flash.cmd(this._id(),"shot",{});return shot.type="image/png",shot.flashId=this._id(),shot.isShot=!0,new api.Camera.Shot(shot)}})}}),api.Camera.fallback=function(){_cameraQueue.push(arguments)})}((window,window.jQuery,FileAPI)),"function"==typeof define&&define.amd&&define("FileAPI",[],function(){return FileAPI}),function(){Ext.namespace("MODx.util.MultiUploadDialog");var maxFileSize=parseInt(MODx.config.upload_maxsize,10),permittedFileTypes=MODx.config.upload_files.toLowerCase().split(",");FileAPI.debug=!1,FileAPI.support.flash=!1,FileAPI.staticPath=MODx.config.manager_url+"assets/fileapi/";var api={humanFileSize:function(bytes,units){var thresh=units?1e3:1024;if(bytes");""!=errors&&MODx.msg.alert(_("error"),errors),this.errors={}}}),MODx.util.MultiUploadDialog.BrowseButton=Ext.extend(Ext.Button,{input_name:"file",input_file:null,original_handler:null,original_scope:null,initComponent:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.initComponent.call(this),this.original_handler=this.handler||null,this.original_scope=this.scope||window,this.handler=null,this.scope=null},onRender:function(ct,position){MODx.util.MultiUploadDialog.BrowseButton.superclass.onRender.call(this,ct,position),this.createInputFile()},createInputFile:function(){var button_container=this.el.child("button").wrap();this.input_file=button_container.createChild({tag:"input",type:"file",size:1,name:this.input_name||Ext.id(this.el),style:"cursor: pointer; display: inline-block; opacity: 0; position: absolute; top: 0; left: 0; width: 100%; height: 100%;",multiple:!0}),this.handleMouseEvents&&(this.input_file.on("mouseover",this.onMouseOver,this),this.input_file.on("mousedown",this.onMouseDown,this)),this.tooltip&&("object"==typeof this.tooltip?Ext.QuickTips.register(Ext.apply({target:this.input_file},this.tooltip)):this.input_file.dom[this.tooltipType]=this.tooltip),this.input_file.on("change",this.onInputFileChange,this),this.input_file.on("click",function(e){e.stopPropagation()})},detachInputFile:function(no_create){var result=this.input_file;return"object"==typeof this.tooltip?Ext.QuickTips.unregister(this.input_file):this.input_file.dom[this.tooltipType]=null,this.input_file.removeAllListeners(),this.input_file=null,result},getInputFile:function(){return this.input_file},disable:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.disable.call(this),this.input_file.dom.disabled=!0},enable:function(){MODx.util.MultiUploadDialog.BrowseButton.superclass.enable.call(this),this.input_file.dom.disabled=!1},destroy:function(){this.detachInputFile(!0).remove(),MODx.util.MultiUploadDialog.BrowseButton.superclass.destroy.call(this)},reset:function(){var form=new Ext.Element(document.createElement("form")),buttonParent=this.input_file.parent();form.appendChild(this.input_file),form.dom.reset(),buttonParent.appendChild(this.input_file)},onInputFileChange:function(ev){this.original_handler&&this.original_handler.call(this.original_scope,this,ev),this.fireEvent("click",this,ev)}}),Ext.reg("multiupload-browse-btn",MODx.util.MultiUploadDialog.BrowseButton),MODx.util.MultiUploadDialog.FilesGrid=function(config){config=config||{},Ext.applyIf(config,{height:300,autoScroll:!0,border:!1,fields:["name","size","file","permitted","message","uploaded"],paging:!1,remoteSort:!1,viewConfig:{forceFit:!0,getRowClass:function(record,index,rowParams){return record.get("permitted")?record.get("uploaded")?"upload-success":void 0:"upload-error"}},sortInfo:{field:"name",direction:"ASC"},deferRowRender:!0,anchor:"100%",autoExpandColumn:"state",columns:[{header:_("upload.columns.file"),dataIndex:"name",sortable:!0,width:200,renderer:function(value,meta,record){var id=Ext.id();return FileAPI.Image(record.get("file")).resize(100,50,"max").get(function(err,img){err||(img=new Ext.Element(img).addClass("upload-thumb"),Ext.get(id).insertFirst(img))}),'"}},{header:_("upload.columns.state"),id:"state",width:100,renderer:function(value,meta,record){if(!record.get("permitted")||record.get("uploaded"))return''+record.get("message")+"
";var id=Ext.id();return function(){record.progressbar=new Ext.ProgressBar({renderTo:id,value:0,text:"0 / "+record.get("size")})}.defer(25),''}}],getMenu:function(){return[{text:_("upload.contextmenu.remove_entry"),handler:this.removeFile}]}}),MODx.util.MultiUploadDialog.FilesGrid.superclass.constructor.call(this,config)},Ext.extend(MODx.util.MultiUploadDialog.FilesGrid,MODx.grid.LocalGrid,{removeFile:function(){var selected=this.getSelectionModel().getSelections();this.getStore().remove(selected)}}),Ext.reg("multiupload-grid-files",MODx.util.MultiUploadDialog.FilesGrid),MODx.util.MultiUploadDialog.Dialog=function(config){this.filesGridId=Ext.id(),config=config||{},Ext.applyIf(config,{permitted_extensions:permittedFileTypes,autoHeight:!0,width:600,closeAction:"hide",layout:"anchor",listeners:{show:{fn:this.onShow},hide:{fn:this.onHide}},items:[{xtype:"multiupload-grid-files",id:this.filesGridId,anchor:"100%"}],buttons:[{xtype:"multiupload-browse-btn",text:_("upload.buttons.choose"),cls:"primary-button",listeners:{click:{scope:this,fn:function(btn,files){files=FileAPI.getFiles(files);this.addFiles(files),btn.reset()}}}},{xtype:"splitbutton",text:_("upload.buttons.clear"),listeners:{click:{scope:this,fn:this.clearStore}},menu:new Ext.menu.Menu({items:[{text:_("upload.clear_list.all"),listeners:{click:{scope:this,fn:this.clearStore}}},{text:_("upload.clear_list.notpermitted"),listeners:{click:{scope:this,fn:this.clearNotPermittedItems}}}]})},{xtype:"button",text:_("upload.buttons.upload"),cls:"primary-button",listeners:{click:{scope:this,fn:this.startUpload}}},{xtype:"button",text:_("upload.buttons.close"),listeners:{click:{scope:this,fn:this.hideDialog}}}]}),MODx.util.MultiUploadDialog.Dialog.superclass.constructor.call(this,config)};var originalWindowOnShow=Ext.Window.prototype.onShow,originalWindowOnHide=Ext.Window.prototype.onHide;Ext.extend(MODx.util.MultiUploadDialog.Dialog,Ext.Window,{addFiles:function(files){var store=Ext.getCmp(this.filesGridId).getStore(),dialog=this;FileAPI.each(files,function(file){var permitted=!0,p="";api.isFileSizePermitted(file.size)||(p=_("upload.notpermitted.filesize",{size:api.humanFileSize(file.size),max:api.humanFileSize(maxFileSize)}),permitted=!1),api.isFileTypePermitted(file.name,dialog.permitted_extensions)||(p=_("upload.notpermitted.extension",{ext:api.getFileExtension(file.name)}),permitted=!1);p={name:file.name,size:api.humanFileSize(file.size),file:file,permitted:permitted,message:p,uploaded:!1},p=new store.recordType(p);store.insert(0,p)})},startUpload:function(){var dialog=this,files=[],params=Ext.apply(this.base_params,{HTTP_MODAUTH:MODx.siteId});Ext.getCmp(this.filesGridId).getStore().each(function(){var file=this.get("file");this.get("permitted")&&!this.get("uploaded")&&(file.record=this,files.push(file))});FileAPI.upload({url:this.url,data:params,files:{file:files},fileprogress:function(evt,file){file.record.progressbar.updateProgress(evt.loaded/evt.total,_("upload.upload_progress",{loaded:api.humanFileSize(evt.loaded),total:file.record.get("size")}),!0)},filecomplete:function(err,resp,file,options){err?401!==resp.status&&MODx.msg.alert(_("upload.msg.title.error"),err):(resp=Ext.util.JSON.decode(resp.response)).success?(file.record.set("uploaded",!0),file.record.set("message",_("upload.upload.success"))):(file.record.set("permitted",!1),file.record.set("message",resp.message))},complete:function(err,xhr){dialog.fireEvent("uploadsuccess")}})},removeEntry:function(record){Ext.getCmp(this.filesGridId).getStore().remove(record)},clearStore:function(){Ext.getCmp(this.filesGridId).getStore().removeAll()},clearNotPermittedItems:function(){var store=Ext.getCmp(this.filesGridId).getStore(),notPermitted=store.query("permitted",!1);store.remove(notPermitted.getRange())},hideDialog:function(){this.hide()},onDDrag:function(ev){ev&&ev.preventDefault()},onDDrop:function(ev){ev&&ev.preventDefault();var dialog=this;FileAPI.getDropFiles(ev.browserEvent,function(files){files.length&&dialog.addFiles(files)})},onShow:function(){var ret=originalWindowOnShow.apply(this,arguments);return Ext.getCmp(this.filesGridId).getStore().removeAll(),this.isDDSet||(this.el.on("dragenter",this.onDDrag,this),this.el.on("dragover",this.onDDrag,this),this.el.on("dragleave",this.onDDrag,this),this.el.on("drop",this.onDDrop,this),this.isDDSet=!0),ret},onHide:function(){var ret=originalWindowOnHide.apply(this,arguments);return this.el.un("dragenter",this.onDDrag,this),this.el.un("dragover",this.onDDrag,this),this.el.un("dragleave",this.onDDrag,this),this.el.un("drop",this.onDDrop,this),this.isDDSet=!1,ret},setBaseParams:function(params){this.base_params=params,this.setTitle(_("upload.title.destination_path",{path:this.base_params.path}))}}),Ext.reg("multiupload-window-dialog",MODx.util.MultiUploadDialog.Dialog)}(),Ext.namespace("MODx.tree"),MODx.tree.Tree=function(config){var tl,root;if(config=config||{},Ext.applyIf(config,{baseParams:{},action:"getNodes",loaderConfig:{}}),config.action&&(config.baseParams.action=config.action),config.loaderConfig.dataUrl=config.url,config.loaderConfig.baseParams=config.baseParams,Ext.applyIf(config.loaderConfig,{preloadChildren:!0,clearOnLoad:!0}),this.config=config,root=this.config.url?((tl=new MODx.tree.TreeLoader(config.loaderConfig)).on("beforeload",function(l,node){tl.dataUrl=this.config.url+"?action="+this.config.action+"&id="+node.attributes.id,node.attributes.type&&(tl.dataUrl+="&type="+node.attributes.type)},this),tl.on("load",this.onLoad,this),{nodeType:"async",text:config.root_name||config.rootName||"",qtip:config.root_qtip||config.rootQtip||"",draggable:!1,id:config.root_id||config.rootId||"root",pseudoroot:!0,attributes:{pseudoroot:!0},cls:"tree-pseudoroot-node",iconCls:config.root_iconCls||config.rootIconCls||""}):(tl=new Ext.tree.TreeLoader({preloadChildren:!0,baseAttrs:{uiProvider:MODx.tree.CheckboxNodeUI}}),new Ext.tree.TreeNode({text:this.config.rootName||"",draggable:!1,id:this.config.rootId||"root",children:this.config.data||[],pseudoroot:!0})),Ext.applyIf(config,{useArrows:!0,autoScroll:!0,animate:!0,enableDD:!0,enableDrop:!0,ddAppendOnly:!1,containerScroll:!0,collapsible:!0,border:!1,autoHeight:!0,rootVisible:!0,loader:tl,header:!1,hideBorders:!0,bodyBorder:!1,cls:"modx-tree",root:root,preventRender:!1,stateful:!0,menuConfig:{defaultAlign:"tl-b?",enableScrolling:!1,listeners:{show:function(){var node=this.activeNode;node&&node.ui.addClass("x-tree-selected")},hide:function(){var node=this.activeNode;node&&(node.isSelected()||node.ui&&node.ui.removeClass("x-tree-selected"))}}}}),!0!==config.remoteToolbar||void 0!==config.tbar&&null!==config.tbar){var tb=this.getToolbar();if(config.tbar&&config.useDefaultToolbar)for(var i=0;i"+node.attributes.text+"",target:this}),node:node,handler:function(btn,evt){evt.stopPropagation(evt),node.getOwnerTree().handleDirectCreateClick(node)},iconCls:"icon-plus-circle",renderTo:elId,listeners:{mouseover:function(button,e){button.tooltip.onTargetOver(e)},mouseout:function(button,e){button.tooltip.onTargetOut(e)}}}))},_showContextMenu:function(node,e){var m;this.cm.activeNode=node,this.cm.removeAll();var h,handled=!1;Ext.isEmpty(node.attributes.treeHandler)&&(!node.isRoot||Ext.isEmpty(node.childNodes[0].attributes.treeHandler))||(h=Ext.getCmp((node.isRoot?node.childNodes[0]:node).attributes.treeHandler))&&(node.isRoot&&(node.attributes.type="root"),m=h.getMenu(this,node,e),handled=!0),handled||(this.getMenu?m=this.getMenu(node,e):node.attributes.menu&&node.attributes.menu.items&&(m=node.attributes.menu.items)),m&&0s[i].length&&(f=!0):s.splice(i,1);f||s.push(p)}}else for(s=s.remove(p),i=0;i',id:"modx-iprops-container"}]}],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 resourceId=Ext.getCmp("modx-iprops-fp");resourceId&&resourceId.destroy();resourceId=Ext.get("modx-resource-id"),resourceId=null!==resourceId?resourceId.getValue():0;Ext.getCmp("modx-dise-proplist").getUpdater().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:!0,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!1;for(var i=0;i]+)>)/gi,"")))),(isfolderFieldCmb=Ext.getCmp("modx-resource-menuindex"))&&void 0!==o.result.object.menuindex&&isfolderFieldCmb.setValue(o.result.object.menuindex),(isfolderFieldCmb=Ext.getCmp("modx-resource-isfolder"))&&"boolean"==typeof o.result.object.isfolder&&isfolderFieldCmb.setValue(o.result.object.isfolder))},_handleDrop:function(e){var dropNode=e.dropNode,targetParent=e.target;if(null!==targetParent.findChild("id",dropNode.attributes.id))return!1;if("modContext"==dropNode.attributes.type&&(1'+newTitle.f.findField("pagetitle").getValue()+" ("+w.record.id+")";w.setTitle(w.title.replace(//,newTitle))},scope:this},hide:{fn:function(){this.destroy()}}}});w.title+=': '+Ext.util.Format.htmlEncode(w.record.pagetitle)+" ("+w.record.id+")",w.setValues(r.object),w.show(e.target,function(){Ext.isSafari?w.setPosition(null,30):w.center()},this)},scope:this}}})},_getModContextMenu:function(m){var a=m.attributes,ui=m.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pedit")&&m.push({text:_("edit_context"),handler:function(){var at=this.cm.activeNode.attributes;this.loadAction("a=context/update&key="+at.pk)}}),m.push({text:_("context_refresh"),handler:function(){this.refreshNode(this.cm.activeNode.id,!0)}}),ui.hasClass("pnewdoc")&&(m.push("-"),this._getCreateMenus(m,"0",ui)),ui.hasClass("pnew")&&m.push({text:_("context_duplicate"),handler:this.duplicateContext}),ui.hasClass("pdelete")&&(m.push("-"),m.push({text:_("context_remove"),handler:this.removeContext})),ui.hasClass("x-tree-node-leaf")||(m.push("-"),m.push(this._getSortMenu())),m},overviewResource:function(){this.loadAction("a=resource/data")},quickUpdateResource:function(itm,e){this.quickUpdate(itm,e,itm.classKey)},editResource:function(){this.loadAction("a=resource/update")},_getModResourceMenu:function(m){var a=m.attributes,ui=m.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pview")&&m.push({text:_("resource_overview"),handler:this.overviewResource}),ui.hasClass("pedit")&&m.push({text:_("resource_edit"),handler:this.editResource}),ui.hasClass("pqupdate")&&m.push({text:_("quick_update_resource"),classKey:a.classKey,handler:this.quickUpdateResource}),ui.hasClass("pduplicate")&&m.push({text:_("resource_duplicate"),handler:this.duplicateResource}),m.push({text:_("resource_refresh"),handler:this.refreshResource,scope:this}),ui.hasClass("pnew")&&(m.push("-"),this._getCreateMenus(m,null,ui)),ui.hasClass("psave")&&(m.push("-"),ui.hasClass("ppublish")&&ui.hasClass("unpublished")?m.push({text:_("resource_publish"),handler:this.publishDocument}):ui.hasClass("punpublish")&&m.push({text:_("resource_unpublish"),handler:this.unpublishDocument}),ui.hasClass("pundelete")&&ui.hasClass("deleted")?m.push({text:_("resource_undelete"),handler:this.undeleteDocument}):ui.hasClass("pdelete")&&!ui.hasClass("deleted")&&m.push({text:_("resource_delete"),handler:this.deleteDocument})),ui.hasClass("x-tree-node-leaf")||(m.push("-"),m.push(this._getSortMenu())),ui.hasClass("pview")&&""!=a.preview_url&&(m.push("-"),m.push({text:_("resource_view"),handler:this.preview})),m},refreshResource:function(){this.refreshNode(this.cm.activeNode.id)},createResourceHere:function(itm){var at=this.cm.activeNode.attributes,p=itm.usePk||at.pk;this.loadAction("a=resource/create&class_key="+itm.classKey+"&parent="+p+(at.ctx?"&context_key="+at.ctx:""))},createResource:function(itm,e){var at=this.cm.activeNode.attributes,p=itm.usePk||at.pk;this.quickCreate(itm,e,itm.classKey,at.ctx,p)},_getCreateMenus:function(m,pk,ui){var types=MODx.config.resource_classes,o=this.fireEvent("loadCreateMenus",types);Ext.isObject(o)&&Ext.apply(types,o);var k,coreTypes=["MODX\\Revolution\\modDocument","MODX\\Revolution\\modWebLink","MODX\\Revolution\\modSymLink","MODX\\Revolution\\modStaticResource"],ct=[],qct=[];for(k in types)-1!=coreTypes.indexOf(k)&&!ui.hasClass("pnew_"+k)||(ct.push({text:types[k].text_create_here,classKey:k,usePk:pk||!1,handler:this.createResourceHere,scope:this}),ui&&ui.hasClass("pqcreate")&&qct.push({text:types[k].text_create,classKey:k,handler:this.createResource,scope:this}));return m.push({text:_("create"),handler:function(){return!1},menu:{items:ct}}),ui&&ui.hasClass("pqcreate")&&m.push({text:_("quick_create"),handler:function(){return!1},menu:{items:qct}}),m},_handleDrag:function(dropEvent){var encNodes=Ext.encode(function simplifyNodes(node){for(var resultNode={},kids=node.childNodes,len=kids.length,i=0;i[[*pagetitle]]
"+_("resource_pagetitle_help"),anchor:"100%",allowBlank:!1},{xtype:"textfield",name:"longtitle",id:"modx-"+this.ident+"-longtitle",fieldLabel:_("resource_longtitle"),description:"[[*longtitle]]
"+_("resource_longtitle_help"),anchor:"100%"},{xtype:"textarea",name:"description",id:"modx-"+this.ident+"-description",fieldLabel:_("resource_description"),description:"[[*description]]
"+_("resource_description_help"),anchor:"100%",grow:!1,height:50},{xtype:"textarea",name:"introtext",id:"modx-"+this.ident+"-introtext",fieldLabel:_("resource_summary"),description:"[[*introtext]]
"+_("resource_summary_help"),anchor:"100%",height:50}]},{columnWidth:.4,border:!1,layout:"form",items:[{xtype:"modx-combo-template",name:"template",id:"modx-"+this.ident+"-template",fieldLabel:_("resource_template"),description:"[[*template]]
"+_("resource_template_help"),editable:!1,anchor:"100%",baseParams:{action:"Element/Template/GetList",combo:"1",limit:0},value:MODx.config.default_template},{xtype:"textfield",name:"alias",id:"modx-"+this.ident+"-alias",fieldLabel:_("resource_alias"),description:"[[*alias]]
"+_("resource_alias_help"),anchor:"100%"},{xtype:"textfield",name:"menutitle",id:"modx-"+this.ident+"-menutitle",fieldLabel:_("resource_menutitle"),description:"[[*menutitle]]
"+_("resource_menutitle_help"),anchor:"100%"},{xtype:"textfield",fieldLabel:_("resource_link_attributes"),description:"[[*link_attributes]]
"+_("resource_link_attributes_help"),name:"link_attributes",id:"modx-"+this.ident+"-attributes",maxLength:255,anchor:"100%"},{xtype:"xcheckbox",boxLabel:_("resource_hide_from_menus"),description:"[[*hidemenu]]
"+_("resource_hide_from_menus_help"),hideLabel:!0,name:"hidemenu",id:"modx-"+this.ident+"-hidemenu",inputValue:1,checked:"1"==MODx.config.hidemenu_default?1:0},{xtype:"xcheckbox",boxLabel:_("resource_published"),description:"[[*published]]
"+_("resource_published_help"),hideLabel:!0,name:"published",id:"modx-"+this.ident+"-published",inputValue:1,checked:"1"==MODx.config.publish_default?1:0},{xtype:"xcheckbox",boxLabel:_("deleted"),description:"[[*deleted]]
"+_("resource_delete"),hideLabel:!0,name:"deleted",id:"modx-"+this.ident+"-deleted",inputValue:1,checked:"1"==MODx.config.deleted_default?1:0}]}]},MODx.getQRContentField(this.ident,config.record.class_key)]},{id:"modx-"+this.ident+"-settings",title:_("settings"),layout:"form",cls:"modx-panel",autoHeight:!0,forceLayout:!0,labelWidth:100,defaults:{autoHeight:!0,border:!1},items:MODx.getQRSettings(this.ident,config.record)}]}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}]}),MODx.window.QuickCreateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickCreateResource,MODx.Window),Ext.reg("modx-window-quick-create-modResource",MODx.window.QuickCreateResource),MODx.window.QuickUpdateResource=function(config){config=config||{},this.ident=config.ident||"qur"+Ext.id(),Ext.applyIf(config,{title:_("quick_update_resource"),id:this.ident,action:"Resource/Update",buttons:[{text:config.cancelBtnText||_("cancel"),scope:this,handler:function(){this.hide()}},{text:config.saveBtnText||_("save"),scope:this,handler:function(){this.submit(!1)}},{text:config.saveBtnText||_("save_and_close"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.QuickUpdateResource.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickUpdateResource,MODx.window.QuickCreateResource),Ext.reg("modx-window-quick-update-modResource",MODx.window.QuickUpdateResource),MODx.getQRContentField=function(id,cls){id=id||"qur",cls=cls||"MODX\\Revolution\\modDocument";Ext.getBody().getViewSize();var o={};switch(cls){case"MODX\\Revolution\\modSymLink":o={xtype:"textfield",fieldLabel:_("symlink"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255};break;case"MODX\\Revolution\\modWebLink":o={xtype:"textfield",fieldLabel:_("weblink"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255,value:""};break;case"MODX\\Revolution\\modStaticResource":o={xtype:"modx-combo-browser",browserEl:"modx-browser",prependPath:!1,prependUrl:!1,fieldLabel:_("static_resource"),name:"content",id:"modx-"+id+"-content",anchor:"100%",maxLength:255,value:"",listeners:{select:{fn:function(data){"/"==data.url.substring(0,1)&&Ext.getCmp("modx-"+id+"-content").setValue(data.url.substring(1))},scope:this}}};break;case"MODX\\Revolution\\modResource":case"MODX\\Revolution\\modDocument":default:o={xtype:"textarea",name:"content",id:"modx-"+id+"-content",fieldLabel:_("content"),labelSeparator:"",anchor:"100%",style:"min-height: 200px",grow:!0}}return o},MODx.getQRSettings=function(id,va){return[{layout:"column",border:!1,anchor:"100%",defaults:{labelSeparator:"",labelAlign:"top",border:!1,layout:"form"},items:[{columnWidth:.5,items:[{xtype:"hidden",name:"parent",id:"modx-"+(id=id||"qur")+"-parent",value:va.parent},{xtype:"hidden",name:"context_key",id:"modx-"+id+"-context_key",value:va.context_key},{xtype:"hidden",name:"class_key",id:"modx-"+id+"-class_key",value:va.class_key},{xtype:"hidden",name:"publishedon",id:"modx-"+id+"-publishedon",value:va.publishedon},{xtype:"modx-field-parent-change",fieldLabel:_("resource_parent"),description:"[[*parent]]
"+_("resource_parent_help"),name:"parent-cmb",id:"modx-"+id+"-parent-change",value:va.parent||0,anchor:"100%",parentcmp:"modx-"+id+"-parent",contextcmp:"modx-"+id+"-context_key",currentid:va.id},{xtype:"modx-combo-class-derivatives",fieldLabel:_("resource_type"),description:"[[*class_key]]
",name:"class_key",hiddenName:"class_key",id:"modx-"+id+"-class-key",anchor:"100%",value:null!=va.class_key?va.class_key:"MODX\\Revolution\\modDocument"},{xtype:"modx-combo-content-type",fieldLabel:_("resource_content_type"),description:"[[*content_type]]
"+_("resource_content_type_help"),name:"content_type",hiddenName:"content_type",id:"modx-"+id+"-type",anchor:"100%",value:null!=va.content_type?va.content_type:MODx.config.default_content_type||1},{xtype:"modx-combo-content-disposition",fieldLabel:_("resource_contentdispo"),description:"[[*content_dispo]]
"+_("resource_contentdispo_help"),name:"content_dispo",hiddenName:"content_dispo",id:"modx-"+id+"-dispo",anchor:"100%",value:null!=va.content_dispo?va.content_dispo:0},{xtype:"numberfield",fieldLabel:_("resource_menuindex"),description:"[[*menuindex]]
"+_("resource_menuindex_help"),name:"menuindex",id:"modx-"+id+"-menuindex",width:75,value:va.menuindex||0}]},{columnWidth:.5,items:[{xtype:"xdatetime",fieldLabel:_("resource_publishedon"),description:"[[*publishedon]]
"+_("resource_publishedon_help"),name:"publishedon",id:"modx-"+id+"-publishedon",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.publishedon},{xtype:va.canpublish?"xdatetime":"hidden",fieldLabel:_("resource_publishdate"),description:"[[*pub_date]]
"+_("resource_publishdate_help"),name:"pub_date",id:"modx-"+id+"-pub-date",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.pub_date},{xtype:va.canpublish?"xdatetime":"hidden",fieldLabel:_("resource_unpublishdate"),description:"[[*unpub_date]]
"+_("resource_unpublishdate_help"),name:"unpub_date",id:"modx-"+id+"-unpub-date",allowBlank:!0,dateFormat:MODx.config.manager_date_format,timeFormat:MODx.config.manager_time_format,startDay:parseInt(MODx.config.manager_week_start),dateWidth:153,timeWidth:153,offset_time:MODx.config.server_offset_time,value:va.unpub_date},{xtype:"xcheckbox",boxLabel:_("resource_folder"),description:_("resource_folder_help"),hideLabel:!0,name:"isfolder",id:"modx-"+id+"-isfolder",inputValue:1,checked:null!=va.isfolder&&va.isfolder},{xtype:"xcheckbox",boxLabel:_("resource_show_in_tree"),description:_("resource_show_in_tree_help"),hideLabel:!0,name:"show_in_tree",id:"modx-"+id+"-show_in_tree",inputValue:1,checked:null!=va.show_in_tree?va.show_in_tree:1},{xtype:"xcheckbox",boxLabel:_("resource_hide_children_in_tree"),description:_("resource_hide_children_in_tree_help"),hideLabel:!0,name:"hide_children_in_tree",id:"modx-"+id+"-hide_children_in_tree",inputValue:1,checked:null!=va.hide_children_in_tree&&va.hide_children_in_tree},{xtype:"xcheckbox",boxLabel:_("resource_alias_visible"),description:_("resource_alias_visible_help"),hideLabel:!0,name:"alias_visible",id:"modx-"+id+"-alias-visible",inputValue:1,checked:null!=va.alias_visible?va.alias_visible:1},{xtype:"xcheckbox",boxLabel:_("resource_uri_override"),description:_("resource_uri_override_help"),hideLabel:!0,name:"uri_override",id:"modx-"+id+"-uri-override",value:1,checked:!!parseInt(va.uri_override),listeners:{check:{fn:MODx.handleFreezeUri}}},{xtype:"textfield",fieldLabel:_("resource_uri"),description:"[[*uri]]
"+_("resource_uri_help"),name:"uri",id:"modx-"+id+"-uri",maxLength:255,anchor:"100%",value:va.uri||"",hidden:!va.uri_override},{xtype:"xcheckbox",boxLabel:_("resource_richtext"),description:_("resource_richtext_help"),hideLabel:!0,name:"richtext",id:"modx-"+id+"-richtext",inputValue:1,checked:void 0!==va.richtext?va.richtext?1:0:"1"==MODx.config.richtext_default?1:0},{xtype:"xcheckbox",boxLabel:_("resource_searchable"),description:_("resource_searchable_help"),hideLabel:!0,name:"searchable",id:"modx-"+id+"-searchable",inputValue:1,checked:void 0!==va.searchable?va.searchable?1:0:"1"==MODx.config.search_default?1:0,listeners:{check:{fn:MODx.handleQUCB}}},{xtype:"xcheckbox",boxLabel:_("resource_cacheable"),description:_("resource_cacheable_help"),hideLabel:!0,name:"cacheable",id:"modx-"+id+"-cacheable",inputValue:1,checked:void 0!==va.cacheable?va.cacheable?1:0:"1"==MODx.config.cache_default?1:0},{xtype:"xcheckbox",name:"clearCache",id:"modx-"+id+"-clearcache",boxLabel:_("resource_syncsite"),description:_("resource_syncsite_help"),hideLabel:!0,inputValue:1,checked:void 0!==va.clearCache?va.clearCache?1:0:"1"==MODx.config.syncsite_default?1:0}]}]}]},MODx.handleQUCB=function(cb){var h=Ext.getCmp(cb.id+"-hd");cb.checked&&h?(cb.setValue(1),h.setValue(1)):h&&(cb.setValue(0),h.setValue(0))},MODx.handleFreezeUri=function(cb){var uri=Ext.getCmp(cb.id.replace("-override",""));if(!uri)return!1;cb.checked?uri.show():uri.hide()},Ext.override(Ext.tree.AsyncTreeNode,{listeners:{click:{fn:function(){return console.log("Clicked me!",arguments),!1},scope:this}}}),MODx.tree.Element=function(config){config=config||{},Ext.applyIf(config,{rootVisible:!1,enableDD:!Ext.isEmpty(MODx.config.enable_dragdrop),ddGroup:"modx-treedrop-elements-dd",title:"",url:MODx.config.connector_url,action:"Element/GetNodes",sortAction:"Element/Sort",baseParams:{currentElement:MODx.request.id||0,currentAction:MODx.request.a||0}}),MODx.tree.Element.superclass.constructor.call(this,config),this.on("afterSort",this.afterSort)},Ext.extend(MODx.tree.Element,MODx.tree.Tree,{forms:{},windows:{},stores:{},getToolbar:function(){return[]},createCategory:function(n,e){var r={};this.cm.activeNode&&this.cm.activeNode.attributes.data&&(r.parent=this.cm.activeNode.attributes.data.id),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=-1!==node.indexOf("_category_");this.refreshNode(node,self)},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},renameCategory:function(itm,e){var r=this.cm.activeNode.attributes.data;MODx.load({xtype:"modx-window-category-rename",record:r,listeners:{success:{fn:function(n){var c=n.a.result.object,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()}}}}).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 rec={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};MODx.load({xtype:"modx-window-element-duplicate",record:rec,redirect:!1,listeners:{success:{fn:function(response){response=Ext.decode(response.a.response.responseText);response.object.redirect?MODx.loadPage("element/"+rec.type+"/update","id="+response.object.id):this.refreshNode(this.cm.activeNode.id)},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},removeElement:function(itm,e){var oar=this.cm.activeNode.id.substr(2).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(),MODx.request.a=="element/"+oar[0]+"/update"&&MODx.request.id==oar[2]&&MODx.loadPage("welcome")},scope:this}}})},activatePlugin:function(itm,e){var oar=this.cm.activeNode.id.substr(2).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 oar=this.cm.activeNode.id.substr(2).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,w){var r={category:this.cm.activeNode.attributes.pk||""},w=MODx.load({xtype:"modx-window-quick-create-"+w,record:r,listeners:{success:{fn:function(){this.refreshNode(this.cm.activeNode.id,!0)},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="template"==type?"templatename":"name",w=MODx.load({xtype:"modx-window-quick-update-"+type,record:r.object,listeners:{success:{fn:function(newTitle){this.refreshNode(this.cm.activeNode.id);newTitle=''+newTitle.f.findField(nameField).getValue()+" ("+w.record.id+")";w.setTitle(w.title.replace(//,newTitle))},scope:this},hide:{fn:function(){this.destroy()}}}});w.title+=': '+w.record[nameField]+" ("+w.record.id+")",w.setValues(r.object),w.show(e.target)},scope:this}}})},_createElement:function(itm,e,t){var cat_id=this.cm.activeNode.id.substr(2).split("_"),a="type"==cat_id[0]?cat_id[1]:cat_id[0],cat_id="type"==cat_id[0]?0:"category"==cat_id[1]?cat_id[2]:cat_id[3],a="element/"+a+"/create";return this.redirect("?a="+a+"&category="+cat_id),this.cm.hide(),!1},afterSort:function(o){var dn,tn=o.event.target.attributes;"category"==tn.type&&(dn=o.event.dropNode.attributes,"n_category"!=tn.id&&"category"==dn.type?o.event.target.expand():(this.refreshNode(o.event.target.attributes.id,!0),this.refreshNode("n_type_"+o.event.dropNode.attributes.type,!0)))},_handleDrop:function(e){var target=e.target;return"above"!=e.point&&"below"!=e.point&&(("MODX\\Revolution\\modCategory"==target.attributes.classKey||"root"==target.attributes.classKey)&&(!!this.isCorrectType(e.dropNode,target)&&("category"==target.attributes.type&&"append"==e.point||0"+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),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)}}),"MODX\\Revolution\\modPlugin"===a.classKey&&(a.active?m.push({text:_("plugin_deactivate"),type:a.type,handler:this.deactivatePlugin}):m.push({text:_("plugin_activate"),type:a.type,handler:this.activatePlugin}))),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)}}),ui.hasClass("pdelete")&&m.push({text:_("remove_"+a.type),handler:this.removeElement}),m.push("-"),ui.hasClass("pnew")&&m.push({text:_("add_to_category_"+a.type),handler:this._createElement}),ui.hasClass("pnewcat")&&m.push({text:_("new_category"),handler:this.createCategory}),m},_getCategoryMenu:function(n){var a=n.attributes,ui=n.getUI(),m=[];return m.push({text:""+a.text+"",handler:function(){return!1},header:!0}),m.push("-"),ui.hasClass("pnewcat")&&m.push({text:_("category_create"),handler:this.createCategory}),ui.hasClass("peditcat")&&m.push({text:_("category_rename"),handler:this.renameCategory}),2",{cls:"x-btn-icon icon-file_manager",tooltip:{text:_("modx_browser")},handler:this.loadFileManager,scope:this,hidden:!(MODx.perm.file_manager&&!MODx.browserOpen)}],tbarCfg:{id:config.id+"-tbar"}}),MODx.tree.Directory.superclass.constructor.call(this,config),this.addEvents({beforeUpload:!0,afterUpload:!0,afterQuickCreate:!0,afterRename:!0,afterRemove:!0,fileBrowserSelect:!0,changeSource:!0,afterSort:!0}),this.on("click",function(n,e){n.select(),this.cm.activeNode=n},this),this.on("render",function(){var el=Ext.get(this.config.id);el.createChild({tag:"div",id:this.config.id+"_tb"}),el.createChild({tag:"div",id:this.config.id+"_filter"}),this.addSourceToolbar()},this),this.on("show",function(){if(!this.config.hideSourceCombo)try{this.sourceCombo.show()}catch(e){}},this),this._init(),this.on("afterrender",this.showRefresh,this),this.on("afterSort",this._handleAfterDrop,this),this.on("click",function(e){null!=this.uploader&&this.uploader.setBaseParams({path:e.id})}),this.uploader=new MODx.util.MultiUploadDialog.Upload({url:MODx.config.connector_url,base_params:{action:"Browser/File/Upload",wctx:MODx.ctx||"",source:this.getSource()}}),this.uploader.on("beforeupload",this.beforeUpload,this),this.uploader.on("uploadsuccess",this.uploadSuccess,this),this.uploader.on("uploaderror",this.uploadError,this),this.uploader.on("uploadfailed",this.uploadFailed,this)},Ext.extend(MODx.tree.Directory,MODx.tree.Tree,{windows:{},getRootMenu:function(node){var menu=[];return MODx.perm.directory_create&&menu.push({text:_("file_folder_create"),handler:this.createDirectory,scope:this}),MODx.perm.file_create&&menu.push({text:_("file_create"),handler:this.createFile,scope:this}),MODx.perm.file_upload&&menu.push({text:_("upload_files"),handler:this.uploadFiles,scope:this}),node.ownerTree.el.hasClass("pupdate")&&menu.push(["-",{text:_("update"),handler:function(){MODx.loadPage("source/update","id="+node.ownerTree.source)}}]),menu},_showContextMenu:function(node,e){var m;this.cm.activeNode=node,this.cm.removeAll(),node.isRoot?m=this.getRootMenu(node):node.attributes.menu&&node.attributes.menu.items&&(m=node.attributes.menu.items),m&&0]+)>)/gi,"")))),targetNode.reload(!0)},_handleDrag:function(dropEvent){var from=dropEvent.dropNode.attributes.id,to=dropEvent.target.attributes.id,orgSource="number"==typeof dropEvent.dropNode.attributes.sid?dropEvent.dropNode.attributes.sid:this.config.baseParams.source,destSource=(destSource="number"==typeof dropEvent.target.attributes.sid?dropEvent.target.attributes.sid:0)||dropEvent.tree.source;MODx.Ajax.request({url:this.config.url,params:{source:orgSource,from:from,destSource:destSource,to:to,action:this.config.sortAction||"Browser/Directory/Sort",point:dropEvent.point},listeners:{success:{fn:function(r){var el=dropEvent.dropNode.getUI().getTextEl();el&&Ext.get(el).frame(),this.fireEvent("afterSort",{event:dropEvent,result:r})},scope:this},failure:{fn:function(r){return MODx.form.Handler.errorJSON(r),this.refresh(),""!=r.message?MODx.msg.alert(_("error"),r.message):r.data&&r.data[0]&&MODx.msg.alert(r.data[0].id,r.data[0].msg),!1},scope:this}}})},getPath:function(node){var p,a,path="";if(null!=node&&null!=node)if(node!==this.root){for(p=node.parentNode,a=[node.text];p&&p!==this.root;)a.unshift(p.text),p=p.parentNode;a.unshift(this.root.attributes.path||""),path=a.join(this.pathSeparator)}else path=node.attributes.path||"";return(path=path.replace(/^[\/\.]*/,""))+"/"},editFile:function(itm,e){MODx.loadPage("system/file/edit","file="+this.cm.activeNode.attributes.id+"&source="+this.config.source)},openFile:function(itm,e){this.cm.activeNode.attributes.urlExternal&&window.open(this.cm.activeNode.attributes.urlExternal)},quickUpdateFile:function(itm,e){var node=this.cm.activeNode;MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Get",file:node.attributes.id,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:function(r){r={file:node.attributes.id,name:node.text,path:node.attributes.pathRelative,source:this.getSource(),content:r.object.content};MODx.load({xtype:"modx-window-file-quick-update",record:r,listeners:{hide:{fn:function(){this.destroy()}}}}).show(e.target)},scope:this}}})},createFile:function(itm,e){var path=this.cm.activeNode,dir="";path&&path.attributes&&(path.isRoot||"dir"===path.attributes.type?dir=path.attributes.id:"file"===path.attributes.type&&(dir=(path=path.attributes.path).substr(0,path.lastIndexOf("/")+1))),MODx.loadPage("system/file/create","directory="+dir+"&source="+this.getSource())},quickCreateFile:function(itm,e){var r=this.cm.activeNode,r={directory:decodeURIComponent(r.attributes.id),source:this.getSource()};MODx.load({xtype:"modx-window-file-quick-create",record:r,listeners:{success:{fn:function(r){this.fireEvent("afterQuickCreate"),this.refreshActiveNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},browser:null,loadFileManager:function(btn,e){var refresh=!1;null===this.browser?this.browser=MODx.load({xtype:"modx-browser",hideFiles:MODx.config.modx_browser_tree_hide_files,rootId:"/",wctx:MODx.ctx,source:this.config.baseParams.source,listeners:{select:{fn:function(data){this.fireEvent("fileBrowserSelect",data)},scope:this}}}):refresh=!0,this.browser&&(this.browser.setSource(this.config.baseParams.source),refresh&&this.browser.win.tree.refresh(),this.browser.show())},renameNode:function(field,nv,ov){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Browser/File/Rename",new_name:nv,old_name:ov,file:this.treeEditor.editNode.id,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:function(r){this.fireEvent("afterRename"),this.refreshActiveNode()},scope:this}}})},renameDirectory:function(item,e){var r=this.cm.activeNode,r={old_name:r.text,name:r.text,path:r.attributes.pathRelative,source:this.getSource()};MODx.load({xtype:"modx-window-directory-rename",record:r,listeners:{success:{fn:this.refreshParentNode,scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},renameFile:function(item,e){var r=this.cm.activeNode,r={old_name:r.text,name:r.text,path:r.attributes.pathRelative,source:this.getSource()};MODx.load({xtype:"modx-window-file-rename",record:r,listeners:{success:{fn:function(r){this.fireEvent("afterRename"),this.refreshParentNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},createDirectory:function(item,e){var r=!(!this.cm||!this.cm.activeNode)&&this.cm.activeNode,r={parent:r&&"dir"==r.attributes.type?r.attributes.pathRelative:"/",source:this.getSource()};MODx.load({xtype:"modx-window-directory-create",record:r,listeners:{success:{fn:function(){var parent=Ext.getCmp("folder-parent").getValue();this.cm.activeNode&&"constructor"===this.cm.activeNode.constructor.name||""===parent||"/"===parent?this.refresh():this.refreshActiveNode()},scope:this},hide:{fn:function(){this.destroy()}}}}).show(e?e.target:Ext.getBody())},setVisibility:function(item,e){var r=this.cm.activeNode,r={path:r.attributes.path,visibility:r.attributes.visibility,source:this.getSource()};MODx.load({xtype:"modx-window-set-visibility",record:r,listeners:{success:{fn:this.refreshParentNode,scope:this},hide:{fn:function(){this.destroy()}}}}).show(e.target)},removeDirectory:function(item,e){var node=this.cm.activeNode,directory=node.attributes.text;MODx.msg.confirm({text:_("file_folder_remove_confirm",{directory:directory}),url:MODx.config.connector_url,params:{action:"Browser/Directory/Remove",dir:node.attributes.path,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:this._afterRemove,scope:this}}})},removeFile:function(item,e){var filePath=this.cm.activeNode,fileName=filePath.attributes.text,filePath=filePath.attributes.pathRelative;MODx.msg.confirm({text:_("file_remove_confirm",{file:fileName}),url:MODx.config.connector_url,params:{action:"Browser/File/Remove",file:filePath,wctx:MODx.ctx||"",source:this.getSource()},listeners:{success:{fn:this._afterRemove,scope:this}}})},_afterRemove:function(){this.fireEvent("afterRemove"),this.refreshParentNode(),this.cm.activeNode=null},unpackFile:function(item,e){var node=this.cm.activeNode;MODx.msg.confirm({text:_("file_download_unzip")+" "+node.attributes.id,url:MODx.config.connectors_url,params:{action:"Browser/File/Unpack",file:node.attributes.id,wctx:MODx.ctx||"",source:this.getSource(),path:node.attributes.directory},listeners:{success:{fn:this.refreshParentNode,scope:this}}})},downloadFile:function(item,e){var node=this.cm.activeNode;location.href=MODx.config.connector_url+"?action=Browser/File/Download&download=1&file="+node.attributes.pathRelative+"&HTTP_MODAUTH="+MODx.siteId+"&source="+this.getSource()+"&wctx="+MODx.ctx},copyRelativePath:function(item,e){var node=this.cm.activeNode,dummyRelativePathInput=document.createElement("input");document.body.appendChild(dummyRelativePathInput),dummyRelativePathInput.setAttribute("value",node.attributes.pathRelative),dummyRelativePathInput.select(),document.execCommand("copy"),document.body.removeChild(dummyRelativePathInput)},getSource:function(){return this.config.baseParams.source},uploadFiles:function(){this.uploader.setBaseParams({source:this.getSource()}),this.uploader.browser=MODx.config.browserview,this.uploader.show()},uploadError:function(dlg,file,data,rec){},uploadFailed:function(dlg,file,rec){},uploadSuccess:function(){var node,pn;this.cm.activeNode?(node=this.cm.activeNode).isLeaf()?((pn=node.isLeaf()?node.parentNode:node)?pn.reload():node.id.match(/.*?\/$/)&&this.refreshActiveNode(),this.fireEvent("afterUpload",node)):this.refreshActiveNode():(this.refresh(),this.fireEvent("afterUpload"))},beforeUpload:function(){var path=this.config.openTo||this.config.rootId||"/";this.cm.activeNode&&(path=this.getPath(this.cm.activeNode),this.cm.activeNode.isLeaf()&&(path=this.getPath(this.cm.activeNode.parentNode))),this.uploader.setBaseParams({action:"Browser/File/Upload",path:path,wctx:MODx.ctx||"",source:this.getSource()}),this.fireEvent("beforeUpload",this.cm.activeNode)}}),Ext.reg("modx-tree-directory",MODx.tree.Directory),MODx.window.CreateDirectory=function(config){config=config||{},Ext.applyIf(config,{title:_("file_folder_create"),url:MODx.config.connector_url,action:"Browser/Directory/Create",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{fieldLabel:_("file_folder_parent"),id:"folder-parent",name:"parent",xtype:"textfield",anchor:"100%"}]}),MODx.window.CreateDirectory.superclass.constructor.call(this,config)},Ext.extend(MODx.window.CreateDirectory,MODx.Window),Ext.reg("modx-window-directory-create",MODx.window.CreateDirectory),MODx.window.SetVisibility=function(config){config=config||{},Ext.applyIf(config,{title:_("file_folder_visibility"),url:MODx.config.connector_url,action:"Browser/Visibility",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{name:"path",fieldLabel:_("file_folder_path"),xtype:"statictextfield",anchor:"100%",submitValue:!0},{fieldLabel:_("file_folder_visibility_label"),name:"visibility",xtype:"modx-combo-visibility",anchor:"100%",allowBlank:!1},{hideLabel:!0,xtype:"displayfield",value:_("file_folder_visibility_desc"),anchor:"100%",allowBlank:!1}]}),MODx.window.SetVisibility.superclass.constructor.call(this,config)},Ext.extend(MODx.window.SetVisibility,MODx.Window),Ext.reg("modx-window-set-visibility",MODx.window.SetVisibility),MODx.window.RenameDirectory=function(config){config=config||{},Ext.applyIf(config,{title:_("rename"),url:MODx.config.connector_url,action:"Browser/Directory/Rename",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",submitValue:!0,anchor:"100%"},{fieldLabel:_("old_name"),name:"old_name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("new_name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1}]}),MODx.window.RenameDirectory.superclass.constructor.call(this,config)},Ext.extend(MODx.window.RenameDirectory,MODx.Window),Ext.reg("modx-window-directory-rename",MODx.window.RenameDirectory),MODx.window.RenameFile=function(config){config=config||{},Ext.applyIf(config,{title:_("rename"),url:MODx.config.connector_url,action:"Browser/File/Rename",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",submitValue:!0,anchor:"100%"},{fieldLabel:_("old_name"),name:"old_name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("new_name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{name:"dir",xtype:"hidden"}]}),MODx.window.RenameFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.RenameFile,MODx.Window),Ext.reg("modx-window-file-rename",MODx.window.RenameFile),MODx.window.QuickUpdateFile=function(config){config=config||{},Ext.applyIf(config,{title:_("file_quick_update"),width:600,layout:"anchor",url:MODx.config.connector_url,action:"Browser/File/Update",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{xtype:"hidden",name:"file"},{fieldLabel:_("name"),name:"name",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("path"),name:"path",xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("content"),xtype:"textarea",name:"content",anchor:"100%",height:200}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}],buttons:[{text:config.cancelBtnText||_("cancel"),scope:this,handler:function(){this.hide()}},{text:config.saveBtnText||_("save"),scope:this,handler:function(){this.submit(!1)}},{text:config.saveBtnText||_("save_and_close"),cls:"primary-button",scope:this,handler:this.submit}]}),MODx.window.QuickUpdateFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickUpdateFile,MODx.Window),Ext.reg("modx-window-file-quick-update",MODx.window.QuickUpdateFile),MODx.window.QuickCreateFile=function(config){config=config||{},Ext.applyIf(config,{title:_("file_quick_create"),width:600,layout:"anchor",url:MODx.config.connector_url,action:"Browser/File/Create",fields:[{xtype:"hidden",name:"wctx",value:MODx.ctx||""},{xtype:"hidden",name:"source"},{fieldLabel:_("directory"),name:"directory",submitValue:!0,xtype:"statictextfield",anchor:"100%"},{fieldLabel:_("name"),name:"name",xtype:"textfield",anchor:"100%",allowBlank:!1},{fieldLabel:_("content"),xtype:"textarea",name:"content",anchor:"100%",height:200}],keys:[{key:Ext.EventObject.ENTER,shift:!0,fn:this.submit,scope:this}]}),MODx.window.QuickCreateFile.superclass.constructor.call(this,config)},Ext.extend(MODx.window.QuickCreateFile,MODx.Window),Ext.reg("modx-window-file-quick-create",MODx.window.QuickCreateFile),MODx.panel.FileTree=function(config){config=config||{},Ext.applyIf(config,{_treePrefix:"source-tree-",autoHeight:!0,defaults:{autoHeight:!0,border:!1}}),MODx.panel.FileTree.superclass.constructor.call(this,config),this.on("render",this.getSourceList,this)},Ext.extend(MODx.panel.FileTree,Ext.Container,{getSourceList:function(){MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Source/GetList",limit:0},listeners:{success:{fn:function(data){this.onSourceListReceived(data.results)},scope:this},failure:{fn:function(data){return 0"))},formatData:function(data){var size;return data.shortName=Ext.util.Format.ellipsis(data.name,18),data.sizeString=0!=data.size?(size=data.size)<1024?size+" "+_("file_size_bytes"):Math.round(10*size/1024)/10+" "+_("file_size_kilobytes"):0,data.imageSizeString=0!=data.preview?data.original_width+"x"+data.original_height+"px":0,data.imageSizeString="xpx"===data.imageSizeString?0:data.imageSizeString,data.dateString=Ext.isEmpty(data.lastmod)?0:new Date(data.lastmod).format(MODx.config.manager_date_format+" "+MODx.config.manager_time_format),this.lookup[data.name]=data},_initTemplates:function(){this.templates.thumb=new Ext.XTemplate('','','
',' ','

',"
","",'
',' ","","
{shortName}","
",""),this.templates.thumb.compile(),this.templates.list=new Ext.XTemplate('','',' ',' {name}',' ',' {sizeString}'," ",' ',' {imageSizeString}'," "," ","
",""),this.templates.list.compile(),this.templates.details=new Ext.XTemplate('','
',' ',' ",'

',"
"," ",' ',' "," ",' '," "+_("file_name")+":"," {name}",' '," "+_("file_size")+":"," {sizeString}"," ",' '," "+_("image_size")+":"," {imageSizeString}"," ",' '," "+_("file_last_modified")+":"," {dateString}"," ",' '," "+_("visibility")+":"," {visibility}"," ","
"," ","
"),this.templates.details.compile()},_showContextMenu:function(v,i,n,e){e.preventDefault(),this.select(n.id);var data=this.lookup[n.id],m=this.cm;if(m.removeAll(),data.menu){var menu=[];if(1",{xtype:"button",id:this.ident+"-cancel-btn",text:_("cancel"),minWidth:75,handler:this.onCancel,scope:this},{xtype:"button",id:this.ident+"-ok-btn",text:_("ok"),cls:"primary-button",minWidth:75,handler:this.onSelect,scope:this}]}]}),MODx.browser.RTE.superclass.constructor.call(this,config),this.config=config},Ext.extend(MODx.browser.RTE,Ext.Viewport,{returnEl:null,filter:function(){var filter=Ext.getCmp(this.ident+"filter");this.view.store.filter("name",filter.getValue(),!0),this.view.select(0)},load:function(dir){dir=dir||(Ext.isEmpty(this.config.openTo)?"":this.config.openTo),this.view.run({dir:dir,source:this.config.source,allowedFileTypes:this.config.allowedFileTypes||"",wctx:this.config.wctx||"web"}),this.sortStore()},sortStore:function(){var v=Ext.getCmp(this.ident+"sortSelect").getValue();this.view.store.sort(v,"name"==v?"ASC":"DESC"),this.view.select(0)},changeViewmode:function(){var v=Ext.getCmp(this.ident+"viewSelect").getValue();this.view.setTemplate(v),this.view.select(0)},reset:function(){this.rendered&&(Ext.getCmp(this.ident+"filter").reset(),this.view.getEl().dom.scrollTop=0),this.view.store.clearFilter(),this.view.select(0)},getToolbar:function(){return[{text:_("filter")+":",xtype:"label"},{xtype:"textfield",id:this.ident+"filter",selectOnFocus:!0,width:200,listeners:{render:{fn:function(){Ext.getCmp(this.ident+"filter").getEl().on("keyup",function(){this.filter()},this,{buffer:500})},scope:this}}},{text:_("sort_by")+":",xtype:"label"},{id:this.ident+"sortSelect",xtype:"combo",typeAhead:!0,triggerAction:"all",width:130,editable:!1,mode:"local",displayField:"desc",valueField:"name",lazyInit:!1,value:MODx.config.modx_browser_default_sort||"name",store:new Ext.data.SimpleStore({fields:["name","desc"],data:[["name",_("name")],["size",_("file_size")],["lastmod",_("last_modified")]]}),listeners:{select:{fn:this.sortStore,scope:this}}},"-",{text:_("files_viewmode")+":",xtype:"label"},"-",{id:this.ident+"viewSelect",xtype:"combo",typeAhead:!1,triggerAction:"all",width:100,editable:!1,mode:"local",displayField:"desc",valueField:"type",lazyInit:!1,value:MODx.config.modx_browser_default_viewmode||"grid",store:new Ext.data.SimpleStore({fields:["type","desc"],data:[["grid",_("files_viewmode_grid")],["list",_("files_viewmode_list")]]}),listeners:{select:{fn:this.changeViewmode,scope:this}}}]},getPathbar:function(){return{cls:"modx-browser-pathbbar",items:[{xtype:"textfield",id:this.ident+"-filepath",cls:"modx-browser-filepath",listeners:{focus:{fn:function(el){setTimeout(function(){var selRange,field=el.getEl().dom;field.createTextRange?((selRange=field.createTextRange()).collapse(!0),selRange.moveStart("character",0),selRange.moveEnd("character",field.value.length),selRange.select()):field.setSelectionRange?field.setSelectionRange(0,field.value.length):field.selectionStart&&(field.selectionStart=0,field.selectionEnd=field.value.length)},50)},scope:this}}}]}},setReturn:function(el){this.returnEl=el},onSelect:function(data){var selNode=this.view.getSelectedNodes()[0],callback=this.config.onSelect||this.onSelectHandler,lookup=this.view.lookup,scope=this.config.scope;callback&&(data=selNode?lookup[selNode.id]:null,Ext.callback(callback,scope||this,[data]),this.fireEvent("select",data),window.top.opener&&(window.top.close(),window.top.opener.focus()))},onCancel:function(){var callback=this.config.onSelect||this.onSelectHandler,scope=this.config.scope;Ext.callback(callback,scope||this,[null]),this.fireEvent("select",null),window.top.opener&&(window.top.close(),window.top.opener.focus())},onSelectHandler:function(data){Ext.get(this.returnEl).dom.value=unescape(data.url)}}),Ext.reg("modx-browser-rte",MODx.browser.RTE),Ext.apply(Ext,{isFirebug:window.console&&window.console.firebug}),MODx.Layout=function(config){config=config||{},Ext.BLANK_IMAGE_URL=MODx.config.manager_url+"assets/ext3/resources/images/default/s.gif",Ext.Ajax.defaultHeaders={modAuth:config.auth},Ext.Ajax.extraParams={HTTP_MODAUTH:config.auth},MODx.siteId=config.auth,MODx.expandHelp=!!+MODx.config.inline_help;var sp=new MODx.HttpProvider;Ext.state.Manager.setProvider(sp),sp.initState(MODx.defaultState),config.showTree=!1,config.search&&new MODx.SearchBar,Ext.applyIf(config,{layout:"border",id:"modx-layout",stateSave:!0,items:this.buildLayout(config)}),MODx.Layout.superclass.constructor.call(this,config),this.config=config,this.addEvents({afterLayout:!0,loadKeyMap:!0,loadTabs:!0}),this.loadKeys(),config.showTree||Ext.getCmp("modx-leftbar-tabs").collapse(!1),this.fireEvent("afterLayout")},Ext.extend(MODx.Layout,Ext.Viewport,{buildLayout:function(east){var items=[],north=this.getNorth(east),west=this.getWest(east),center=this.getCenter(east),south=this.getSouth(east),east=this.getEast(east);return north&&Ext.isObject(north)&&items.push(north),west&&Ext.isObject(west)&&items.push(west),center&&Ext.isObject(center)&&items.push(center),south&&Ext.isObject(south)&&items.push(south),east&&Ext.isObject(east)&&items.push(east),items},getNorth:function(config){return window.innerWidth<=640&&{xtype:"box",region:"north",applyTo:"modx-header",listeners:{afterrender:this.initPopper,scope:this}}},getWest:function(config){return window.innerWidth<=640?this.getTree(config):{region:"west",xtype:"box",id:"modx-header",applyTo:"modx-header",autoScroll:!0,width:80,listeners:{afterrender:this.initPopper,scope:this}}},getCenter:function(tree){var center={region:"center",applyTo:"modx-content",padding:"0 1px 0 0",style:"width:100%",bodyStyle:"background-color:transparent;",id:"modx-content",autoScroll:!0};if(window.innerWidth<=640)return center;tree=this.getTree(tree);return center.margins={right:-80,left:-8},tree.margins={left:80},{region:"center",layout:"border",id:"modx-split-wrapper",items:[tree,center]}},getSouth:function(config){},getEast:function(config){},getTree:function(config){var tabs=[];MODx.perm.resource_tree&&(tabs.push({title:_("resources"),xtype:"modx-tree-resource",id:"modx-resource-tree"}),config.showTree=!0),MODx.perm.element_tree&&(tabs.push({title:_("elements"),xtype:"modx-tree-element",id:"modx-tree-element"}),config.showTree=!0),MODx.perm.file_tree&&(tabs.push({title:_("files"),xtype:"modx-panel-filetree",id:"modx-file-tree"}),config.showTree=!0);return{region:"west",applyTo:"modx-leftbar",id:"modx-leftbar-tabs",split:!0,width:310,minSize:288,autoScroll:!0,unstyled:!0,useSplitTips:!0,monitorResize:!0,layout:"anchor",headerCfg:window.innerWidth<=640?{}:{tag:"div",cls:"none",id:"modx-leftbar-header",html:MODx.config.site_name},items:[{xtype:"modx-tabs",plain:!0,defaults:{autoScroll:!0,fitToFrame:!0},id:"modx-leftbar-tabpanel",border:!1,anchor:"100%",activeTab:0,stateful:!0,stateEvents:["tabchange"],getState:function(){return{activeTab:this.items.indexOf(this.getActiveTab())}},items:tabs,listeners:{afterrender:function(){var tabs=this;MODx.Ajax.request({url:MODx.config.connector_url,params:{action:"Resource/GetToolbar"},listeners:{success:{fn:function(res){for(var i in res.object)if(res.object.hasOwnProperty(i)&&null!=res.object[i].id&&"emptifier"==res.object[i].id){var tab=tabs.add({id:"modx-trash-link",title:'',handler:res.object[i].handler});res.object[i].disabled||tab.tabEl.classList.add("active"),res.object[i].tooltip&&(tab.tooltip=new Ext.ToolTip({target:new Ext.Element(tab.tabEl),title:res.object[i].tooltip}));break}},scope:this}}});var html,el,header=Ext.get("modx-leftbar-header");header&&((html="")!==MODx.config.manager_logo&&void 0!==MODx.config.manager_logo&&(html+='
'),(el=document.createElement("a")).href=MODx.config.default_site_url||MODx.config.site_url,el.title=MODx.config.site_name,el.innerText=Ext.util.Format.ellipsis(MODx.config.site_name,45,!0),el.target="_blank",html+=el.outerHTML,header.dom.innerHTML=html)},beforetabchange:{fn:function(panel,tree){if(tree&&"modx-trash-link"==tree.id)return!tree.tabEl.classList.contains("active")||(tree=Ext.getCmp("modx-resource-tree"))&&tree.redirect("?a=resource/trash"),!1},scope:this}}}],getState:function(){return{collapsed:this.collapsed,width:this.width}},collapse:function(animate){if(!this.collapsed&&!this.el.hasFxBlock()&&!1!==this.fireEvent("beforecollapse",this,animate))return animate&&960