diff --git a/NOTICE b/NOTICE index 71dfcfa87..38057cd82 100644 --- a/NOTICE +++ b/NOTICE @@ -84,10 +84,6 @@ files and utilities for further information: MIT License https://github.com/KnpLabs/php-github-api - Select 2 - MIT License - https://select2.org/ - Shibboleth Embedded Discovery Service (app/webroot/js/eds) Apache 2.0 https://shibboleth.net/products/embedded-discovery-service.html diff --git a/app/resources/locales/en_US/operation.po b/app/resources/locales/en_US/operation.po index 2268a90d6..c157cd963 100644 --- a/app/resources/locales/en_US/operation.po +++ b/app/resources/locales/en_US/operation.po @@ -42,6 +42,9 @@ msgstr "Are you sure you wish to generate a new API Key?" msgid "applySchema" msgstr "Apply Database Schema" +msgid "assign" +msgstr "Assign" + msgid "cancel" msgstr "Cancel" @@ -57,6 +60,9 @@ msgstr "Close" msgid "confirm" msgstr "Confirm" +msgid "confirm.generic" +msgstr "Are you sure you want to confirm this action?" + msgid "configure.a" msgstr "Configure {0}" @@ -99,6 +105,9 @@ msgstr "Go" msgid "identifiers.assign" msgstr "Assign Identifiers" +msgid "identifiers.assign.confirm" +msgstr "Are you sure you want to assign identifiers to this record ({0})?" + msgid "last" msgstr "Last" @@ -126,6 +135,9 @@ msgstr "Make Primary" msgid "provision" msgstr "Provision Now" +msgid "provision.confirm" +msgstr "Are you sure you want to run provisioning?" + msgid "provisioning.status" msgstr "Provisioning Status" @@ -135,6 +147,9 @@ msgstr "Add/Restore Default Types" msgid "reconcile" msgstr "Reconcile" +msgid "reconcile.confirm" +msgstr "Are you sure you want to reconcile this group ({0})?" + msgid "remove" msgstr "Remove" diff --git a/app/templates/Groups/columns.inc b/app/templates/Groups/columns.inc index 3f36adfb0..2167470fd 100644 --- a/app/templates/Groups/columns.inc +++ b/app/templates/Groups/columns.inc @@ -64,15 +64,12 @@ $rowActions = [ 'action' => 'index', 'icon' => 'history' ], - [ - 'controller' => 'identifiers', - 'action' => 'index', - 'icon' => 'label', - 'if' => 'notAutomatic' - ], [ 'action' => 'reconcile', - 'icon' => 'sync' + 'icon' => 'sync', + 'confirm' => [ + 'dg_confirm_btn' => __d('operation', 'reconcile') + ] ] ]; diff --git a/app/templates/Groups/fields-nav.inc b/app/templates/Groups/fields-nav.inc index 6078c539f..12310d062 100644 --- a/app/templates/Groups/fields-nav.inc +++ b/app/templates/Groups/fields-nav.inc @@ -48,6 +48,51 @@ $topLinks = [ ] ], 'class' => '' + ], + [ + 'icon' => 'cloud_sync', + 'order' => 'Default', + 'label' => __d('operation', 'provisioning.status'), + 'link' => [ + 'controller' => 'provisioning_targets', + 'action' => 'status', + '?' => [ + 'group_id' => $vv_obj->id + ] + ], + 'class' => '' + ], + [ + 'icon' => 'badge', + 'order' => 'Default', + 'label' => __d('operation', 'identifiers.assign'), + 'link' => [ + 'controller' => 'identifier_assignments', + 'action' => 'assign', + '?' => [ + 'group_id' => $vv_obj->id + ] + ], + 'if' => 'notAutomatic', + 'confirm' => [ + 'dg_body_txt' => __d('operation', 'identifiers.assign.confirm',[$vv_obj->id]), + 'dg_confirm_btn' => __d('operation', 'assign') + ], + 'class' => '' + ], + [ + 'icon' => 'sync', + 'order' => 'Default', + 'label' => __d('operation', 'reconcile'), + 'link' => [ + 'action' => 'reconcile', + $vv_obj->id + ], + 'confirm' => [ + 'dg_body_txt' => __d('operation', 'reconcile.confirm', [$vv_obj->id]), + 'dg_confirm_btn' => __d('operation', 'reconcile') + ], + 'class' => '' ] ]; diff --git a/app/templates/IdentifierAssignments/columns.inc b/app/templates/IdentifierAssignments/columns.inc index 8a168457e..835530014 100644 --- a/app/templates/IdentifierAssignments/columns.inc +++ b/app/templates/IdentifierAssignments/columns.inc @@ -57,8 +57,11 @@ $rowActions = [ 'icon' => 'electrical_services' ] ]; - -// TODO: develop $bulkActions. For now, use a placeholder. + +/* +// When the $bulkActions variable exists in a columns.inc config, the "Bulk edit" switch will appear in the index. $bulkActions = [ + // TODO: develop bulk actions. For now, use a placeholder. 'delete' => true -]; \ No newline at end of file +]; +*/ \ No newline at end of file diff --git a/app/templates/People/fields-nav.inc b/app/templates/People/fields-nav.inc index 96ede675b..b97d5ec44 100644 --- a/app/templates/People/fields-nav.inc +++ b/app/templates/People/fields-nav.inc @@ -80,6 +80,10 @@ $topLinks = [ 'person_id' => $vv_obj->id ] ], + 'confirm' => [ + 'dg_body_txt' => __d('operation', 'identifiers.assign.confirm', [$vv_obj->id]), + 'dg_confirm_btn' => __d('operation', 'assign') + ], 'class' => '' ] ]; diff --git a/app/templates/ProvisioningTargets/status.php b/app/templates/ProvisioningTargets/status.php index 3781cbbf5..4c8527537 100644 --- a/app/templates/ProvisioningTargets/status.php +++ b/app/templates/ProvisioningTargets/status.php @@ -53,16 +53,10 @@
- - +
- + @@ -74,34 +68,49 @@ - diff --git a/app/templates/Standard/add-edit-view.php b/app/templates/Standard/add-edit-view.php index 520cd690a..39fc8818e 100644 --- a/app/templates/Standard/add-edit-view.php +++ b/app/templates/Standard/add-edit-view.php @@ -125,32 +125,29 @@ $action_args['vv_actions'][] = [ 'order' => $this->Menu->getMenuOrder($t['order']), 'icon' => $this->Menu->getMenuIcon($t['icon']), - 'url' => $this->Url->build($t['link']), + 'url' => $t['link'], 'label' => $t['label'], + 'class' => !empty($t['class']) ? $t['class'] : '', + 'confirm' => !empty($t['confirm']) ? $t['confirm'] : [] ]; } } // Delete if($vv_action != 'add' && !empty($vv_obj->id) && $vv_permissions['delete']) { - $actionPostBtnArray = ['action' => 'delete', $vv_obj->id]; - $actionUrl = $this->Url->build(['action' => 'delete', $vv_obj->id]); - $action_args['vv_actions'][] = array( + $action_args['vv_actions'][] = [ 'order' => $this->Menu->getMenuOrder('Delete'), 'icon' => $this->Menu->getMenuIcon('Delete'), - 'url' => 'javascript:void(0);', + 'url' => ['action' => 'delete', $vv_obj->id], 'label' => __d('operation', 'delete'), - 'class' => 'deletebutton nospin', - 'onclick' => array( - 'dg_bd_txt' => __d('operation', 'delete.confirm', [$vv_obj->id]), - 'dg_post_btn_array' => $actionPostBtnArray, - 'dg_url' => $actionUrl, - 'dg_conf_btn' => __d('operation', 'remove'), - 'dg_cancel_btn' => __d('operation', 'cancel'), + 'class' => 'deletebutton', + 'confirm' => [ + 'method' => 'post', 'dg_title' => __d('operation', 'remove'), - 'dg_bd_txt_repl_str' => '' - ) - ); + 'dg_body_txt' => __d('operation', 'delete.confirm', [$vv_obj->id]), + 'dg_confirm_btn' => __d('operation', 'remove') + ] + ]; } if(!empty($action_args['vv_actions'])) { diff --git a/app/templates/Standard/index.php b/app/templates/Standard/index.php index 7315a375d..6725109f6 100644 --- a/app/templates/Standard/index.php +++ b/app/templates/Standard/index.php @@ -105,13 +105,11 @@ $action_args['vv_actions'][] = [ 'order' => $this->Menu->getMenuOrder('Add'), 'icon' => $this->Menu->getMenuIcon('Add'), - 'url' => $this->Url->build( - [ - 'controller' => $modelsName, - 'action' => 'add', - '?' => $linkFilter - ] - ), + 'url' => [ + 'controller' => $modelsName, + 'action' => 'add', + '?' => $linkFilter + ], 'label' => __d('operation', 'add.a', __d('controller', $modelsName, [1])), ]; } @@ -128,8 +126,10 @@ $action_args['vv_actions'][] = [ 'order' => $this->Menu->getMenuOrder($t['order']), 'icon' => $this->Menu->getMenuIcon($t['icon']), - 'url' => $this->Url->build($t['link']), + 'url' => $t['link'], 'label' => $t['label'], + 'class' => !empty($t['class']) ? $t['class'] : '', + 'confirm' => !empty($t['confirm']) ? $t['confirm'] : [] ]; } } @@ -179,7 +179,7 @@ - + Menu->getMenuIcon('Default'); $actionIconClass = !empty($a['iconClass']) ? $a['iconClass'] : ''; $actionClass = !empty($a['class']) ? $a['class'] : ''; - $actionUrl = ''; - $actionLabel = ''; - $actionOnClick = []; // used for confirmation dialog + $actionUrl = ['action' => $a['action'], $entity->id]; + $actionLabel = !empty($a['label']) ? $a['label'] : __d('operation', $a['action']); - // Generate the link text and urls: - - // If we have a .confirm text, we need to generate a confirm dialog box - $confirmKey = $a['action'].'.confirm'; - $confirmTxt = __d('operation', $confirmKey); + if (!empty($a['controller'])) { + // We're linking into a related controller + $actionLabel = !empty($a['label']) ? $a['label'] : __d('controller', Inflector::camelize(Inflector::pluralize($a['controller'])), [99]); + $actionUrl = [ + 'controller' => $a['controller'], + 'action' => $a['action'], + '?' => [$tableFK => $entity->id] + ]; + } - if($confirmTxt != $confirmKey) { - // We found the localized string - $actionPostBtnArray = ['action' => $a['action'], $entity->id]; - $actionUrl = $this->Url->build(['action' => $a['action'], $entity->id]); - // XXX should be configurable which field we put in, maybe displayField? + // Generate the link text and urls: + + if(!empty($a['confirm'])) { + // Gather the default confirmation body text. By convention this is named + // [action].confirm in the operation.po file but can be overridden in the actions array. + $confirmKey = $a['action'].'.confirm'; + $confirmTxt = __d('operation', $confirmKey, [$entity->id]); + + // Gather the dialog text - we need to expand these (here) so we can provide the default confirmTxt when appropriate + $dialogBodyText = !empty($a['confirm']['dg_body_txt']) ? $a['confirm']['dg_body_txt'] : $confirmTxt; + $dialogTitle = !empty($a['confirm']['dg_title']) ? $a['confirm']['dg_title'] : $actionLabel; + $confirmButtonText = !empty($a['confirm']['dg_confirm_btn']) ? $a['confirm']['dg_confirm_btn'] : __d('operation','confirm'); + $cancelButtonText = !empty($a['confirm']['dg_cancel_btn']) ? $a['confirm']['dg_cancel_btn'] : __d('operation','cancel'); + $replacements = !empty($a['confirm']['dg_body_txt_replacements']) ? $a['confirm']['dg_body_txt_replacements'] : ''; + $action_args['vv_actions'][] = array( 'order' => $actionOrder, 'icon' => $actionIcon, - 'url' => 'javascript:void(0);', - 'label' => __d('operation', $a['action']), + 'iconClass' => $actionIconClass, + 'url' => $actionUrl, + 'label' => $actionLabel, 'class' => !empty($actionClass) ? $actionClass . ' nospin' : 'nospin', - 'onclick' => array( - 'dg_bd_txt' => __d('operation', $confirmKey, [$entity->id]), // dialog body text - 'dg_post_btn_array' => $actionPostBtnArray, // postButton array for building the postButton - 'dg_url' => $actionUrl, // action url for building a unique ID - 'dg_conf_btn' => __d('operation', 'confirm'), // dialog confirm button text - 'dg_cancel_btn' => __d('operation', 'cancel'), // dialog cancel button text - 'dg_title' => __d('operation', 'confirm'), // dialog box title - 'dg_bd_txt_repl_str' => '' // dialog body text replacement strings - ), - ); - } elseif(!empty($a['controller'])) { - // We're linking into a related controller - $actionLabel = __d('controller', Inflector::camelize(Inflector::pluralize($a['controller'])), [99]); - $actionUrl = $this->Url->build( - ['controller' => $a['controller'], - 'action' => $a['action'], - '?' => [ $tableFK => $entity->id] ] + 'confirm' => [ + 'dg_title' => $dialogTitle, + 'dg_body_txt' => $dialogBodyText, + 'dg_confirm_btn' => $confirmButtonText, + 'dg_cancel_btn' => $cancelButtonText, + 'dg_body_txt_replacements' => $replacements + ] ); } else { - $actionLabel = __d('operation', $a['action']); - $actionUrl = $this->Url->build(['action' => $a['action'], $entity->id]); - } - - // If a specific label is sent in the config, use it instead - if(!empty($a['label'])) { - $actionLabel = $a['label']; + // Set the action link configuration + $action_args['vv_actions'][] = array( + 'order' => $actionOrder, + 'icon' => $actionIcon, + 'iconClass' => $actionIconClass, + 'url' => $actionUrl, + 'label' => $actionLabel, + 'class' => $actionClass + ); } - - // Set the action link configuration - $action_args['vv_actions'][] = array( - 'order' => $actionOrder, - 'icon' => $actionIcon, - 'iconClass' => $actionIconClass, - 'url' => $actionUrl, - 'label' => $actionLabel, - 'class' => $actionClass, - 'onclick' => $actionOnClick - ); } } diff --git a/app/templates/element/filter.php b/app/templates/element/filter.php index a3f5098cb..c316e9e0f 100644 --- a/app/templates/element/filter.php +++ b/app/templates/element/filter.php @@ -92,8 +92,10 @@
- - + + + + diff --git a/app/templates/element/javascript.php b/app/templates/element/javascript.php index 8007646b4..a7c4185a7 100644 --- a/app/templates/element/javascript.php +++ b/app/templates/element/javascript.php @@ -156,16 +156,6 @@ // Make all select form controls Bootstrappy $("select").addClass("form-select"); - // Use select2 library everywhere except - // XXX TODO: Find a replacement for Select2 - it is not accessible. - // - duet-date - // $("select").not("#limit").not(".duet-date__select--month").not(".duet-date__select--year").select2({ - // width: '100%', - // tags: true, - // placeholder: "-- Select --", - // allowClear: true - // }); - // Generic row click handling // First capture mouse location to test if we're clicking or drag-selecting (for copy) var mouseDownEvent = null; diff --git a/app/templates/element/menuAction.php b/app/templates/element/menuAction.php index b70d01337..ba1dcbc95 100644 --- a/app/templates/element/menuAction.php +++ b/app/templates/element/menuAction.php @@ -64,6 +64,7 @@ class=""> - */ ?>
diff --git a/app/templates/element/mveaCanvas.php b/app/templates/element/mveaCanvas.php index ea76f0b0f..6645d2cd3 100644 --- a/app/templates/element/mveaCanvas.php +++ b/app/templates/element/mveaCanvas.php @@ -46,15 +46,13 @@ $actionIcon = !empty($a['icon']) ? $a['icon'] : $this->Menu->getMenuIcon('Default'); $actionIconClass = !empty($a['iconClass']) ? $a['iconClass'] : ''; $actionClass = !empty($a['class']) ? $a['class'] . ' nospin' : 'nospin'; - $actionUrl = $this->Url->build( - [ - 'controller' => $a['controller'], - 'action' => $a['action'], - '?' => [ - $vv_entity_type . '_id' => $objId - ] + $actionUrl = [ + 'controller' => $a['controller'], + 'action' => $a['action'], + '?' => [ + $vv_entity_type . '_id' => $objId ] - ); + ]; $actionLabel = __d('controller', Cake\Utility\Inflector::camelize($a['controller']), [1]); $actionDataAttrs = [['data-cm-mveatype', $a['controller']]]; $action_args['vv_actions'][] = [ diff --git a/app/templates/element/subnavigation.php b/app/templates/element/subnavigation.php index b4e2a4afa..69380138d 100644 --- a/app/templates/element/subnavigation.php +++ b/app/templates/element/subnavigation.php @@ -118,26 +118,23 @@ } } // delete - $actionPostBtnArray = ['action' => 'delete', $curId]; - $actionUrl = $this->Url->build(['action' => 'delete', $curId]); $action_args['vv_actions'][] = array( 'order' => $this->Menu->getMenuOrder('Delete'), 'icon' => $this->Menu->getMenuIcon('Delete'), - 'url' => 'javascript:void(0);', + 'url' => ['action' => 'delete', $curId], 'label' => __d('operation', 'delete'), 'class' => 'deletebutton nospin', - 'onclick' => array( - 'dg_bd_txt' => __d( + 'confirm' => array( + 'dg_body_txt' => __d( 'operation', 'delete.confirm', [$supertitle . ', ' . __d('information','entity.id',[$curId])] ), 'dg_post_btn_array' => $actionPostBtnArray, - 'dg_url' => $actionUrl, - 'dg_conf_btn' => __d('operation', 'remove'), + 'dg_confirm_btn' => __d('operation', 'remove'), 'dg_cancel_btn' => __d('operation', 'cancel'), 'dg_title' => __d('operation', 'remove'), - 'dg_bd_txt_repl_str' => '' + 'dg_body_txt_replacements' => '' ) ); ?> diff --git a/app/templates/layout/default.php b/app/templates/layout/default.php index 2e4f07940..c9087c935 100644 --- a/app/templates/layout/default.php +++ b/app/templates/layout/default.php @@ -58,7 +58,6 @@ Html->css([ 'bootstrap/bootstrap.min', - 'select2/select2.min', 'co-color', 'co-base', 'co-responsive' @@ -67,8 +66,7 @@ Html->script([ 'bootstrap/bootstrap.bundle.min.js', - 'jquery/jquery.min.js', - 'select2/select2.min.js' + 'jquery/jquery.min.js' ]) . PHP_EOL ?> diff --git a/app/templates/layout/iframe.php b/app/templates/layout/iframe.php index 8ef538067..e3a3e1b35 100644 --- a/app/templates/layout/iframe.php +++ b/app/templates/layout/iframe.php @@ -58,7 +58,6 @@ Html->css([ 'bootstrap/bootstrap.min', - 'select2/select2.min', 'co-color', 'co-base', 'co-responsive' @@ -67,8 +66,7 @@ Html->script([ 'bootstrap/bootstrap.bundle.min.js', - 'jquery/jquery.min.js', - 'select2/select2.min.js' + 'jquery/jquery.min.js' ]) . PHP_EOL ?> diff --git a/app/webroot/css/co-base.css b/app/webroot/css/co-base.css index f0447caa9..a80b75fe4 100644 --- a/app/webroot/css/co-base.css +++ b/app/webroot/css/co-base.css @@ -756,9 +756,12 @@ ul.form-list li.alert-banner .co-alert { background-color: transparent; } #content .top-filters legend .material-icons { - font-size: 1.4em; color: var(--cmg-color-headings); } +#content .top-filters legend .material-icons.top-filters-search-icon { + font-size: 1.4rem; + padding: 0 0.2rem 0 0.1rem; +} #content .top-filters legend button.cm-toggle .material-icons { font-size: 34px; line-height: 17px; @@ -766,7 +769,7 @@ ul.form-list li.alert-banner .co-alert { .top-filters fieldset { clear: both; position: relative; - padding: 0.5em 0.5em 0; + padding: 0.4rem 0.5rem 0; margin: 0; background-color: var(--cmg-color-bg-001); } @@ -1550,12 +1553,15 @@ th, td { th { background-color: var(--cmg-color-bg-003); } +thead td.actions { + background-color: var(--cmg-color-bg-003); +} td { border-bottom: 1px solid var(--cmg-color-bg-005); } th:first-child, td:first-child { - padding-left: 1.25em; + padding-left: 1rem; } table.list-mode th.actions:first-child, table.list-mode td.actions:first-child { @@ -1825,12 +1831,4 @@ html.dark-mode .btn-default:active { footer { text-align: center; padding: 2em 2em 1em; -} -/* Select2 */ -.select2-container--default .select2-selection--single { - border: 1px solid var(--cmg-color-bg-006); - background-color: var(--cmg-color-body-bg); -} -.select2-container--default .select2-selection--single .select2-selection__placeholder { - color: var(--cmg-color-txt-soft); } \ No newline at end of file diff --git a/app/webroot/css/select2/select2.min.css b/app/webroot/css/select2/select2.min.css deleted file mode 100644 index 7c18ad59d..000000000 --- a/app/webroot/css/select2/select2.min.css +++ /dev/null @@ -1 +0,0 @@ -.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/app/webroot/js/comanage/comanage.js b/app/webroot/js/comanage/comanage.js index 0dd271a1b..f57e94db1 100644 --- a/app/webroot/js/comanage/comanage.js +++ b/app/webroot/js/comanage/comanage.js @@ -67,18 +67,20 @@ function replaceTokens(text,replacements) { return processedString; } -// Generate a dialog box confirming . On confirmation, click a DOM element referenced by . +// Generate a dialog box confirming . If a clickId is supplied, on confirmation, click a DOM element referenced by . // The clickId DOM element is intended to be a CakePHP postButton or postLink (which may be visually hidden). -// txt - body text (string, required) -// clickId - id of DOM element (string, required) -// confirmbtxt - confirm button text (string, optional) -// cancelbtxt - cancel button text (string, optional) -// titletxt - dialog title text (string, optional) +// txt - body text (string, required) +// confirmUrl - url for confirm button (string, required) +// clickId - id of DOM element (string, required) +// confirmbtxt - confirm button text (string, optional) +// cancelbtxt - cancel button text (string, optional) +// titletxt - dialog title text (string, optional) // tokenReplacements - strings to replace tokens in dialog body text (array, optional) -function js_confirm_generic(txt, clickId, confirmbtxt, cancelbtxt, titletxt, tokenReplacements) { +function js_confirm_generic(txt, confirmUrl, clickId, confirmbtxt, cancelbtxt, titletxt, tokenReplacements) { var bodyText = txt; - var clickId = clickId; + var confUrl = confirmUrl; + var clickId = (clickId != '' ? clickId : undefined); var confbutton = confirmbtxt; var cxlbutton = cancelbtxt; var title = titletxt; @@ -106,11 +108,16 @@ function js_confirm_generic(txt, clickId, confirmbtxt, cancelbtxt, titletxt, tok // Set the body text of the dialog $("#dialog-text").text(bodyText); - - // Set the dialog confirmation button to click the DOM - // element referenced by the clickId + $("#dialog-confirm-button").click(function() { - $("#" + clickId).click(); + if(clickId !== undefined) { + // If we have a clickId, set the dialog confirmation button to click the DOM + // element referenced by it. + $("#" + clickId).click(); + } else { + // Otherwise just redirect to the confirmation URL + location.href = confirmUrl; + } }); // Override the button texts if set diff --git a/app/webroot/js/select2/select2.min.js b/app/webroot/js/select2/select2.min.js deleted file mode 100644 index 091d4b500..000000000 --- a/app/webroot/js/select2/select2.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ -!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(u){var e=function(){if(u&&u.fn&&u.fn.select2&&u.fn.select2.amd)var e=u.fn.select2.amd;var t,n,r,h,o,s,f,g,m,v,y,_,i,a,b;function w(e,t){return i.call(e,t)}function l(e,t){var n,r,i,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(s=(e=e.split("/")).length-1,y.nodeIdCompat&&b.test(e[s])&&(e[s]=e[s].replace(b,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},i.appendMany=function(e,t){if("1.7"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},i.__cache={};var n=0;return i.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++n),t=n.toString())),t},i.StoreData=function(e,t,n){var r=i.GetUniqueElementId(e);i.__cache[r]||(i.__cache[r]={}),i.__cache[r][t]=n},i.GetData=function(e,t){var n=i.GetUniqueElementId(e);return t?i.__cache[n]&&null!=i.__cache[n][t]?i.__cache[n][t]:o(e).data(t):i.__cache[n]},i.RemoveData=function(e){var t=i.GetUniqueElementId(e);null!=i.__cache[t]&&delete i.__cache[t],e.removeAttribute("data-select2-id")},i}),e.define("select2/results",["jquery","./utils"],function(h,f){function r(e,t,n){this.$element=e,this.data=n,this.options=t,r.__super__.constructor.call(this)}return f.Extend(r,f.Observable),r.prototype.render=function(){var e=h('
    ');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},r.prototype.clear=function(){this.$results.empty()},r.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h(''),r=this.options.get("translations").get(e.message);n.append(t(r(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},r.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},r.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n",{class:"select2-results__options select2-results__options--nested"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},r.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");"true"==e.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var r=n-1;0===e.length&&(r=0);var i=t.eq(r);i.trigger("mouseenter");var o=l.$results.offset().top,s=i.offset().top,a=l.$results.scrollTop()+(s-o);0===r?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var r=t.eq(n);r.trigger("mouseenter");var i=l.$results.offset().top+l.$results.outerHeight(!1),o=r.offset().top+r.outerHeight(!1),s=l.$results.scrollTop()+o-i;0===n?l.$results.scrollTop(0):ithis.$results.outerHeight()||o<0)&&this.$results.scrollTop(i)}},r.prototype.template=function(e,t){var n=this.options.get("templateResult"),r=this.options.get("escapeMarkup"),i=n(e,t);null==i?t.style.display="none":"string"==typeof i?t.innerHTML=r(i):h(t).append(i)},r}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,r,i){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return r.Extend(o,r.Observable),o.prototype.render=function(){var e=n('');return this._tabindex=0,null!=r.GetData(this.$element[0],"old-tabindex")?this._tabindex=r.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,r=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===i.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",r),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&r.GetData(this,"element").select2("close")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},o.prototype.position=function(e,t){t.find(".selection").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,r){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html(''),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var r=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",r).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",r),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e("")},i.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),r=this.display(t,n);n.empty().append(r);var i=t.title||t.text;i?n.attr("title",i):n.removeAttr("title")}else this.clear()},i}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(i,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html('
      '),e},n.prototype.bind=function(e,t){var r=this;n.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){r.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!r.isDisabled()){var t=i(this).parent(),n=l.GetData(t[0],"data");r.trigger("unselect",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},n.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},n.prototype.selectionContainer=function(){return i('
    • ×
    • ')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n×');a.StoreData(r[0],"data",t),this.$selection.find(".select2-selection__rendered").prepend(r)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(r,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=r('');this.$searchContainer=t,this.$search=t.find("input");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),t.on("open",function(){r.$search.attr("aria-controls",i),r.$search.trigger("focus")}),t.on("close",function(){r.$search.val(""),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.trigger("focus")}),t.on("enable",function(){r.$search.prop("disabled",!1),r._transferTabIndex()}),t.on("disable",function(){r.$search.prop("disabled",!0)}),t.on("focus",function(e){r.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){r.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){r._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&""===r.$search.val()){var t=r.$searchContainer.prev(".select2-selection__choice");if(0this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("select",function(){r._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var r=this;this._checkIfMaximumSelected(function(){e.call(r,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var r=this;this.current(function(e){var t=null!=e?e.length:0;0=r.maximumSelectionLength?r.trigger("results:message",{message:"maximumSelected",args:{maximum:r.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('');return this.$searchContainer=n,this.$search=n.find("input"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){o(this).off("keyup")}),this.$search.on("keyup input",function(e){r.handleSearch(e)}),t.on("open",function(){r.$search.attr("tabindex",0),r.$search.attr("aria-controls",i),r.$search.trigger("focus"),window.setTimeout(function(){r.$search.trigger("focus")},0)}),t.on("close",function(){r.$search.attr("tabindex",-1),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.val(""),r.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||r.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(r.showSearch(e)?r.$searchContainer.removeClass("select2-search--hide"):r.$searchContainer.addClass("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,r){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,r)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),r=t.length-1;0<=r;r--){var i=t[r];this.placeholder.id===i.id&&n.splice(r,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,r){this.lastParams={},e.call(this,t,n,r),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("query",function(e){r.lastParams=e,r.loading=!0}),t.on("query:append",function(e){r.lastParams=e,r.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('
    • '),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("open",function(){r._showDropdown(),r._attachPositioningHandler(t),r._bindContainerResultHandlers(t)}),t.on("close",function(){r._hideDropdown(),r._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(""),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,r="scroll.select2."+t.id,i="resize.select2."+t.id,o="orientationchange.select2."+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(r,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(r+" "+i+" "+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,r="resize.select2."+t.id,i="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+r+" "+i)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass("select2-dropdown--above"),n=this.$dropdown.hasClass("select2-dropdown--below"),r=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=i.top,o.bottom=i.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=ai.bottom+s,d={left:i.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(r="below"),u||!c||t?!c&&u&&t&&(r="below"):r="above",("above"==r||t&&"below"!==r)&&(d.top=o.top-h.top-s),null!=r&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+r),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+r)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,r){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,r)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,r=0;r');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("jquery-mousewheel",["jquery"],function(e){return e}),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(i,e,o,t,s){if(null==i.fn.select2){var a=["open","close","destroy"];i.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new o(i(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,r=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,r)}),-1
      - - + description; ?>