Plugin Directory

Changeset 2593591


Ignore:
Timestamp:
09/04/2021 09:36:08 AM (5 years ago)
Author:
Desertsnowman
Message:

Update v2.0.3

Location:
plugin-groups/trunk
Files:
3 added
4 deleted
8 edited

Legend:

Unmodified
Added
Removed
  • plugin-groups/trunk/classes/class-plugin-groups.php

    r2586331 r2593591  
    104104        // Start hooks.
    105105        $this->setup_hooks();
     106
     107        // Init the bulk actions.
     108        new Bulk_Actions( $this );
    106109    }
    107110
     
    127130        add_filter( 'bulk_actions-plugins', array( $this, 'bulk_actions' ) );
    128131        add_action( 'admin_bar_menu', array( $this, 'admin_bar_item' ), 100 );
     132        add_filter( 'self_admin_url', array( $this, 'append_group_to_self' ), 10, 3 );
     133        add_filter( 'plugin_action_links', array( $this, 'append_group_to_actions' ) );
     134    }
     135
     136    /**
     137     * Append the current group id to plugin action links to maintain selection on activation and deactivation of plugins.
     138     *
     139     * @param array $actions Array of action links.
     140     *
     141     * @return array
     142     */
     143    public function append_group_to_actions( $actions ) {
     144
     145        if ( isset( $this->current_group ) ) {
     146            foreach ( $actions as &$tag ) {
     147                $parts = shortcode_parse_atts( $tag );
     148                if ( isset( $parts['href'] ) ) {
     149                    $url = html_entity_decode( $parts['href'] );
     150                    $url = add_query_arg( self::$slug, $this->current_group, $url );
     151
     152                    $tag = str_replace( $parts['href'], htmlentities( $url ), $tag );
     153                }
     154            }
     155        }
     156
     157        return $actions;
     158    }
     159
     160    /**
     161     * Append the group to redirect URLS after activation and deactivation of plugins.
     162     *
     163     * @param string $url  The url to append to.
     164     * @param string $path The path location.
     165     *
     166     * @return string
     167     */
     168    public function append_group_to_self( $url, $path ) {
     169
     170        if ( 'plugins.php' === wp_parse_url( $path, PHP_URL_PATH ) ) {
     171            if ( ! isset( $this->current_group ) ) {
     172                // Init the current group if not set yet.
     173                $this->catch_selected_group();
     174            }
     175            // If we found a group, then append it to the self URL on the plugins page to maintain groups in nav.
     176            if ( isset( $this->current_group ) ) {
     177                $url = add_query_arg( self::$slug, $this->current_group, $url );
     178            }
     179        }
     180
     181        return $url;
    129182    }
    130183
     
    261314     * @return array
    262315     */
    263     public function catch_selected_group( $plugins ) {
     316    public function catch_selected_group( $plugins = array() ) {
    264317
    265318        global $status;
     
    269322        if ( $selected_group && isset( $this->groups[ $selected_group ] ) ) {
    270323            $this->current_group = $selected_group;
    271             $plugins             = $this->groups[ $selected_group ];
    272 
    273             // Add selection path.
    274             $this->current_nav_path .= ' | ' . $this->config['groups'][ $selected_group ]['name'];
     324            if ( ! empty( $plugins ) ) {
     325                $plugins = $this->groups[ $selected_group ];
     326
     327                // Add selection path.
     328                $this->current_nav_path .= ' | ' . $this->config['groups'][ $selected_group ]['name'];
     329            }
    275330        }
    276331
     
    318373
    319374    /**
     375     * Get the current group.
     376     *
     377     * @return array|null
     378     */
     379    public function get_current_group() {
     380
     381        if ( ! isset( $this->current_group ) ) {
     382            $this->catch_selected_group();
     383        }
     384
     385        return $this->current_group ? $this->config['groups'][ $this->current_group ] : null;
     386    }
     387
     388    /**
     389     * Get the groups.
     390     *
     391     * @return array
     392     */
     393    public function get_groups() {
     394
     395        return array_values( $this->config['groups'] );
     396    }
     397
     398    /**
    320399     * Make a group tag.
    321400     *
     
    326405    protected function make_group_tag( $id ) {
    327406
    328         $group   = $this->config['groups'][ $id ] ? $this->config['groups'][ $id ] : $this->make_preset( $id );
     407        $group   = $this->config['groups'][ $id ];
    329408        $total   = count( $this->groups[ $id ] );
    330409        $counter = '';
     
    352431
    353432        return Utils::build_tag( 'li', $li_atts, $link );
    354     }
    355 
    356     /**
    357      *
    358      * @param string $id The group ID to make a preset for.
    359      */
    360     public function make_preset( $id ) {
    361 
    362         var_dump( $id );
    363         $group = array(
    364             'id'   => $id,
    365             'name' => $this->config['preset'],
    366         );
    367433    }
    368434
     
    564630    public function rest_save_config( \WP_REST_Request $request ) {
    565631
    566         $data         = $request->get_json_params();
    567         $this->config = wp_parse_args( $data, $this->config );
     632        $data    = $request->get_json_params();
     633        $site_id = get_current_blog_id();
    568634        if ( is_multisite() ) {
    569             $site_id = get_current_blog_id();
    570635            if ( ! empty( $data['siteID'] ) ) {
    571636                $site_id = $data['siteID'];
     
    576641                $data['sitesEnabled'] = array_map( 'intval', $data['sitesEnabled'] );
    577642            }
     643        }
     644
     645        $this->config = wp_parse_args( $data, $this->config );
     646        $success      = $this->save_config( $site_id );
     647
     648        return rest_ensure_response( array( 'success' => $success ) );
     649    }
     650
     651    /**
     652     * Save the current config.
     653     *
     654     * @param null|int $site_id The site ID to save for.
     655     *
     656     * @return bool
     657     */
     658    protected function save_config( $site_id = null ) {
     659
     660        if ( is_multisite() ) {
     661            if ( null === $site_id ) {
     662                $site_id = get_current_blog_id();
     663            }
    578664            $success = update_network_option( $site_id, self::CONFIG_KEY, $this->config );
    579665        } else {
     
    581667        }
    582668
    583         return rest_ensure_response( array( 'success' => $success ) );
     669        return $success;
    584670    }
    585671
     
    9161002            array_map( array( $this, 'register_preset' ), $this->config['selectedPresets'] );
    9171003        }
    918 
    919         // Populate groups with keywords.
    920         array_map( array( $this, 'populate_keywords' ), array_keys( $this->config['groups'] ) );
    9211004    }
    9221005
     
    9501033            }
    9511034        }
     1035        // Populate keywords now to keep ordering.
     1036        $this->populate_keywords( $group['id'] );
    9521037    }
    9531038
     
    9831068
    9841069    /**
     1070     * Create a new Group.
     1071     *
     1072     * @param string $name         The group name to create.
     1073     * @param array  $plugin_slugs Plugin slug or list of slugs to add to the group.
     1074     *
     1075     * @return string|bool
     1076     */
     1077    public function create_group( $name, array $plugin_slugs = array() ) {
     1078
     1079        $success                           = false;
     1080        $new_id                            = Utils::generate_id();
     1081        $group                             = array(
     1082            'id'       => $new_id,
     1083            'keywords' => array(),
     1084            'name'     => trim( $name ),
     1085            'open'     => false,
     1086            'plugins'  => $plugin_slugs,
     1087        );
     1088        $this->config['groups'][ $new_id ] = $group;
     1089        if ( $this->save_config() ) {
     1090            $success = $new_id;
     1091        }
     1092
     1093        return $success;
     1094    }
     1095
     1096    /**
     1097     * Add plugins to a group.
     1098     *
     1099     * @param string $group_id     The group ID to add plugin to.
     1100     * @param array  $plugin_slugs Plugin slug or list of slugs to add to the group.
     1101     *
     1102     * @return bool
     1103     */
     1104    public function add_to_group( $group_id, array $plugin_slugs ) {
     1105
     1106        $success = false;
     1107        if ( isset( $this->config['groups'][ $group_id ] ) ) {
     1108            $new_plugins                                    = array_merge( $this->config['groups'][ $group_id ]['plugins'], $plugin_slugs );
     1109            $this->config['groups'][ $group_id ]['plugins'] = array_unique( $new_plugins );
     1110            $success                                        = $this->save_config();
     1111        }
     1112
     1113        return $success;
     1114    }
     1115
     1116    /**
     1117     * Remove Plugins from a group.
     1118     *
     1119     * @param string $group_id     The group ID to add plugin to.
     1120     * @param array  $plugin_slugs Plugin slug or list of slugs to add to the group.
     1121     *
     1122     * @return bool
     1123     */
     1124    public function remove_from_group( $group_id, array $plugin_slugs ) {
     1125
     1126        $success = false;
     1127        if ( isset( $this->config['groups'][ $group_id ] ) ) {
     1128            $this->config['groups'][ $group_id ]['plugins'] = array_diff( $this->config['groups'][ $group_id ]['plugins'], $plugin_slugs );
     1129            $success                                        = $this->save_config();
     1130        }
     1131
     1132        return $success;
     1133    }
     1134
     1135    /**
    9851136     * Render the admin page.
    9861137     */
  • plugin-groups/trunk/classes/class-utils.php

    r2585975 r2593591  
    2121     */
    2222    public static function get_tag_attributes( $tag ) {
     23
    2324        $tag    = strstr( $tag, ' ', false );
    2425        $tag    = trim( $tag, '> ' );
     
    4445     */
    4546    public static function is_void_element( $element ) {
     47
    4648        $void_elements = array(
    4749            'area',
     
    100102     */
    101103    public static function build_attributes( $attributes ) {
     104
    102105        $parts = array();
    103106        foreach ( $attributes as $attribute => $value ) {
     
    113116
    114117        return implode( ' ', $parts );
     118    }
    115119
     120    /**
     121     * Generate a new ID for a group.
     122     *
     123     * @return string
     124     */
     125    public static function generate_id() {
     126
     127        return uniqid( 'nd' );
    116128    }
    117129}
  • plugin-groups/trunk/css/plugin-groups.css

    r2586331 r2593591  
    1 .plugin-groups-main>.plugin-groups{margin-left:-20px}.ui-keyword{border:1px solid #d0d0d0;border-radius:7px;margin:6px 6px 6px 0;padding:3px 6px;display:inline-flex;flex-direction:row;justify-content:space-between}.ui-keyword label{margin-left:3px}.ui-header{display:flex;align-items:center;padding-left:20px;background-color:#74a008;box-shadow:0 1px 1px rgba(0,0,0,.4)}.ui-header h2{margin:0;padding:1em 1em 1em 0;color:#fff;text-shadow:0 1px 1px rgba(0,0,0,.6)}.ui-header-version{font-size:.8em;color:#fff}.ui-header-multisite{margin:0 8px 0 12px}.ui-header .button{background-color:#465f05;border-color:#74a008;box-shadow:none;margin-left:20px}.ui-header .button:focus{opacity:.4}.ui-header .button input[type=file]{width:0}.ui-navigation{display:flex;background-color:#465f05;margin:0 0 20px;color:#fff;cursor:pointer}.ui-navigation-link{padding:8px 20px;margin:0}.ui-navigation-link:hover,.ui-navigation-link.active{background-color:#74a008}.ui-body{display:flex}.ui-body .keywords-input{width:100%}.ui-body-sidebar{width:400px;overflow-x:hidden;padding:0 20px 20px}.ui-body-sidebar .search{width:100%;margin:6px 0}.ui-body-sidebar .button{display:flex;align-items:center;justify-content:space-between}.ui-body-sidebar .button .dashicons{margin:0 4px}.ui-body-sidebar.wide{width:500px;max-width:500px}.ui-body-sidebar.full{width:auto;max-width:100%}.ui-body-sidebar.narrow{width:200px;min-width:200px}.ui-body-sidebar h3{margin:0 0 10px}.plugins-list .ui-body-sidebar-list{max-height:500px;overflow-y:auto}.ui-body-sidebar-list-item{margin-bottom:0;border:1px solid transparent;border-bottom-color:#d0d0d0;margin-top:-1px;display:flex;justify-content:space-between;padding:.6em 8px}.ui-body-sidebar-list-item.list-control{align-items:center}.ui-body-sidebar-list-item.list-control label{font-weight:bolder}.ui-body-sidebar-list-item.active{background:#fff;border-color:#74a008}@media only screen and (max-width: 1150px){.ui-body-sidebar-list-item.list-control .button{margin:8px 0 12px}.ui-body-sidebar-list-item.list-control .button .text{display:none}.ui-body-sidebar-list-item.list-control label{overflow:auto}}.ui-body-sidebar-list-item:hover:not(.active){background-color:rgba(255,255,255,.4)}.ui-body-sidebar-list-item label,.ui-body-sidebar-list-item .version{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-body-sidebar-list-item .version{color:#646970}@media only screen and (max-width: 1150px){.ui-body-sidebar-list-item .version{display:none}}.ui-body-sidebar-list-item-title{cursor:pointer}.ui-body-sidebar-list-item-icons{cursor:pointer}.ui-body-sidebar-list-item-edit{border:1px solid #74a008;border-top:0;padding:10px 20px 20px;background:#fff}.ui-body-sidebar-list-item-section{margin-bottom:20px}.ui-body-edit{margin:0 20px;width:100%}.ui-body-edit h3{margin:0 0 10px}.ui-body-edit-title{border:1px transparent;margin-left:7px;font-size:inherit}.ui-body-edit-title:focus{box-shadow:0 0 0}.ui-body-edit-title:focus-visible{outline:0}.ui-body-edit-plugins{max-height:500px;overflow-y:auto}.ui-body-edit-plugins-item{display:flex;justify-content:space-between;padding:9px 8px 8px;border:1px solid #d0d0d0;margin-top:-1px}.ui-panel{margin-bottom:20px}.ui-panel-header{display:flex;justify-content:space-between;border-bottom:1px solid #74a008}.ui-panel-header.collapsible{cursor:pointer}.ui-panel-header h3{font-size:1rem}.ui-panel .ui-panel .ui-panel-header{padding:6px}.ui-panel .ui-panel .ui-panel-header h3{font-size:.8rem;margin:0}
     1.plugin-groups-main>.plugin-groups{margin-left:-20px}.ui-keyword{border:1px solid #d0d0d0;border-radius:7px;margin:6px 6px 6px 0;padding:3px 6px;display:inline-flex;flex-direction:row;justify-content:space-between}.ui-keyword label{margin-left:3px}.ui-header{display:flex;align-items:center;padding-left:20px;background-color:#74a008;box-shadow:0 1px 1px rgba(0,0,0,.4)}.ui-header h2{margin:0;padding:1em 1em 1em 0;color:#fff;text-shadow:0 1px 1px rgba(0,0,0,.6)}.ui-header-version{font-size:.8em;color:#fff}.ui-header-multisite{margin:0 8px 0 12px}.ui-header .button{background-color:#465f05;border-color:#74a008;box-shadow:none;margin-left:20px}.ui-header .button:focus{opacity:.4}.ui-header .button input[type=file]{width:0}.ui-navigation{display:flex;background-color:#465f05;margin:0 0 20px;color:#fff;cursor:pointer}.ui-navigation-link{padding:8px 20px;margin:0}.ui-navigation-link:hover,.ui-navigation-link.active{background-color:#74a008}.ui-body{display:flex}.ui-body .keywords-input{width:100%}.ui-body-sidebar{width:400px;overflow-x:hidden;padding:0 20px 20px}.ui-body-sidebar .search{width:100%;margin:6px 0}.ui-body-sidebar .button{display:flex;align-items:center;justify-content:space-between}.ui-body-sidebar .button .dashicons{margin:0 4px}.ui-body-sidebar.wide{width:500px;max-width:500px}.ui-body-sidebar.full{width:auto;max-width:100%}.ui-body-sidebar.narrow{width:200px;min-width:200px}.ui-body-sidebar h3{margin:0 0 10px}.plugins-list .ui-body-sidebar-list{max-height:500px;overflow-y:auto}.ui-body-sidebar-list .active-sort{background-color:#74a008}.ui-body-sidebar-list .active-sort div{opacity:0}.ui-body-sidebar-list-item{margin-bottom:0;border:1px solid transparent;border-bottom-color:#d0d0d0;margin-top:-1px;display:flex;justify-content:space-between;padding:.6em 8px}.ui-body-sidebar-list-item.list-control{align-items:center}.ui-body-sidebar-list-item.list-control label{font-weight:bolder}.ui-body-sidebar-list-item.active{background:#fff;border-color:#74a008}.ui-body-sidebar-list-item .sort-handle{margin-left:-12px;margin-right:3px;cursor:-webkit-grab;cursor:grab;color:#74a008}@media only screen and (max-width: 1150px){.ui-body-sidebar-list-item.list-control .button{margin:8px 0 12px}.ui-body-sidebar-list-item.list-control .button .text{display:none}.ui-body-sidebar-list-item.list-control label{overflow:auto}}.ui-body-sidebar-list-item:hover:not(.active){background-color:rgba(255,255,255,.4)}.ui-body-sidebar-list-item label,.ui-body-sidebar-list-item .version{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-body-sidebar-list-item .version{color:#646970}@media only screen and (max-width: 1150px){.ui-body-sidebar-list-item .version{display:none}}.ui-body-sidebar-list-item-title{cursor:pointer}.ui-body-sidebar-list-item-icons{cursor:pointer}.ui-body-sidebar-list-item-edit{border:1px solid #74a008;border-top:0;padding:10px 20px 20px;background:#fff}.ui-body-sidebar-list-item-section{margin-bottom:20px}.ui-body-edit{margin:0 20px;width:100%}.ui-body-edit h3{margin:0 0 10px}.ui-body-edit-title{border:1px transparent;margin-left:7px;font-size:inherit}.ui-body-edit-title:focus{box-shadow:0 0 0}.ui-body-edit-title:focus-visible{outline:0}.ui-body-edit-plugins{max-height:500px;overflow-y:auto}.ui-body-edit-plugins-item{display:flex;justify-content:space-between;padding:9px 8px 8px;border:1px solid #d0d0d0;margin-top:-1px}.ui-panel{margin-bottom:20px}.ui-panel-header{display:flex;justify-content:space-between;border-bottom:1px solid #74a008}.ui-panel-header.collapsible{cursor:pointer}.ui-panel-header h3{font-size:1rem}.ui-panel .ui-panel .ui-panel-header{padding:6px}.ui-panel .ui-panel .ui-panel-header h3{font-size:.8rem;margin:0}
    22.plugin-groups .nav-settings{cursor:pointer;padding:8px;margin-bottom:20px;margin-top:8px;overflow:hidden}.plugin-groups .nav-settings label{font-weight:bolder}.plugin-groups .nav-settings.selected{background-color:#fff;border:1px solid #74a008}.plugin-groups .nav-settings select{margin-top:6px}.plugin-groups .subsubsub{float:none}.plugin-groups .subsubsub li:not(:last-child)::after{content:"|";padding:0 3px}.plugin-groups .groups-modern{display:block;border:1px solid #d0d0d0;border-left-color:#fff;border-right-color:#fff;background-color:#fff;margin:10px -20px;padding:0 12px}.plugin-groups .groups-modern li{display:inline-block;margin:0}.plugin-groups .groups-modern li a{display:inline-block;padding:20px 0 15px;margin:0 10px;color:#646970;text-decoration:none;border-bottom:5px solid transparent}.plugin-groups .groups-modern li a:hover{color:#135e96;border-bottom:5px solid #d0d0d0}.plugin-groups .groups-modern li a.current{color:#1d2327;border-bottom:5px solid #646970}.plugin-groups .groups-modern li .count{color:#646970}
  • plugin-groups/trunk/js/plugin-groups-navbar.asset.php

    r2585975 r2593591  
    1 <?php return array('dependencies' => array('wp-polyfill'), 'version' => 'e59b0f3755dcc149bf8b8f35d1b17e69');
     1<?php return array('dependencies' => array('wp-polyfill'), 'version' => '0db3b23769d1e47d578f79cb24d91a43');
  • plugin-groups/trunk/js/plugin-groups.asset.php

    r2586331 r2593591  
    1 <?php return array('dependencies' => array('react', 'react-dom', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '83b3cab6ae9c1872f5857a34cd4a95ca');
     1<?php return array('dependencies' => array('react', 'react-dom', 'wp-element', 'wp-i18n', 'wp-polyfill'), 'version' => '42ad58fcd522dc0cc1d9182c0f06d5fd');
  • plugin-groups/trunk/js/plugin-groups.js

    r2586331 r2593591  
    1 !function(e){var t={};function n(c){if(t[c])return t[c].exports;var a=t[c]={i:c,l:!1,exports:{}};return e[c].call(a.exports,a,a.exports,n),a.l=!0,a.exports}n.m=e,n.c=t,n.d=function(e,t,c){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:c})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(n.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(c,a,function(t){return e[t]}.bind(null,a));return c},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t){e.exports=window.wp.element},function(e,t){e.exports=window.wp.i18n},function(e,t){function n(){return e.exports=n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var c in n)Object.prototype.hasOwnProperty.call(n,c)&&(e[c]=n[c])}return e},e.exports.default=e.exports,e.exports.__esModule=!0,n.apply(this,arguments)}e.exports=n,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=window.React},function(e,t,n){"use strict";n.r(t)},function(e,t){e.exports=window.ReactDOM},function(e,t,n){"use strict";n.r(t);var c=n(2),a=n.n(c),s=n(0),l=n(3),r=n.n(l),o=n(5),i=n.n(o),u=n(1);function d(e){const{loadURL:t,setConfig:n,restNonce:c,navTab:a}=e;return Object(s.createElement)("select",{onChange:e=>{(e=>{const{id:t,loadURL:n,setConfig:c,restNonce:a,navTab:s}=e;window.localStorage.getItem("_plgUnsaved")&&!confirm(Object(u.__)("Changes that you made may not be saved.",e.slug))||(s(0),fetch(n+"?siteID="+t,{method:"GET",headers:{"X-WP-Nonce":a}}).then(e=>e.json()).then(e=>{c(e),window.localStorage.removeItem("_plgUnsaved"),s(1)}))})({id:e.target.value,loadURL:t,setConfig:n,restNonce:c,navTab:a})}},e.sites.map(t=>{const n=parseInt(t.blog_id);return Object(s.createElement)("option",{value:n,selected:n===e.siteID},t.domain)}))}function p(e){const{navTab:t,tab:n,pluginName:c,version:a,handleSave:l,handleExport:r,handleImport:o,saving:i,sites:p}=e;return Object(s.createElement)(s.Fragment,null,Object(s.createElement)("header",{className:"ui-header"},Object(s.createElement)("span",null,Object(s.createElement)("h2",null,c)),Object(s.createElement)("span",{className:"ui-header-version"},a),0===n&&Object(s.createElement)("span",{className:"ui-header-multisite"},Object(u.__)("Loading site config.",e.slug)),0!==n&&Object(s.createElement)(s.Fragment,null,p&&Object(s.createElement)("span",{className:"ui-header-multisite"},Object(s.createElement)(d,e)),Object(s.createElement)("button",{className:"button button-primary",type:"button",onClick:l,disabled:i},Object(u.__)("Save Settings",e.slug)),Object(s.createElement)("button",{className:"button button-primary",type:"button",onClick:r},"Export"),Object(s.createElement)("label",{className:"button button-primary",type:"button",onClick:""},"Import",Object(s.createElement)("input",{className:"importer-input",type:"file",onChange:o})))),0!==n&&Object(s.createElement)("ul",{className:"ui-navigation"},Object(s.createElement)("li",{className:1===n?"ui-navigation-link active":"ui-navigation-link",onClick:()=>t(1)},Object(u.__)("Groups Management",e.slug)),p&&e.mainSite===e.siteID&&Object(s.createElement)("li",{className:3===n?"ui-navigation-link active":"ui-navigation-link",onClick:()=>t(3)},Object(u.__)("Multisite",e.slug)),Object(s.createElement)("li",{className:2===n?"ui-navigation-link active":"ui-navigation-link",onClick:()=>t(2)},Object(u.__)("Settings",e.slug))))}function m(e){const{name:t,id:n,changeName:c,editGroup:a,temp:l,focus:r}=e;return Object(s.createElement)("input",{className:"ui-body-edit-title",autoFocus:r,onFocus:e=>{e.target.select()},value:t,onInput:e=>{c(n,e.target.value)},onBlur:e=>{e.target.value.length?e.target.value.length&&"/"!==e.target.value&&a(n):e.target.focus()},type:"text","data-edit":n})}function g(e){const{title:t,collapse:n,height:c}=e,[a,l]=r.a.useState(n||"open"),o="open"===a?"dashicons-arrow-up-alt2":"dashicons-arrow-down-alt2",i=n?"collapsible":"";return Object(s.createElement)("div",{className:"ui-panel"},Object(s.createElement)("div",{className:"ui-panel-header "+i,onClick:()=>{n&&l("open"===a?"closed":"open")}},Object(s.createElement)("h3",{className:"ui-panel-header-title"},t),n&&Object(s.createElement)("span",{className:"dashicons "+o})),"open"===a&&Object(s.createElement)("div",{className:"ui-panel-body "+a},e.children))}function b(e){const{name:t,version:n,id:c,callback:a,checked:l,bold:r,subname:o,className:i,disabled:u}=e,d=i||"";return Object(s.createElement)("div",{className:"ui-body-sidebar-list-item "+d},Object(s.createElement)("label",null,Object(s.createElement)("input",{type:"checkbox",checked:l,value:c,onChange:a,disabled:u}),Object(s.createElement)("span",null,r?Object(s.createElement)("strong",null,t):Object(s.createElement)("span",null,t),o&&Object(s.createElement)("div",null,o))),Object(s.createElement)("span",{className:"children"},n&&Object(s.createElement)("span",{className:"version"},n),e.children))}function O(e){const{group:t,plugins:n,removePlugins:c,removePlugin:a}=e,[l,o]=r.a.useState([]),i=0<t.plugins.length,d=e=>{const t=[...l];e.target.checked?t.push(e.target.value):t.splice(t.indexOf(e.target.value),1),o(t)};return Object(s.createElement)(g,{title:Object(u.__)("Grouped plugins",e.slug)},i&&Object(s.createElement)(s.Fragment,null,Object(s.createElement)(b,{name:Object(u.__)("Select All",e.slug),className:"list-control",callback:e=>{e.target.checked?o(t.plugins):o([])},checked:l.length===t.plugins.length},Object(s.createElement)("button",{disabled:!l.length,type:"button",className:"button",onClick:e=>{c(t.id,[...l])}},Object(u.__)("Remove selected",e.slug))),Object(s.createElement)("div",{className:"ui-body-edit-plugins"},t.plugins.map((e,c)=>{const r=n[e];return Object(s.createElement)(b,{name:r.Name,version:r.Version,checked:-1<l.indexOf(e),id:e,callback:d},Object(s.createElement)("label",{className:"dashicons dashicons-no-alt",onClick:()=>a(t.id,e)}))}))),!i&&Object(s.createElement)("div",{className:"ui-body-edit-plugins"},Object(s.createElement)("span",{className:"ui-body-edit-plugins-item"},Object(u.__)("No plugins selected",e.slug))))}function j({group:e,removeKeyword:t}){const{id:n,keywords:c}=e;return c.map(e=>Object(s.createElement)("span",{className:"ui-keyword"},e,Object(s.createElement)("label",{className:"dashicons dashicons-no-alt",onClick:()=>t(n,e)})))}function E(e){const{group:t,addKeyword:n,removeKeyword:c}=e;return Object(s.createElement)("div",{className:"ui-body-sidebar-list-item-section"},Object(s.createElement)(g,{title:Object(u.__)("Keywords",e.slug)},Object(s.createElement)(j,{group:t,removeKeyword:c,addKeyword:n}),Object(s.createElement)("hr",null),Object(s.createElement)("input",{className:"regular-text keywords-input",type:"text",placeholder:Object(u.__)("Add keyword"),"data-keywords":!0,onKeyDown:e=>{const c=e.target.value.trim();"Enter"!==e.key&&","!==e.key||(e.preventDefault(),e.stopPropagation(),e.target.dataset.keywords&&0<c.length&&(n(t.id,c),e.target.value=""))}})))}function h(e){const{group:t}=e;return Object(s.createElement)("div",{className:"ui-body-sidebar-list-item-edit"},Object(s.createElement)(O,e),Object(s.createElement)(E,e))}function f(e){const{selectGroup:t,openGroup:n,group:c,changeName:l,editGroup:r,index:o}=e,{temp:i,name:u,id:d,plugins:p,selected:g,open:b,edit:O,focus:j}=c,E=g?"active":"";return Object(s.createElement)(s.Fragment,null,Object(s.createElement)("div",{className:"ui-body-sidebar-list-item "+E},!O&&Object(s.createElement)(s.Fragment,null,Object(s.createElement)("span",null,Object(s.createElement)("input",{type:"checkbox",checked:g,onClick:e=>t(d)}),Object(s.createElement)("span",{className:"ui-body-sidebar-list-item-title",onClick:e=>n(d)},u)),Object(s.createElement)("span",{className:"ui-body-sidebar-list-item-icons"},Object(s.createElement)("span",{className:"dashicons dashicons-edit",onClick:()=>r(d)}),p.length)),O&&Object(s.createElement)(m,{temp:i,name:u,id:d,changeName:l,editGroup:r,focus:j})),!i&&b&&Object(s.createElement)(h,a()({group:c},e)))}function v(e){const{groups:t,getList:n,edit:c}=e;return n().map((n,l)=>{const r=t[n];return Object(s.createElement)(f,a()({index:l,group:r,editing:n===c},e))})}function y(e){const{getList:t,createGroup:n,deleteGroups:c,selectGroups:a,getSelected:l}=e,r=l().length===Object.keys(e.groups).length;return Object(s.createElement)("div",{className:"ui-body-sidebar wide"},Object(s.createElement)(g,{title:Object(u.__)("Groups")},Object(s.createElement)("div",{className:"ui-body-sidebar-list"},0!==t().length&&Object(s.createElement)(s.Fragment,null,Object(s.createElement)(b,{name:Object(u.__)("Select All"),bold:!0,callback:t=>{a(Object.keys(e.groups),t.target.checked)},checked:r,className:"list-control"},Object(s.createElement)("button",{disabled:!l().length,type:"button",className:"button",onClick:()=>{c(l(),!0)}},Object(s.createElement)("span",{className:"text"}," ",Object(u.__)("Delete selected",e.slug)," "),Object(s.createElement)("span",{className:"dashicons dashicons-trash"}))),Object(s.createElement)(v,e)),0===t().length&&Object(s.createElement)("div",{className:"description"},Object(s.createElement)("span",{className:"ui-body-edit-plugins-item"},Object(u.__)("No groups created",e.slug))))),Object(s.createElement)("button",{type:"button",className:"button",onClick:()=>n("",!0)},Object(u.__)("Create new group",e.slug)))}function k(e){const{plugins:t,addPlugins:n}=e,[c,a]=r.a.useState({checkedAll:!1,search:"",checked:[]}),l=Object.keys(t),o=e=>{a({...c,...e})},i=e=>{const n={checked:[]};e&&l.forEach(e=>{const c=t[e];p(c.Name)&&n.checked.push(e)}),n.checkedAll=n.checked.length,o(n)},d=e=>{const t={...c},n=t.checked.indexOf(e.target.value);e.target.checked&&-1===n?t.checked.push(e.target.value):!e.target.checked&&-1<n&&t.checked.splice(n,1),t.checked.length!==t.checkedAll&&(t.checkedAll=0),t.checked.length===l.length?i(!0):o(t)},p=e=>!c.search||-1<e.toLowerCase().indexOf(c.search.toLowerCase()),m=c.checked.length&&(()=>{for(const t in e.groups)if(e.groups[t].selected)return!0;return!1})();return Object(s.createElement)("div",{className:"ui-body-sidebar"},Object(s.createElement)(g,{title:Object(u.__)("Plugins",e.slug)},Object(s.createElement)("input",{className:"regular-text search",placeholder:Object(u.__)("Search",e.slug),type:"search",onInput:e=>{o({search:e.target.value})},value:c.search}),Object(s.createElement)(b,{name:Object(u.__)("Select all",e.slug),id:"all",callback:e=>i(e.target.checked),checked:c.checkedAll,bold:!0,className:"list-control"},Object(s.createElement)("button",{className:"button",type:"button",onClick:()=>{Object.keys(e.groups).forEach(t=>{e.groups[t].selected&&n(t,c.checked)}),i(!1)},disabled:!m},Object(s.createElement)("span",{className:"text"},Object(u.__)("Send to Selected Groups")),Object(s.createElement)("span",{className:"dashicons dashicons-arrow-right-alt2"}))),Object(s.createElement)("div",{className:"plugins-list"},Object(s.createElement)("div",{className:"ui-body-sidebar-list"},l.map((e,n)=>{const a=t[e],l=p(a.Name),r=-1<c.checked.indexOf(e)&&p(a.Name);return Object(s.createElement)(s.Fragment,null,l&&Object(s.createElement)(b,{name:a.Name,id:e,version:a.Version,checked:r,callback:d}))})))))}function N(e){const{togglePreset:t,selectedPresets:n,presets:c,slug:a}=e;return Object(s.createElement)("div",{className:"ui-body-sidebar narrow"},Object(s.createElement)(g,{title:Object(u.__)("Presets",a)},c.map(e=>Object(s.createElement)(b,{name:e,id:e,checked:-1<n.indexOf(e),callback:()=>t(e)}))))}function w(e){const{presets:t,getList:n}=e;return Object(s.createElement)("div",null,Object(s.createElement)("select",null,t.map((e,t)=>{if(!(5<t))return Object(s.createElement)("option",null,e," (",t+1,")")})))}function _(e){const{presets:t,className:n,setParam:c,params:a,styleName:l}=e,r=a.navStyle&&n===a.navStyle?" selected":"";return Object(s.createElement)("div",{className:"plugin-groups nav-settings"+r,onClick:()=>{c("navStyle",n)}},Object(s.createElement)("label",null,l),"groups-dropdown"===n&&Object(s.createElement)(w,e),"groups-dropdown"!==n&&Object(s.createElement)("ul",{className:n},t.map((e,t)=>{if(!(5<t))return Object(s.createElement)(s.Fragment,null,Object(s.createElement)("li",null,Object(s.createElement)("a",{className:0===t?"current":""},e,Object(s.createElement)("span",{className:"count"}," (",t+1,")"))))})))}function x(e){const{params:t,setParam:n}=e;return Object(s.createElement)("div",{className:"ui-body"},Object(s.createElement)("div",{className:"ui-body-sidebar"},Object(s.createElement)(g,{title:"Settings"},Object(s.createElement)(b,{name:Object(u.__)("Use Legacy status based grouping",e.slug),checked:t.legacyGrouping,callback:e=>n("legacyGrouping",e.target.checked)}),Object(s.createElement)(b,{name:Object(u.__)("Enable admin menu",e.slug),checked:t.menuGroups,callback:e=>n("menuGroups",e.target.checked)}))),!t.legacyGrouping&&Object(s.createElement)("div",{className:"ui-body-sidebar full"},Object(s.createElement)(g,{title:Object(u.__)("Navigation style",e.slug)},Object(s.createElement)(_,a()({styleName:Object(u.__)("Legacy",e.slug),className:"subsubsub"},e)),Object(s.createElement)(_,a()({styleName:Object(u.__)("Modern",e.slug),className:"groups-modern"},e)),Object(s.createElement)(_,a()({styleName:Object(u.__)("Dropdown",e.slug),className:"groups-dropdown"},e)))))}function S(e){const{params:t,setSiteAccess:n}=e,c=e.sites.map(e=>parseInt(e.blog_id));return Object(s.createElement)("div",{className:"ui-body"},Object(s.createElement)("div",{className:"ui-body-sidebar"},Object(s.createElement)(g,{title:"Sites with full access"},Object(s.createElement)(b,{name:Object(u.__)("Select All"),bold:!0,callback:e=>n(c,e.target.checked),className:"list-control",checked:e.sites.length===e.sitesEnabled.length}),e.sites.map(t=>{const c=parseInt(t.blog_id);return Object(s.createElement)(b,{name:t.domain,checked:e.mainSite===c||-1<e.sitesEnabled.indexOf(c),disabled:e.mainSite===c,callback:e=>n([c],e.target.checked)},e.mainSite===c&&Object(s.createElement)("span",null,Object(u.__)("Main Site",e.slug)))}))))}function P(e){const[t,n]=r.a.useState(e),[c,l]=r.a.useState(1),o=e=>{window.localStorage.setItem("_plgUnsaved",!0),e.groups&&e.groups.constructor===Array&&(e.groups={...e.groups}),n(e)},i=()=>({...t}),d=e=>{o({...t,...e})},m=e=>{g([e])},g=(e,t)=>{const n=i();e.forEach(e=>{if(null===e)return;const c=void 0!==t?!t:n.groups[e].selected;n.groups[e].selected=!c,c&&(delete n.groups[e].open,delete n.groups[e].edit,delete n.groups[e].focus),n.activeGroup=e}),o(n)},b=(e,t)=>{const n=i();e.forEach(e=>{n.groups[e].open=t}),d(n)},O=(e,t,n)=>{const c=i();n||c.groups[e].prevName?n&&(t=c.groups[e].prevName?c.groups[e].prevName:c.groups[e].name,delete c.groups[e].prevName,delete c.groups[e].edit,delete c.groups[e].selected,delete c.groups[e].open):c.groups[e].prevName=c.groups[e].name,c.groups[e].name=t,o(c)},j=(e,n)=>{const c=i();n&&!confirm(Object(u._n)("Delete the selected group?","Delete the selected groups",e.length,t.slug))||(e.forEach(e=>{delete c.groups[e]}),o(c))},E=e=>{j([e])},h=e=>{const t="pgxxxxx".replace(/x/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})),n={id:t,name:e,plugins:[],keywords:[],temp:!0,selected:!0,edit:!0,focus:!0},c=i();c.groups||(c.groups={}),c.groups[t]=n,o(c)},f=(e,n)=>{const c=i();n.map(n=>{const a=t.groups[e].plugins.indexOf(n);-1<a&&c.groups[e].plugins.splice(a,1)}),o(c)},v=()=>{const e=i(),{groups:n,selectedPresets:c,params:a,sitesEnabled:s,siteID:l}=e,r=JSON.stringify({groups:n,selectedPresets:c,params:a,sitesEnabled:s,siteID:l});e.saving=!0,fetch(t.saveURL,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":t.restNonce},body:r}).then(e=>e.json()).then(n=>{e.saving=!1,o(t),window.localStorage.removeItem("_plgUnsaved")}),o(e)},w=e=>{const n=i();let c=!1;e.forEach(e=>{n.groups[e].edit&&(e=>0<t.groups[e].name.replace(/ /g,"").length)(e)?(delete n.groups[e].edit,n.groups[e].open||delete n.groups[e].selected,delete n.groups[e].focus,delete n.groups[e].temp,delete n.groups[e].prevName):(n.groups[e].edit=!0,c||(n.groups[e].focus=!0,c=!0))}),o(n),P()},_=e=>{w([e])},P=()=>{const e=I();if(e.length){const t=document.querySelector("[data-edit="+e.shift()+"]");t&&t.focus()}},G=(e,t)=>{const n=A(),c=n.indexOf(e),a="n"===t?c+1:c-1;let s=null;return n[a]&&(s=n[a]),s!==e?s:null},C=e=>{const n=[];return Object.keys(t.groups).forEach(c=>{t.groups[c][e]&&n.push(c)}),n},D=()=>C("selected"),I=()=>C("edit"),L=e=>{if("ArrowRight"===e.key)b(D(),!0);else if("ArrowLeft"===e.key)b(D(),!1);else if("ArrowUp"===e.key)e.preventDefault(),e.shiftKey||g(A(),!1),m(G(t.activeGroup,"p"));else if("ArrowDown"===e.key)e.preventDefault(),e.shiftKey||g(A(),!1),m(G(t.activeGroup,"n"));else if("Enter"===e.key&&e.target.dataset.edit)_(e.target.dataset.edit);else if("Enter"===e.key)e.stopPropagation(),e.preventDefault(),w(D());else if("/"===e.key)e.preventDefault(),e.stopPropagation(),h("");else if("Escape"===e.key){const n=e.path[0].dataset.edit;t.groups[n]&&((e=>!!t.groups[e].temp)(n)?E(n):(O(n,"",!0),P()))}else if("Delete"===e.key){const e=D();e.length&&j(e,!0)}else"s"===e.key&&e.metaKey&&(e.preventDefault(),v())},A=()=>t.groups?Object.keys(t.groups):[];r.a.useEffect(()=>(window.addEventListener("keydown",L),()=>{window.removeEventListener("keydown",L)}));const F={setConfig:o,selectGroup:m,createGroup:h,deleteGroup:E,deleteGroups:j,changeName:O,handleSave:v,editGroup:_,getList:A,addPlugins:(e,n)=>{if(t.groups[e]){const c=i();n.forEach(n=>{-1===t.groups[e].plugins.indexOf(n)&&c.groups[e].plugins.push(n)}),o(c)}},addKeyword:(e,t)=>{const n=i();n.groups[e].keywords.push(t),o(n)},removeKeyword:(e,t)=>{const n=i(),c=n.groups[e].keywords.indexOf(t);n.groups[e].keywords.splice(c,1),o(n)},removePlugin:(e,t)=>{f(e,[t])},openGroup:e=>{if(t.groups[e]){const t=i();t.groups[e].open=!t.groups[e].open,t.groups[e].selected=!0,t.activeGroup=e,d(t)}},selectGroups:g,getSelected:D,handleExport:()=>{const e=JSON.stringify(new Date).replace(/"/g,"-").replace(/:/g,"-").split(".")[0],n=new Blob([JSON.stringify(t.groups)],{type:"application/json"}),c=URL.createObjectURL(n),a=document.createElement("a");a.href=c,a.download="plugin-groups-export"+e+".json",a.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window}))},handleImport:e=>{const t=new FileReader;t.addEventListener("loadend",e=>{let t=JSON.parse(e.target.result);if(t){t["plugin-groups-setup"]&&(t=(e=>{const t={};return Object.keys(e.group).map(n=>{const c=e.group[n];t[n]={id:n,name:c.config.group_name,plugins:c.config.plugins?c.config.plugins:[],keywords:c.config.keywords.length?c.config.keywords.split(" "):[]}}),t})(t));const e=i();e.groups=t,o(e)}}),t.readAsText(e.target.files[0])},togglePreset:e=>{const t=i();t.selectedPresets||(t.selectedPresets=[]);const n=t.selectedPresets.indexOf(e);-1===n?t.selectedPresets.push(e):t.selectedPresets.splice(n,1),o(t)},removePlugins:f,navTab:e=>{l(e)},tab:c,setParam:(e,t)=>{const n=i();n.params[e]||(n.params[e]=null),n.params[e]=t,o(n)},setSiteAccess:(e,c)=>{const a=i();e.map(e=>{const n=t.sitesEnabled.indexOf(e);e!==t.mainSite&&(!0===c&&-1===n?a.sitesEnabled.push(e):!1===c&&-1<n&&a.sitesEnabled.splice(n,1))}),n(a)}};return Object(s.createElement)("div",{className:t.slug},1===c&&Object(s.createElement)(s.Fragment,null,Object(s.createElement)(p,a()({},F,t)),Object(s.createElement)("div",{className:"ui-body"},Object(s.createElement)(k,a()({},t,F)),Object(s.createElement)(y,a()({},t,F)),Object(s.createElement)(N,a()({},t,F)))),2===c&&Object(s.createElement)(s.Fragment,null,Object(s.createElement)(p,a()({},F,t)),Object(s.createElement)(x,a()({},F,t))),3===c&&Object(s.createElement)(s.Fragment,null,Object(s.createElement)(p,a()({},F,t)),Object(s.createElement)(S,a()({},F,t))),0===c&&Object(s.createElement)(s.Fragment,null,Object(s.createElement)(p,a()({},F,t))))}var G={init(e){i.a.render(Object(s.createElement)(P,e),document.getElementById("plg-app"))}};n(4);const C={init(){window.localStorage.removeItem("_plgUnsaved"),plgData.groups||(plgData.groups={}),plgData.selectedPresets||(plgData.selectedPresets=[]),plgData.activeGroup=!1,G.init(plgData)}};window.addEventListener("load",()=>C.init()),window.onbeforeunload=()=>{if(window.localStorage.getItem("_plgUnsaved"))return!1}}]);
     1!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e,t){e.exports=window.wp.element},function(e,t){e.exports=window.wp.i18n},function(e,t){function n(){return e.exports=n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},e.exports.default=e.exports,e.exports.__esModule=!0,n.apply(this,arguments)}e.exports=n,e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=window.React},function(e,t,n){"use strict";n.r(t)},function(e,t){e.exports=window.ReactDOM},,function(e,t,n){"use strict";n.r(t);var o=n(2),r=n.n(o),a=n(0),i=n(3),l=n.n(i),s=n(5),c=n.n(s),u=n(1);function d(e){const{loadURL:t,setConfig:n,restNonce:o,navTab:r}=e;return Object(a.createElement)("select",{onChange:e=>{(e=>{const{id:t,loadURL:n,setConfig:o,restNonce:r,navTab:a}=e;window.localStorage.getItem("_plgUnsaved")&&!confirm(Object(u.__)("Changes that you made may not be saved.",e.slug))||(a(0),fetch(n+"?siteID="+t,{method:"GET",headers:{"X-WP-Nonce":r}}).then(e=>e.json()).then(e=>{o(e),window.localStorage.removeItem("_plgUnsaved"),a(1)}))})({id:e.target.value,loadURL:t,setConfig:n,restNonce:o,navTab:r})}},e.sites.map(t=>{const n=parseInt(t.blog_id);return Object(a.createElement)("option",{value:n,selected:n===e.siteID},t.domain)}))}function p(e){const{navTab:t,tab:n,pluginName:o,version:r,handleSave:i,handleExport:l,handleImport:s,saving:c,sites:p}=e;return Object(a.createElement)(a.Fragment,null,Object(a.createElement)("header",{className:"ui-header"},Object(a.createElement)("span",null,Object(a.createElement)("h2",null,o)),Object(a.createElement)("span",{className:"ui-header-version"},r),0===n&&Object(a.createElement)("span",{className:"ui-header-multisite"},Object(u.__)("Loading site config.",e.slug)),0!==n&&Object(a.createElement)(a.Fragment,null,p&&Object(a.createElement)("span",{className:"ui-header-multisite"},Object(a.createElement)(d,e)),Object(a.createElement)("button",{className:"button button-primary",type:"button",onClick:i,disabled:c},Object(u.__)("Save Settings",e.slug)),Object(a.createElement)("button",{className:"button button-primary",type:"button",onClick:l},"Export"),Object(a.createElement)("label",{className:"button button-primary",type:"button",onClick:""},"Import",Object(a.createElement)("input",{className:"importer-input",type:"file",onChange:s})))),0!==n&&Object(a.createElement)("ul",{className:"ui-navigation"},Object(a.createElement)("li",{className:1===n?"ui-navigation-link active":"ui-navigation-link",onClick:()=>t(1)},Object(u.__)("Groups Management",e.slug)),p&&e.mainSite===e.siteID&&Object(a.createElement)("li",{className:3===n?"ui-navigation-link active":"ui-navigation-link",onClick:()=>t(3)},Object(u.__)("Multisite",e.slug)),Object(a.createElement)("li",{className:2===n?"ui-navigation-link active":"ui-navigation-link",onClick:()=>t(2)},Object(u.__)("Settings",e.slug))))}function h(e){const{name:t,id:n,changeName:o,editGroup:r,temp:i,focus:l}=e;return Object(a.createElement)("input",{className:"ui-body-edit-title",autoFocus:l,onFocus:e=>{e.target.select()},value:t,onInput:e=>{o(n,e.target.value)},onBlur:e=>{e.target.value.length?e.target.value.length&&"/"!==e.target.value&&r(n):e.target.focus()},type:"text","data-edit":n})}function g(e){const{title:t,collapse:n,height:o}=e,[r,i]=l.a.useState(n||"open"),s="open"===r?"dashicons-arrow-up-alt2":"dashicons-arrow-down-alt2",c=n?"collapsible":"";return Object(a.createElement)("div",{className:"ui-panel"},Object(a.createElement)("div",{className:"ui-panel-header "+c,onClick:()=>{n&&i("open"===r?"closed":"open")}},Object(a.createElement)("h3",{className:"ui-panel-header-title"},t),n&&Object(a.createElement)("span",{className:"dashicons "+s})),"open"===r&&Object(a.createElement)("div",{className:"ui-panel-body "+r},e.children))}function m(e){const{name:t,version:n,id:o,callback:r,checked:i,bold:l,subname:s,className:c,disabled:u}=e,d=c||"";return Object(a.createElement)("div",{className:"ui-body-sidebar-list-item "+d},Object(a.createElement)("label",null,Object(a.createElement)("input",{type:"checkbox",checked:i,value:o,onChange:r,disabled:u}),Object(a.createElement)("span",null,l?Object(a.createElement)("strong",null,t):Object(a.createElement)("span",null,t),s&&Object(a.createElement)("div",null,s))),Object(a.createElement)("span",{className:"children"},n&&Object(a.createElement)("span",{className:"version"},n),e.children))}function f(e){const{group:t,plugins:n,removePlugins:o,removePlugin:r}=e,[i,s]=l.a.useState([]),c=0<t.plugins.length,d=e=>{const t=[...i];e.target.checked?t.push(e.target.value):t.splice(t.indexOf(e.target.value),1),s(t)};return Object(a.createElement)(g,{title:Object(u.__)("Grouped plugins",e.slug)},c&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m,{name:Object(u.__)("Select All",e.slug),className:"list-control",callback:e=>{e.target.checked?s(t.plugins):s([])},checked:i.length===t.plugins.length},Object(a.createElement)("button",{disabled:!i.length,type:"button",className:"button",onClick:e=>{o(t.id,[...i])}},Object(u.__)("Remove selected",e.slug))),Object(a.createElement)("div",{className:"ui-body-edit-plugins"},t.plugins.map((e,o)=>{const l=n[e];return Object(a.createElement)(m,{name:l.Name,version:l.Version,checked:-1<i.indexOf(e),id:e,callback:d},Object(a.createElement)("label",{className:"dashicons dashicons-no-alt",onClick:()=>r(t.id,e)}))}))),!c&&Object(a.createElement)("div",{className:"ui-body-edit-plugins"},Object(a.createElement)("span",{className:"ui-body-edit-plugins-item"},Object(u.__)("No plugins selected",e.slug))))}function b({group:e,removeKeyword:t}){const{id:n,keywords:o}=e;return o.map(e=>Object(a.createElement)("span",{className:"ui-keyword"},e,Object(a.createElement)("label",{className:"dashicons dashicons-no-alt",onClick:()=>t(n,e)})))}function v(e){const{group:t,addKeyword:n,removeKeyword:o}=e;return Object(a.createElement)("div",{className:"ui-body-sidebar-list-item-section"},Object(a.createElement)(g,{title:Object(u.__)("Keywords",e.slug)},Object(a.createElement)(b,{group:t,removeKeyword:o,addKeyword:n}),Object(a.createElement)("hr",null),Object(a.createElement)("input",{className:"regular-text keywords-input",type:"text",placeholder:Object(u.__)("Add keyword"),"data-keywords":!0,onKeyDown:e=>{const o=e.target.value.trim();"Enter"!==e.key&&","!==e.key||(e.preventDefault(),e.stopPropagation(),e.target.dataset.keywords&&0<o.length&&(n(t.id,o),e.target.value=""))}})))}function E(e){const{group:t}=e;return Object(a.createElement)("div",{className:"ui-body-sidebar-list-item-edit"},Object(a.createElement)(f,e),Object(a.createElement)(v,e))}function y(e){const{selectGroup:t,openGroup:n,group:o,changeName:i,editGroup:l,index:s}=e,{temp:c,name:u,id:d,plugins:p,selected:g,open:m,edit:f,focus:b}=o,v=g?"active":"";return Object(a.createElement)("div",{key:d,"data-id":d},Object(a.createElement)("div",{className:"plugin-group ui-body-sidebar-list-item "+v},!f&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)("span",null,Object(a.createElement)("span",{className:"sort-handle dashicons dashicons-menu"}),Object(a.createElement)("input",{type:"checkbox",checked:g,onClick:e=>t(d)}),Object(a.createElement)("span",{className:"ui-body-sidebar-list-item-title",onClick:e=>n(d)},u)),Object(a.createElement)("span",{className:"ui-body-sidebar-list-item-icons"},Object(a.createElement)("span",{className:"dashicons dashicons-edit",onClick:()=>l(d)}),p.length)),f&&Object(a.createElement)(h,{temp:c,name:u,id:d,changeName:i,editGroup:l,focus:b})),!c&&m&&Object(a.createElement)(E,r()({group:o},e)))}function O(e){const{groups:t,getList:n,edit:o}=e;return n().map((n,i)=>{const l=t[n];return Object(a.createElement)(y,r()({index:i,group:l,editing:n===o},e))})}function w(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?w(Object(n),!0).forEach((function(t){S(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):w(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _(e){return(_="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function N(){return(N=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e}).apply(this,arguments)}function k(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function D(e){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(e)}var x=D(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),C=D(/Edge/i),T=D(/firefox/i),P=D(/safari/i)&&!D(/chrome/i)&&!D(/android/i),I=D(/iP(ad|od|hone)/i),A=D(/chrome/i)&&D(/android/i),M={capture:!1,passive:!1};function R(e,t,n){e.addEventListener(t,n,!x&&M)}function X(e,t,n){e.removeEventListener(t,n,!x&&M)}function F(e,t){if(t){if(">"===t[0]&&(t=t.substring(1)),e)try{if(e.matches)return e.matches(t);if(e.msMatchesSelector)return e.msMatchesSelector(t);if(e.webkitMatchesSelector)return e.webkitMatchesSelector(t)}catch(e){return!1}return!1}}function L(e){return e.host&&e!==document&&e.host.nodeType?e.host:e.parentNode}function Y(e,t,n,o){if(e){n=n||document;do{if(null!=t&&(">"===t[0]?e.parentNode===n&&F(e,t):F(e,t))||o&&e===n)return e;if(e===n)break}while(e=L(e))}return null}var G,B=/\s+/g;function H(e,t,n){if(e&&t)if(e.classList)e.classList[n?"add":"remove"](t);else{var o=(" "+e.className+" ").replace(B," ").replace(" "+t+" "," ");e.className=(o+(n?" "+t:"")).replace(B," ")}}function U(e,t,n){var o=e&&e.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(e,""):e.currentStyle&&(n=e.currentStyle),void 0===t?n:n[t];t in o||-1!==t.indexOf("webkit")||(t="-webkit-"+t),o[t]=n+("string"==typeof n?"":"px")}}function W(e,t){var n="";if("string"==typeof e)n=e;else do{var o=U(e,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!t&&(e=e.parentNode));var r=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return r&&new r(n)}function z(e,t,n){if(e){var o=e.getElementsByTagName(t),r=0,a=o.length;if(n)for(;r<a;r++)n(o[r],r);return o}return[]}function K(){return document.scrollingElement||document.documentElement}function V(e,t,n,o,r){if(e.getBoundingClientRect||e===window){var a,i,l,s,c,u,d;if(e!==window&&e.parentNode&&e!==K()?(i=(a=e.getBoundingClientRect()).top,l=a.left,s=a.bottom,c=a.right,u=a.height,d=a.width):(i=0,l=0,s=window.innerHeight,c=window.innerWidth,u=window.innerHeight,d=window.innerWidth),(t||n)&&e!==window&&(r=r||e.parentNode,!x))do{if(r&&r.getBoundingClientRect&&("none"!==U(r,"transform")||n&&"static"!==U(r,"position"))){var p=r.getBoundingClientRect();i-=p.top+parseInt(U(r,"border-top-width")),l-=p.left+parseInt(U(r,"border-left-width")),s=i+a.height,c=l+a.width;break}}while(r=r.parentNode);if(o&&e!==window){var h=W(r||e),g=h&&h.a,m=h&&h.d;h&&(s=(i/=m)+(u/=m),c=(l/=g)+(d/=g))}return{top:i,left:l,bottom:s,right:c,width:d,height:u}}}function q(e,t,n){for(var o=ee(e,!0),r=V(e)[t];o;){var a=V(o)[n];if(!("top"===n||"left"===n?r>=a:r<=a))return o;if(o===K())break;o=ee(o,!1)}return!1}function J(e,t,n,o){for(var r=0,a=0,i=e.children;a<i.length;){if("none"!==i[a].style.display&&i[a]!==nt.ghost&&(o||i[a]!==nt.dragged)&&Y(i[a],n.draggable,e,!1)){if(r===t)return i[a];r++}a++}return null}function Z(e,t){for(var n=e.lastElementChild;n&&(n===nt.ghost||"none"===U(n,"display")||t&&!F(n,t));)n=n.previousElementSibling;return n||null}function Q(e,t){var n=0;if(!e||!e.parentNode)return-1;for(;e=e.previousElementSibling;)"TEMPLATE"===e.nodeName.toUpperCase()||e===nt.clone||t&&!F(e,t)||n++;return n}function $(e){var t=0,n=0,o=K();if(e)do{var r=W(e),a=r.a,i=r.d;t+=e.scrollLeft*a,n+=e.scrollTop*i}while(e!==o&&(e=e.parentNode));return[t,n]}function ee(e,t){if(!e||!e.getBoundingClientRect)return K();var n=e,o=!1;do{if(n.clientWidth<n.scrollWidth||n.clientHeight<n.scrollHeight){var r=U(n);if(n.clientWidth<n.scrollWidth&&("auto"==r.overflowX||"scroll"==r.overflowX)||n.clientHeight<n.scrollHeight&&("auto"==r.overflowY||"scroll"==r.overflowY)){if(!n.getBoundingClientRect||n===document.body)return K();if(o||t)return n;o=!0}}}while(n=n.parentNode);return K()}function te(e,t){return Math.round(e.top)===Math.round(t.top)&&Math.round(e.left)===Math.round(t.left)&&Math.round(e.height)===Math.round(t.height)&&Math.round(e.width)===Math.round(t.width)}function ne(e,t){return function(){if(!G){var n=arguments,o=this;1===n.length?e.call(o,n[0]):e.apply(o,n),G=setTimeout((function(){G=void 0}),t)}}}function oe(e,t,n){e.scrollLeft+=t,e.scrollTop+=n}function re(e){var t=window.Polymer,n=window.jQuery||window.Zepto;return t&&t.dom?t.dom(e).cloneNode(!0):n?n(e).clone(!0)[0]:e.cloneNode(!0)}var ae="Sortable"+(new Date).getTime();var ie=[],le={initializeByDefault:!0},se={mount:function(e){for(var t in le)le.hasOwnProperty(t)&&!(t in e)&&(e[t]=le[t]);ie.forEach((function(t){if(t.pluginName===e.pluginName)throw"Sortable: Cannot mount plugin ".concat(e.pluginName," more than once")})),ie.push(e)},pluginEvent:function(e,t,n){var o=this;this.eventCanceled=!1,n.cancel=function(){o.eventCanceled=!0};var r=e+"Global";ie.forEach((function(o){t[o.pluginName]&&(t[o.pluginName][r]&&t[o.pluginName][r](j({sortable:t},n)),t.options[o.pluginName]&&t[o.pluginName][e]&&t[o.pluginName][e](j({sortable:t},n)))}))},initializePlugins:function(e,t,n,o){for(var r in ie.forEach((function(o){var r=o.pluginName;if(e.options[r]||o.initializeByDefault){var a=new o(e,t,e.options);a.sortable=e,a.options=e.options,e[r]=a,N(n,a.defaults)}})),e.options)if(e.options.hasOwnProperty(r)){var a=this.modifyOption(e,r,e.options[r]);void 0!==a&&(e.options[r]=a)}},getEventProperties:function(e,t){var n={};return ie.forEach((function(o){"function"==typeof o.eventProperties&&N(n,o.eventProperties.call(t[o.pluginName],e))})),n},modifyOption:function(e,t,n){var o;return ie.forEach((function(r){e[r.pluginName]&&r.optionListeners&&"function"==typeof r.optionListeners[t]&&(o=r.optionListeners[t].call(e[r.pluginName],n))})),o}};var ce=["evt"],ue=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,r=k(n,ce);se.pluginEvent.bind(nt)(e,t,j({dragEl:pe,parentEl:he,ghostEl:ge,rootEl:me,nextEl:fe,lastDownEl:be,cloneEl:ve,cloneHidden:Ee,dragStarted:Pe,putSortable:Se,activeSortable:nt.active,originalEvent:o,oldIndex:ye,oldDraggableIndex:we,newIndex:Oe,newDraggableIndex:je,hideGhostForTarget:Qe,unhideGhostForTarget:$e,cloneNowHidden:function(){Ee=!0},cloneNowShown:function(){Ee=!1},dispatchSortableEvent:function(e){de({sortable:t,name:e,originalEvent:o})}},r))};function de(e){!function(e){var t=e.sortable,n=e.rootEl,o=e.name,r=e.targetEl,a=e.cloneEl,i=e.toEl,l=e.fromEl,s=e.oldIndex,c=e.newIndex,u=e.oldDraggableIndex,d=e.newDraggableIndex,p=e.originalEvent,h=e.putSortable,g=e.extraEventProperties;if(t=t||n&&n[ae]){var m,f=t.options,b="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||x||C?(m=document.createEvent("Event")).initEvent(o,!0,!0):m=new CustomEvent(o,{bubbles:!0,cancelable:!0}),m.to=i||n,m.from=l||n,m.item=r||n,m.clone=a,m.oldIndex=s,m.newIndex=c,m.oldDraggableIndex=u,m.newDraggableIndex=d,m.originalEvent=p,m.pullMode=h?h.lastPutMode:void 0;var v=j(j({},g),se.getEventProperties(o,t));for(var E in v)m[E]=v[E];n&&n.dispatchEvent(m),f[b]&&f[b].call(t,m)}}(j({putSortable:Se,cloneEl:ve,targetEl:pe,rootEl:me,oldIndex:ye,oldDraggableIndex:we,newIndex:Oe,newDraggableIndex:je},e))}var pe,he,ge,me,fe,be,ve,Ee,ye,Oe,we,je,_e,Se,Ne,ke,De,xe,Ce,Te,Pe,Ie,Ae,Me,Re,Xe=!1,Fe=!1,Le=[],Ye=!1,Ge=!1,Be=[],He=!1,Ue=[],We="undefined"!=typeof document,ze=I,Ke=C||x?"cssFloat":"float",Ve=We&&!A&&!I&&"draggable"in document.createElement("div"),qe=function(){if(We){if(x)return!1;var e=document.createElement("x");return e.style.cssText="pointer-events:auto","auto"===e.style.pointerEvents}}(),Je=function(e,t){var n=U(e),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),r=J(e,0,t),a=J(e,1,t),i=r&&U(r),l=a&&U(a),s=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+V(r).width,c=l&&parseInt(l.marginLeft)+parseInt(l.marginRight)+V(a).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(r&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!a||"both"!==l.clear&&l.clear!==u?"horizontal":"vertical"}return r&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||s>=o&&"none"===n[Ke]||a&&"none"===n[Ke]&&s+c>o)?"vertical":"horizontal"},Ze=function(e){function t(e,n){return function(o,r,a,i){var l=o.options.group.name&&r.options.group.name&&o.options.group.name===r.options.group.name;if(null==e&&(n||l))return!0;if(null==e||!1===e)return!1;if(n&&"clone"===e)return e;if("function"==typeof e)return t(e(o,r,a,i),n)(o,r,a,i);var s=(n?o:r).options.group.name;return!0===e||"string"==typeof e&&e===s||e.join&&e.indexOf(s)>-1}}var n={},o=e.group;o&&"object"==_(o)||(o={name:o}),n.name=o.name,n.checkPull=t(o.pull,!0),n.checkPut=t(o.put),n.revertClone=o.revertClone,e.group=n},Qe=function(){!qe&&ge&&U(ge,"display","none")},$e=function(){!qe&&ge&&U(ge,"display","")};We&&document.addEventListener("click",(function(e){if(Fe)return e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.stopImmediatePropagation&&e.stopImmediatePropagation(),Fe=!1,!1}),!0);var et=function(e){if(pe){e=e.touches?e.touches[0]:e;var t=(r=e.clientX,a=e.clientY,Le.some((function(e){var t=e[ae].options.emptyInsertThreshold;if(t&&!Z(e)){var n=V(e),o=r>=n.left-t&&r<=n.right+t,l=a>=n.top-t&&a<=n.bottom+t;return o&&l?i=e:void 0}})),i);if(t){var n={};for(var o in e)e.hasOwnProperty(o)&&(n[o]=e[o]);n.target=n.rootEl=t,n.preventDefault=void 0,n.stopPropagation=void 0,t[ae]._onDragOver(n)}}var r,a,i},tt=function(e){pe&&pe.parentNode[ae]._isOutsideThisEl(e.target)};function nt(e,t){if(!e||!e.nodeType||1!==e.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(e));this.el=e,this.options=t=N({},t),e[ae]=this;var n,o,r={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(e.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Je(e,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(e,t){e.setData("Text",t.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==nt.supportPointer&&"PointerEvent"in window&&!P,emptyInsertThreshold:5};for(var a in se.initializePlugins(this,e,r),r)!(a in t)&&(t[a]=r[a]);for(var i in Ze(t),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!t.forceFallback&&Ve,this.nativeDraggable&&(this.options.touchStartThreshold=1),t.supportPointer?R(e,"pointerdown",this._onTapStart):(R(e,"mousedown",this._onTapStart),R(e,"touchstart",this._onTapStart)),this.nativeDraggable&&(R(e,"dragover",this),R(e,"dragenter",this)),Le.push(this.el),t.store&&t.store.get&&this.sort(t.store.get(this)||[]),N(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(e){if("none"!==U(e,"display")&&e!==nt.ghost){o.push({target:e,rect:V(e)});var t=j({},o[o.length-1].rect);if(e.thisAnimationDuration){var n=W(e,!0);n&&(t.top-=n.f,t.left-=n.e)}e.fromRect=t}}))},addAnimationState:function(e){o.push(e)},removeAnimationState:function(e){o.splice(function(e,t){for(var n in e)if(e.hasOwnProperty(n))for(var o in t)if(t.hasOwnProperty(o)&&t[o]===e[n][o])return Number(n);return-1}(o,{target:e}),1)},animateAll:function(e){var t=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof e&&e());var r=!1,a=0;o.forEach((function(e){var n=0,o=e.target,i=o.fromRect,l=V(o),s=o.prevFromRect,c=o.prevToRect,u=e.rect,d=W(o,!0);d&&(l.top-=d.f,l.left-=d.e),o.toRect=l,o.thisAnimationDuration&&te(s,l)&&!te(i,l)&&(u.top-l.top)/(u.left-l.left)==(i.top-l.top)/(i.left-l.left)&&(n=function(e,t,n,o){return Math.sqrt(Math.pow(t.top-e.top,2)+Math.pow(t.left-e.left,2))/Math.sqrt(Math.pow(t.top-n.top,2)+Math.pow(t.left-n.left,2))*o.animation}(u,s,c,t.options)),te(l,i)||(o.prevFromRect=i,o.prevToRect=l,n||(n=t.options.animation),t.animate(o,u,l,n)),n&&(r=!0,a=Math.max(a,n),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout((function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null}),n),o.thisAnimationDuration=n)})),clearTimeout(n),r?n=setTimeout((function(){"function"==typeof e&&e()}),a):"function"==typeof e&&e(),o=[]},animate:function(e,t,n,o){if(o){U(e,"transition",""),U(e,"transform","");var r=W(this.el),a=r&&r.a,i=r&&r.d,l=(t.left-n.left)/(a||1),s=(t.top-n.top)/(i||1);e.animatingX=!!l,e.animatingY=!!s,U(e,"transform","translate3d("+l+"px,"+s+"px,0)"),this.forRepaintDummy=function(e){return e.offsetWidth}(e),U(e,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),U(e,"transform","translate3d(0,0,0)"),"number"==typeof e.animated&&clearTimeout(e.animated),e.animated=setTimeout((function(){U(e,"transition",""),U(e,"transform",""),e.animated=!1,e.animatingX=!1,e.animatingY=!1}),o)}}}))}function ot(e,t,n,o,r,a,i,l){var s,c,u=e[ae],d=u.options.onMove;return!window.CustomEvent||x||C?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=t,s.from=e,s.dragged=n,s.draggedRect=o,s.related=r||t,s.relatedRect=a||V(t),s.willInsertAfter=l,s.originalEvent=i,e.dispatchEvent(s),d&&(c=d.call(u,s,i)),c}function rt(e){e.draggable=!1}function at(){He=!1}function it(e){for(var t=e.tagName+e.className+e.src+e.href+e.textContent,n=t.length,o=0;n--;)o+=t.charCodeAt(n);return o.toString(36)}function lt(e){return setTimeout(e,0)}function st(e){return clearTimeout(e)}nt.prototype={constructor:nt,_isOutsideThisEl:function(e){this.el.contains(e)||e===this.el||(Ie=null)},_getDirection:function(e,t){return"function"==typeof this.options.direction?this.options.direction.call(this,e,t,pe):this.options.direction},_onTapStart:function(e){if(e.cancelable){var t=this,n=this.el,o=this.options,r=o.preventOnFilter,a=e.type,i=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(i||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=o.filter;if(function(e){Ue.length=0;for(var t=e.getElementsByTagName("input"),n=t.length;n--;){var o=t[n];o.checked&&Ue.push(o)}}(n),!pe&&!(/mousedown|pointerdown/.test(a)&&0!==e.button||o.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!P||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=Y(l,o.draggable,n,!1))&&l.animated||be===l)){if(ye=Q(l),we=Q(l,o.draggable),"function"==typeof c){if(c.call(this,e,l,this))return de({sortable:t,rootEl:s,name:"filter",targetEl:l,toEl:n,fromEl:n}),ue("filter",t,{evt:e}),void(r&&e.cancelable&&e.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=Y(s,o.trim(),n,!1))return de({sortable:t,rootEl:o,name:"filter",targetEl:l,fromEl:n,toEl:n}),ue("filter",t,{evt:e}),!0}))))return void(r&&e.cancelable&&e.preventDefault());o.handle&&!Y(s,o.handle,n,!1)||this._prepareDragStart(e,i,l)}}},_prepareDragStart:function(e,t,n){var o,r=this,a=r.el,i=r.options,l=a.ownerDocument;if(n&&!pe&&n.parentNode===a){var s=V(n);if(me=a,he=(pe=n).parentNode,fe=pe.nextSibling,be=n,_e=i.group,nt.dragged=pe,Ne={target:pe,clientX:(t||e).clientX,clientY:(t||e).clientY},Ce=Ne.clientX-s.left,Te=Ne.clientY-s.top,this._lastX=(t||e).clientX,this._lastY=(t||e).clientY,pe.style["will-change"]="all",o=function(){ue("delayEnded",r,{evt:e}),nt.eventCanceled?r._onDrop():(r._disableDelayedDragEvents(),!T&&r.nativeDraggable&&(pe.draggable=!0),r._triggerDragStart(e,t),de({sortable:r,name:"choose",originalEvent:e}),H(pe,i.chosenClass,!0))},i.ignore.split(",").forEach((function(e){z(pe,e.trim(),rt)})),R(l,"dragover",et),R(l,"mousemove",et),R(l,"touchmove",et),R(l,"mouseup",r._onDrop),R(l,"touchend",r._onDrop),R(l,"touchcancel",r._onDrop),T&&this.nativeDraggable&&(this.options.touchStartThreshold=4,pe.draggable=!0),ue("delayStart",this,{evt:e}),!i.delay||i.delayOnTouchOnly&&!t||this.nativeDraggable&&(C||x))o();else{if(nt.eventCanceled)return void this._onDrop();R(l,"mouseup",r._disableDelayedDrag),R(l,"touchend",r._disableDelayedDrag),R(l,"touchcancel",r._disableDelayedDrag),R(l,"mousemove",r._delayedDragTouchMoveHandler),R(l,"touchmove",r._delayedDragTouchMoveHandler),i.supportPointer&&R(l,"pointermove",r._delayedDragTouchMoveHandler),r._dragStartTimer=setTimeout(o,i.delay)}}},_delayedDragTouchMoveHandler:function(e){var t=e.touches?e.touches[0]:e;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){pe&&rt(pe),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var e=this.el.ownerDocument;X(e,"mouseup",this._disableDelayedDrag),X(e,"touchend",this._disableDelayedDrag),X(e,"touchcancel",this._disableDelayedDrag),X(e,"mousemove",this._delayedDragTouchMoveHandler),X(e,"touchmove",this._delayedDragTouchMoveHandler),X(e,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(e,t){t=t||"touch"==e.pointerType&&e,!this.nativeDraggable||t?this.options.supportPointer?R(document,"pointermove",this._onTouchMove):R(document,t?"touchmove":"mousemove",this._onTouchMove):(R(pe,"dragend",this),R(me,"dragstart",this._onDragStart));try{document.selection?lt((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(e){}},_dragStarted:function(e,t){if(Xe=!1,me&&pe){ue("dragStarted",this,{evt:t}),this.nativeDraggable&&R(document,"dragover",tt);var n=this.options;!e&&H(pe,n.dragClass,!1),H(pe,n.ghostClass,!0),nt.active=this,e&&this._appendGhost(),de({sortable:this,name:"start",originalEvent:t})}else this._nulling()},_emulateDragOver:function(){if(ke){this._lastX=ke.clientX,this._lastY=ke.clientY,Qe();for(var e=document.elementFromPoint(ke.clientX,ke.clientY),t=e;e&&e.shadowRoot&&(e=e.shadowRoot.elementFromPoint(ke.clientX,ke.clientY))!==t;)t=e;if(pe.parentNode[ae]._isOutsideThisEl(e),t)do{if(t[ae]&&t[ae]._onDragOver({clientX:ke.clientX,clientY:ke.clientY,target:e,rootEl:t})&&!this.options.dragoverBubble)break;e=t}while(t=t.parentNode);$e()}},_onTouchMove:function(e){if(Ne){var t=this.options,n=t.fallbackTolerance,o=t.fallbackOffset,r=e.touches?e.touches[0]:e,a=ge&&W(ge,!0),i=ge&&a&&a.a,l=ge&&a&&a.d,s=ze&&Re&&$(Re),c=(r.clientX-Ne.clientX+o.x)/(i||1)+(s?s[0]-Be[0]:0)/(i||1),u=(r.clientY-Ne.clientY+o.y)/(l||1)+(s?s[1]-Be[1]:0)/(l||1);if(!nt.active&&!Xe){if(n&&Math.max(Math.abs(r.clientX-this._lastX),Math.abs(r.clientY-this._lastY))<n)return;this._onDragStart(e,!0)}if(ge){a?(a.e+=c-(De||0),a.f+=u-(xe||0)):a={a:1,b:0,c:0,d:1,e:c,f:u};var d="matrix(".concat(a.a,",").concat(a.b,",").concat(a.c,",").concat(a.d,",").concat(a.e,",").concat(a.f,")");U(ge,"webkitTransform",d),U(ge,"mozTransform",d),U(ge,"msTransform",d),U(ge,"transform",d),De=c,xe=u,ke=r}e.cancelable&&e.preventDefault()}},_appendGhost:function(){if(!ge){var e=this.options.fallbackOnBody?document.body:me,t=V(pe,!0,ze,!0,e),n=this.options;if(ze){for(Re=e;"static"===U(Re,"position")&&"none"===U(Re,"transform")&&Re!==document;)Re=Re.parentNode;Re!==document.body&&Re!==document.documentElement?(Re===document&&(Re=K()),t.top+=Re.scrollTop,t.left+=Re.scrollLeft):Re=K(),Be=$(Re)}H(ge=pe.cloneNode(!0),n.ghostClass,!1),H(ge,n.fallbackClass,!0),H(ge,n.dragClass,!0),U(ge,"transition",""),U(ge,"transform",""),U(ge,"box-sizing","border-box"),U(ge,"margin",0),U(ge,"top",t.top),U(ge,"left",t.left),U(ge,"width",t.width),U(ge,"height",t.height),U(ge,"opacity","0.8"),U(ge,"position",ze?"absolute":"fixed"),U(ge,"zIndex","100000"),U(ge,"pointerEvents","none"),nt.ghost=ge,e.appendChild(ge),U(ge,"transform-origin",Ce/parseInt(ge.style.width)*100+"% "+Te/parseInt(ge.style.height)*100+"%")}},_onDragStart:function(e,t){var n=this,o=e.dataTransfer,r=n.options;ue("dragStart",this,{evt:e}),nt.eventCanceled?this._onDrop():(ue("setupClone",this),nt.eventCanceled||((ve=re(pe)).draggable=!1,ve.style["will-change"]="",this._hideClone(),H(ve,this.options.chosenClass,!1),nt.clone=ve),n.cloneId=lt((function(){ue("clone",n),nt.eventCanceled||(n.options.removeCloneOnHide||me.insertBefore(ve,pe),n._hideClone(),de({sortable:n,name:"clone"}))})),!t&&H(pe,r.dragClass,!0),t?(Fe=!0,n._loopId=setInterval(n._emulateDragOver,50)):(X(document,"mouseup",n._onDrop),X(document,"touchend",n._onDrop),X(document,"touchcancel",n._onDrop),o&&(o.effectAllowed="move",r.setData&&r.setData.call(n,o,pe)),R(document,"drop",n),U(pe,"transform","translateZ(0)")),Xe=!0,n._dragStartId=lt(n._dragStarted.bind(n,t,e)),R(document,"selectstart",n),Pe=!0,P&&U(document.body,"user-select","none"))},_onDragOver:function(e){var t,n,o,r,a=this.el,i=e.target,l=this.options,s=l.group,c=nt.active,u=_e===s,d=l.sort,p=Se||c,h=this,g=!1;if(!He){if(void 0!==e.preventDefault&&e.cancelable&&e.preventDefault(),i=Y(i,l.draggable,a,!0),C("dragOver"),nt.eventCanceled)return g;if(pe.contains(e.target)||i.animated&&i.animatingX&&i.animatingY||h._ignoreWhileAnimating===i)return P(!1);if(Fe=!1,c&&!l.disabled&&(u?d||(o=he!==me):Se===this||(this.lastPutMode=_e.checkPull(this,c,pe,e))&&s.checkPut(this,c,pe,e))){if(r="vertical"===this._getDirection(e,i),t=V(pe),C("dragOverValid"),nt.eventCanceled)return g;if(o)return he=me,T(),this._hideClone(),C("revert"),nt.eventCanceled||(fe?me.insertBefore(pe,fe):me.appendChild(pe)),P(!0);var m=Z(a,l.draggable);if(!m||function(e,t,n){var o=V(Z(n.el,n.options.draggable));return t?e.clientX>o.right+10||e.clientX<=o.right&&e.clientY>o.bottom&&e.clientX>=o.left:e.clientX>o.right&&e.clientY>o.top||e.clientX<=o.right&&e.clientY>o.bottom+10}(e,r,this)&&!m.animated){if(m===pe)return P(!1);if(m&&a===e.target&&(i=m),i&&(n=V(i)),!1!==ot(me,a,pe,t,i,n,e,!!i))return T(),a.appendChild(pe),he=a,I(),P(!0)}else if(m&&function(e,t,n){var o=V(J(n.el,0,n.options,!0));return t?e.clientX<o.left-10||e.clientY<o.top&&e.clientX<o.right:e.clientY<o.top-10||e.clientY<o.bottom&&e.clientX<o.left}(e,r,this)){var f=J(a,0,l,!0);if(f===pe)return P(!1);if(n=V(i=f),!1!==ot(me,a,pe,t,i,n,e,!1))return T(),a.insertBefore(pe,f),he=a,I(),P(!0)}else if(i.parentNode===a){n=V(i);var b,v,E,y=pe.parentNode!==a,O=!function(e,t,n){var o=n?e.left:e.top,r=n?e.right:e.bottom,a=n?e.width:e.height,i=n?t.left:t.top,l=n?t.right:t.bottom,s=n?t.width:t.height;return o===i||r===l||o+a/2===i+s/2}(pe.animated&&pe.toRect||t,i.animated&&i.toRect||n,r),w=r?"top":"left",_=q(i,"top","top")||q(pe,"top","top"),S=_?_.scrollTop:void 0;if(Ie!==i&&(v=n[w],Ye=!1,Ge=!O&&l.invertSwap||y),0!==(b=function(e,t,n,o,r,a,i,l){var s=o?e.clientY:e.clientX,c=o?n.height:n.width,u=o?n.top:n.left,d=o?n.bottom:n.right,p=!1;if(!i)if(l&&Me<c*r){if(!Ye&&(1===Ae?s>u+c*a/2:s<d-c*a/2)&&(Ye=!0),Ye)p=!0;else if(1===Ae?s<u+Me:s>d-Me)return-Ae}else if(s>u+c*(1-r)/2&&s<d-c*(1-r)/2)return function(e){return Q(pe)<Q(e)?1:-1}(t);return(p=p||i)&&(s<u+c*a/2||s>d-c*a/2)?s>u+c/2?1:-1:0}(e,i,n,r,O?1:l.swapThreshold,null==l.invertedSwapThreshold?l.swapThreshold:l.invertedSwapThreshold,Ge,Ie===i))){var N=Q(pe);do{N-=b,E=he.children[N]}while(E&&("none"===U(E,"display")||E===ge))}if(0===b||E===i)return P(!1);Ie=i,Ae=b;var k=i.nextElementSibling,D=!1,x=ot(me,a,pe,t,i,n,e,D=1===b);if(!1!==x)return 1!==x&&-1!==x||(D=1===x),He=!0,setTimeout(at,30),T(),D&&!k?a.appendChild(pe):i.parentNode.insertBefore(pe,D?k:i),_&&oe(_,0,S-_.scrollTop),he=pe.parentNode,void 0===v||Ge||(Me=Math.abs(v-V(i)[w])),I(),P(!0)}if(a.contains(pe))return P(!1)}return!1}function C(l,s){ue(l,h,j({evt:e,isOwner:u,axis:r?"vertical":"horizontal",revert:o,dragRect:t,targetRect:n,canSort:d,fromSortable:p,target:i,completed:P,onMove:function(n,o){return ot(me,a,pe,t,n,V(n),e,o)},changed:I},s))}function T(){C("dragOverAnimationCapture"),h.captureAnimationState(),h!==p&&p.captureAnimationState()}function P(t){return C("dragOverCompleted",{insertion:t}),t&&(u?c._hideClone():c._showClone(h),h!==p&&(H(pe,Se?Se.options.ghostClass:c.options.ghostClass,!1),H(pe,l.ghostClass,!0)),Se!==h&&h!==nt.active?Se=h:h===nt.active&&Se&&(Se=null),p===h&&(h._ignoreWhileAnimating=i),h.animateAll((function(){C("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==p&&(p.animateAll(),p._ignoreWhileAnimating=null)),(i===pe&&!pe.animated||i===a&&!i.animated)&&(Ie=null),l.dragoverBubble||e.rootEl||i===document||(pe.parentNode[ae]._isOutsideThisEl(e.target),!t&&et(e)),!l.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),g=!0}function I(){Oe=Q(pe),je=Q(pe,l.draggable),de({sortable:h,name:"change",toEl:a,newIndex:Oe,newDraggableIndex:je,originalEvent:e})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){X(document,"mousemove",this._onTouchMove),X(document,"touchmove",this._onTouchMove),X(document,"pointermove",this._onTouchMove),X(document,"dragover",et),X(document,"mousemove",et),X(document,"touchmove",et)},_offUpEvents:function(){var e=this.el.ownerDocument;X(e,"mouseup",this._onDrop),X(e,"touchend",this._onDrop),X(e,"pointerup",this._onDrop),X(e,"touchcancel",this._onDrop),X(document,"selectstart",this)},_onDrop:function(e){var t=this.el,n=this.options;Oe=Q(pe),je=Q(pe,n.draggable),ue("drop",this,{evt:e}),he=pe&&pe.parentNode,Oe=Q(pe),je=Q(pe,n.draggable),nt.eventCanceled||(Xe=!1,Ge=!1,Ye=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),st(this.cloneId),st(this._dragStartId),this.nativeDraggable&&(X(document,"drop",this),X(t,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),P&&U(document.body,"user-select",""),U(pe,"transform",""),e&&(Pe&&(e.cancelable&&e.preventDefault(),!n.dropBubble&&e.stopPropagation()),ge&&ge.parentNode&&ge.parentNode.removeChild(ge),(me===he||Se&&"clone"!==Se.lastPutMode)&&ve&&ve.parentNode&&ve.parentNode.removeChild(ve),pe&&(this.nativeDraggable&&X(pe,"dragend",this),rt(pe),pe.style["will-change"]="",Pe&&!Xe&&H(pe,Se?Se.options.ghostClass:this.options.ghostClass,!1),H(pe,this.options.chosenClass,!1),de({sortable:this,name:"unchoose",toEl:he,newIndex:null,newDraggableIndex:null,originalEvent:e}),me!==he?(Oe>=0&&(de({rootEl:he,name:"add",toEl:he,fromEl:me,originalEvent:e}),de({sortable:this,name:"remove",toEl:he,originalEvent:e}),de({rootEl:he,name:"sort",toEl:he,fromEl:me,originalEvent:e}),de({sortable:this,name:"sort",toEl:he,originalEvent:e})),Se&&Se.save()):Oe!==ye&&Oe>=0&&(de({sortable:this,name:"update",toEl:he,originalEvent:e}),de({sortable:this,name:"sort",toEl:he,originalEvent:e})),nt.active&&(null!=Oe&&-1!==Oe||(Oe=ye,je=we),de({sortable:this,name:"end",toEl:he,originalEvent:e}),this.save())))),this._nulling()},_nulling:function(){ue("nulling",this),me=pe=he=ge=fe=ve=be=Ee=Ne=ke=Pe=Oe=je=ye=we=Ie=Ae=Se=_e=nt.dragged=nt.ghost=nt.clone=nt.active=null,Ue.forEach((function(e){e.checked=!0})),Ue.length=De=xe=0},handleEvent:function(e){switch(e.type){case"drop":case"dragend":this._onDrop(e);break;case"dragenter":case"dragover":pe&&(this._onDragOver(e),function(e){e.dataTransfer&&(e.dataTransfer.dropEffect="move"),e.cancelable&&e.preventDefault()}(e));break;case"selectstart":e.preventDefault()}},toArray:function(){for(var e,t=[],n=this.el.children,o=0,r=n.length,a=this.options;o<r;o++)Y(e=n[o],a.draggable,this.el,!1)&&t.push(e.getAttribute(a.dataIdAttr)||it(e));return t},sort:function(e,t){var n={},o=this.el;this.toArray().forEach((function(e,t){var r=o.children[t];Y(r,this.options.draggable,o,!1)&&(n[e]=r)}),this),t&&this.captureAnimationState(),e.forEach((function(e){n[e]&&(o.removeChild(n[e]),o.appendChild(n[e]))})),t&&this.animateAll()},save:function(){var e=this.options.store;e&&e.set&&e.set(this)},closest:function(e,t){return Y(e,t||this.options.draggable,this.el,!1)},option:function(e,t){var n=this.options;if(void 0===t)return n[e];var o=se.modifyOption(this,e,t);n[e]=void 0!==o?o:t,"group"===e&&Ze(n)},destroy:function(){ue("destroy",this);var e=this.el;e[ae]=null,X(e,"mousedown",this._onTapStart),X(e,"touchstart",this._onTapStart),X(e,"pointerdown",this._onTapStart),this.nativeDraggable&&(X(e,"dragover",this),X(e,"dragenter",this)),Array.prototype.forEach.call(e.querySelectorAll("[draggable]"),(function(e){e.removeAttribute("draggable")})),this._onDrop(),this._disableDelayedDragEvents(),Le.splice(Le.indexOf(this.el),1),this.el=e=null},_hideClone:function(){if(!Ee){if(ue("hideClone",this),nt.eventCanceled)return;U(ve,"display","none"),this.options.removeCloneOnHide&&ve.parentNode&&ve.parentNode.removeChild(ve),Ee=!0}},_showClone:function(e){if("clone"===e.lastPutMode){if(Ee){if(ue("showClone",this),nt.eventCanceled)return;pe.parentNode!=me||this.options.group.revertClone?fe?me.insertBefore(ve,fe):me.appendChild(ve):me.insertBefore(ve,pe),this.options.group.revertClone&&this.animate(pe,ve),U(ve,"display",""),Ee=!1}}else this._hideClone()}},We&&R(document,"touchmove",(function(e){(nt.active||Xe)&&e.cancelable&&e.preventDefault()})),nt.utils={on:R,off:X,css:U,find:z,is:function(e,t){return!!Y(e,t,e,!1)},extend:function(e,t){if(e&&t)for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e},throttle:ne,closest:Y,toggleClass:H,clone:re,index:Q,nextTick:lt,cancelNextTick:st,detectDirection:Je,getChild:J},nt.get=function(e){return e[ae]},nt.mount=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];t[0].constructor===Array&&(t=t[0]),t.forEach((function(e){if(!e.prototype||!e.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(e));e.utils&&(nt.utils=j(j({},nt.utils),e.utils)),se.mount(e)}))},nt.create=function(e,t){return new nt(e,t)},nt.version="1.14.0";var ct,ut,dt,pt,ht,gt,mt=[],ft=!1;function bt(){mt.forEach((function(e){clearInterval(e.pid)})),mt=[]}function vt(){clearInterval(gt)}var Et=ne((function(e,t,n,o){if(t.scroll){var r,a=(e.touches?e.touches[0]:e).clientX,i=(e.touches?e.touches[0]:e).clientY,l=t.scrollSensitivity,s=t.scrollSpeed,c=K(),u=!1;ut!==n&&(ut=n,bt(),ct=t.scroll,r=t.scrollFn,!0===ct&&(ct=ee(n,!0)));var d=0,p=ct;do{var h=p,g=V(h),m=g.top,f=g.bottom,b=g.left,v=g.right,E=g.width,y=g.height,O=void 0,w=void 0,j=h.scrollWidth,_=h.scrollHeight,S=U(h),N=h.scrollLeft,k=h.scrollTop;h===c?(O=E<j&&("auto"===S.overflowX||"scroll"===S.overflowX||"visible"===S.overflowX),w=y<_&&("auto"===S.overflowY||"scroll"===S.overflowY||"visible"===S.overflowY)):(O=E<j&&("auto"===S.overflowX||"scroll"===S.overflowX),w=y<_&&("auto"===S.overflowY||"scroll"===S.overflowY));var D=O&&(Math.abs(v-a)<=l&&N+E<j)-(Math.abs(b-a)<=l&&!!N),x=w&&(Math.abs(f-i)<=l&&k+y<_)-(Math.abs(m-i)<=l&&!!k);if(!mt[d])for(var C=0;C<=d;C++)mt[C]||(mt[C]={});mt[d].vx==D&&mt[d].vy==x&&mt[d].el===h||(mt[d].el=h,mt[d].vx=D,mt[d].vy=x,clearInterval(mt[d].pid),0==D&&0==x||(u=!0,mt[d].pid=setInterval(function(){o&&0===this.layer&&nt.active._onTouchMove(ht);var t=mt[this.layer].vy?mt[this.layer].vy*s:0,n=mt[this.layer].vx?mt[this.layer].vx*s:0;"function"==typeof r&&"continue"!==r.call(nt.dragged.parentNode[ae],n,t,e,ht,mt[this.layer].el)||oe(mt[this.layer].el,n,t)}.bind({layer:d}),24))),d++}while(t.bubbleScroll&&p!==c&&(p=ee(p,!1)));ft=u}}),30),yt=function(e){var t=e.originalEvent,n=e.putSortable,o=e.dragEl,r=e.activeSortable,a=e.dispatchSortableEvent,i=e.hideGhostForTarget,l=e.unhideGhostForTarget;if(t){var s=n||r;i();var c=t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t,u=document.elementFromPoint(c.clientX,c.clientY);l(),s&&!s.el.contains(u)&&(a("spill"),this.onSpill({dragEl:o,putSortable:n}))}};function Ot(){}function wt(){}Ot.prototype={startIndex:null,dragStart:function(e){var t=e.oldDraggableIndex;this.startIndex=t},onSpill:function(e){var t=e.dragEl,n=e.putSortable;this.sortable.captureAnimationState(),n&&n.captureAnimationState();var o=J(this.sortable.el,this.startIndex,this.options);o?this.sortable.el.insertBefore(t,o):this.sortable.el.appendChild(t),this.sortable.animateAll(),n&&n.animateAll()},drop:yt},N(Ot,{pluginName:"revertOnSpill"}),wt.prototype={onSpill:function(e){var t=e.dragEl,n=e.putSortable||this.sortable;n.captureAnimationState(),t.parentNode&&t.parentNode.removeChild(t),n.animateAll()},drop:yt},N(wt,{pluginName:"removeOnSpill"}),nt.mount(new function(){function e(){for(var e in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)"_"===e.charAt(0)&&"function"==typeof this[e]&&(this[e]=this[e].bind(this))}return e.prototype={dragStarted:function(e){var t=e.originalEvent;this.sortable.nativeDraggable?R(document,"dragover",this._handleAutoScroll):this.options.supportPointer?R(document,"pointermove",this._handleFallbackAutoScroll):t.touches?R(document,"touchmove",this._handleFallbackAutoScroll):R(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(e){var t=e.originalEvent;this.options.dragOverBubble||t.rootEl||this._handleAutoScroll(t)},drop:function(){this.sortable.nativeDraggable?X(document,"dragover",this._handleAutoScroll):(X(document,"pointermove",this._handleFallbackAutoScroll),X(document,"touchmove",this._handleFallbackAutoScroll),X(document,"mousemove",this._handleFallbackAutoScroll)),vt(),bt(),clearTimeout(G),G=void 0},nulling:function(){ht=ut=ct=ft=gt=dt=pt=null,mt.length=0},_handleFallbackAutoScroll:function(e){this._handleAutoScroll(e,!0)},_handleAutoScroll:function(e,t){var n=this,o=(e.touches?e.touches[0]:e).clientX,r=(e.touches?e.touches[0]:e).clientY,a=document.elementFromPoint(o,r);if(ht=e,t||this.options.forceAutoScrollFallback||C||x||P){Et(e,this.options,a,t);var i=ee(a,!0);!ft||gt&&o===dt&&r===pt||(gt&&vt(),gt=setInterval((function(){var a=ee(document.elementFromPoint(o,r),!0);a!==i&&(i=a,bt()),Et(e,n.options,a,t)}),10),dt=o,pt=r)}else{if(!this.options.bubbleScroll||ee(a,!0)===K())return void bt();Et(e,this.options,ee(a,!1),!1)}}},N(e,{pluginName:"scroll",initializeByDefault:!0})}),nt.mount(wt,Ot);var jt=nt;function _t(e){const{getList:t,createGroup:n,deleteGroups:o,selectGroups:r,getSelected:l,setOrder:s}=e,c=l().length===Object.keys(e.groups).length;return 0!==t().length&&Object(i.useEffect)(()=>{const e={animation:150,ghostClass:"active-sort",handle:".sort-handle",direction:"vertical",onUpdate:function(){(()=>{const e=n.toArray();s(e)})()}},t=document.getElementById("plugin-groups-list"),n=jt.create(t,e)}),Object(a.createElement)("div",{className:"ui-body-sidebar wide"},Object(a.createElement)(g,{title:Object(u.__)("Groups")},Object(a.createElement)("div",{className:"ui-body-sidebar-list"},0!==t().length&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)(m,{name:Object(u.__)("Select All"),bold:!0,callback:t=>{r(Object.keys(e.groups),t.target.checked)},checked:c,className:"list-control"},Object(a.createElement)("button",{disabled:!l().length,type:"button",className:"button",onClick:()=>{o(l(),!0)}},Object(a.createElement)("span",{className:"text"}," ",Object(u.__)("Delete selected",e.slug)," "),Object(a.createElement)("span",{className:"dashicons dashicons-trash"}))),Object(a.createElement)("div",{id:"plugin-groups-list"},Object(a.createElement)(O,e))),0===t().length&&Object(a.createElement)("div",{className:"description"},Object(a.createElement)("span",{className:"ui-body-edit-plugins-item"},Object(u.__)("No groups created",e.slug))))),Object(a.createElement)("button",{type:"button",className:"button",onClick:()=>n("",!0)},Object(u.__)("Create new group",e.slug)))}function St(e){const{plugins:t,addPlugins:n}=e,[o,r]=l.a.useState({checkedAll:!1,search:"",checked:[]}),i=Object.keys(t),s=e=>{r({...o,...e})},c=e=>{const n={checked:[]};e&&i.forEach(e=>{const o=t[e];p(o.Name)&&n.checked.push(e)}),n.checkedAll=n.checked.length,s(n)},d=e=>{const t={...o},n=t.checked.indexOf(e.target.value);e.target.checked&&-1===n?t.checked.push(e.target.value):!e.target.checked&&-1<n&&t.checked.splice(n,1),t.checked.length!==t.checkedAll&&(t.checkedAll=0),t.checked.length===i.length?c(!0):s(t)},p=e=>!o.search||-1<e.toLowerCase().indexOf(o.search.toLowerCase()),h=o.checked.length&&(()=>{for(const t in e.groups)if(e.groups[t].selected)return!0;return!1})();return Object(a.createElement)("div",{className:"ui-body-sidebar"},Object(a.createElement)(g,{title:Object(u.__)("Plugins",e.slug)},Object(a.createElement)("input",{className:"regular-text search",placeholder:Object(u.__)("Search",e.slug),type:"search",onInput:e=>{s({search:e.target.value})},value:o.search}),Object(a.createElement)(m,{name:Object(u.__)("Select all",e.slug),id:"all",callback:e=>c(e.target.checked),checked:o.checkedAll,bold:!0,className:"list-control"},Object(a.createElement)("button",{className:"button",type:"button",onClick:()=>{Object.keys(e.groups).forEach(t=>{e.groups[t].selected&&n(t,o.checked)}),c(!1)},disabled:!h},Object(a.createElement)("span",{className:"text"},Object(u.__)("Send to Selected Groups")),Object(a.createElement)("span",{className:"dashicons dashicons-arrow-right-alt2"}))),Object(a.createElement)("div",{className:"plugins-list"},Object(a.createElement)("div",{className:"ui-body-sidebar-list"},i.map((e,n)=>{const r=t[e],i=p(r.Name),l=-1<o.checked.indexOf(e)&&p(r.Name);return Object(a.createElement)(a.Fragment,null,i&&Object(a.createElement)(m,{name:r.Name,id:e,version:r.Version,checked:l,callback:d}))})))))}function Nt(e){const{togglePreset:t,selectedPresets:n,presets:o,slug:r}=e;return Object(a.createElement)("div",{className:"ui-body-sidebar narrow"},Object(a.createElement)(g,{title:Object(u.__)("Presets",r)},o.map(e=>Object(a.createElement)(m,{name:e,id:e,checked:-1<n.indexOf(e),callback:()=>t(e)}))))}function kt(e){const{presets:t,getList:n}=e;return Object(a.createElement)("div",null,Object(a.createElement)("select",null,t.map((e,t)=>{if(!(5<t))return Object(a.createElement)("option",null,e," (",t+1,")")})))}function Dt(e){const{presets:t,className:n,setParam:o,params:r,styleName:i}=e,l=r.navStyle&&n===r.navStyle?" selected":"";return Object(a.createElement)("div",{className:"plugin-groups nav-settings"+l,onClick:()=>{o("navStyle",n)}},Object(a.createElement)("label",null,i),"groups-dropdown"===n&&Object(a.createElement)(kt,e),"groups-dropdown"!==n&&Object(a.createElement)("ul",{className:n},t.map((e,t)=>{if(!(5<t))return Object(a.createElement)(a.Fragment,null,Object(a.createElement)("li",null,Object(a.createElement)("a",{className:0===t?"current":""},e,Object(a.createElement)("span",{className:"count"}," (",t+1,")"))))})))}function xt(e){const{params:t,setParam:n}=e;return Object(a.createElement)("div",{className:"ui-body"},Object(a.createElement)("div",{className:"ui-body-sidebar"},Object(a.createElement)(g,{title:"Settings"},Object(a.createElement)(m,{name:Object(u.__)("Use Legacy status based grouping",e.slug),checked:t.legacyGrouping,callback:e=>n("legacyGrouping",e.target.checked)}),Object(a.createElement)(m,{name:Object(u.__)("Enable admin menu",e.slug),checked:t.menuGroups,callback:e=>n("menuGroups",e.target.checked)}))),!t.legacyGrouping&&Object(a.createElement)("div",{className:"ui-body-sidebar full"},Object(a.createElement)(g,{title:Object(u.__)("Navigation style",e.slug)},Object(a.createElement)(Dt,r()({styleName:Object(u.__)("Legacy",e.slug),className:"subsubsub"},e)),Object(a.createElement)(Dt,r()({styleName:Object(u.__)("Modern",e.slug),className:"groups-modern"},e)),Object(a.createElement)(Dt,r()({styleName:Object(u.__)("Dropdown",e.slug),className:"groups-dropdown"},e)))))}function Ct(e){const{params:t,setSiteAccess:n}=e,o=e.sites.map(e=>parseInt(e.blog_id));return Object(a.createElement)("div",{className:"ui-body"},Object(a.createElement)("div",{className:"ui-body-sidebar"},Object(a.createElement)(g,{title:"Sites with full access"},Object(a.createElement)(m,{name:Object(u.__)("Select All"),bold:!0,callback:e=>n(o,e.target.checked),className:"list-control",checked:e.sites.length===e.sitesEnabled.length}),e.sites.map(t=>{const o=parseInt(t.blog_id);return Object(a.createElement)(m,{name:t.domain,checked:e.mainSite===o||-1<e.sitesEnabled.indexOf(o),disabled:e.mainSite===o,callback:e=>n([o],e.target.checked)},e.mainSite===o&&Object(a.createElement)("span",null,Object(u.__)("Main Site",e.slug)))}))))}function Tt(e){const[t,n]=l.a.useState(e),[o,i]=l.a.useState(1),s=e=>{window.localStorage.setItem("_plgUnsaved",!0),e.groups&&e.groups.constructor===Array&&(e.groups={...e.groups}),n(e)},c=()=>({...t}),d=e=>{s({...t,...e})},h=e=>{g([e])},g=(e,t)=>{const n=c();e.forEach(e=>{if(null===e)return;const o=void 0!==t?!t:n.groups[e].selected;n.groups[e].selected=!o,o&&(delete n.groups[e].open,delete n.groups[e].edit,delete n.groups[e].focus),n.activeGroup=e}),s(n)},m=(e,t)=>{const n=c();e.forEach(e=>{n.groups[e].open=t}),d(n)},f=(e,t,n)=>{const o=c();n||o.groups[e].prevName?n&&(t=o.groups[e].prevName?o.groups[e].prevName:o.groups[e].name,delete o.groups[e].prevName,delete o.groups[e].edit,delete o.groups[e].selected,delete o.groups[e].open):o.groups[e].prevName=o.groups[e].name,o.groups[e].name=t,s(o)},b=(e,n)=>{const o=c();n&&!confirm(Object(u._n)("Delete the selected group?","Delete the selected groups",e.length,t.slug))||(e.forEach(e=>{delete o.groups[e]}),s(o))},v=e=>{b([e])},E=e=>{const t="pgxxxxx".replace(/x/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})),n={id:t,name:e,plugins:[],keywords:[],temp:!0,selected:!0,edit:!0,focus:!0},o=c();o.groups||(o.groups={}),o.groups[t]=n,s(o)},y=(e,n)=>{const o=c();n.map(n=>{const r=t.groups[e].plugins.indexOf(n);-1<r&&o.groups[e].plugins.splice(r,1)}),s(o)},O=()=>{const e=c(),{groups:n,selectedPresets:o,params:r,sitesEnabled:a,siteID:i}=e,l=JSON.stringify({groups:n,selectedPresets:o,params:r,sitesEnabled:a,siteID:i});e.saving=!0,fetch(t.saveURL,{method:"POST",headers:{"Content-Type":"application/json","X-WP-Nonce":t.restNonce},body:l}).then(e=>e.json()).then(n=>{e.saving=!1,s(t),window.localStorage.removeItem("_plgUnsaved")}),s(e)},w=e=>{const n=c();let o=!1;e.forEach(e=>{n.groups[e].edit&&(e=>0<t.groups[e].name.replace(/ /g,"").length)(e)?(delete n.groups[e].edit,n.groups[e].open||delete n.groups[e].selected,delete n.groups[e].focus,delete n.groups[e].temp,delete n.groups[e].prevName):(n.groups[e].edit=!0,o||(n.groups[e].focus=!0,o=!0))}),s(n),_()},j=e=>{w([e])},_=()=>{const e=D();if(e.length){const t=document.querySelector("[data-edit="+e.shift()+"]");t&&t.focus()}},S=(e,t)=>{const n=C(),o=n.indexOf(e),r="n"===t?o+1:o-1;let a=null;return n[r]&&(a=n[r]),a!==e?a:null},N=e=>{const n=[];return Object.keys(t.groups).forEach(o=>{t.groups[o][e]&&n.push(o)}),n},k=()=>N("selected"),D=()=>N("edit"),x=e=>{if("ArrowRight"===e.key)m(k(),!0);else if("ArrowLeft"===e.key)m(k(),!1);else if("ArrowUp"===e.key)e.preventDefault(),e.shiftKey||g(C(),!1),h(S(t.activeGroup,"p"));else if("ArrowDown"===e.key)e.preventDefault(),e.shiftKey||g(C(),!1),h(S(t.activeGroup,"n"));else if("Enter"===e.key&&e.target.dataset.edit)j(e.target.dataset.edit);else if("Enter"===e.key)e.stopPropagation(),e.preventDefault(),w(k());else if("/"===e.key)e.preventDefault(),e.stopPropagation(),E("");else if("Escape"===e.key){const n=e.path[0].dataset.edit;t.groups[n]&&((e=>!!t.groups[e].temp)(n)?v(n):(f(n,"",!0),_()))}else if("Delete"===e.key){const e=k();e.length&&b(e,!0)}else"s"===e.key&&e.metaKey&&(e.preventDefault(),O())},C=()=>t.groups?Object.keys(t.groups):[];l.a.useEffect(()=>(window.addEventListener("keydown",x),()=>{window.removeEventListener("keydown",x)}));const T={setConfig:s,selectGroup:h,createGroup:E,deleteGroup:v,deleteGroups:b,changeName:f,handleSave:O,editGroup:j,getList:C,addPlugins:(e,n)=>{if(t.groups[e]){const o=c();n.forEach(n=>{-1===t.groups[e].plugins.indexOf(n)&&o.groups[e].plugins.push(n)}),s(o)}},addKeyword:(e,t)=>{const n=c();n.groups[e].keywords.push(t),s(n)},removeKeyword:(e,t)=>{const n=c(),o=n.groups[e].keywords.indexOf(t);n.groups[e].keywords.splice(o,1),s(n)},removePlugin:(e,t)=>{y(e,[t])},openGroup:e=>{if(t.groups[e]){const t=c();t.groups[e].open=!t.groups[e].open,t.groups[e].selected=!0,t.activeGroup=e,d(t)}},selectGroups:g,getSelected:k,handleExport:()=>{const e=JSON.stringify(new Date).replace(/"/g,"-").replace(/:/g,"-").split(".")[0],n=new Blob([JSON.stringify(t.groups)],{type:"application/json"}),o=URL.createObjectURL(n),r=document.createElement("a");r.href=o,r.download="plugin-groups-export"+e+".json",r.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window}))},handleImport:e=>{const t=new FileReader;t.addEventListener("loadend",e=>{let t=JSON.parse(e.target.result);if(t){t["plugin-groups-setup"]&&(t=(e=>{const t={};return Object.keys(e.group).map(n=>{const o=e.group[n];t[n]={id:n,name:o.config.group_name,plugins:o.config.plugins?o.config.plugins:[],keywords:o.config.keywords.length?o.config.keywords.split(" "):[]}}),t})(t));const e=c();e.groups=t,s(e)}}),t.readAsText(e.target.files[0])},togglePreset:e=>{const t=c();t.selectedPresets||(t.selectedPresets=[]);const n=t.selectedPresets.indexOf(e);-1===n?t.selectedPresets.push(e):t.selectedPresets.splice(n,1),s(t)},removePlugins:y,navTab:e=>{i(e)},tab:o,setParam:(e,t)=>{const n=c();n.params[e]||(n.params[e]=null),n.params[e]=t,s(n)},setSiteAccess:(e,o)=>{const r=c();e.map(e=>{const n=t.sitesEnabled.indexOf(e);e!==t.mainSite&&(!0===o&&-1===n?r.sitesEnabled.push(e):!1===o&&-1<n&&r.sitesEnabled.splice(n,1))}),n(r)},setOrder:e=>{const o=c();o.groups={},e.forEach(e=>{o.groups[e]=t.groups[e]}),n(o)}};return Object(a.createElement)("div",{className:t.slug},1===o&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)(p,r()({},T,t)),Object(a.createElement)("div",{className:"ui-body"},Object(a.createElement)(St,r()({},t,T)),Object(a.createElement)(_t,r()({},t,T)),Object(a.createElement)(Nt,r()({},t,T)))),2===o&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)(p,r()({},T,t)),Object(a.createElement)(xt,r()({},T,t))),3===o&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)(p,r()({},T,t)),Object(a.createElement)(Ct,r()({},T,t))),0===o&&Object(a.createElement)(a.Fragment,null,Object(a.createElement)(p,r()({},T,t))))}var Pt={init(e){c.a.render(Object(a.createElement)(Tt,e),document.getElementById("plg-app"))}};n(4);const It={init(){window.localStorage.removeItem("_plgUnsaved"),plgData.groups||(plgData.groups={}),plgData.selectedPresets||(plgData.selectedPresets=[]),plgData.activeGroup=!1,Pt.init(plgData)}};window.addEventListener("load",()=>It.init()),window.onbeforeunload=()=>{if(window.localStorage.getItem("_plgUnsaved"))return!1}}]);
  • plugin-groups/trunk/plugincore.php

    r2586331 r2593591  
    44 * Plugin URI: https://cramer.co.za
    55 * Description: Organize Plugins in groups
    6  * Version: 2.0.2
     6 * Version: 2.0.3
    77 * Author: David Cramer
    88 * Author URI: https://cramer.co.za
     
    3636    echo sprintf( '<div id="plugin_groups_error" class="error notice notice-error"><p>%s</p></div>', esc_html( $message ) );
    3737}
     38
  • plugin-groups/trunk/readme.txt

    r2586331 r2593591  
    55Requires at least: 5.3
    66Tested up to: 5.8
    7 Stable tag: 2.0.2
     7Stable tag: 2.0.3
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    2828= Does it support Multi-site? =
    2929
    30 Not yet, still working on it and will be out asap!
     30Yes it does! It has full support from network admin being able to set groups for individual sites, to Giving sites, full access to manage themselves.
    3131
    3232== Screenshots ==
     
    4141
    4242== Changelog ==
     43= 2.0.3 =
     44- Fixed an issue where activating a plugin in a group, you get redirected to all plugins.
     45- Added Bulk actions to allow adding new groups, adding to groups, and removing from groups.
     46- Added in sorting to the admin UI to allow ordering groups to you're liking.
     47
    4348= 2.0.2 =
    4449- Fixed an error where the plugin couldn't read the plugin data (I hope).
Note: See TracChangeset for help on using the changeset viewer.