From 46d9f61777245c1b6c01c0b6cf6e5179528baaab Mon Sep 17 00:00:00 2001 From: Sudipto Shakhari Date: Wed, 19 Jan 2022 15:12:18 +0600 Subject: [PATCH 1/6] google custom search options added instead of bing search --- includes/modules/class-wpcp-article.php | 243 +++++++++++++++++------- 1 file changed, 172 insertions(+), 71 deletions(-) diff --git a/includes/modules/class-wpcp-article.php b/includes/modules/class-wpcp-article.php index 2c9f5b2..826f0b6 100644 --- a/includes/modules/class-wpcp-article.php +++ b/includes/modules/class-wpcp-article.php @@ -68,27 +68,27 @@ public function get_default_template() { public function add_campaign_option_fields( $post ) { echo WPCP_HTML::start_double_columns(); - echo WPCP_HTML::select_input( array( - 'name' => '_article_region', - 'label' => __( 'Select region to search article', 'wp-content-pilot' ), - 'options' => $this->get_article_region(), - 'default' => 'global', - 'class' => 'wpcp-select2', - 'wrapper_class' => 'pro', - 'attrs' => array( - 'disabled' => 'disabled', - ) - ) ); // echo WPCP_HTML::select_input( array( -// 'name' => '_article_language', -// 'label' => __( 'Select language to search article', 'wp-content-pilot' ), -// 'options' => $this->get_article_language(), -// 'default' => 'en', +// 'name' => '_article_region', +// 'label' => __( 'Select region to search article', 'wp-content-pilot' ), +// 'options' => $this->get_article_region(), +// 'default' => 'global', +// 'class' => 'wpcp-select2', // 'wrapper_class' => 'pro', // 'attrs' => array( // 'disabled' => 'disabled', // ) // ) ); + echo WPCP_HTML::select_input( array( + 'name' => '_article_language', + 'label' => __( 'Select language to search article', 'wp-content-pilot' ), + 'options' => $this->get_article_language(), + 'default' => 'lang_en', + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) + ) ); echo WPCP_HTML::end_double_columns(); } @@ -131,6 +131,22 @@ public function get_setting_fields( $fields ) { 'placeholder' => __( "example.com \n example1.com", 'wp-content-pilot' ), 'type' => 'textarea', ), + array( + 'name' => 'google_search_api_key', + 'label' => __( 'Google Search Api Key', 'wp-content-pilot' ), + 'desc' => __( 'Google custom search api key will be needed to get the result.', 'wp-content-pilot' ), + 'type' => 'password', + 'default' => '', + 'sanitize_callback' => 'esc_html', + ), + array( + 'name' => 'search_engine_id', + 'label' => __( 'Search Engine ID', 'wp-content-pilot' ), + 'desc' => __( 'Search engine id for searching the links', 'wp-content-pilot' ), + 'type' => 'text', + 'default' => '', + 'sanitize_callback' => 'esc_html' + ), ]; return $fields; @@ -145,6 +161,21 @@ public function get_setting_fields( $fields ) { * @since 1.2.0 */ public function get_post( $campaign_id ) { + wpcp_logger()->info( __( 'Loaded Article campaign', 'wp-content-pilot' ), $campaign_id ); + + $api_key = wpcp_get_settings( 'google_search_api_key', 'wpcp_settings_article' ); + $search_engine_id = wpcp_get_settings( 'search_engine_id', 'wpcp_settings_article' ); + + wpcp_logger()->info( __( 'Checking google search api key and search engine id for authentication', 'wp-content-pilot' ), $campaign_id ); + if ( empty( $api_key ) || empty( $search_engine_id ) ) { + wpcp_disable_campaign( $campaign_id ); + + $notice = __( 'Google custom search api or search engine id is not set.So, the campaign wont run, disabling campaign.', 'wp-content-pilot' ); + wpcp_logger()->error( $notice ); + + return new WP_Error( 'missing-data', $notice ); + } + //before it was getting keywords but now we are changing to source instead of keywords //it can be anything $keywords = $this->get_campaign_meta( $campaign_id ); @@ -152,12 +183,11 @@ public function get_post( $campaign_id ) { return new WP_Error( 'missing-data', __( 'Campaign do not have keyword to proceed, please set keyword', 'wp-content-pilot' ) ); } - wpcp_logger()->info( __( 'Loaded Article campaign', 'wp-content-pilot' ), $campaign_id ); - //loop through keywords foreach ( $keywords as $keyword ) { wpcp_logger()->info( sprintf( __( 'Looking for article for the keyword [ %s ]', 'wp-content-pilot' ), $keyword ), $campaign_id ); + /* if ( $this->is_deactivated_key( $campaign_id, $keyword ) ) { // $reactivate_keyword_action = add_query_arg( [ // 'campaign_id' => $campaign_id, @@ -167,7 +197,7 @@ public function get_post( $campaign_id ) { // wpcp_logger()->info( sprintf( __( 'The keyword is deactivated for 1 hr because last time could not find any article with keyword [%s] %s reactivate keyword %s', 'wp-content-pilot' ), $keyword, '', '' ), $campaign_id ); wpcp_logger()->info( __( 'The keyword is deactivated for 1 hr because last time could not find any article with keyword [%s]', 'wp-content-pilot' ), $campaign_id ); continue; - } + } */ //get links from database wpcp_logger()->info( __( 'Checking for cached links in store', 'wp-content-pilot' ), $campaign_id ); @@ -245,9 +275,12 @@ public function get_post( $campaign_id ) { * @since 1.2.0 */ protected function discover_links( $campaign_id, $keyword ) { - $page_key = $this->get_unique_key( $keyword ); - $page_number = wpcp_get_post_meta( $campaign_id, $page_key, 0 ); + $page_key = $this->get_unique_key( $keyword ); + $page_number = wpcp_get_post_meta( $campaign_id, $page_key, 0 ); + $api_key = wpcp_get_settings( 'google_search_api_key', 'wpcp_settings_article' ); + $search_engine_id = wpcp_get_settings( 'search_engine_id', 'wpcp_settings_article' ); + /* $args = apply_filters( 'wpcp_article_search_args', array( 'q' => urlencode( $keyword ), 'count' => 10, @@ -291,7 +324,92 @@ protected function discover_links( $campaign_id, $keyword ) { // $response = json_encode( $response ); // $response = json_decode( $response, true ); + */ + $args = apply_filters( 'wpcp_article_search_args', array( + 'key' => $api_key, + 'cx' => ! empty( $search_engine_id ) ? $search_engine_id : '359394892d6b9fe2c', + 'q' => urlencode( $keyword ), + 'number' => 10, + 'lr' => 'lang_en', + ), $campaign_id ); + + if ( ! empty( $page_number ) ) { + $args['start'] = ( $page_number * 10 ) + 1; + } + + $endpoint = add_query_arg( array( + $args + ), 'https://customsearch.googleapis.com/customsearch/v1' ); + + wpcp_logger()->info( sprintf( __( 'Searching page url [%s]', 'wp-content-pilot' ), preg_replace( array( '/api_key=([^&]+)/m', '/cx=([^&]+)/m' ), array( 'key=X', 'cx=X' ), $endpoint ), $campaign_id ) ); + + $curl = $this->setup_curl(); + $request = $curl->get( $endpoint ); + + if ( $curl->isError() ) { + wpcp_logger()->error( $curl->errorMessage, $campaign_id ); + $this->deactivate_key( $campaign_id, $keyword ); + + return $request; + } + + wpcp_logger()->info( __( 'Extracting response from request', 'wp-content-pilot' ), $campaign_id ); + $items = $curl->getResponse()->items; + + if ( empty( $items ) ) { + $message = __( 'Could not find any links from search engine, deactivating keyword for an hour.', 'wp-content-pilot' ); + wpcp_logger()->error( $message, $campaign_id ); + $this->deactivate_key( $campaign_id, $keyword ); + + return new WP_Error( 'no-links-found', $message ); + } + wpcp_logger()->info( __( 'Getting banned hosts for skipping links', 'wp-content-pilot' ), $campaign_id ); + $banned_hosts = wpcp_get_settings( 'banned_hosts', 'wpcp_settings_article' ); + $banned_hosts = preg_split( '/\n/', $banned_hosts ); + $banned_hosts = array_merge( $banned_hosts, array( + 'youtube.com', + 'wikipedia', + 'dictionary', + 'youtube', + 'wikihow' + ) ); + + $links = []; + wpcp_logger()->info( __( 'Finding links from response and inserting into database', 'wp-content-pilot' ), $campaign_id ); + foreach ( $items as $item ) { + $title = ! empty( $item->title ) ? $item->title : ''; + $link = ! empty( $item->link ) ? $item->link : ''; + + foreach ( $banned_hosts as $banned_host ) { + if ( stristr( $link, $banned_host ) ) { + continue; + } + } + + if ( stristr( $link, 'wikipedia' ) ) { + continue; + } + + if ( wpcp_is_duplicate_url( $link ) ) { + continue; + } + + $skip = apply_filters( 'wpcp_skip_duplicate_title', false, $title, $campaign_id ); + if ( $skip ) { + continue; + } + + + $links[] = array( + 'url' => $link, + 'title' => $title, + 'for' => $keyword, + 'camp_id' => $campaign_id + ); + } + error_log( print_r( $links, true ) ); + /* //check if links exist if ( empty( $response ) || ! isset( $matches ) || ! isset( $matches ) || empty( $matches ) ) { $message = __( 'Could not find any links from search engine, deactivating keyword for an hour.', 'wp-content-pilot' ); @@ -347,7 +465,7 @@ protected function discover_links( $campaign_id, $keyword ) { 'for' => $keyword, 'camp_id' => $campaign_id ]; - } + }*/ $total_inserted = $this->inset_links( $links ); wpcp_update_post_meta( $campaign_id, $page_key, $page_number + 1 ); @@ -422,56 +540,39 @@ public function get_article_region() { public function get_article_language() { $languages = array( - 'ar' => 'Arabic', - 'eu' => 'Basque', - 'bn' => "Bengali", - 'bg' => 'Bulgarian', - 'ca' => 'Catalan', - 'zh-hans' => 'Simplified Chinese', - 'zh-hant' => 'Traditional Chinese', - 'hr' => 'Croatian', - 'cs' => 'Czech', - 'da' => 'Danish', - 'nl' => 'Dutch', - 'en' => 'English', - 'en-gb' => 'English - United Kingdom', - 'et' => 'Estonian', - 'fi' => 'Finish', - 'fr' => 'French', - 'gl' => 'Galician', - 'de' => 'German', - 'gu' => 'Gujrati', - 'he' => 'Hebrew', - 'hi' => 'Hindi', - 'hu' => 'Hungarian', - 'is' => 'Icelandic', - 'it' => 'Italian', - 'jp' => 'Japanese', - 'kn' => 'Kannada', - 'ko' => 'Korean', - 'lv' => 'Latvian', - 'lt' => 'Lithunian', - 'ms' => 'Malay', - 'ml' => 'Malayalam', - 'mr' => 'Marathi', - 'nb' => 'Norwegian', - 'pl' => 'Polish', - 'pt-br' => 'Portugese Brazil', - 'pt-pt' => 'Portugese Portugal', - 'pa' => 'Punjabi', - 'ro' => 'Romanian', - 'ru' => 'Russian', - 'sr' => 'Serbian', - 'sk' => 'Slovak', - 'sl' => 'Slovenian', - 'es' => 'Spanish', - 'sv' => 'Swedish', - 'ta' => 'Tamil', - 'te' => 'Telegu', - 'th' => 'Thai', - 'tr' => 'Turkish', - 'uk' => 'Ukrainian', - 'vi' => 'Vietnamese', + 'lang_ar' => 'Arabic', + 'lang_bg' => 'Bulgarian', + 'lang_ca' => 'Catalan', + 'lang_cs' => 'Czech', + 'lang_da' => 'Danish', + 'lang_de' => 'German', + 'lang_el' => 'Greek', + 'lang_en' => 'English', + 'lang_es' => 'Spanish', + 'lang_et' => 'Estonian', + 'lang_fi' => 'Finish', + 'lang_fr' => 'French', + 'lang_hu' => 'Hungarian', + 'lang_id' => 'Indonesian', + 'lang_is' => 'Icelandic', + 'lang_it' => 'Italian', + 'lang_iw' => 'Hebrew', + 'lang_ja' => 'Japanese', + 'lang_ko' => 'Korean', + 'lang_lv' => 'Latvian', + 'lang_nl' => 'Dutch', + 'lang_no' => 'Norwegian', + 'lang_pl' => 'Polish', + 'lang_pt' => 'Portugese', + 'lang_ro' => 'Romanian', + 'lang_ru' => 'Russian', + 'lang_sk' => 'Slovak', + 'lang_sl' => 'Slovenian', + 'lang_sr' => 'Serbian', + 'lang_sv' => 'Swedish', + 'lang_tr' => 'Turkish', + 'lang_zh-CN' => 'Chinese (Simplified)', + 'lang_zh-TW' => 'Chinese (Traditional)', ); return $languages; From ce6ea53a71541f73e86c9150670c287380300806 Mon Sep 17 00:00:00 2001 From: Sudipto Shakhari Date: Wed, 19 Jan 2022 15:53:40 +0600 Subject: [PATCH 2/6] Update class-wpcp-article.php Update notices --- includes/modules/class-wpcp-article.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/includes/modules/class-wpcp-article.php b/includes/modules/class-wpcp-article.php index 826f0b6..7a10f4a 100644 --- a/includes/modules/class-wpcp-article.php +++ b/includes/modules/class-wpcp-article.php @@ -171,7 +171,7 @@ public function get_post( $campaign_id ) { wpcp_disable_campaign( $campaign_id ); $notice = __( 'Google custom search api or search engine id is not set.So, the campaign wont run, disabling campaign.', 'wp-content-pilot' ); - wpcp_logger()->error( $notice ); + wpcp_logger()->error( $notice, $campaign_id ); return new WP_Error( 'missing-data', $notice ); } @@ -180,6 +180,7 @@ public function get_post( $campaign_id ) { //it can be anything $keywords = $this->get_campaign_meta( $campaign_id ); if ( empty( $keywords ) ) { + wpcp_logger()->notice( __( 'Campaign do not have keyword to proceed, please set keyword', 'wp-content-pilot' ), $campaign_id ); return new WP_Error( 'missing-data', __( 'Campaign do not have keyword to proceed, please set keyword', 'wp-content-pilot' ) ); } @@ -187,7 +188,7 @@ public function get_post( $campaign_id ) { foreach ( $keywords as $keyword ) { wpcp_logger()->info( sprintf( __( 'Looking for article for the keyword [ %s ]', 'wp-content-pilot' ), $keyword ), $campaign_id ); - /* + if ( $this->is_deactivated_key( $campaign_id, $keyword ) ) { // $reactivate_keyword_action = add_query_arg( [ // 'campaign_id' => $campaign_id, @@ -197,7 +198,7 @@ public function get_post( $campaign_id ) { // wpcp_logger()->info( sprintf( __( 'The keyword is deactivated for 1 hr because last time could not find any article with keyword [%s] %s reactivate keyword %s', 'wp-content-pilot' ), $keyword, '', '' ), $campaign_id ); wpcp_logger()->info( __( 'The keyword is deactivated for 1 hr because last time could not find any article with keyword [%s]', 'wp-content-pilot' ), $campaign_id ); continue; - } */ + } //get links from database wpcp_logger()->info( __( 'Checking for cached links in store', 'wp-content-pilot' ), $campaign_id ); From 2b11e858443fdc20ff8b497c76df6e5757d0339b Mon Sep 17 00:00:00 2001 From: Sudipto Shakhari Date: Sun, 24 Apr 2022 13:57:54 +0600 Subject: [PATCH 3/6] update the discover_links in article and google_news options in feed --- i18n/languages/wp-content-pilot.pot | 89 +- includes/modules/class-wpcp-article.php | 9 +- includes/modules/class-wpcp-feed.php | 126 +- package-lock.json | 4931 ++++++++++++- .../assets/css/wp-content-pilot.css | 1 + wp-content-pilot/assets/images/help/bugs.svg | 1 + .../assets/images/help/customization.svg | 1 + wp-content-pilot/assets/images/help/docs.svg | 1 + wp-content-pilot/assets/images/help/like.svg | 1 + .../assets/images/help/support.svg | 1 + wp-content-pilot/assets/images/icons/logo.svg | 3 + .../assets/images/modules/amazon.png | Bin 0 -> 6895 bytes .../assets/images/modules/article.png | Bin 0 -> 6497 bytes .../assets/images/modules/bestbuy.png | Bin 0 -> 11830 bytes .../assets/images/modules/careerjet.png | Bin 0 -> 9948 bytes .../assets/images/modules/clickbank.png | Bin 0 -> 7153 bytes .../assets/images/modules/craigslist.png | Bin 0 -> 7524 bytes .../assets/images/modules/dailymotion.png | Bin 0 -> 17835 bytes .../assets/images/modules/ebay.png | Bin 0 -> 8085 bytes .../assets/images/modules/envato.png | Bin 0 -> 6329 bytes .../assets/images/modules/etsy.png | Bin 0 -> 8753 bytes .../assets/images/modules/eventful.png | Bin 0 -> 10022 bytes .../assets/images/modules/ezine.png | Bin 0 -> 20359 bytes .../assets/images/modules/facebook.png | Bin 0 -> 5679 bytes .../assets/images/modules/feed.png | Bin 0 -> 7747 bytes .../assets/images/modules/flickr.png | Bin 0 -> 4215 bytes .../assets/images/modules/gearbest.png | Bin 0 -> 11145 bytes .../assets/images/modules/instragram.png | Bin 0 -> 10523 bytes .../assets/images/modules/itunes.png | Bin 0 -> 5205 bytes .../assets/images/modules/pinterest.png | Bin 0 -> 8330 bytes .../assets/images/modules/quora.png | Bin 0 -> 7015 bytes .../assets/images/modules/reddit.png | Bin 0 -> 7197 bytes .../assets/images/modules/soundcloud.png | Bin 0 -> 13105 bytes .../assets/images/modules/tiktok.png | Bin 0 -> 11655 bytes .../assets/images/modules/twitter.png | Bin 0 -> 8801 bytes .../assets/images/modules/vimeo.png | Bin 0 -> 12071 bytes .../assets/images/modules/walmart.png | Bin 0 -> 6898 bytes .../assets/images/modules/yelp.png | Bin 0 -> 19741 bytes .../assets/images/modules/youtube.png | Bin 0 -> 6521 bytes .../assets/images/roboto-logo.svg | 38 + .../assets/images/wp-content-pilot-image.jpg | Bin 0 -> 61787 bytes .../assets/js/wp-content-pilot.js | 218 + .../assets/js/wp-content-pilot.min.js | 1 + .../vendor/ionslider/ion.rangeSlider.css | 675 ++ .../vendor/ionslider/ion.rangeSlider.js | 2449 +++++++ .../vendor/ionslider/ion.rangeSlider.min.css | 1 + .../vendor/ionslider/ion.rangeSlider.min.js | 2 + .../assets/vendor/select2/select2.css | 481 ++ .../assets/vendor/select2/select2.js | 6108 +++++++++++++++++ .../assets/vendor/select2/select2.min.css | 1 + .../assets/vendor/select2/select2.min.js | 2 + .../assets/vendor/tiptip/jquery.tiptip.min.js | 20 + .../i18n/languages/wp-content-pilot.pot | 2940 ++++++++ .../includes/action-functions.php | 370 + .../includes/admin/admin-functions.php | 46 + .../admin/class-settings-framework.php | 771 +++ .../includes/admin/class-upgrades.php | 66 + .../includes/admin/class-wpcp-admin.php | 159 + .../includes/admin/class-wpcp-help.php | 415 ++ .../includes/admin/class-wpcp-insight.php | 750 ++ .../includes/admin/class-wpcp-settings.php | 205 + .../includes/admin/class-wpcp-tracker.php | 50 + .../includes/admin/class-wpcp-updater.php | 64 + .../includes/admin/metabox-functions.php | 417 ++ .../includes/admin/updates/update-1.0.4.php | 12 + .../includes/admin/updates/update-1.1.2.php | 9 + .../includes/admin/updates/update-1.2.0.php | 25 + .../includes/admin/updates/update-1.2.3.php | 8 + .../includes/admin/updates/update-1.2.4.php | 10 + .../includes/admin/updates/update-1.2.7.php | 8 + .../admin/views/metabox/action-metabox.php | 98 + .../admin/views/metabox/advanced-settings.php | 167 + .../views/metabox/campaign-miscellaneous.php | 3 + .../admin/views/metabox/campaign-posts.php | 19 + .../views/metabox/campaign-selection.php | 229 + .../admin/views/metabox/campaign-status.php | 52 + .../admin/views/metabox/post-filter.php | 37 + .../admin/views/metabox/post-settings.php | 104 + .../admin/views/metabox/post-template.php | 48 + .../admin/views/metabox/spinner-settings.php | 132 + .../includes/admin/views/page/help-page.php | 366 + .../includes/admin/views/page/logs-page.php | 20 + .../includes/admin/views/page/status-page.php | 291 + .../views/tables/class-wpcp-logs-table.php | 291 + wp-content-pilot/includes/class-wpcp-dom.php | 2374 +++++++ wp-content-pilot/includes/class-wpcp-html.php | 352 + .../includes/class-wpcp-install.php | 87 + .../includes/class-wpcp-logger.php | 184 + .../includes/class-wpcp-module.php | 633 ++ .../includes/class-wpcp-modules.php | 91 + .../includes/class-wpcp-notices.php | 273 + .../includes/class-wpcp-readability.php | 332 + wp-content-pilot/includes/core-functions.php | 631 ++ .../includes/formatting-functions.php | 410 ++ .../library/readability/JSLikeHTMLElement.php | 110 + .../readability/JSLikeHTMLElement_Old.php | 135 + .../library/readability/Readability.php | 1159 ++++ .../library/readability/Readability_OLD.php | 1421 ++++ .../includes/modules/class-wpcp-article.php | 601 ++ .../includes/modules/class-wpcp-envato.php | 458 ++ .../includes/modules/class-wpcp-feed.php | 349 + .../includes/modules/class-wpcp-flickr.php | 373 + .../includes/modules/class-wpcp-youtube.php | 652 ++ wp-content-pilot/includes/post-types.php | 178 + .../includes/script-functions.php | 39 + wp-content-pilot/readme.txt | 273 + wp-content-pilot/uninstall.php | 24 + wp-content-pilot/vendor/autoload.php | 7 + .../vendor/composer/ClassLoader.php | 572 ++ .../vendor/composer/InstalledVersions.php | 337 + wp-content-pilot/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 10 + .../vendor/composer/autoload_namespaces.php | 9 + .../vendor/composer/autoload_psr4.php | 10 + .../vendor/composer/autoload_real.php | 57 + .../vendor/composer/autoload_static.php | 36 + .../vendor/composer/installed.json | 76 + .../vendor/composer/installed.php | 32 + .../vendor/composer/platform_check.php | 26 + .../php-curl-class/CHANGELOG.md | 31 + .../php-curl-class/php-curl-class/LICENSE | 24 + .../php-curl-class/php-curl-class/README.md | 384 ++ .../php-curl-class/php-curl-class/SECURITY.md | 108 + .../php-curl-class/src/Curl/ArrayUtil.php | 150 + .../src/Curl/CaseInsensitiveArray.php | 232 + .../php-curl-class/src/Curl/Curl.php | 1836 +++++ .../php-curl-class/src/Curl/Decoder.php | 53 + .../php-curl-class/src/Curl/Encoder.php | 42 + .../php-curl-class/src/Curl/MultiCurl.php | 1029 +++ .../php-curl-class/src/Curl/StringUtil.php | 65 + .../php-curl-class/src/Curl/Url.php | 209 + wp-content-pilot/wp-content-pilot.php | 343 + 132 files changed, 40067 insertions(+), 113 deletions(-) create mode 100644 wp-content-pilot/assets/css/wp-content-pilot.css create mode 100644 wp-content-pilot/assets/images/help/bugs.svg create mode 100644 wp-content-pilot/assets/images/help/customization.svg create mode 100644 wp-content-pilot/assets/images/help/docs.svg create mode 100644 wp-content-pilot/assets/images/help/like.svg create mode 100644 wp-content-pilot/assets/images/help/support.svg create mode 100644 wp-content-pilot/assets/images/icons/logo.svg create mode 100644 wp-content-pilot/assets/images/modules/amazon.png create mode 100644 wp-content-pilot/assets/images/modules/article.png create mode 100644 wp-content-pilot/assets/images/modules/bestbuy.png create mode 100644 wp-content-pilot/assets/images/modules/careerjet.png create mode 100644 wp-content-pilot/assets/images/modules/clickbank.png create mode 100644 wp-content-pilot/assets/images/modules/craigslist.png create mode 100644 wp-content-pilot/assets/images/modules/dailymotion.png create mode 100644 wp-content-pilot/assets/images/modules/ebay.png create mode 100644 wp-content-pilot/assets/images/modules/envato.png create mode 100644 wp-content-pilot/assets/images/modules/etsy.png create mode 100644 wp-content-pilot/assets/images/modules/eventful.png create mode 100644 wp-content-pilot/assets/images/modules/ezine.png create mode 100644 wp-content-pilot/assets/images/modules/facebook.png create mode 100644 wp-content-pilot/assets/images/modules/feed.png create mode 100644 wp-content-pilot/assets/images/modules/flickr.png create mode 100644 wp-content-pilot/assets/images/modules/gearbest.png create mode 100644 wp-content-pilot/assets/images/modules/instragram.png create mode 100644 wp-content-pilot/assets/images/modules/itunes.png create mode 100644 wp-content-pilot/assets/images/modules/pinterest.png create mode 100644 wp-content-pilot/assets/images/modules/quora.png create mode 100644 wp-content-pilot/assets/images/modules/reddit.png create mode 100644 wp-content-pilot/assets/images/modules/soundcloud.png create mode 100644 wp-content-pilot/assets/images/modules/tiktok.png create mode 100644 wp-content-pilot/assets/images/modules/twitter.png create mode 100644 wp-content-pilot/assets/images/modules/vimeo.png create mode 100644 wp-content-pilot/assets/images/modules/walmart.png create mode 100644 wp-content-pilot/assets/images/modules/yelp.png create mode 100644 wp-content-pilot/assets/images/modules/youtube.png create mode 100644 wp-content-pilot/assets/images/roboto-logo.svg create mode 100644 wp-content-pilot/assets/images/wp-content-pilot-image.jpg create mode 100644 wp-content-pilot/assets/js/wp-content-pilot.js create mode 100644 wp-content-pilot/assets/js/wp-content-pilot.min.js create mode 100755 wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.css create mode 100755 wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.js create mode 100755 wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.min.css create mode 100755 wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.min.js create mode 100644 wp-content-pilot/assets/vendor/select2/select2.css create mode 100644 wp-content-pilot/assets/vendor/select2/select2.js create mode 100644 wp-content-pilot/assets/vendor/select2/select2.min.css create mode 100644 wp-content-pilot/assets/vendor/select2/select2.min.js create mode 100644 wp-content-pilot/assets/vendor/tiptip/jquery.tiptip.min.js create mode 100644 wp-content-pilot/i18n/languages/wp-content-pilot.pot create mode 100644 wp-content-pilot/includes/action-functions.php create mode 100644 wp-content-pilot/includes/admin/admin-functions.php create mode 100644 wp-content-pilot/includes/admin/class-settings-framework.php create mode 100644 wp-content-pilot/includes/admin/class-upgrades.php create mode 100644 wp-content-pilot/includes/admin/class-wpcp-admin.php create mode 100644 wp-content-pilot/includes/admin/class-wpcp-help.php create mode 100644 wp-content-pilot/includes/admin/class-wpcp-insight.php create mode 100644 wp-content-pilot/includes/admin/class-wpcp-settings.php create mode 100644 wp-content-pilot/includes/admin/class-wpcp-tracker.php create mode 100644 wp-content-pilot/includes/admin/class-wpcp-updater.php create mode 100644 wp-content-pilot/includes/admin/metabox-functions.php create mode 100644 wp-content-pilot/includes/admin/updates/update-1.0.4.php create mode 100644 wp-content-pilot/includes/admin/updates/update-1.1.2.php create mode 100644 wp-content-pilot/includes/admin/updates/update-1.2.0.php create mode 100644 wp-content-pilot/includes/admin/updates/update-1.2.3.php create mode 100644 wp-content-pilot/includes/admin/updates/update-1.2.4.php create mode 100644 wp-content-pilot/includes/admin/updates/update-1.2.7.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/action-metabox.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/advanced-settings.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/campaign-miscellaneous.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/campaign-posts.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/campaign-selection.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/campaign-status.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/post-filter.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/post-settings.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/post-template.php create mode 100644 wp-content-pilot/includes/admin/views/metabox/spinner-settings.php create mode 100644 wp-content-pilot/includes/admin/views/page/help-page.php create mode 100644 wp-content-pilot/includes/admin/views/page/logs-page.php create mode 100644 wp-content-pilot/includes/admin/views/page/status-page.php create mode 100644 wp-content-pilot/includes/admin/views/tables/class-wpcp-logs-table.php create mode 100644 wp-content-pilot/includes/class-wpcp-dom.php create mode 100644 wp-content-pilot/includes/class-wpcp-html.php create mode 100644 wp-content-pilot/includes/class-wpcp-install.php create mode 100644 wp-content-pilot/includes/class-wpcp-logger.php create mode 100644 wp-content-pilot/includes/class-wpcp-module.php create mode 100644 wp-content-pilot/includes/class-wpcp-modules.php create mode 100644 wp-content-pilot/includes/class-wpcp-notices.php create mode 100644 wp-content-pilot/includes/class-wpcp-readability.php create mode 100644 wp-content-pilot/includes/core-functions.php create mode 100644 wp-content-pilot/includes/formatting-functions.php create mode 100644 wp-content-pilot/includes/library/readability/JSLikeHTMLElement.php create mode 100644 wp-content-pilot/includes/library/readability/JSLikeHTMLElement_Old.php create mode 100644 wp-content-pilot/includes/library/readability/Readability.php create mode 100644 wp-content-pilot/includes/library/readability/Readability_OLD.php create mode 100644 wp-content-pilot/includes/modules/class-wpcp-article.php create mode 100644 wp-content-pilot/includes/modules/class-wpcp-envato.php create mode 100644 wp-content-pilot/includes/modules/class-wpcp-feed.php create mode 100644 wp-content-pilot/includes/modules/class-wpcp-flickr.php create mode 100644 wp-content-pilot/includes/modules/class-wpcp-youtube.php create mode 100644 wp-content-pilot/includes/post-types.php create mode 100644 wp-content-pilot/includes/script-functions.php create mode 100644 wp-content-pilot/readme.txt create mode 100644 wp-content-pilot/uninstall.php create mode 100644 wp-content-pilot/vendor/autoload.php create mode 100644 wp-content-pilot/vendor/composer/ClassLoader.php create mode 100644 wp-content-pilot/vendor/composer/InstalledVersions.php create mode 100644 wp-content-pilot/vendor/composer/LICENSE create mode 100644 wp-content-pilot/vendor/composer/autoload_classmap.php create mode 100644 wp-content-pilot/vendor/composer/autoload_namespaces.php create mode 100644 wp-content-pilot/vendor/composer/autoload_psr4.php create mode 100644 wp-content-pilot/vendor/composer/autoload_real.php create mode 100644 wp-content-pilot/vendor/composer/autoload_static.php create mode 100644 wp-content-pilot/vendor/composer/installed.json create mode 100644 wp-content-pilot/vendor/composer/installed.php create mode 100644 wp-content-pilot/vendor/composer/platform_check.php create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/CHANGELOG.md create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/LICENSE create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/README.md create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/SECURITY.md create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/src/Curl/ArrayUtil.php create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/src/Curl/CaseInsensitiveArray.php create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/src/Curl/Curl.php create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/src/Curl/Decoder.php create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/src/Curl/Encoder.php create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/src/Curl/MultiCurl.php create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/src/Curl/StringUtil.php create mode 100644 wp-content-pilot/vendor/php-curl-class/php-curl-class/src/Curl/Url.php create mode 100644 wp-content-pilot/wp-content-pilot.php diff --git a/i18n/languages/wp-content-pilot.pot b/i18n/languages/wp-content-pilot.pot index 0b3841a..7f80e2e 100644 --- a/i18n/languages/wp-content-pilot.pot +++ b/i18n/languages/wp-content-pilot.pot @@ -1,14 +1,14 @@ -# Copyright (C) 2021 pluginever +# Copyright (C) 2022 pluginever # This file is distributed under the GPLv2+. msgid "" msgstr "" -"Project-Id-Version: WP Content Pilot 1.3.0\n" +"Project-Id-Version: WP Content Pilot 1.3.1\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-content-pilot\n" -"POT-Creation-Date: 2021-12-26 20:20:43+00:00\n" +"POT-Creation-Date: 2022-04-24 05:15:51+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2021-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2022-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "X-Generator: grunt-wp-i18n 1.0.3\n" @@ -1800,8 +1800,8 @@ msgstr "" msgid "Source link" msgstr "" -#: includes/modules/class-wpcp-article.php:73 -msgid "Select region to search article" +#: includes/modules/class-wpcp-article.php:84 +msgid "Select language to search article" msgstr "" #: includes/modules/class-wpcp-article.php:113 @@ -1824,71 +1824,98 @@ msgid "" " example1.com" msgstr "" -#: includes/modules/class-wpcp-article.php:152 +#: includes/modules/class-wpcp-article.php:136 +msgid "Google Search Api Key" +msgstr "" + +#: includes/modules/class-wpcp-article.php:137 +msgid "Google custom search api key will be needed to get the result." +msgstr "" + +#: includes/modules/class-wpcp-article.php:144 +msgid "Search Engine ID" +msgstr "" + +#: includes/modules/class-wpcp-article.php:145 +msgid "Search engine id for searching the links" +msgstr "" + +#: includes/modules/class-wpcp-article.php:164 +msgid "Loaded Article campaign" +msgstr "" + +#: includes/modules/class-wpcp-article.php:169 +msgid "Checking google search api key and search engine id for authentication" +msgstr "" + +#: includes/modules/class-wpcp-article.php:173 +msgid "" +"Google custom search api or search engine id is not set.So, the campaign " +"wont run, disabling campaign." +msgstr "" + +#: includes/modules/class-wpcp-article.php:183 +#: includes/modules/class-wpcp-article.php:184 #: includes/modules/class-wpcp-envato.php:239 #: includes/modules/class-wpcp-flickr.php:209 #: includes/modules/class-wpcp-youtube.php:281 msgid "Campaign do not have keyword to proceed, please set keyword" msgstr "" -#: includes/modules/class-wpcp-article.php:155 -msgid "Loaded Article campaign" -msgstr "" - -#: includes/modules/class-wpcp-article.php:159 +#: includes/modules/class-wpcp-article.php:189 msgid "Looking for article for the keyword [ %s ]" msgstr "" -#: includes/modules/class-wpcp-article.php:168 +#: includes/modules/class-wpcp-article.php:199 msgid "" "The keyword is deactivated for 1 hr because last time could not find any " "article with keyword [%s]" msgstr "" -#: includes/modules/class-wpcp-article.php:173 +#: includes/modules/class-wpcp-article.php:204 msgid "Checking for cached links in store" msgstr "" -#: includes/modules/class-wpcp-article.php:176 +#: includes/modules/class-wpcp-article.php:207 #: includes/modules/class-wpcp-youtube.php:299 msgid "No cached links in store. Generating new links..." msgstr "" -#: includes/modules/class-wpcp-article.php:181 +#: includes/modules/class-wpcp-article.php:212 #: includes/modules/class-wpcp-feed.php:153 msgid "Looping through cached links for publishing article" msgstr "" -#: includes/modules/class-wpcp-article.php:183 +#: includes/modules/class-wpcp-article.php:214 msgid "Generating article from [%s]" msgstr "" -#: includes/modules/class-wpcp-article.php:191 +#: includes/modules/class-wpcp-article.php:222 #: includes/modules/class-wpcp-feed.php:165 msgid "Failed processing link reason [%s]" msgstr "" -#: includes/modules/class-wpcp-article.php:195 +#: includes/modules/class-wpcp-article.php:226 msgid "Extracting post content from request" msgstr "" -#: includes/modules/class-wpcp-article.php:201 +#: includes/modules/class-wpcp-article.php:232 msgid "Failed readability reason [%s] changing to different link" msgstr "" -#: includes/modules/class-wpcp-article.php:209 +#: includes/modules/class-wpcp-article.php:240 #: includes/modules/class-wpcp-envato.php:376 #: includes/modules/class-wpcp-flickr.php:303 #: includes/modules/class-wpcp-youtube.php:353 msgid "Cleaning title" msgstr "" -#: includes/modules/class-wpcp-article.php:215 +#: includes/modules/class-wpcp-article.php:246 #: includes/modules/class-wpcp-feed.php:189 msgid "Making article content from response" msgstr "" -#: includes/modules/class-wpcp-article.php:226 +#: includes/modules/class-wpcp-article.php:257 #: includes/modules/class-wpcp-envato.php:418 #: includes/modules/class-wpcp-feed.php:203 #: includes/modules/class-wpcp-flickr.php:344 @@ -1896,27 +1923,27 @@ msgstr "" msgid "Article processed from campaign" msgstr "" -#: includes/modules/class-wpcp-article.php:265 +#: includes/modules/class-wpcp-article.php:345 msgid "Searching page url [%s]" msgstr "" -#: includes/modules/class-wpcp-article.php:280 +#: includes/modules/class-wpcp-article.php:357 #: includes/modules/class-wpcp-flickr.php:258 #: includes/modules/class-wpcp-youtube.php:479 msgid "Extracting response from request" msgstr "" -#: includes/modules/class-wpcp-article.php:297 +#: includes/modules/class-wpcp-article.php:361 msgid "" "Could not find any links from search engine, deactivating keyword for an " "hour." msgstr "" -#: includes/modules/class-wpcp-article.php:306 +#: includes/modules/class-wpcp-article.php:368 msgid "Getting banned hosts for skipping links" msgstr "" -#: includes/modules/class-wpcp-article.php:319 +#: includes/modules/class-wpcp-article.php:380 #: includes/modules/class-wpcp-feed.php:253 msgid "Finding links from response and inserting into database" msgstr "" @@ -2189,12 +2216,6 @@ msgstr "" msgid "Looping through feed link now trying with [ %s ]" msgstr "" -#: includes/modules/class-wpcp-feed.php:135 -msgid "" -"The feed url is deactivated for 1 hr because last time could not find any " -"article with url [%s]" -msgstr "" - #: includes/modules/class-wpcp-feed.php:141 #: includes/modules/class-wpcp-youtube.php:295 msgid "Checking cached links in store" diff --git a/includes/modules/class-wpcp-article.php b/includes/modules/class-wpcp-article.php index 7a10f4a..d989d54 100644 --- a/includes/modules/class-wpcp-article.php +++ b/includes/modules/class-wpcp-article.php @@ -188,7 +188,7 @@ public function get_post( $campaign_id ) { foreach ( $keywords as $keyword ) { wpcp_logger()->info( sprintf( __( 'Looking for article for the keyword [ %s ]', 'wp-content-pilot' ), $keyword ), $campaign_id ); - + if ( $this->is_deactivated_key( $campaign_id, $keyword ) ) { // $reactivate_keyword_action = add_query_arg( [ // 'campaign_id' => $campaign_id, @@ -198,7 +198,7 @@ public function get_post( $campaign_id ) { // wpcp_logger()->info( sprintf( __( 'The keyword is deactivated for 1 hr because last time could not find any article with keyword [%s] %s reactivate keyword %s', 'wp-content-pilot' ), $keyword, '', '' ), $campaign_id ); wpcp_logger()->info( __( 'The keyword is deactivated for 1 hr because last time could not find any article with keyword [%s]', 'wp-content-pilot' ), $campaign_id ); continue; - } + } //get links from database wpcp_logger()->info( __( 'Checking for cached links in store', 'wp-content-pilot' ), $campaign_id ); @@ -380,7 +380,8 @@ protected function discover_links( $campaign_id, $keyword ) { wpcp_logger()->info( __( 'Finding links from response and inserting into database', 'wp-content-pilot' ), $campaign_id ); foreach ( $items as $item ) { $title = ! empty( $item->title ) ? $item->title : ''; - $link = ! empty( $item->link ) ? $item->link : ''; + $link = ! empty( $item->pagemap->metatags[0]->{'og:url'} ) ? $item->pagemap->metatags[0]->{'og:url'} : ''; + //$link = ! empty( $item->link ) ? $item->link : ''; foreach ( $banned_hosts as $banned_host ) { if ( stristr( $link, $banned_host ) ) { @@ -409,7 +410,7 @@ protected function discover_links( $campaign_id, $keyword ) { 'camp_id' => $campaign_id ); } - error_log( print_r( $links, true ) ); + /* //check if links exist if ( empty( $response ) || ! isset( $matches ) || ! isset( $matches ) || empty( $matches ) ) { diff --git a/includes/modules/class-wpcp-feed.php b/includes/modules/class-wpcp-feed.php index 2e85e6c..0947c63 100644 --- a/includes/modules/class-wpcp-feed.php +++ b/includes/modules/class-wpcp-feed.php @@ -3,14 +3,14 @@ defined( 'ABSPATH' ) || exit(); class WPCP_Feed extends WPCP_Module { - + /** * The single instance of the class * * @var $this ; */ protected static $_instance = null; - + /** * WPCP_Module constructor. */ @@ -19,14 +19,14 @@ public function __construct() { add_action( 'wp_feed_options', array( $this, 'set_feed_options' ) ); add_action( 'http_response', array( $this, 'trim_feed_content' ) ); } - + /** * @return string */ public function get_module_icon() { return ''; } - + /** * @return array * @since 1.2.0 @@ -40,7 +40,7 @@ public function get_template_tags() { 'source_url' => __( 'Source link', 'wp-content-pilot' ), ); } - + /** * @return string */ @@ -51,22 +51,22 @@ public function get_default_template() { {content}
Source EOT; - + return $template; } - + /** * @param $post */ public function add_campaign_option_fields( $post ) { - + echo WPCP_HTML::textarea_input( array( 'name' => '_feed_links', 'label' => __( 'Feed Links', 'wp-content-pilot' ), 'placeholder' => __( 'Example: http://example.com/feed', 'wp-content-pilot' ), 'desc' => __( 'Input feed links, Separate links with a comma (,)', 'wp-content-pilot' ), ) ); - + echo WPCP_HTML::checkbox_input( array( 'name' => '_fetch_full_content', 'label' => __( 'Feed fetch full content', 'wp-content-pilot' ), @@ -76,7 +76,7 @@ public function add_campaign_option_fields( $post ) { ) ) ); } - + /** * @param $campaign_id * @param $posted @@ -85,15 +85,15 @@ public function save_campaign_meta( $campaign_id, $posted ) { $raw_links = empty( $posted['_feed_links'] ) ? '' : esc_html( $posted['_feed_links'] ); $links = wpcp_string_to_array( $raw_links, ',', array( 'trim', 'esc_url' ) ); $str_links = implode( ',', $links ); - + $force_feed = empty( $posted['_force_feed'] ) ? '' : sanitize_key( $posted['_force_feed'] ); $fetch_full_content = empty( $posted['_fetch_full_content'] ) ? '' : sanitize_key( $posted['_fetch_full_content'] ); - + update_post_meta( $campaign_id, '_feed_links', $str_links ); update_post_meta( $campaign_id, '_force_feed', $force_feed ); update_post_meta( $campaign_id, '_fetch_full_content', $fetch_full_content ); } - + /** * @param $sections * @@ -103,7 +103,7 @@ public function save_campaign_meta( $campaign_id, $posted ) { public function get_setting_section( $sections ) { return $sections; } - + /** * @param $fields * @@ -113,7 +113,7 @@ public function get_setting_section( $sections ) { public function get_setting_fields( $fields ) { return $fields; } - + /** * @param int $campaign_id * @@ -125,18 +125,18 @@ public function get_post( $campaign_id ) { if ( empty( $sources ) ) { return new WP_Error( 'missing-data', __( 'Campaign do not have feed link to proceed, please set link', 'wp-content-pilot' ) ); } - + wpcp_logger()->info( 'Loaded Feed Campaign', $campaign_id ); - + foreach ( $sources as $source ) { wpcp_logger()->info( sprintf( __( 'Looping through feed link now trying with [ %s ]', 'wp-content-pilot' ), $source ), $campaign_id ); - - if ( $this->is_deactivated_key( $campaign_id, $source ) ) { - $message = sprintf( __( 'The feed url is deactivated for 1 hr because last time could not find any article with url [%s]', 'wp-content-pilot' ), $source ); - wpcp_logger()->info( $message, $campaign_id ); - continue; - } - + +// if ( $this->is_deactivated_key( $campaign_id, $source ) ) { +// $message = sprintf( __( 'The feed url is deactivated for 1 hr because last time could not find any article with url [%s]', 'wp-content-pilot' ), $source ); +// wpcp_logger()->info( $message, $campaign_id ); +// continue; +// } + //get links from database wpcp_logger()->info( __( 'Checking cached links in store', 'wp-content-pilot' ), $campaign_id ); $links = $this->get_links( $source, $campaign_id ); @@ -145,50 +145,50 @@ public function get_post( $campaign_id ) { $this->discover_links( $source, $campaign_id ); $links = $this->get_links( $source, $campaign_id ); } - + if ( empty( $links ) ) { wpcp_logger()->error( __( 'Could not find any new link, lets try later.', 'wp-content-pilot' ), $campaign_id ); } - + wpcp_logger()->info( __( 'Looping through cached links for publishing article', 'wp-content-pilot' ), $campaign_id ); foreach ( $links as $link ) { wpcp_logger()->info( sprintf( __( 'Grabbing feed from [%s]', 'wp-content-pilot' ), $link->url ), $campaign_id ); - + $this->update_link( $link->id, [ 'status' => 'failed' ] ); - + $curl = $this->setup_curl(); $curl->setHeader( 'accept-encoding', 'utf-8' ); $curl->setOpt( CURLOPT_ENCODING, '' ); $curl->get( $link->url ); - + if ( $curl->isError() && $this->initiator != 'cron' ) { wpcp_logger()->error( sprintf( __( "Failed processing link reason [%s]", 'wp-content-pilot' ), $curl->getErrorMessage() ), $campaign_id ); continue; } wpcp_logger()->info( __( "Extracting post response from request", 'wp-content-pilot' ), $campaign_id ); $html = $curl->response; - + $readability = new WPCP_Readability(); - + $readable = $readability->parse( $html, $link->url ); if ( is_wp_error( $readable ) ) { wpcp_logger()->error( sprintf( __( "Failed readability reason [%s]", 'wp-content-pilot' ), $readable->get_error_message() ), $campaign_id ); continue; } - + //check if the clean title metabox is checked and perform title cleaning $check_clean_title = wpcp_get_post_meta( $campaign_id, '_clean_title', 'off' ); - + if ( 'on' == $check_clean_title ) { wpcp_logger()->info( __( 'Cleaning post title', 'wp-content-pilot' ), $campaign_id ); $title = wpcp_clean_title( $readability->get_title() ); } else { $title = html_entity_decode( $readability->get_title(), ENT_QUOTES ); } - + wpcp_logger()->info( __( 'Making article content from response', 'wp-content-pilot' ), $campaign_id ); $meta = $link->meta; - + $article = apply_filters( 'wpcp_feed_article', array( 'title' => $title, 'author' => $readability->get_author(), @@ -199,19 +199,19 @@ public function get_post( $campaign_id ) { 'source_url' => $link->url, 'desc' => $meta['description'], ), $readability, $campaign_id ); - + wpcp_logger()->info( __( 'Article processed from campaign', 'wp-content-pilot' ), $campaign_id ); $this->update_link( $link->id, [ 'status' => 'success' ] ); - + return $article; } } - + $log_url = admin_url( '/edit.php?post_type=wp_content_pilot&page=wpcp-logs' ); - + return new WP_Error( 'campaign-error', __( sprintf( 'No feed article generated check log for details.', $log_url ), 'wp-content-pilot' ) ); } - + /** * @param $source * @param $campaign_id @@ -221,14 +221,14 @@ public function get_post( $campaign_id ) { */ public function discover_links( $source, $campaign_id ) { include_once( ABSPATH . WPINC . '/feed.php' ); - + // If force feed - + $rss = fetch_feed( $source ); - + if ( is_wp_error( $rss ) ) { wpcp_logger()->error( sprintf( __( 'Failed fetching feeds [%s]', 'wp-content-pilot' ), $rss->get_error_message() ), $campaign_id ); - + wpcp_logger()->info( __( 'Checking for force feed and initiating force feed', 'wp-content-pilot' ), $campaign_id ); if ( ! function_exists( 'wpcp_force_feed' ) ) { add_action( 'wp_feed_options', 'wpcp_force_feed', 10, 1 ); @@ -236,55 +236,55 @@ function wpcp_force_feed( $rss ) { $rss->force_feed( true ); } } - + return $rss; } - + $max_items = $rss->get_item_quantity(); $rss_items = $rss->get_items( 0, $max_items ); if ( ! isset( $max_items ) || $max_items == 0 ) { wpcp_logger()->error( __( 'Could not find any article, waiting...', 'wp-content-pilot' ), $campaign_id ); - + return new WP_Error( 'feed-error', __( 'Could not find any article, waiting...', 'wp-content-pilot' ) ); } - + $links = []; $inserted = 0; wpcp_logger()->info( __( 'Finding links from response and inserting into database', 'wp-content-pilot' ), $campaign_id ); - + foreach ( $rss_items as $rss_item ) { $url = esc_url( $rss_item->get_permalink() ); if ( stristr( $source, 'news.google' ) ) { $urlParts = explode( 'url=', $url ); - $correctUrl = $urlParts[1]; + $correctUrl = $urlParts[0]; $url = $correctUrl; } - + //Google alerts links correction if ( stristr( $source, 'alerts/feeds' ) && stristr( $source, 'google' ) ) { preg_match( '{url\=(.*?)[&]}', $url, $urlMatches ); $correctUrl = $urlMatches[1]; - + if ( trim( $correctUrl ) != '' ) { $url = $correctUrl; } } - + $title = $rss_item->get_title(); $meta = array( 'description' => '' != $rss_item->get_content() ? $rss_item->get_content() : '', ); - + if ( wpcp_is_duplicate_url( $url ) ) { continue; } - + $skip = apply_filters( 'wpcp_skip_duplicate_title', true, $title, $campaign_id ); if ( $skip ) { continue; } $data = array( - 'url' => esc_url( $url ), + 'url' => $url, 'title' => $title, 'for' => $source, 'camp_id' => $campaign_id, @@ -294,12 +294,12 @@ function wpcp_force_feed( $rss ) { $inserted += 1; } } - + wpcp_logger()->info( sprintf( __( 'Total found links [%d] and accepted [%d] and reject [%d]', 'wp-content-pilot' ), count( $rss_items ), $inserted, ( count( $rss_items ) - $inserted ) ), $campaign_id ); - + return true; } - + /** * Set user agent to fix curl transfer * closed without complete data @@ -312,7 +312,7 @@ function wpcp_force_feed( $rss ) { public function set_feed_options( $args ) { $args->set_useragent( 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/41.0.2272.76 ' ); } - + /** * Trim body to remove extra space * @@ -324,10 +324,10 @@ public function set_feed_options( $args ) { */ public function trim_feed_content( $args ) { $args['body'] = trim( $args['body'] ); - + return $args; } - + /** * Main WPCP_Feed Instance. * @@ -341,7 +341,7 @@ public static function instance() { if ( is_null( self::$_instance ) ) { self::$_instance = new self(); } - + return self::$_instance; } } diff --git a/package-lock.json b/package-lock.json index 1d8a0eb..40ce40e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,4914 @@ { "name": "wp-content-pilot", - "version": "1.3.0", - "lockfileVersion": 1, + "version": "1.3.1", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "wp-content-pilot", + "version": "1.3.1", + "devDependencies": { + "autoprefixer": "^9.8.8", + "grunt": "^1.4.1", + "grunt-checktextdomain": "~1.0.1", + "grunt-contrib-concat": "^2.0.0", + "grunt-contrib-cssmin": "^4.0.0", + "grunt-contrib-jshint": "^3.1.1", + "grunt-contrib-uglify": "^5.0.1", + "grunt-contrib-watch": "^1.1.0", + "grunt-postcss": "~0.9.0", + "grunt-prompt": "^1.3.3", + "grunt-sass": "^3.1.0", + "grunt-shell": "^3.0.1", + "grunt-wp-i18n": "~1.0.1", + "load-grunt-tasks": "^5.1.0", + "node-sass": "^7.0.0" + }, + "engines": { + "node": ">=8.9.3", + "npm": ">=5.5.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "node_modules/@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/are-we-there-yet/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/argparse/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/autoprefixer/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "dependencies": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/browserslist/node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/browserslist/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001292", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001292.tgz", + "integrity": "sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-css": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.2.tgz", + "integrity": "sha512-/eR8ru5zyxKzpBLv9YZvMXgTSSQn7AdkMItMYynsFgGwTveCRVam9IUPFloE85B4vAIj05IuKmmEoV7/AQjT0w==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, + "dependencies": { + "exit": "0.1.2", + "glob": "^7.1.1" + }, + "engines": { + "node": ">=0.2.5" + } + }, + "node_modules/cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "dependencies": { + "restore-cursor": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-width": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", + "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=", + "dev": true + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "dependencies": { + "date-now": "^0.1.4" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "node_modules/continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.28.tgz", + "integrity": "sha512-Gzbf0wUtKfyPaqf0Plz+Ctinf9eQIzxEqBHwSvbGfeOm9GMNdLxyu1dNiCUfM+x6r4BE0xUJNh3Nmg9gfAtTmg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", + "dev": true, + "dependencies": { + "string-template": "~0.2.1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "dependencies": { + "glob": "~5.0.0" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/findup-sync/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getobject": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.1.tgz", + "integrity": "sha512-tj18lLe+917AACr6BdVoUuHnBPTVd9BEJp1vxnMZ58ztNvuxz9Ufa+wf3g37tlGITH35jggwZ2d9lcgHJJgXfQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gettext-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-3.1.1.tgz", + "integrity": "sha512-vNhWcqXEtZPs5Ft1ReA34g7ByWotpcOIeJvXVy2jF3/G2U9v6W0wG4Z4hXzcU8R//jArqkgHcVCGgGqa4vxVlQ==", + "dev": true, + "dependencies": { + "encoding": "^0.1.12", + "readable-stream": "^3.2.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/gettext-parser/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globule": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "dev": true, + "dependencies": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/grunt": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.4.1.tgz", + "integrity": "sha512-ZXIYXTsAVrA7sM+jZxjQdrBOAg7DyMUplOMhTaspMRExei+fD0BTwdWXnn0W5SXqhb/Q/nlkzXclSi3IH55PIA==", + "dev": true, + "dependencies": { + "dateformat": "~3.0.3", + "eventemitter2": "~0.4.13", + "exit": "~0.1.2", + "findup-sync": "~0.3.0", + "glob": "~7.1.6", + "grunt-cli": "~1.4.2", + "grunt-known-options": "~2.0.0", + "grunt-legacy-log": "~3.0.0", + "grunt-legacy-util": "~2.0.1", + "iconv-lite": "~0.4.13", + "js-yaml": "~3.14.0", + "minimatch": "~3.0.4", + "mkdirp": "~1.0.4", + "nopt": "~3.0.6", + "rimraf": "~3.0.2" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-checktextdomain": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/grunt-checktextdomain/-/grunt-checktextdomain-1.0.1.tgz", + "integrity": "sha1-slTQHh3pEwBdTbHFMD2QI7mD4Zs=", + "dev": true, + "dependencies": { + "chalk": "~0.2.1", + "text-table": "~0.2.0" + }, + "engines": { + "node": ">= 0.8.0" + }, + "peerDependencies": { + "grunt": ">=0.4.1" + } + }, + "node_modules/grunt-checktextdomain/node_modules/ansi-styles": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz", + "integrity": "sha1-NZq0sV3NZLptdHNLcsNjYKmvLBk=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/grunt-checktextdomain/node_modules/chalk": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz", + "integrity": "sha1-dhPhV1FFshOGSD9/SFql/6jL0Qw=", + "dev": true, + "dependencies": { + "ansi-styles": "~0.2.0", + "has-color": "~0.1.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/grunt-contrib-concat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-2.0.0.tgz", + "integrity": "sha512-/cfWwsGiprVTOl7c2bZwMdQ8hIf3e1f4szm1i7qhY9hOnR/X2KL+Xe7dynNweTYHa6aWPZx2B5GPsUpxAXNCaA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "source-map": "^0.5.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "grunt": ">=1.4.1" + } + }, + "node_modules/grunt-contrib-concat/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/grunt-contrib-concat/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/grunt-contrib-concat/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/grunt-contrib-concat/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/grunt-contrib-concat/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-concat/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-concat/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-cssmin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-4.0.0.tgz", + "integrity": "sha512-jXU+Zlk8Q8XztOGNGpjYlD/BDQ0n95IHKrQKtFR7Gd8hZrzgqiG1Ra7cGYc8h2DD9vkSFGNlweb9Q00rBxOK2w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "clean-css": "^5.0.1", + "maxmin": "^3.0.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/grunt-contrib-cssmin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/grunt-contrib-cssmin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/grunt-contrib-cssmin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/grunt-contrib-cssmin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/grunt-contrib-cssmin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-cssmin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-jshint": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-3.1.1.tgz", + "integrity": "sha512-EwMY6L91FqTcMlZTVoDeeq/EZL+7MoFyo1rxIea9sxyv73geVggeE37jcUhNbu5hLbxHE82CGIUqitHuR2/q+g==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "hooker": "^0.2.3", + "jshint": "~2.13.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-contrib-jshint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/grunt-contrib-jshint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/grunt-contrib-jshint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/grunt-contrib-jshint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/grunt-contrib-jshint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-jshint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-contrib-uglify": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-5.0.1.tgz", + "integrity": "sha512-T/aXZ4WIpAtoswZqb6HROKg7uq9QbKwl+lUuOwK4eoFj3tFv9/a/oMyd3/qvetV29Pbf8P1YYda1gDwZppr60A==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "maxmin": "^2.1.0", + "uglify-js": "^3.13.3", + "uri-path": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/maxmin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", + "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", + "dev": true, + "dependencies": { + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^3.0.0", + "pretty-bytes": "^3.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/maxmin/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/pretty-bytes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/grunt-contrib-watch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", + "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", + "dev": true, + "dependencies": { + "async": "^2.6.0", + "gaze": "^1.1.0", + "lodash": "^4.17.10", + "tiny-lr": "^1.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-watch/node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/grunt-known-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", + "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-legacy-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", + "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", + "dev": true, + "dependencies": { + "colors": "~1.1.2", + "grunt-legacy-log-utils": "~2.1.0", + "hooker": "~0.2.3", + "lodash": "~4.17.19" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/grunt-legacy-log-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", + "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", + "dev": true, + "dependencies": { + "chalk": "~4.1.0", + "lodash": "~4.17.19" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/grunt-legacy-log-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/grunt-legacy-util": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", + "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", + "dev": true, + "dependencies": { + "async": "~3.2.0", + "exit": "~0.1.2", + "getobject": "~1.0.0", + "hooker": "~0.2.3", + "lodash": "~4.17.21", + "underscore.string": "~3.3.5", + "which": "~2.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt-legacy-util/node_modules/async": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", + "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", + "dev": true + }, + "node_modules/grunt-legacy-util/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/grunt-postcss": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/grunt-postcss/-/grunt-postcss-0.9.0.tgz", + "integrity": "sha512-lglLcVaoOIqH0sFv7RqwUKkEFGQwnlqyAKbatxZderwZGV1nDyKHN7gZS9LUiTx1t5GOvRBx0BEalHMyVwFAIA==", + "dev": true, + "dependencies": { + "chalk": "^2.1.0", + "diff": "^3.0.0", + "postcss": "^6.0.11" + }, + "engines": { + "node": ">= 0.12.0" + }, + "peerDependencies": { + "grunt": ">=0.4.5" + } + }, + "node_modules/grunt-prompt": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/grunt-prompt/-/grunt-prompt-1.3.3.tgz", + "integrity": "sha1-xbQ77DqimqaWKsZhGolnEvy6Z5E=", + "dev": true, + "dependencies": { + "inquirer": "^0.11.0", + "lodash": "^3.10.1" + } + }, + "node_modules/grunt-prompt/node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "node_modules/grunt-sass": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-3.1.0.tgz", + "integrity": "sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A==", + "dev": true, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "grunt": ">=1" + } + }, + "node_modules/grunt-shell": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-3.0.1.tgz", + "integrity": "sha512-C8eR4frw/NmIFIwSvzSLS4wOQBUzC+z6QhrKPzwt/tlaIqlzH35i/O2MggVOBj2Sh1tbaAqpASWxGiGsi4JMIQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "npm-run-path": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "grunt": ">=1" + } + }, + "node_modules/grunt-shell/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/grunt-shell/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-shell/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-shell/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/grunt-wp-i18n": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-1.0.3.tgz", + "integrity": "sha512-CJNbEKeBeOSAPeaJ9B8iCgSwtaG63UR9/uT46a4OsIqnFhOJpeAi138JTlvjfIbnDVoBrzvdrKJe1svveLjUtA==", + "dev": true, + "dependencies": { + "grunt": "^1.0.3", + "node-wp-i18n": "^1.2.2" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/grunt/node_modules/grunt-cli": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", + "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", + "dev": true, + "dependencies": { + "grunt-known-options": "~2.0.0", + "interpret": "~1.1.0", + "liftup": "~3.0.1", + "nopt": "~4.0.1", + "v8flags": "~3.2.0" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/grunt/node_modules/grunt-cli/node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "dependencies": { + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inquirer": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.11.4.tgz", + "integrity": "sha1-geM3ToNhvq/y2XAWIG01nQsy+k0=", + "dev": true, + "dependencies": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^1.0.1", + "figures": "^1.3.5", + "lodash": "^3.3.1", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inquirer/node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jshint": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.1.tgz", + "integrity": "sha512-vymzfR3OysF5P774x6zYv0bD4EpH6NWRxpq54wO9mA9RuY49yb1teKSICkLx2Ryx+mfzlVVNNbTBtsRtg78t7g==", + "dev": true, + "dependencies": { + "cli": "~1.0.0", + "console-browserify": "1.1.x", + "exit": "0.1.x", + "htmlparser2": "3.8.x", + "lodash": "~4.17.21", + "minimatch": "~3.0.2", + "shelljs": "0.3.x", + "strip-json-comments": "1.0.x" + }, + "bin": { + "jshint": "bin/jshint" + } + }, + "node_modules/jshint/node_modules/strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true, + "bin": { + "strip-json-comments": "cli.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/liftup": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", + "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", + "dev": true, + "dependencies": { + "extend": "^3.0.2", + "findup-sync": "^4.0.0", + "fined": "^1.2.0", + "flagged-respawn": "^1.0.1", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.1", + "rechoir": "^0.7.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/liftup/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/liftup/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/liftup/node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/liftup/node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/liftup/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/liftup/node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/liftup/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "dev": true + }, + "node_modules/load-grunt-tasks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-5.1.0.tgz", + "integrity": "sha512-oNj0Jlka1TsfDe+9He0kcA1cRln+TMoTsEByW7ij6kyktNLxBKJtslCFEvFrLC2Dj0S19IWJh3fOCIjLby2Xrg==", + "dev": true, + "dependencies": { + "arrify": "^2.0.1", + "multimatch": "^4.0.0", + "pkg-up": "^3.1.0", + "resolve-pkg": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "grunt": ">=1" + } + }, + "node_modules/load-grunt-tasks/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/maxmin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-3.0.0.tgz", + "integrity": "sha512-wcahMInmGtg/7c6a75fr21Ch/Ks1Tb+Jtoan5Ft4bAI0ZvJqyOw8kkM7e7p8hDSzY805vmxwHT50KcjGwKyJ0g==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "figures": "^3.2.0", + "gzip-size": "^5.1.1", + "pretty-bytes": "^5.3.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/maxmin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/maxmin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/maxmin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/maxmin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/maxmin/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/maxmin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/maxmin/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/maxmin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/multimatch/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true + }, + "node_modules/node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-sass": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-7.0.0.tgz", + "integrity": "sha512-6yUnsD3L8fVbgMX6nKQqZkjRcG7a/PpmF0pEyeWf+BgbTj2ToJlCYrnUifL2KbjV5gIY22I3oppahBWA3B+jUg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "meow": "^9.0.0", + "nan": "^2.13.2", + "node-gyp": "^7.1.0", + "npmlog": "^5.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "bin": { + "node-sass": "bin/node-sass" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/node-sass/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/node-sass/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/node-sass/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/node-sass/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/node-sass/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-sass/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-wp-i18n": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/node-wp-i18n/-/node-wp-i18n-1.2.5.tgz", + "integrity": "sha512-XX6GanJ+Ta5Wc/oNkhVrV+lGrhLe0zFx2pNb2diHF/DwDnwCVRHn6NSSyoU/mgTcVf4B/jtdoQ2CzWN/Q63MhA==", + "dev": true, + "dependencies": { + "bluebird": "^3.4.1", + "gettext-parser": "^3.1.0", + "glob": "^7.0.5", + "lodash": "^4.14.2", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "tmp": "^0.2.1" + }, + "bin": { + "wpi18n": "bin/wpi18n" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/npmlog/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog/node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npmlog/node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npmlog/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npmlog/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", + "integrity": "sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, + "dependencies": { + "bytes": "1", + "string_decoder": "0.10" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/raw-body/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz", + "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "dependencies": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "dependencies": { + "once": "^1.3.0" + } + }, + "node_modules/rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + }, + "bin": { + "sassgraph": "bin/sassgraph" + } + }, + "node_modules/scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "dependencies": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + } + }, + "node_modules/scss-tokenizer/node_modules/source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/stdout-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/stdout-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "dev": true, + "dependencies": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + } + }, + "node_modules/tiny-lr/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/tiny-lr/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "dependencies": { + "glob": "^7.1.2" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "dev": true, + "dependencies": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + }, "dependencies": { "@babel/code-frame": { "version": "7.12.13", @@ -1593,7 +6499,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-3.1.0.tgz", "integrity": "sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A==", - "dev": true + "dev": true, + "requires": {} }, "grunt-shell": { "version": "3.0.1", @@ -3462,6 +8369,15 @@ } } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", @@ -3479,15 +8395,6 @@ "strip-ansi": "^3.0.0" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", diff --git a/wp-content-pilot/assets/css/wp-content-pilot.css b/wp-content-pilot/assets/css/wp-content-pilot.css new file mode 100644 index 0000000..3950aef --- /dev/null +++ b/wp-content-pilot/assets/css/wp-content-pilot.css @@ -0,0 +1 @@ +#tiptip_holder{display:none;position:absolute;top:0;left:0;z-index:99999}#tiptip_holder.tip_top{padding-bottom:5px}#tiptip_holder.tip_bottom{padding-top:5px}#tiptip_holder.tip_right{padding-left:5px}#tiptip_holder.tip_left{padding-right:5px}#tiptip_content{font-size:11px;color:#fff;text-shadow:0 0 2px #000;padding:4px 8px;border:1px solid rgba(255,255,255,.25);background-color:#333;border-radius:3px;box-shadow:0 1px 3px rgba(0,0,0,.2)}#tiptip_arrow,#tiptip_arrow_inner{position:absolute;border-color:transparent;border-style:solid;border-width:6px;height:0;width:0}#tiptip_holder.tip_top #tiptip_arrow{border-top-color:#fff;border-top-color:rgba(255,255,255,.35)}#tiptip_holder.tip_bottom #tiptip_arrow{border-bottom-color:#fff;border-bottom-color:rgba(255,255,255,.35)}#tiptip_holder.tip_right #tiptip_arrow{border-right-color:#fff;border-right-color:rgba(255,255,255,.35)}#tiptip_holder.tip_left #tiptip_arrow{border-left-color:#fff;border-left-color:rgba(255,255,255,.35)}#tiptip_holder.tip_top #tiptip_arrow_inner{margin-top:-7px;margin-left:-6px;border-top-color:#191919;border-top-color:rgba(25,25,25,.92)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{margin-top:-5px;margin-left:-6px;border-bottom-color:#191919;border-bottom-color:rgba(25,25,25,.92)}#tiptip_holder.tip_right #tiptip_arrow_inner{margin-top:-6px;margin-left:-5px;border-right-color:#191919;border-right-color:rgba(25,25,25,.92)}#tiptip_holder.tip_left #tiptip_arrow_inner{margin-top:-6px;margin-left:-7px;border-left-color:#191919;border-left-color:rgba(25,25,25,.92)}@media screen and (-webkit-min-device-pixel-ratio:0){#tiptip_content{padding:4px 8px 5px 8px;background-color:rgba(45,45,45,.88)}#tiptip_holder.tip_bottom #tiptip_arrow_inner{border-bottom-color:rgba(45,45,45,.88)}#tiptip_holder.tip_top #tiptip_arrow_inner{border-top-color:rgba(20,20,20,.92)}}.wpcp-choose-campaign-wrap{margin-bottom:20px}.wpcp-choose-campaign-wrap .submit{margin-top:20px!important;float:left!important}.wpcp-choose-campaign-items{-ms-flex-wrap:wrap;flex-wrap:wrap;margin:20px 0 0;display:-ms-flexbox;display:flex;max-height:700px;overflow-x:hidden;overflow-y:scroll}@media screen and (max-width:1366px){.wpcp-choose-campaign-items{max-height:1024px}}.wpcp-choose-campaign-items .wpcp-choose-campaign-item{padding:0 13px;margin-bottom:25px;-ms-flex-positive:1;flex-grow:1}.wpcp-choose-campaign-items .wpcp-choose-campaign-item input{width:0;height:0;position:absolute;left:-9999px}.wpcp-choose-campaign-items .wpcp-choose-campaign-item label{margin:0;box-sizing:border-box;position:relative;display:inline-block;text-align:center;background-color:transparent;border:1px solid #f1f2f6;text-transform:none;transition:border-color .15s ease-out,color .25s ease-out,background-color .15s ease-out,box-shadow .15s ease-out}.wpcp-choose-campaign-items .wpcp-choose-campaign-item img{width:201px;height:auto}.wpcp-choose-campaign-items .wpcp-choose-campaign-item input:checked+label{border:1px solid #46b450;z-index:1}.wpcp-choose-campaign-items .wpcp-choose-campaign-item.disabled-item{position:relative}.wpcp-choose-campaign-items .wpcp-choose-campaign-item.disabled-item img{opacity:.4}.wpcp-choose-campaign-items .wpcp-choose-campaign-item.disabled-item label::after{content:'PRO';position:absolute;top:2px;right:2px;background:#de0a0a;color:#fff;font-size:12px;padding:2px;opacity:.5}#wpcp-campaign-status{background:0 0;border:0;box-shadow:none;box-sizing:border-box}#wpcp-campaign-status .handlediv,#wpcp-campaign-status h2.hndle{display:none}#wpcp-campaign-status .inside{margin:0}#wpcp-campaign-status .wpcp-campaign-status-wrap{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-left:-15px;margin-right:-15px;box-sizing:border-box;-ms-flex-pack:justify;justify-content:space-between}#wpcp-campaign-status .wpcp-campaign-status-wrap .wpcp-campaign-statue-item{-ms-flex-positive:1;flex-grow:1;position:relative;border:1px solid #ccd0d4;background-color:#fff;box-shadow:0 1px 1px rgba(0,0,0,.04);width:16%;padding:15px;margin-right:15px;border-left:3px solid #007cba;min-height:56px;box-sizing:border-box}#wpcp-campaign-status .wpcp-campaign-status-wrap .wpcp-campaign-statue-item:last-of-type{margin-right:0}#wpcp-campaign-status .wpcp-campaign-status-wrap .wpcp-campaign-statue-title{padding:0;margin:0 0 8px;font-size:18px;line-height:1}@-webkit-keyframes blink{from{opacity:1}to{opacity:0}}.wpcp-blink{-webkit-animation-name:blink;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:cubic-bezier(1,0,0,1);-webkit-animation-duration:1s;-webkit-animation-iteration-count:3;animation-iteration-count:3}.wpcp-field.pro .wpcp-label:after{content:'PRO';font-size:9px;font-weight:400;background:red;color:#fff;padding:0 5px;line-height:1}#wpcp-advanced-settings .inside,#wpcp-campaign-options .inside,#wpcp-post-filters .inside,#wpcp-post-settings .inside,#wpcp-post-template .inside{padding-bottom:20px}.wpcp-template-tags{max-width:95%}.wpcp-template-tags label{font-weight:700;display:block;margin-bottom:5px}.wpcp-template-tags code{display:inline-block;margin-bottom:.2em}.wpcp-template-tags code:after{content:', '}.wpcp-template-tags code:last-child:after{content:''}.wpcp-submitbox ._campaign_status-field{background:#f7f7f7;margin:20px -12px 0;padding:10px 15px;border-top:1px solid #ccd0d4}.wpcp-submitbox select{width:100%!important}.wpcp-submitbox #major-publishing-actions{margin:0 -12px -12px}.wpcp-submitbox #major-publishing-actions #delete-action{float:right!important;margin-top:-5px}.wpcp-submitbox #publishing-action{display:block;width:100%;margin:10px 0 0;float:none}.wpcp-submitbox #publishing-action .publishing-action-btn{display:-ms-flexbox;display:flex;width:100%;-ms-flex-pack:justify;justify-content:space-between;padding-bottom:5px}.wpcp-field{box-sizing:border-box;padding:0;margin-bottom:.5em;clear:both}.wpcp-field .wpcp-desc:empty{display:none}.wpcp-field .wpcp-label{vertical-align:middle;display:block;font-weight:700;margin:0;margin-bottom:.25em}.wpcp-field .wpcp-desc{cursor:help;font-style:italic;display:inline-block;font-weight:400;color:#999}.wpcp-field .wpcp-tooltip{cursor:help;margin:0 3px;font-weight:400;color:#999}.wpcp-field select{width:95%}.wpcp-field textarea~.wpcp-desc{display:block}.wpcp-field select~.wpcp-desc{display:block}.wpcp-field input[type=text]~.wpcp-desc{display:block}.wpcp-field.wpcp-switch fieldset label{display:inline-block;margin-bottom:4px;margin-top:4px}.wpcp-field.wpcp-switch .wpcp-switch{display:block;background-color:#fff;border:1px solid #72777c;width:40px;height:18px;border-radius:20px;position:relative;transition:all .3s;margin-top:5px}.wpcp-field.wpcp-switch .wpcp-switch::after{content:'';display:block;width:16px;height:16px;border-radius:50%;background-color:#72777c;position:absolute;top:1px;left:1px;transition:all .3s}.wpcp-field.wpcp-switch input[type=checkbox]{display:none}.wpcp-field.wpcp-switch input[type=checkbox]:checked+.wpcp-switch{background-color:#0073aa;border-color:#0073aa}.wpcp-field.wpcp-switch input[type=checkbox]:checked+.wpcp-switch::after{left:23px;background-color:#fff}.wpcp-field.wpcp-checkbox{display:block;position:relative;padding-left:29px;margin-bottom:12px!important;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:20px}.wpcp-field.wpcp-checkbox input{position:absolute;opacity:0;cursor:pointer;display:none!important}.wpcp-field.wpcp-checkbox input:checked~.checkmark{background-color:#0073aa}.wpcp-field.wpcp-checkbox input:checked~.checkmark::after{display:block}.wpcp-field.wpcp-checkbox .checkmark{position:absolute;top:0;left:0;height:20px;width:20px;background-color:#eee}.wpcp-field.wpcp-checkbox .checkmark::after{content:'';position:absolute;display:none}.wpcp-field.wpcp-checkbox .checkmark::after{left:7px;top:4px;width:4px;height:8px;border:solid #fff;border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.wpcp-field.wpcp-checkbox:hover input~.checkmark{background-color:#ccc}.wpcp-field.wpcp-checkbox label.wpcp-label{vertical-align:text-top;display:inline-block;font-weight:400;margin-bottom:0}.wpcp-field .irs--round .irs-handle{top:28px;width:18px;height:18px;border:3px solid #007cba}.wpcp-select2.select2-container{min-height:30px}.wpcp-select2.select2-container .select2-selection{border:1px solid #7e8993}.wpcp-select2.select2-container .select2-selection li{margin-bottom:0}.wpcp-select2.select2-container .select2-search__field{min-height:20px!important;line-height:1}.wpcp-select2.select2-container .select2-selection--multiple{min-height:30px}.wpcp-select2.select2-container .select2-selection__choice{border-radius:0}.wpcp-select2.select2-container .select2-results__option--highlighted[aria-selected]{background-color:#007cba}.wpcp-repeater{margin-top:20px}.wpcp-repeater .wpcp-label{margin-bottom:10px}.wpcp-repeater .wpcp-label::after{margin:0 5px}.wpcp-repeater .wp-list-table{max-width:95%;margin-bottom:10px}.wpcp-repeater+.wpcp-repeater{margin-top:20px}#select2-_media_attributes-results [aria-disabled],#select2-_translate_to-results [aria-disabled]{display:none}.wpcp-dc{clear:both;display:block;overflow:hidden;margin-bottom:20px}.wpcp-dc:after,.wpcp-dc:before{content:"";display:table}.wpcp-dc .form-field{width:50%;line-height:2em;float:left;box-sizing:border-box;margin:0 0 12px;clear:both}.wpcp-dc .form-field:nth-child(even){float:right;clear:right}.wpcp-dc .form-field:nth-last-child(-n+2){margin-bottom:0;padding-bottom:0;border-bottom:0}.wpcp-dc .wpcp-checkbox .wpcp-label{position:relative}.wpcp-campaign-posts li{margin-bottom:10px;position:relative;padding-left:30px}.wpcp-campaign-posts li::before{position:absolute;left:0;top:4px;content:"\f123";color:#606a73;font:normal 20px/1 dashicons;speak:none;display:inline-block;padding:0 10px 0 0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.wpcp-campaign-posts li a{text-decoration:none}#wpcp-keyword-suggester{display:none;position:absolute;top:50px;z-index:99;left:213px;border:1px solid #ddd;box-shadow:0 2px 5px rgba(221,221,221,.85)}#wpcp-keyword-suggester:empty{display:none!important}#wpcp-keyword-suggester>span{background-color:#fff;padding:5px 20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;display:block;left:100px}#wpcp-keyword-suggester>span:hover{background-color:#0085ba;color:#fff}.wpcp-campaign-log-list{border:1px solid #aaa;height:300px;overflow:auto}.wpcp-campaign-log-list p{margin:0;padding:3px 5px}.wpcp-campaign-log-list p:nth-child(odd){background:#dfdfdf}.wpcp-campaign-log-list p .ERROR{color:red}#wpcp-campaign-log{display:none}.wpcp-log-table .column-campaign{width:12%}.wpcp-log-table .column-level{width:10%}.wpcp-log-table .column-level .info{color:#155724}.wpcp-log-table .column-level .warning{color:#856404}.wpcp-log-table .column-level .error{color:#721c24}.wpcp-log-table .column-date{width:15%} \ No newline at end of file diff --git a/wp-content-pilot/assets/images/help/bugs.svg b/wp-content-pilot/assets/images/help/bugs.svg new file mode 100644 index 0000000..7b15246 --- /dev/null +++ b/wp-content-pilot/assets/images/help/bugs.svg @@ -0,0 +1 @@ +Bugs \ No newline at end of file diff --git a/wp-content-pilot/assets/images/help/customization.svg b/wp-content-pilot/assets/images/help/customization.svg new file mode 100644 index 0000000..8e84ca6 --- /dev/null +++ b/wp-content-pilot/assets/images/help/customization.svg @@ -0,0 +1 @@ +Customization \ No newline at end of file diff --git a/wp-content-pilot/assets/images/help/docs.svg b/wp-content-pilot/assets/images/help/docs.svg new file mode 100644 index 0000000..9dc14ee --- /dev/null +++ b/wp-content-pilot/assets/images/help/docs.svg @@ -0,0 +1 @@ +Plugin Documentation \ No newline at end of file diff --git a/wp-content-pilot/assets/images/help/like.svg b/wp-content-pilot/assets/images/help/like.svg new file mode 100644 index 0000000..835c044 --- /dev/null +++ b/wp-content-pilot/assets/images/help/like.svg @@ -0,0 +1 @@ +Like \ No newline at end of file diff --git a/wp-content-pilot/assets/images/help/support.svg b/wp-content-pilot/assets/images/help/support.svg new file mode 100644 index 0000000..d6d7704 --- /dev/null +++ b/wp-content-pilot/assets/images/help/support.svg @@ -0,0 +1 @@ + Support Team \ No newline at end of file diff --git a/wp-content-pilot/assets/images/icons/logo.svg b/wp-content-pilot/assets/images/icons/logo.svg new file mode 100644 index 0000000..9e09387 --- /dev/null +++ b/wp-content-pilot/assets/images/icons/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/wp-content-pilot/assets/images/modules/amazon.png b/wp-content-pilot/assets/images/modules/amazon.png new file mode 100644 index 0000000000000000000000000000000000000000..bf690e35c7bf8c453e9993f6a6dc140b91eae048 GIT binary patch literal 6895 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/article.png b/wp-content-pilot/assets/images/modules/article.png new file mode 100644 index 0000000000000000000000000000000000000000..5e03e2352df2e001f4846c3cdfd9c98e3ce7be9e GIT binary patch literal 6497 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 UKf`Q}kG~rLm;xMHDQ6z~KNqU%IsgCw literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/bestbuy.png b/wp-content-pilot/assets/images/modules/bestbuy.png new file mode 100644 index 0000000000000000000000000000000000000000..3ad29052060d674353ee41827a7c0c3220857a55 GIT binary patch literal 11830 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/clickbank.png b/wp-content-pilot/assets/images/modules/clickbank.png new file mode 100644 index 0000000000000000000000000000000000000000..690e0fb23779c5bc93c33bd38b526fdca22b96d4 GIT binary patch literal 7153 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/craigslist.png b/wp-content-pilot/assets/images/modules/craigslist.png new file mode 100644 index 0000000000000000000000000000000000000000..4b17d2a5779ef19063880640656f6d6286afad4f GIT binary patch literal 7524 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�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 RsQ+5xa2aLkN=cKT{{oj!$#wt$ literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/envato.png b/wp-content-pilot/assets/images/modules/envato.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee5f2e1fac06e3a7bb42e95d5302ed9ed186ea9 GIT binary patch literal 6329 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 DkUBz! literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/etsy.png b/wp-content-pilot/assets/images/modules/etsy.png new file mode 100644 index 0000000000000000000000000000000000000000..249447e92847ab5702b6bf72bed7a0868fcd75d4 GIT binary patch literal 8753 zcmd^F^-~R9wAGo-h%pp~BD7gbfb_iq>#4*t6>9N-PXzX|D^z`-G8Bm8d$9xWU3e;6+Mzs1xQ z?i4sUntVlBDIFj9nAq)-`xrqG1#KrPCqgvb|2q}U1K9HUy1G~6i}LRC z`$aKC_3XdXg$u zu`Q^V9Fjr$##4PHsgxRw$VIAvuuPIFxwGy{1eON^6JU4T~(hvcw~jE9{0 zcmQjEi-eWyUi1X zrY+Ul1_uT5+Q$3!K6U+419R*z&G)k~^Gy`K zFMWUeg%CWQukr}hmybehsPzSNV|yPJ%qrDVbBki3f4O-{4Clq_k}He+=Sa1_^^G5O z*blZ>%=!twg`aGjb#~LY4eFSpUy@~Y^q>}cIvF7=JXgOQ@A9Ofw zhNE0d@+jdMa8DRvt!<{G)t@Y|t8vj!7USe}Gyf$2_}wfxP4~rlKDDGi)U$p>2t)e^ zo^5GY46qmlL50o;pKUv5U&QO%3C;V!uh~yUo}cjo_5$(d^JK(yr=%2>wj4lrNAKWWF3`Uts2gV9c`N%!niO-HSm zG1Nra|J*gwGJ&nbG_7$x@EP|XDT1_s)4xDViDH_Pz2@9)1)T83Dh|M)sS2H4SKJi7 z{F_Bo6v6a(M_9dUnP9K}Y95W;8f+6Qai?B;VT`%MA!gx@SdK$?#_N;a3p3H#rpt9_gemoJ>S}<8oiF z`W$eU&fEBkO#hmxr5;fk~oOHU52b`7c;3_H3$CQ zY9-Se|KQ2t=)~pWs0dQBFdg&Q+c$Zzr-jWFU-l z{-M}a^rZ`BwpqyANp)v1x}MJjVzm^T&jt*Q6iytp#6BRAr`W77$6ZU-q88^|3cek$ zgTQnkiT(N0PfSJdJ^;}$)IzO`n6n=g96J|mt>%%lVPYavIY6qu(IvrBqEGdav{{X? z==_|(IU+4ufzqsh!U!3%R5#(sY2hVZXHTUbzEsH7&+D3QlE zH!q5}Pm2C*Pv#d7Ci9n|V%7t`<5QK4-~RYqb0Uh&5ph`;KG*JiSH^>gf5{)IJnGI7 zl-B8SBn_W37DN_GV>*dkGqgfuGBcD6$EXz*L4i-Bm%eqhqOkf<57`0y3u#@=m>tw( z$me>D2G*_bH53Q~vO%5192HhI>Ro;mbzRLOFcA_%hM1h=HML7!Zbu{p*p`0MVSDSg zW!9(Pp-y`*nA7l*NU)gywof0wO0Mga)FU~au(Es+xa?=6{FaS z6L{AKC2q`Z>J7nE2>0l3u)sklbRE&0v+rNc98;j=#nCVq%SD+ z>$(@D=THbMJvy812_NNjys{k;_XiF34xJm7dy7fL_!&;bO1&>n2#iSMd$uN-1p%_4 zE+15qQrnNx;?*Hot`GW?2eLuP+Q_r8W6b!fL|cIZEa}k%7nSjtH{as_d_eA#kq>BS zYlAs3cv)TQRBdCMkJiM6BML3JBdE~?!5q8v?lhZjwsRjSCJHWN1Va7M58M=xDdN+6 z(3obDc(tD~j(C4vfW^X|QNu1datwC0R=pDh_amP*#NtlB*knH=dr29??be%VJKvR? zySfKx33N=RafxF|dy(3?3!@I_n@{np_%of-y=1~wzv>QFWe#q0%~q<=Epa??S6tTm z7oV&y;m^wZHxm{@BZc`Myxf#3-wqjdq#XE`@t~+JhjwB2eyG)2Z5{JShn~6n3!hC7^Havj##8P+XBt^*INo zJT{XBlo(_sr%Hc}T^UVW5S*bLLIU%Kq^2lb@R#v$6KK5W7k(O5M2z#_%kOi{&R)n5 zLj%w@_P9m-Cmx)_QG=rH(S@J)yU6O>=ZH85RGG+b17uqy?vID-7GcOllxiG5+ zQS6xFv3-=r30y?K91#1nxI=-Qd$uhb^C|~dy-F=@k3x&nBue^G{v}NFg+mBY0_zqe zYt4KTJjquPy@bMkPu+)K3;DOB-=HzV1^PgRwg=1AY|C zpEim)NskDx^q^EkZ+;qoTbR{^yy?ypIxJOtPr(>o?o7w%qtI0@r*!BT zPT`X_jBaOk|@H{h&JW39H!0ZZ1OM z+kX>3LgH~8*1ijVyclA{!Ji-zs?BRmaDqJ*4;lFBUChU>u&qK_X=!JGXJFRVj-}@j zZGI<*sQOlX&Mh<;X--6!5Za)+_5)jrmmg&Vd-?L`cXEC-NuvC-{0+LD;bSLpgQsV0 zozMu59b+g%77p(!!w{+)%b5RFKkJBL?20#OeX6yH1lobuE0juX*Ti-kVszs@U&>QM zqJ9Id?}Y2hnGz~!J?kmk4Pz%1Zb&}bL&*I!!_*TNE@(qG23|$-VE}pd(XKYEzbaU=7XieiwM){Vq=_G?(OzY zLG(w;jOFuB4gqwyI+4K>r&)qZcsySFBCFV>FIC&M30}ktbLf2Z9l>F@Tm~<6@+!zL zauiUT&v=TS4Sdc$2mMd2eVDr$HcFwo5PC5!6-eq$Lv{tZE5hK@xF#~{iWY;?1of1? z*m&ARd#vpse5iF2&L>2!ZeZK;Vyx`O&&V$t-R_SyzS_J6ghkYa`OcX1)lPdJOP@gx zjTc`)>j5VTE?vMWzH?37A?&X(bne$c6s_SP>ATp1}G*D^} z|FFW_{9|_)LjtHxRXGpW=YI`E=u`P43kifBX^nP6X?bTXGi`&2r2fmw#Hu9m4<;rO z73zJ~Ypv*u_0FT^zlHxWP$*0m{=6wfJN*Z^OS*yM?PyI?m+52dPq(nf>qEEpp2y)Qlx}-v?!}GVy z-Q;fjn9GieKJ|4xHSmf!HV^SSV-l&P>Cdl147Np}`VYi_7kJ%xL$bm2RF&HI2I8{v z8Nu|uRAzV!LlIWx0)3U~*rAmVjcE3uwDBA&WG>P;8dst_)^4Z?OidT9L z`jMdLWIXjl(|P;RFKhxlG@>7QHFJUG>{R8Xr(|T&Yzoa0Uiw1ZXx7cHlf}L56M5gL z26fa?hH%~mMF^L*+&h%c#r^CW?M07ZG5nUKC;Z(DjP*<&unso#2}1qAl`L@^??FErG~MWm_O@f`xvYNPt(Xeu(X0fj%7w>{5ZW=C z#h;Polugnb>WmAi)|ko8y9Bk?w4)@vx}Xe9BY^_3OxKR1U$KkD4#oEz8V!%1M-Nu2 z)&s@#4o%bhCN>b6-$k69EYsyVad2^yK!3H_{N8n^#uqTfSCeA4(>PGN^iK_g*xYeq zHVqs$Wc82~@6H%(emF+p);g~>myH|@I^)7P{>y=pEO8{A{(WB?uOMe1{bjih8+F}u zzhC>V$}@5Td1LnP^iEZ}kdfK~cJGv(Vk~pADc7qOa3zdi^y_kT-6CEN0mY}l?N>k{ zVQi;(luI~Lj$Z$S$52MtQIx8&x5eKp6sz2yn08mllz??#Mn?S6*ytpcgEQsnjXwH_ z>Si}H9M{pJ0&NgKn!yc>$9s3T=eD)0tP+!WnHqP}Wv9SD)3epqs6FDwZ^=+K*^oWu zc$JZrLbZRbH%u+HUMC@dZiBykNj9xT9M5FoVjrflDr+J_zXqi=U$ymM-&Xh{b@?rN z;}uyN8syZ6t=z}9%~AOXww{|z2DdfW59g2g`o@IB%^L@JcB9Tr4|F5uI?)8?%4Pn!N6~mE}P>9*GP4 z_<<6gJvJR)tZ$REc@+y`T(OKg2B%uKFQSb4K2UzHef8gLYq2b>W~I5}MCI2FWNIx! z-0Z>BCe_oa8bhN#B!3HcoY}e*fN7AvR_Me+=-v8wteau39uS>zs!qqAOJ^@U=}C)N zYr5VMeeQ~Tur0q`x-cs?c|DRuWK`|yzZp5uv6t-Su>h--!Cq3#kIA)=m2 zI##d$Un2`=z?hVKA5B6_-Eof7mtsDH&T|ZBG+oat7aE()K5V5%k4uCF$DK+_=vW3e zq~yg!W^cyqWrBUG&$^y?RaexE6m#;JF}LVysnbOZIEUjG`iyDq|3(#x6~l3W34^x8 zPx&%(WuN7S4X0GUConlOyY-fWa#saixWiU1r{dbJ{&`+kw9J`pz1P&heaK!KZ|`h* z-XOvBU_)iU7c{#kGn8hbH3=qhn=}lc~^TCXNCGQxbBAzEGtMEhgUh;#8=C*hlnlbb@}0xv$|jaYJ3Cpn(`M zf66M>iMreejA6^9>G$+P=o+vLz+&F&Z$68kJG!l*EjmI<0;X+hBl6Bp@O)yMwLH7= zIloGcrb-87NQT;@j^qf1y_?5%_DuG9RIpd3(yH-7hXLD%0xmwW+%{7`v#r#P*az9b z(qLY@hiDTWgHfO8KeFA=2dRoheB(l?;MqRE4gAU+Ho6?cSt*Rl88y0eD}{7b{^J~z;)wIDFgI-=Y{}N-QE1oP)RXltKT8{Uk zSW%$D$WZ%tnco2d=gr?7%IlWS<6|CL|LU3cG>F2pt8F<~DKnPfrh3R6TiEz~{!bC4mZnP{~de-M)$e(7*5!cyf3+nNA&KHp9vE_W4q&YS?{1Y7PG; z>omK(UJ4Q9X-{l*__FkYke~hA2~J;7qAX5pDnAE**>)|{Zdvc=aWF(rU+-mYITOi; zK>W??zzK(;b-H)(gJKB)MI6tg5|~nO^m7d`%c7#}#V6;uMtupQM=eSC6rhz6+*ZqFT><$^pf3AS4d8 zO^^N9)a(cMoewj7p*{UKzV;2Y-U8sCz+1h!yU{y-Hxc4O{88EN4`{nnDnU&(8#@cY z?{btF2iA=fhXE1njzSd8@)8STBa**#m>kx9+JazwD6R_(!c0ZuIft6xAs?Ktle(+A zcjv9x9@D)f4}-;&cPT#;Gav|$P8@U0_T`8YVTB8X%jcP?%k%9+vc=`ga7mOMxTZGl z#m7jU6d)0|A;@0{8=qKhZjj-3$V1lVyI9{CnAur3m{dUf=6btAEh%>8@+-xJjf-G% zW1=t~U$!}W#K*9HKYo?Q3=`JYj~%xi?bP^x{?3jw1P#_ZWW)3ArqjYF9bn93W(ajm zetH~JFyWmqX<_G}me%1#5UsYj&>LZ-44r=UFtlqRBCUU}B1%Q_{nw(T5S8m#E=XDF zhGNg2^J65eAjfbxdd+H# zT+ph*YIn_Q^2Y;poyQkydcQ|2kLSIRnlTjRfcM7&OxwkpGIyajtlw7Ltqw`%Ss=&^ z0@BEHo7Dq%U#-->I*!!W;pp8ybAGrB*D9GZb6%I+puWJ0apQI;ZB9Im+OA|k9->f& zeCtgnfR1Rslw{2wEp>;TB&Z%<0^lcj7(0wz`oq}wq}-okGLu>9}B7M zU!<88!&iSq%uZhJj~l3*!mv;y{vWb~gOkD$lKPxK#`jZ1QYj%LUTU*mJrAF4N^lk; zvCa15MpKEWKXgGm`+Fjv@aiw{fD<%ra0@k<@?kb&u#Uh&J~|Y5DCDP7%Aj~tN#_~| z1wMviH!@vTd;x7D5;p`TT#a!!*qD)R^JMK{ZgnK==!L$bcfiJ)<{-9{LX}Yp)I^O6 za8PP5O`F{hBopYU6X_d2F?Sp>2`V1~M*;o2;dDD8Fr-Q?=M&BLwzASZ&mUK`OU$bvZ#EX)GzT!Fn@ z`#YU5v80S7>)bo{=TX*89k5M%zDid_>g-hMKGQJZBy9>+gop5iXYXn-(v*j%FC}OG zwR*(A3p!Hue3IgilKSRuB@|qbM;6klx=k2WgL_4ruaY4R5p{1gtF_FaVav-VW_yk zJYVqwM)Tm^64Pz9#5qys)T9X=EZ#SZ6lA6VPgC zC=Pw2S!b$4x?04_q(tY$%M^L+Hq8@T&{+fEe(*%B-st>|CuTZCIs z#3i>&-<`fZBMoJ!T}|MqGZUG$vjW-f)H@r!caz~)&?QM`%w3E3(VgAcH0IfVaP1j? z@ApwMzt*xIrwuj#}I?ii&)88zZrWZwe+mTbb+c5CjCuLm&9Cb zlfa772yGkekwo3;2EVJpmOi18@+Oz>h0nl`)Xpc$sqX|`3$yON+_n_n@nmdr>FLX$ zo&HCkr`Nn7;46sAW)Dp80@J6b)(Zzf2K=KB7pJDEjalwhHss<4z-%kk9{VwM^kX=W zD9#5?)T{@MPYY=z(D0B?j${`nTA>7~`E#k};3@6I0(HOyDvq(9twJa7GrJjh#XjZi zAqIMsQu^8ET<Rp3r6r{cbCQ4bFyy(c277% zX^c}p2I@VPGt2Znx_(xfESSOEGd5n4={$p&3_JMEG#-RPM54n{Cls7qgG zH44eH(yR+^e2EzbTx{>?*}zslR$HM42XLV=r_zNyNzo_5L+vEj=GybO ziv|~@r?x2y(YJ(EL~Y+3b_4K|)QvEo<2dyf6&a?>ij8MvLG=!!XkpWDxxuZpoOI2? zw^cGsw9^k~KYzbd7f_P!fv5cenH}du$K=NUE}V}hga8}OzWbQr?p65ynNhDUCy6#4 z6<}7tc9H=n(>Al+TkVd@2_2y6niGqG*p~Y06?)u^HRgr{rypMu%wh-=rB;yGOA=$z z%s9{SE`yC@{Z&KtU0|R$BPN7*;A0X%wz8|jN4_P^MiA0(L}A2?$BzbS^){EWT)INB zTR1QW`EI45!(+AJzn7WfS+r4)nx2Y#K~eH#%7eTrDuU%JA$ic~gI* z2$A9S=DPGyY+f{ZF<8brpfh?_y}Jx_o2bygLI8SW+Cn8=Ve20xg$NsG0#A5*n4`Vy z4U(Tcn&K5}-6SfXg4M@P*y(X)00_;%*y~=rPf5x{W=S-igE~p;z13kPffWUpJ9d)+ z1ll3guD~suW;miyz~!W|D%fZ6+PSxnUYC;{;m1MRI;B@+~jH-{dGZH80S71uG=z$fJ^@+dj3q^j(Qq&XjIc;pD2 zs*<;SM~rN3K>{SO8|am~O1*i#Nttb$a=GwrJK$frH2c--;|ve}`)I+la304z&OQ>r z=SI06dMRxkT$`c_LXS7xs(;kB)M{dQ4Y6HbSUh~aff@4mK3a8S%e+=5OH)z>liJ7bZYKyH#Z@4&uG0?v?}q`t6&mub=3dv|qR@`o4+y-^XN%z2I8F z-V*Tsz3&twl>{ArqrB_q0a2yiie;RCV*#4h^w-Hwshk>a} zM13_w_|NCJ(v`PXR)%5z4UDavt3OVwkx9NoH5t}h$z)-OWK2u9O5{!F};4#=?8{#EF52*Dx= zK~y|Xk$c>^$`w!ua~yO}o3jw82C^Z3f>a^ko);0Glw=}mf&x*#L8<}_a{)<^Iya3{ zRZ76mTz9)mEM;X9xJ*&28Z7C4N4FJ?WRM_Y;$QlS{FS3O`CkF_l*QacZnp%rk@!`{ zwUyDCO)S|m8OE{%Xi#@|M2y7YTcW(aUf7w@@r9CaH{A-WzMal=_*nGnfT*>AFeJlk z8J@4FOhw10oV^Mf206v6C1-0t`4WC9Uv1m}wS>+trf~f1!9lbG_UkvN*+-$h1EvV8 zj@NsRRu?;3x0{ONJI5GRa@Q}g@D;}w^y8Z~d0N5_e=~4hrH&os&UM(Sf|ggm-Kd>I z-HL_8^9X}$I{1S$-a9G7hvkodiMJ;H(D4?9+%@(NBDV+fJ$-R|(2=Zmx411UJodN7 zN+SO|MSML64J49;J-<@g?v^B5T;o28>P_?bV5N{(kmDb@_)<-LQ5euvU1q^zRzk0@ z$tC)O?_4~;kMD^MuP-xpB?BvK!u^qzw^M#f?kKNHofHgU0h z*|zBZ3SdA)ZBAr06|q=k+%BWGnj0W|Kb}{{4r&Ud`u%~GeY_j(NtRs{grg3ID~x(M zt%t<0y=Yk#i2ZC)g#mn3mcRC>kc|1;JTeQ;YAXGG&9VOe^@Ns86Qkx(G1RS>(7#a# zbn=j%#V3*f1qRJLE+Ioa;8#EwFX8Ry0`%hL=K*2(+-t-;w}~+MTQ{J;y>YH4DFGj! zECz=g?$r)(y=9J@jTyg5s4gxaeI?rHaxa{s3pb^thBNA@?LMILh}O3oQv}M>Qysdw z>uT$7<8z#u6FkpW!*Vn@incR{;XSpwxjT9M^qDr2vi1Sng|V!+txHH(y7*iDYw*As z8=#NY>(iH!ML#6dV;p{Fy>h^`>OGT1k;2`Y&d!5!wp6HVnQuVct8b+FMCK1TG@crc zhLMM(Fs}OfvVw#3QOIm9w~9QwjOSPKH-EH?IcR`wI&?Z{2DyUVzU*V&&ff7%&!|jY zQ!-Q$PT$B)GjpYh+1}bAFHBYW_>4S*^P$XHM!o+}dX=n$k~)g#Qs%YoB(|O-!L3qj zYHw4-R|2gd{1*)T9IZHQ5nfcDSadpAI=jt=&91mZd(be47yy)4C!{e^qMem&QzB!`U{4n<+ z^{uR+w?GiEGl{qTVmiy!C>P&WH>m*j${uSDYkJF8V^R)JJ#s?ulWSFxI-lfk#?wm5 zY^Rc{i;JQ!b8Ug9$Jd8Hl8*vuznsIftU!|Q+$`509S4_!8+|rSM|~~ih9fODhAOM( zKt_g<(xS=1_B5=UYio4Zi~G^8v+pbBE{JQL1r&J{3Eg??#{MuI?z2kJbmC>K%Ya;AN@3}w}$RwE5Fq~ zJ1t&S`~~PlwG7Vq57L* zo3zI2!l7&FnPW^$fe1ijQ3L3pa0#%U8TGp^F}t~L%CY;5L}{lW?M2=51j`Ly2^`90 zTIEfM=p>4TGvwfh>%++@glq~UIBAa6OOxyz@MFyqcS3;I*DJlw2kUw>%&ewGabShyNK*)UF)CU}9S5oTACuhielk?T=oQ-LW2Q38eooI^7eM-7Y z0Agd(?AymrgvG$NBHE57XHjwkW?+2C>6S_ioP#H9=A78E>9mtx4h}bRLtru;24R!#2{aXAE zs~v+Y?q>(BX>sjL6D zir|OIH$2A2b#qW6#`Ip^uL1>Rub+2Ekr2dhrZtFe>W3iCT1o(TtXH&xX-U}3K zFh*N5lB7R0zXs>n?f9#A2{9WdbwPsVMra*>)l9*OJsXwYQ{pnEm1=dg!__ zvv^oLJ)gIW5%yT%-y^>R`O?vk>$P$NN>?1^9AzG4o;{)-7m3~lfZaE5_=6dpaR=MB zv^h_PtozHPA>FL^=0$4<+xixHgkDCUyzUhby<_YxiW6~VBDw+g+g79|5$$3mf79{yFgx})?%v&E<~TOKnX z;sbnY&L4(P>UXxoi(M3oQMzY>y6(Y$%y~@&R*%%lxTM|kKxC2*XFqv$=Ch+PftuEZuriubP~a5L+{a?6E=7| zPkpA*04Xm)-4dtB5_>24FKRz!*gv)3gxu!`Q^Vczq^q($ir0!}nph85MTT+!vHZ36 z=DhA#Z)KcBYxA}d?duAXPOqNRRnS;sHi6)0`k(1f2XeLVxnj+r$w_-NQ|OjOW}MT| zX1gi%2OMH8snjJEB7~j~Ka6v!7i~Ycuv`A0?#-di+HYOe{4{f9T!lDAaypgDm>HJHl|b_eYR6FagS~>DR{KXdzuH4#Kj>L(a%AXU1#FJ!L0N|$hEVe%izgco z2LTk!Qi~N&yv1GRY&V@lTm+F5vfdGwR6Ixl4mx+Wff98|p0(w^o0ch8UC)IkgFs=$ z@>fHT-L}y?brEnn83VgJt967S17{`l9bZ50ro@IZ~Xi45YX>4$`9*-9_ zBd{$N%jU4x(VTF6^1*ihN1ECjeiJf=8D*wj3!8PScBPKZblhOGmX>b>ha5N;hFYY^ zk-%Cwn-kUcFE$D42(XDX-fE;dpQ{(UXw5^@X9zFP!hx!!8z$lg&Hj$u>N}%KKZi>O zc2>gkjxZTl!Nk~3x7Sp-(lx$NcZ!KVV|_hpK(|J2eS>+;cimP>1u!dyg;^wUMWYxI zFt=Schh(a+lG9N%J$dD_?S|tfYGv|3p=NFT_KX=c-26R|8wJ7Q7IPTPz0LH7aow0_ z#NzElJ=d0`!L}l<*2prE^*&uofw-K9a3_RgWHBZtjnNNbUYp1gDV+sTh%IgQK|}uL z2B+S@k@mjdt(Bjm`Z5*$j>F#jt&(%?&_&E%|dDt9C-1 zTY7~tB9;HAfw2K{jKG3ZW4|QMcTw?Z3%E&zfI^l1vvU1w$9Rm^-Bb7_kei z(-oM1VkZ6VyhdP!gJpq~C!PKtgC>%iz4I=lZ5})D-=CIcQM^bh59Pq^ zNkbh`7=;X%wi+~{o71llaZwo8424fBa|)?a2u^P;`(|R;-C%bAx2E}c0q#|dp?<4# zMYCHxW%xSsPoj zq=dzJ@mdtPdy?C+U6c5;o?HuHq3dy?EyS17dVpvNhc%}){R;kMjQfqkIlrBlZ@RWn zv`7D)PRZjC*Nk@(nDaGz0A@g0M(a>11VZKGq5q@-S94!~TBrGP=wCPA2IqxRSC3^9 z#cX(_i>S~gXuIIbM^){!=U$K%y!124SqN+XjS?5jSPsXG{%8PG`d5Z-;D}xuS-QCG zn+WZnz(FslB;8Zf&bw2a{RlzQR;Q^(xw*vfTvmX2h|%c&Nyg`$LxyXWK8-f(8Q)QU znA{ABZ*z>_4ON;04kipsjsg#r4Ent=!27v5SJPVr2qV86xCw>;7TOaIOOK2G`cLaz z@G*mD!k-(6ZX&r7fTIiNjnbw)BCI4UlZ)7do`YbR(T4lWk~mw8m_Et{qKK&7p`LV2v;s(%wIVUvnW~MmI41LIdO`C{LniW8C{!CmO=ki7vq| zwT#+?tLDpz&hM{u75YPPxRdZg9&f6euzLs`JTR@k8K@Um1%jAm41E8L5eF-X#~0u4 zxE`N3+YKXQAf7%L?LJl%&F$QCv;)ju;|N806`gMCeyjMYm1NoD56ADoWYxiod&6@^ zJyX3?HLZf09QlF*fW*r0HQdtCP^hg0+Y#s$=AKiZ9vzC8(P{G9AYT0x2$^(j4sChk zqU0qsNWlomfqIgLWoKwyrJ$pph@0lJTi81~?)iO4j;t)Ae&h3t+#&-e%ac}eq5Gd1 z4w$eMK~K#2FH+$zQaQxim14g3bHCMA$1n=n+=%T8qoA9WVCfu7_>C2WRcBpVnBxun zNcp4i+7&CdX@ySW9`LYf@uUyBUQOIRyj2q9bk zoP*$R+$LF?iowkGp12e4z-_8pj%8jsrFDaD8}w8a7ISF?MqYqufrPppowJEVp48C! zV8zWgYq6}vhQE4Ll=cBe+y1L0(7r*tx^+4SCvCOmiu?a&2Xd6_!gM<>X2X;@5m?J$zW2coH< zwY?=2{x&|gUL`gD-ae?9r8W~I5H}<-W0hu@9pu#$;N!krUlt|xhv=~6VQCdtVPPVktQdVlJKbp(4N8H)g4`b8MVRTywGA9*yIe(E89*+h$3<5w7<| z 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/ezine.png b/wp-content-pilot/assets/images/modules/ezine.png new file mode 100644 index 0000000000000000000000000000000000000000..c7bedcb5e6e9cebf44c28f94f335e81138d3f452 GIT binary patch literal 20359 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/facebook.png b/wp-content-pilot/assets/images/modules/facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ae916e80997219891a8113fffe4c9d5c6628ab GIT binary patch literal 5679 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 BShxTH literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/instragram.png b/wp-content-pilot/assets/images/modules/instragram.png new file mode 100644 index 0000000000000000000000000000000000000000..09a799918df83a7d28cca8a1d37014edb9967ffb GIT binary patch literal 10523 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 h|EK!@(}r~1fp=1Ca>_uAfo@ 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/pinterest.png b/wp-content-pilot/assets/images/modules/pinterest.png new file mode 100644 index 0000000000000000000000000000000000000000..751d9fcf87c4f4c833c4c51c6901f1e36049dc75 GIT binary patch literal 8330 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 F{{hKUXbb=V literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/quora.png b/wp-content-pilot/assets/images/modules/quora.png new file mode 100644 index 0000000000000000000000000000000000000000..631fcf1312049cf29eb9694e73dc29a2d0859eb1 GIT binary patch literal 7015 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 AJ^%m! literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/reddit.png b/wp-content-pilot/assets/images/modules/reddit.png new file mode 100644 index 0000000000000000000000000000000000000000..13d89a2bcd88db7572db079a98b01b9f30669ff6 GIT binary patch literal 7197 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/soundcloud.png b/wp-content-pilot/assets/images/modules/soundcloud.png new file mode 100644 index 0000000000000000000000000000000000000000..2427f4e9fa967f48667c60b36de2ea7cead75ed2 GIT binary patch literal 13105 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 MV_l8%M>b*q3!Eh{HUIzs literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/tiktok.png b/wp-content-pilot/assets/images/modules/tiktok.png new file mode 100644 index 0000000000000000000000000000000000000000..f419793e4512a13cd4cc45494de8591e1b0215dd GIT binary patch literal 11655 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/twitter.png b/wp-content-pilot/assets/images/modules/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..757bda08af07d51a1127205139ea60ef51d2adba GIT binary patch literal 8801 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

VCP+H}L1?Ea}R$>;1a)GAw6`HL#vy7dg#fEbGll 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/walmart.png b/wp-content-pilot/assets/images/modules/walmart.png new file mode 100644 index 0000000000000000000000000000000000000000..6a67eca6425aad17204610da7d1013f95c59bf8e GIT binary patch literal 6898 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 Q{jX7`uWhXLR?{)&f0r?6SpWb4 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/images/modules/youtube.png b/wp-content-pilot/assets/images/modules/youtube.png new file mode 100644 index 0000000000000000000000000000000000000000..d3d24a9720aa23bdf5329b356ac3d7b194aecfa1 GIT binary patch literal 6521 zcmdT}%5pg6BM<*z1qFK}q=SYA4lfo1ad4wv;Nbr=!43#^;NSqzxHtgpjQj5% z8t;F#xF9s(e=$z{Kf^{^a6S$W{Tfn1R?i1_-yGyaqhE(u$SJG_u;Bx%c^ zPZpRJABYRWeN1)62F42y0b`MzPc#w;#=aHqVw99H0vUHTURNXg2<79N%PFPu_nD=t2Q%AH;f3QcfUXIFxNS_}rs1bUX?rCH zkfZ8}J;;@HJESIl41=#7bjYa8I_-zP0r^NQv75dHj#i*l0~6VDvS8oE3L)*xPtx2? zha-zt|147|fU>ttoy{4EBy@4+HJY4gPs!z4_~tV@gzsX&HCt6Z7gb%&#v??R;{P|K z@HW>y23K@CMJjP{NcVG>GJ2z5#A&vL!X)vb{fvkM@Zkzy9t|a12qDyS7OW!hkkELN zD=ct(Ir^;o86`uE5l4C7&Fp=MZ69-q@y)ZE+{}6(=o1X0=Zxbtx{B*tzrMD1C8awciTCSJ+F|t_MCxmE!jay zbsx;xb(@<5iXBD(-crLRPGL@awX@H>L+>Q(LcXbO&9<4XB>Y^^#^KB@_!3;3PO1Pm zWF2h2v0>7?ch0d^l~w8#)*nBPhmGbCJ&a?G4aVOQe?@4hSj0vwr_>3aLThmC)VC_H zf#+mOn`zB@U#H2cKc;F5CZDrMzaI3Tm0;Y;xWk8d9c-Mep~k(MXy*0l+S6w=>i2f0 z7aG@cIme&HbiZ!`nMo%CYJ33msMuS4TW&zNz{kPf;o(Z^hG1P?_84;@EYn|HVG_ zPUAxNHz0q*BrD%(_E%p(J#I?HQIqJopz!D_z>gJQl6ao8^R| zYc>E=g-t~qOwtarY528Oo^k?&0CRmFHd(CoR;2wnGMPh}_{xmSc71cRGaN*%!0tZ! z)=9LgR3UbH)BMP*;n1=q5r_L-a0J5Q^)Ed3InmFzSh4E_>ymH&mAYK#`w zLuKvN3j(z-=B7Pt&Xbs#g6R#I+cHi~P0b_P;sgxr@8MEK|EXeDOWBI`@7S23q>yIK zHoxfwm3S6u<|gmMk#F{5V7Pn;Vc~}yf{p@pFWSzZrMkW^b-SB?88awsD&veQjK_IM zQ2Crtd4Uwd&B-}edv5F;7v7K*78YJIYxsK4JXJRqauw-fvz$hTZ6|IQFxfYtO@EQ{!G|<8QPXGJ;HmK z{y`LTfM+d(`B|HvyEMQ6eTlrQ)8G9+z-gY&FJd* zn*@zX0~akQ3^v!rsZPY6D5j{VibXmht&o+2$0N;$Z%884D(Hqj9d4Bg^cZA4;Smyw z`Y=RaD$sh;24!{I9Ad~64}A8}s+uPsWxyyIlck*W%?vb(xOoY_IqqYL+M;RFMaW9z z&JD9^g#`_37xBk<*-y9rrPZsr)6lM(e?TEWk{=;^+zJ$^%Pl5nVaJs0?>V)|s4`07 zRmE+}oI2izRP_wX*4jrdjAz_YKjvBjmv9xj?UcxEpAR_0>W`#55ic1ioTuYR$5Yxn zM>9nLI=@~F!&8!^`#%9DSDK=K)i2P}b4Jk3zoke^Pbch&g1DcoBQx8qWJ^{>lDkq{ zW4eJJt-**h-z|-IjM43SFKm_N?_6ggV6TIS=r=6Bu)TC;bZd<@h5HKzSt*wN^%H_rI29vUwm0vJ=xR6 zRx!zx*zmb3QiRHgw>Cnnbvo>DL|(4647EmVlI#>wVsHpFPD1lhRgtF>d)>{j_nSAt zzD{i1-eAnG%7>Oi(2_qiO4|D|<6*@A-9D1KCndFqR>oOTi(PnGEM7^Z2uN&$(w1RhN#sL+N{W<*x z29joyhR%~P3dHi%`*jICj57X&rS~3qBphDjM0x8z$<=VU=wC$AMc>CkA!$qP2|<0= zyhDGcJaH_6hx>>-&t*QB{WU`G{mqSQ?Y8Ru#8ZY5T}K>=&M8-a7U4v-p>4Z)H>nJ! z?y>)RoE~wY+J};B@$fpFU%pHe51S%MFX8ok@-x65aokOfsz~nCLR{Htn^|>J)+sIk z3%8`>DF-UjiRP7(?vJ=#GeO)+X57R44KB_RKlThMNLPz#$;o0*6&nTy^8OTP1t#73 zPv&X0>l<$brxWeTcWY+gZM4`yTchL`^)GYZ@|>;4t(r%xk~<_?FdwDuc5cbl-O0XC zE69ORw#l)cwg}&aEe`<)vlv5g1&y8nmRjn)IL`~+F59y z`CO@}{YJHMN7Xm&zEN=*p}p=m5;TR=MqV3ItkH(++*J#`{=3h2#=_>TND2`Hj`7uH zYm(gR_dCksO~(4L=b)bDGfkheaLw88mfSTB-;=-$Sc@Ym{#JjR8IX*7E{^OF^&AKZ zdh_JYaeR}nzVjv!l=|!O!MhlNoyj;-M<^IrYfR2;1W%eJdp^6g>_%^A`@l3om4+E_ zaoWHwS742+%5xaB`sXru$B%%*@rpoBz znIsKFkh(O}Ez0u6Hk&+;d4bV)7=gcOXm1nIntNH(iOJAK+isvd1ca~p3P+dx^F&CI z7GW`e3=s8>Qro1Anv5>`C5sCDopnOE6R#e~$ih$_nZ63d6`-uFlv1vH-MD1=a+x}5 zqiZm$cPXjRo;kl%El}29Y)Nn|5OY2wU;lamXJM!8xuzz$dX^YcBmOd6Mi1PdD@tsDP|6~0sfvCN#sS654!O-%vCswi3kjZ)6b95F-G`Yl{o97cENl%JUv z9xpT5k+ibf987GCV3%bwjkklce-T-OR&8G%(-RQ{zFmbI5|a5}A~b9IbKd*TW2@=X z!Wc=Wk8cHM#9qMnpZZZJrE8yX8Dhw%vT>=fA1pok43tVB_0QAlt!VW`rb70NmD8{K z!tI#_be*%4r=1ZGTqCx>0cfZB3GYQj7met)JtIY#B{AZw3UW3DTR~HkwZA08V&i&g zH(|W3E7h?U{~Zr$D-w697t8T0{BRMu zlA<{(9TqN3<*e4sQEFF^EzC@ogiKzhbba9lu!gO>i@EiK8w6D(Sf@m$yDwzQ6ahJRl`> z&FoX9la=v0@^{9fcfCVwJ@@5$zPlE7m!Z%x+)6Q2(R!_V+}}DdpbF!Mg%mIElm+rW z^N{xc%m32nbU516h`=J7!vNA1zWt^3bU{%hfa5n&heLSE$sEfgrcB(VP;bwbD+YO@ zFoAj(G;uJ@(=Jb%pQ7Q*Rj}L}V^eVk&{M7~1RXK?FWIEoGQ$dTKbGE@@Aee7BYy8y zJkm?eSemYdn%2m{wMJ=+l=R$h&Y2(4Rachi+r5$|x7wXxI0?R?GRj|H6?p&ljdySN zu@!RV(AVAaD@kbCM*lb(7L32E>(RI+cwZp&PUMPErImf@g5HB}Ck+|bB=-3EFblN} zF^!a=fWrfx`{e7f+lmZ}lo9%#u+ZlYgXscC19P>Ax>Y7mUdj=_qmir2%T%pfq^g>l z^<5~z(bd+cn>BXOvNS1q=kWk-%t&J4aa|p*YcD5e&SiE9CQ3uPM&sqDf0wm2yYe0L z?BtpCT(%-f2f__U4}p2uz{|^Nd?xv8zfUdV&ykbN(7!KoVm*LVCiO?^}8eu+qEc=Gmm0g-w(jPj`6nmO;ewkT<9&34l# z2`Tppw5A9MQ2o$B-MCxdQqjHRX0|J_6j>4G8Ih(5R92jYlr9|I9C;4t zpmPrw?^ula??oDwnLjZAG_gUtPiki@03P0SJPC{vnd+CYlQ$DH3w*g0Is68`;r|O zNnc{sLk#YX>h8vCh?K?XYMI>KM>ou?Y`YItS z>RqNU7vx_H1~a#olmHR-qDhT^3|PiB5)MYZTxw+!e>I2C zxfB3^3B-hlB^g%t=y)&qa?cNZe%5u~D;1ichNkpciJ-Hh+tp0V$WRl7%)~R3VgLLv z5!>FHL8{gQM?^59C8x48ti=kvJQqZ9GnOC&qjmedZPD-R#%8DfojhgMs;KNcl}Rgt zu-5f;_;f+vZ~JN#hOe2oY_2EbTD#@C-fVoD`u^GDBBzI{%km?%3+@L2j;p`(PYm_+JLV7i*u5=B$<--Ft}D8oo7qW~MpM@z@e^hb-7kNll@#BN^&f2RvO5t3(h*-3bJ zuXZUw_hX$Fp&HKA$rr zE$59z)*#(PG=uf7Bdi@6%)sFk>=#E`cc{ORfcF^W{%LF0}1AX}gd#h+gT0Xx5# z@wC*oP1Bx?5SHr7u%1SOQY2ewaxNSn*$uNODs@ssTmc$HtF5_zZ`ah*XSKme5B#F8 zNM5y5t#VcJ*Bz0~)Xsh=epNut04kW#ra9fRDc>|v)0El0&%xt91#iH02fTzV-g(Kd zegIpD$dNWzZ$0b<14^g!?3d?Hs4Un-I!4?C!wERU@Hn14#&3XYbp zXmggJrNHtl>(ThApa)}G9De=1l|+Y^@yB~WN%;Ea#0D`?5;ybs__1Yj3Z;$UT^g90D5I)U&AuFAgak%XcNillZ ztVZ`%#;zkSfk@^1p!IEXL31GdW0#EmWrZU_1y1mg2URK{ByfiDOxZ%x_Ai@bHjcEImF( zudSmD%p}8d+74yUc`4Y?B3No&j4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wp-content-pilot/assets/images/wp-content-pilot-image.jpg b/wp-content-pilot/assets/images/wp-content-pilot-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea2d0506df2a2d853f49f088aacaa5842296b1f2 GIT binary patch literal 61787 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�A9Tycg?21e$MK{nT^g76?{?Exit0$uWjD1B3h30 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 literal 0 HcmV?d00001 diff --git a/wp-content-pilot/assets/js/wp-content-pilot.js b/wp-content-pilot/assets/js/wp-content-pilot.js new file mode 100644 index 0000000..0a9c8ba --- /dev/null +++ b/wp-content-pilot/assets/js/wp-content-pilot.js @@ -0,0 +1,218 @@ +/** + * WP Content Pilot Admin + * https://www.pluginever.com + * + * Copyright (c) 2019 pluginever + * Licensed under the GPLv2+ license. + */ + +/*jslint browser: true */ +/*global jQuery:false */ +/*global confirm:false */ +/*global wpcp_logger_offset:false */ +/*global wp_content_pilot_i10n:false */ +jQuery(document).ready(function ($) { + 'use strict'; + $.wp_content_pilot = { + + init: function () { + $('.wpcp-tooltip').tipTip({ + 'attribute': 'data-tip', + 'fadeIn': 50, + 'fadeOut': 50, + 'delay': 200 + }); + $('.wpcp-range-slider').ionRangeSlider({ + skin: 'round' + }); + + $('.wpcp-select2').select2({ + theme: 'default wpcp-select2' + }); + //position log metabox + $('#wpcp-campaign-log').insertAfter($('#wpcp-campaign-status')); + }, + hideKeywordField: function () { + var keywordInput = $('#_keywords'); + var suggestionInput = $('#_keyword_suggestion'); + var keywordWrapper = keywordInput.closest('p._keywords-field'); + var suggestionWrapper = suggestionInput.closest('p._keyword_suggestion-field'); + keywordInput.attr('disabled', 'disabled'); + suggestionInput.attr('disabled', 'disabled'); + keywordWrapper.hide(); + suggestionWrapper.hide(); + }, + showKeywordField: function () { + var keywordInput = $('#_keywords'); + var suggestionInput = $('#_keyword_suggestion'); + var keywordWrapper = keywordInput.closest('p._keywords-field'); + var suggestionWrapper = suggestionInput.closest('p._keyword_suggestion-field'); + keywordInput.removeAttr('disabled'); + suggestionInput.removeAttr('disabled'); + keywordWrapper.show(); + suggestionWrapper.show(); + }, + youtube: function () { + $('#_youtube_search_type').on('change', function () { + var channnelField = $('._youtube_playlist_id-field'); + if ('global' === $(this).val()) { + channnelField.hide(); + $.wp_content_pilot.showKeywordField(); + } else { + channnelField.show(); + $.wp_content_pilot.hideKeywordField(); + } + }).change(); + }, + deleteCampaignPosts: function (e) { + e.preventDefault(); + + if (!confirm('Are you sure?')) { + return; + } + + var $el = $(this), + spinner = $(this).next(), + camp_id = $el.data('campid'), + nonce = $el.data('nonce'); + + $el.attr('disabled', true); + spinner.addClass('active'); + $el.attr('disabled', true); + spinner.addClass('active'); + + wp.ajax.send({ + data: { + action: 'wpcp_delete_all_campaign_posts', + camp_id: camp_id, + nonce: nonce + }, + success: function () { + spinner.removeClass('active'); + $el.attr('disabled', false); + spinner.removeClass('active'); + $el.attr('disabled', false); + window.location.reload(); + }, + error: function (error) { + $el.attr('disabled', false); + console.log(error); + } + }); + }, + clearLogs: function (e) { + e.preventDefault(); + + if (!confirm('Are you sure?')) { + return; + } + + var $el = $(this), + nonce = $el.data('nonce'); + wp.ajax.send({ + data: { + action: 'wpcp_clear_logs', + nonce: nonce + }, + success: function () { + $el.attr('disabled', false); + window.location.reload(); + }, + error: function (error) { + $el.attr('disabled', false); + console.log(error); + } + }); + }, + handle_manual_campaign: function (e) { + e.preventDefault(); + var $button = $(this); + $button.hide(); + $button.prev('.spinner').show().addClass('is-active'); + $button.attr('disabled', 'disabled'); + var $metabox = $('#wpcp-campaign-log'); + var $log_list = $metabox.find('.wpcp-campaign-log-list'); + var campaign_id = parseInt($button.attr('data-campaign_id'), 10); + var instance = parseInt($button.attr('data-instance'), 10); + var link_wrapper = $('.wpcp-last-article-link'); + var request, logger; + window.wpcp_interval; + window.wpcp_logger_offset = 0; + window.wpcp_run_instance = instance; + $log_list.html(''); + + $metabox.fadeIn('slow'); + + request = wp.ajax.post('wpcp_run_manual_campaign', { + 'nonce': wp_content_pilot_i10n.nonce, + 'campaign_id': campaign_id, + 'instance': instance + }); + + window.wpcp_interval = setInterval(function () { + logger = wp.ajax.post('wpcp_get_campaign_instance_log', { + 'nonce': wp_content_pilot_i10n.nonce, + 'campaign_id': campaign_id, + 'instance': instance, + 'offset': wpcp_logger_offset + }); + + logger.always(function (logs) { + window.wpcp_logger_offset += logs.length; + if (logs.length) { + logs.forEach(function (log) { + $log_list.append(build_log_line(log)); + }); + $log_list.scrollTop($log_list.height()); + } + }); + + if (!window.wpcp_run_instance) { + clearInterval(window.wpcp_interval); + window.wpcp_logger_offset = 0; + } + + }, 500); + + request.always(function (response) { + $button.removeAttr('disabled'); + $button.prev('.spinner').hide(); + $button.show(); + $button.attr('data-instance', Math.floor(Date.now() / 1000)); + $log_list.append(build_log_line(response)); + if (response.link) { + link_wrapper.find('a').remove(); + link_wrapper.append(response.link); + link_wrapper.find('a').addClass('wpcp-blink'); + } + + delete window.wpcp_run_instance; + }); + + function build_log_line(data) { + if (!data.message) { + return ''; + } + return $('

').addClass(data.level).html('[' + data.time + '] - ' + data.message + ''); + } + + }, + polylang: function () { + var polylang_language_code_field = $('._polylang_language_code-field'); + $('#_enable_polylang').on('change', function() { + if ( true === $(this).prop('checked') ) { + polylang_language_code_field.show(); + } else { + polylang_language_code_field.hide(); + } + }).change(); + } + + }; + $.wp_content_pilot.init(); + $.wp_content_pilot.youtube(); + $('#wpcp-delete-campaign-posts').on('click', $.wp_content_pilot.deleteCampaignPosts); + $('#wpcp-clear-logs').on('click', $.wp_content_pilot.clearLogs); + $('#wpcp-run-campaign').on('click', $.wp_content_pilot.handle_manual_campaign); + $.wp_content_pilot.polylang(); +}); diff --git a/wp-content-pilot/assets/js/wp-content-pilot.min.js b/wp-content-pilot/assets/js/wp-content-pilot.min.js new file mode 100644 index 0000000..8b269e3 --- /dev/null +++ b/wp-content-pilot/assets/js/wp-content-pilot.min.js @@ -0,0 +1 @@ +jQuery(document).ready(function(l){"use strict";l.wp_content_pilot={init:function(){l(".wpcp-tooltip").tipTip({attribute:"data-tip",fadeIn:50,fadeOut:50,delay:200}),l(".wpcp-range-slider").ionRangeSlider({skin:"round"}),l(".wpcp-select2").select2({theme:"default wpcp-select2"}),l("#wpcp-campaign-log").insertAfter(l("#wpcp-campaign-status"))},hideKeywordField:function(){var e=l("#_keywords"),n=l("#_keyword_suggestion"),t=e.closest("p._keywords-field"),a=n.closest("p._keyword_suggestion-field");e.attr("disabled","disabled"),n.attr("disabled","disabled"),t.hide(),a.hide()},showKeywordField:function(){var e=l("#_keywords"),n=l("#_keyword_suggestion"),t=e.closest("p._keywords-field"),a=n.closest("p._keyword_suggestion-field");e.removeAttr("disabled"),n.removeAttr("disabled"),t.show(),a.show()},youtube:function(){l("#_youtube_search_type").on("change",function(){var e=l("._youtube_playlist_id-field");"global"===l(this).val()?(e.hide(),l.wp_content_pilot.showKeywordField()):(e.show(),l.wp_content_pilot.hideKeywordField())}).change()},deleteCampaignPosts:function(e){var n,t,a;e.preventDefault(),confirm("Are you sure?")&&(n=l(this),t=l(this).next(),a=n.data("campid"),e=n.data("nonce"),n.attr("disabled",!0),t.addClass("active"),n.attr("disabled",!0),t.addClass("active"),wp.ajax.send({data:{action:"wpcp_delete_all_campaign_posts",camp_id:a,nonce:e},success:function(){t.removeClass("active"),n.attr("disabled",!1),t.removeClass("active"),n.attr("disabled",!1),window.location.reload()},error:function(e){n.attr("disabled",!1),console.log(e)}}))},clearLogs:function(e){var n;e.preventDefault(),confirm("Are you sure?")&&(e=(n=l(this)).data("nonce"),wp.ajax.send({data:{action:"wpcp_clear_logs",nonce:e},success:function(){n.attr("disabled",!1),window.location.reload()},error:function(e){n.attr("disabled",!1),console.log(e)}}))},handle_manual_campaign:function(e){e.preventDefault();var n=l(this);n.hide(),n.prev(".spinner").show().addClass("is-active"),n.attr("disabled","disabled");var e=l("#wpcp-campaign-log"),t=e.find(".wpcp-campaign-log-list"),a=parseInt(n.attr("data-campaign_id"),10),o=parseInt(n.attr("data-instance"),10),i=l(".wpcp-last-article-link");function c(e){return e.message?l("

").addClass(e.level).html("["+e.time+"] - "+e.message):""}window.wpcp_interval,window.wpcp_logger_offset=0,window.wpcp_run_instance=o,t.html(""),e.fadeIn("slow"),e=wp.ajax.post("wpcp_run_manual_campaign",{nonce:wp_content_pilot_i10n.nonce,campaign_id:a,instance:o}),window.wpcp_interval=setInterval(function(){wp.ajax.post("wpcp_get_campaign_instance_log",{nonce:wp_content_pilot_i10n.nonce,campaign_id:a,instance:o,offset:wpcp_logger_offset}).always(function(e){window.wpcp_logger_offset+=e.length,e.length&&(e.forEach(function(e){t.append(c(e))}),t.scrollTop(t.height()))}),window.wpcp_run_instance||(clearInterval(window.wpcp_interval),window.wpcp_logger_offset=0)},500),e.always(function(e){n.removeAttr("disabled"),n.prev(".spinner").hide(),n.show(),n.attr("data-instance",Math.floor(Date.now()/1e3)),t.append(c(e)),e.link&&(i.find("a").remove(),i.append(e.link),i.find("a").addClass("wpcp-blink")),delete window.wpcp_run_instance})},polylang:function(){var e=l("._polylang_language_code-field");l("#_enable_polylang").on("change",function(){!0===l(this).prop("checked")?e.show():e.hide()}).change()}},l.wp_content_pilot.init(),l.wp_content_pilot.youtube(),l("#wpcp-delete-campaign-posts").on("click",l.wp_content_pilot.deleteCampaignPosts),l("#wpcp-clear-logs").on("click",l.wp_content_pilot.clearLogs),l("#wpcp-run-campaign").on("click",l.wp_content_pilot.handle_manual_campaign),l.wp_content_pilot.polylang()}); \ No newline at end of file diff --git a/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.css b/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.css new file mode 100755 index 0000000..1b6860b --- /dev/null +++ b/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.css @@ -0,0 +1,675 @@ +/** +Ion.RangeSlider, 2.3.1 +© Denis Ineshin, 2010 - 2019, IonDen.com +Build date: 2019-12-19 16:51:02 +*/ +.irs { + position: relative; + display: block; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 12px; + font-family: Arial, sans-serif; +} +.irs-line { + position: relative; + display: block; + overflow: hidden; + outline: none !important; +} +.irs-bar { + position: absolute; + display: block; + left: 0; + width: 0; +} +.irs-shadow { + position: absolute; + display: none; + left: 0; + width: 0; +} +.irs-handle { + position: absolute; + display: block; + box-sizing: border-box; + cursor: default; + z-index: 1; +} +.irs-handle.type_last { + z-index: 2; +} +.irs-min, +.irs-max { + position: absolute; + display: block; + cursor: default; +} +.irs-min { + left: 0; +} +.irs-max { + right: 0; +} +.irs-from, +.irs-to, +.irs-single { + position: absolute; + display: block; + top: 0; + left: 0; + cursor: default; + white-space: nowrap; +} +.irs-grid { + position: absolute; + display: none; + bottom: 0; + left: 0; + width: 100%; + height: 20px; +} +.irs-with-grid .irs-grid { + display: block; +} +.irs-grid-pol { + position: absolute; + top: 0; + left: 0; + width: 1px; + height: 8px; + background: #000; +} +.irs-grid-pol.small { + height: 4px; +} +.irs-grid-text { + position: absolute; + bottom: 0; + left: 0; + white-space: nowrap; + text-align: center; + font-size: 9px; + line-height: 9px; + padding: 0 3px; + color: #000; +} +.irs-disable-mask { + position: absolute; + display: block; + top: 0; + left: -1%; + width: 102%; + height: 100%; + cursor: default; + background: rgba(0, 0, 0, 0); + z-index: 2; +} +.lt-ie9 .irs-disable-mask { + background: #000; + filter: alpha(opacity=0); + cursor: not-allowed; +} +.irs-disabled { + opacity: 0.4; +} +.irs-hidden-input { + position: absolute !important; + display: block !important; + top: 0 !important; + left: 0 !important; + width: 0 !important; + height: 0 !important; + font-size: 0 !important; + line-height: 0 !important; + padding: 0 !important; + margin: 0 !important; + overflow: hidden; + outline: none !important; + z-index: -9999 !important; + background: none !important; + border-style: solid !important; + border-color: transparent !important; +} +.irs--flat { + height: 40px; +} +.irs--flat.irs-with-grid { + height: 60px; +} +.irs--flat .irs-line { + top: 25px; + height: 12px; + background-color: #e1e4e9; + border-radius: 4px; +} +.irs--flat .irs-bar { + top: 25px; + height: 12px; + background-color: #ed5565; +} +.irs--flat .irs-bar--single { + border-radius: 4px 0 0 4px; +} +.irs--flat .irs-shadow { + height: 1px; + bottom: 16px; + background-color: #e1e4e9; +} +.irs--flat .irs-handle { + top: 22px; + width: 16px; + height: 18px; + background-color: transparent; +} +.irs--flat .irs-handle > i:first-child { + position: absolute; + display: block; + top: 0; + left: 50%; + width: 2px; + height: 100%; + margin-left: -1px; + background-color: #da4453; +} +.irs--flat .irs-handle.state_hover > i:first-child, +.irs--flat .irs-handle:hover > i:first-child { + background-color: #a43540; +} +.irs--flat .irs-min, +.irs--flat .irs-max { + top: 0; + padding: 1px 3px; + color: #999; + font-size: 10px; + line-height: 1.333; + text-shadow: none; + background-color: #e1e4e9; + border-radius: 4px; +} +.irs--flat .irs-from, +.irs--flat .irs-to, +.irs--flat .irs-single { + color: white; + font-size: 10px; + line-height: 1.333; + text-shadow: none; + padding: 1px 5px; + background-color: #ed5565; + border-radius: 4px; +} +.irs--flat .irs-from:before, +.irs--flat .irs-to:before, +.irs--flat .irs-single:before { + position: absolute; + display: block; + content: ""; + bottom: -6px; + left: 50%; + width: 0; + height: 0; + margin-left: -3px; + overflow: hidden; + border: 3px solid transparent; + border-top-color: #ed5565; +} +.irs--flat .irs-grid-pol { + background-color: #e1e4e9; +} +.irs--flat .irs-grid-text { + color: #999; +} +.irs--big { + height: 55px; +} +.irs--big.irs-with-grid { + height: 70px; +} +.irs--big .irs-line { + top: 33px; + height: 12px; + background-color: white; + background: linear-gradient(to bottom, #ddd -50%, white 150%); + border: 1px solid #ccc; + border-radius: 12px; +} +.irs--big .irs-bar { + top: 33px; + height: 12px; + background-color: #92bce0; + border: 1px solid #428bca; + background: linear-gradient(to bottom, #ffffff 0%, #428bca 30%, #b9d4ec 100%); + box-shadow: inset 0 0 1px 1px rgba(255, 255, 255, 0.5); +} +.irs--big .irs-bar--single { + border-radius: 12px 0 0 12px; +} +.irs--big .irs-shadow { + height: 1px; + bottom: 16px; + background-color: rgba(66, 139, 202, 0.5); +} +.irs--big .irs-handle { + top: 25px; + width: 30px; + height: 30px; + border: 1px solid rgba(0, 0, 0, 0.3); + background-color: #cbcfd5; + background: linear-gradient(to bottom, white 0%, #B4B9BE 30%, white 100%); + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2), inset 0 0 3px 1px white; + border-radius: 30px; +} +.irs--big .irs-handle.state_hover, +.irs--big .irs-handle:hover { + border-color: rgba(0, 0, 0, 0.45); + background-color: #939ba7; + background: linear-gradient(to bottom, white 0%, #919BA5 30%, white 100%); +} +.irs--big .irs-min, +.irs--big .irs-max { + top: 0; + padding: 1px 5px; + color: white; + text-shadow: none; + background-color: #9f9f9f; + border-radius: 3px; +} +.irs--big .irs-from, +.irs--big .irs-to, +.irs--big .irs-single { + color: white; + text-shadow: none; + padding: 1px 5px; + background-color: #428bca; + background: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); + border-radius: 3px; +} +.irs--big .irs-grid-pol { + background-color: #428bca; +} +.irs--big .irs-grid-text { + color: #428bca; +} +.irs--modern { + height: 55px; +} +.irs--modern.irs-with-grid { + height: 55px; +} +.irs--modern .irs-line { + top: 25px; + height: 5px; + background-color: #d1d6e0; + background: linear-gradient(to bottom, #e0e4ea 0%, #d1d6e0 100%); + border: 1px solid #a3adc1; + border-bottom-width: 0; + border-radius: 5px; +} +.irs--modern .irs-bar { + top: 25px; + height: 5px; + background: #20b426; + background: linear-gradient(to bottom, #20b426 0%, #18891d 100%); +} +.irs--modern .irs-bar--single { + border-radius: 5px 0 0 5px; +} +.irs--modern .irs-shadow { + height: 1px; + bottom: 21px; + background-color: rgba(209, 214, 224, 0.5); +} +.irs--modern .irs-handle { + top: 37px; + width: 12px; + height: 13px; + border: 1px solid #a3adc1; + border-top-width: 0; + box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 0 0 3px 3px; +} +.irs--modern .irs-handle > i:nth-child(1) { + position: absolute; + display: block; + top: -4px; + left: 1px; + width: 6px; + height: 6px; + border: 1px solid #a3adc1; + background: white; + transform: rotate(45deg); +} +.irs--modern .irs-handle > i:nth-child(2) { + position: absolute; + display: block; + box-sizing: border-box; + top: 0; + left: 0; + width: 10px; + height: 12px; + background: #e9e6e6; + background: linear-gradient(to bottom, white 0%, #e9e6e6 100%); + border-radius: 0 0 3px 3px; +} +.irs--modern .irs-handle > i:nth-child(3) { + position: absolute; + display: block; + box-sizing: border-box; + top: 3px; + left: 3px; + width: 4px; + height: 5px; + border-left: 1px solid #a3adc1; + border-right: 1px solid #a3adc1; +} +.irs--modern .irs-handle.state_hover, +.irs--modern .irs-handle:hover { + border-color: #7685a2; + background: #c3c7cd; + background: linear-gradient(to bottom, #ffffff 0%, #919ba5 30%, #ffffff 100%); +} +.irs--modern .irs-handle.state_hover > i:nth-child(1), +.irs--modern .irs-handle:hover > i:nth-child(1) { + border-color: #7685a2; +} +.irs--modern .irs-handle.state_hover > i:nth-child(3), +.irs--modern .irs-handle:hover > i:nth-child(3) { + border-color: #48536a; +} +.irs--modern .irs-min, +.irs--modern .irs-max { + top: 0; + font-size: 10px; + line-height: 1.333; + text-shadow: none; + padding: 1px 5px; + color: white; + background-color: #d1d6e0; + border-radius: 5px; +} +.irs--modern .irs-from, +.irs--modern .irs-to, +.irs--modern .irs-single { + font-size: 10px; + line-height: 1.333; + text-shadow: none; + padding: 1px 5px; + background-color: #20b426; + color: white; + border-radius: 5px; +} +.irs--modern .irs-from:before, +.irs--modern .irs-to:before, +.irs--modern .irs-single:before { + position: absolute; + display: block; + content: ""; + bottom: -6px; + left: 50%; + width: 0; + height: 0; + margin-left: -3px; + overflow: hidden; + border: 3px solid transparent; + border-top-color: #20b426; +} +.irs--modern .irs-grid { + height: 25px; +} +.irs--modern .irs-grid-pol { + background-color: #dedede; +} +.irs--modern .irs-grid-text { + color: silver; + font-size: 13px; +} +.irs--sharp { + height: 50px; + font-size: 12px; + line-height: 1; +} +.irs--sharp.irs-with-grid { + height: 57px; +} +.irs--sharp .irs-line { + top: 30px; + height: 2px; + background-color: black; + border-radius: 2px; +} +.irs--sharp .irs-bar { + top: 30px; + height: 2px; + background-color: #ee22fa; +} +.irs--sharp .irs-bar--single { + border-radius: 2px 0 0 2px; +} +.irs--sharp .irs-shadow { + height: 1px; + bottom: 21px; + background-color: rgba(0, 0, 0, 0.5); +} +.irs--sharp .irs-handle { + top: 25px; + width: 10px; + height: 10px; + background-color: #a804b2; +} +.irs--sharp .irs-handle > i:first-child { + position: absolute; + display: block; + top: 100%; + left: 0; + width: 0; + height: 0; + border: 5px solid transparent; + border-top-color: #a804b2; +} +.irs--sharp .irs-handle.state_hover, +.irs--sharp .irs-handle:hover { + background-color: black; +} +.irs--sharp .irs-handle.state_hover > i:first-child, +.irs--sharp .irs-handle:hover > i:first-child { + border-top-color: black; +} +.irs--sharp .irs-min, +.irs--sharp .irs-max { + color: white; + font-size: 14px; + line-height: 1; + top: 0; + padding: 3px 4px; + opacity: 0.4; + background-color: #a804b2; + border-radius: 2px; +} +.irs--sharp .irs-from, +.irs--sharp .irs-to, +.irs--sharp .irs-single { + font-size: 14px; + line-height: 1; + text-shadow: none; + padding: 3px 4px; + background-color: #a804b2; + color: white; + border-radius: 2px; +} +.irs--sharp .irs-from:before, +.irs--sharp .irs-to:before, +.irs--sharp .irs-single:before { + position: absolute; + display: block; + content: ""; + bottom: -6px; + left: 50%; + width: 0; + height: 0; + margin-left: -3px; + overflow: hidden; + border: 3px solid transparent; + border-top-color: #a804b2; +} +.irs--sharp .irs-grid { + height: 25px; +} +.irs--sharp .irs-grid-pol { + background-color: #dedede; +} +.irs--sharp .irs-grid-text { + color: silver; + font-size: 13px; +} +.irs--round { + height: 50px; +} +.irs--round.irs-with-grid { + height: 65px; +} +.irs--round .irs-line { + top: 36px; + height: 4px; + background-color: #dee4ec; + border-radius: 4px; +} +.irs--round .irs-bar { + top: 36px; + height: 4px; + background-color: #007cba; +} +.irs--round .irs-bar--single { + border-radius: 4px 0 0 4px; +} +.irs--round .irs-shadow { + height: 4px; + bottom: 21px; + background-color: rgba(222, 228, 236, 0.5); +} +.irs--round .irs-handle { + top: 26px; + width: 24px; + height: 24px; + border: 4px solid #007cba; + background-color: white; + border-radius: 24px; + box-shadow: 0 1px 3px rgba(0, 0, 255, 0.3); +} +.irs--round .irs-handle.state_hover, +.irs--round .irs-handle:hover { + background-color: #f0f6ff; +} +.irs--round .irs-min, +.irs--round .irs-max { + color: #333; + font-size: 14px; + line-height: 1; + top: 0; + padding: 3px 5px; + background-color: rgba(0, 0, 0, 0.1); + border-radius: 4px; +} +.irs--round .irs-from, +.irs--round .irs-to, +.irs--round .irs-single { + font-size: 14px; + line-height: 1; + text-shadow: none; + padding: 3px 5px; + background-color: #007cba; + color: white; + border-radius: 4px; +} +.irs--round .irs-from:before, +.irs--round .irs-to:before, +.irs--round .irs-single:before { + position: absolute; + display: block; + content: ""; + bottom: -6px; + left: 50%; + width: 0; + height: 0; + margin-left: -3px; + overflow: hidden; + border: 3px solid transparent; + border-top-color: #007cba; +} +.irs--round .irs-grid { + height: 25px; +} +.irs--round .irs-grid-pol { + background-color: #dedede; +} +.irs--round .irs-grid-text { + color: silver; + font-size: 13px; +} +.irs--square { + height: 50px; +} +.irs--square.irs-with-grid { + height: 60px; +} +.irs--square .irs-line { + top: 31px; + height: 4px; + background-color: #dedede; +} +.irs--square .irs-bar { + top: 31px; + height: 4px; + background-color: black; +} +.irs--square .irs-shadow { + height: 2px; + bottom: 21px; + background-color: #dedede; +} +.irs--square .irs-handle { + top: 25px; + width: 16px; + height: 16px; + border: 3px solid black; + background-color: white; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} +.irs--square .irs-handle.state_hover, +.irs--square .irs-handle:hover { + background-color: #f0f6ff; +} +.irs--square .irs-min, +.irs--square .irs-max { + color: #333; + font-size: 14px; + line-height: 1; + top: 0; + padding: 3px 5px; + background-color: rgba(0, 0, 0, 0.1); +} +.irs--square .irs-from, +.irs--square .irs-to, +.irs--square .irs-single { + font-size: 14px; + line-height: 1; + text-shadow: none; + padding: 3px 5px; + background-color: black; + color: white; +} +.irs--square .irs-grid { + height: 25px; +} +.irs--square .irs-grid-pol { + background-color: #dedede; +} +.irs--square .irs-grid-text { + color: silver; + font-size: 11px; +} diff --git a/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.js b/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.js new file mode 100755 index 0000000..3427e7a --- /dev/null +++ b/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.js @@ -0,0 +1,2449 @@ +// Ion.RangeSlider +// version 2.3.1 Build: 382 +// © Denis Ineshin, 2019 +// https://github.com/IonDen +// +// Project page: http://ionden.com/a/plugins/ion.rangeSlider/en.html +// GitHub page: https://github.com/IonDen/ion.rangeSlider +// +// Released under MIT licence: +// http://ionden.com/a/plugins/licence-en.html +// ===================================================================================================================== + +;(function(factory) { + if ((typeof jQuery === 'undefined' || !jQuery) && typeof define === "function" && define.amd) { + define(["jquery"], function (jQuery) { + return factory(jQuery, document, window, navigator); + }); + } else if ((typeof jQuery === 'undefined' || !jQuery) && typeof exports === "object") { + factory(require("jquery"), document, window, navigator); + } else { + factory(jQuery, document, window, navigator); + } +} (function ($, document, window, navigator, undefined) { + "use strict"; + + // ================================================================================================================= + // Service + + var plugin_count = 0; + + // IE8 fix + var is_old_ie = (function () { + var n = navigator.userAgent, + r = /msie\s\d+/i, + v; + if (n.search(r) > 0) { + v = r.exec(n).toString(); + v = v.split(" ")[1]; + if (v < 9) { + $("html").addClass("lt-ie9"); + return true; + } + } + return false; + } ()); + if (!Function.prototype.bind) { + Function.prototype.bind = function bind(that) { + + var target = this; + var slice = [].slice; + + if (typeof target != "function") { + throw new TypeError(); + } + + var args = slice.call(arguments, 1), + bound = function () { + + if (this instanceof bound) { + + var F = function(){}; + F.prototype = target.prototype; + var self = new F(); + + var result = target.apply( + self, + args.concat(slice.call(arguments)) + ); + if (Object(result) === result) { + return result; + } + return self; + + } else { + + return target.apply( + that, + args.concat(slice.call(arguments)) + ); + + } + + }; + + return bound; + }; + } + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function(searchElement, fromIndex) { + var k; + if (this == null) { + throw new TypeError('"this" is null or not defined'); + } + var O = Object(this); + var len = O.length >>> 0; + if (len === 0) { + return -1; + } + var n = +fromIndex || 0; + if (Math.abs(n) === Infinity) { + n = 0; + } + if (n >= len) { + return -1; + } + k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + while (k < len) { + if (k in O && O[k] === searchElement) { + return k; + } + k++; + } + return -1; + }; + } + + + + // ================================================================================================================= + // Template + + var base_html = + '' + + '' + + '01' + + '000' + + '' + + ''; + + var single_html = + '' + + '' + + ''; + + var double_html = + '' + + '' + + '' + + '' + + ''; + + var disable_html = + ''; + + + + // ================================================================================================================= + // Core + + /** + * Main plugin constructor + * + * @param input {Object} link to base input element + * @param options {Object} slider config + * @param plugin_count {Number} + * @constructor + */ + var IonRangeSlider = function (input, options, plugin_count) { + this.VERSION = "2.3.1"; + this.input = input; + this.plugin_count = plugin_count; + this.current_plugin = 0; + this.calc_count = 0; + this.update_tm = 0; + this.old_from = 0; + this.old_to = 0; + this.old_min_interval = null; + this.raf_id = null; + this.dragging = false; + this.force_redraw = false; + this.no_diapason = false; + this.has_tab_index = true; + this.is_key = false; + this.is_update = false; + this.is_start = true; + this.is_finish = false; + this.is_active = false; + this.is_resize = false; + this.is_click = false; + + options = options || {}; + + // cache for links to all DOM elements + this.$cache = { + win: $(window), + body: $(document.body), + input: $(input), + cont: null, + rs: null, + min: null, + max: null, + from: null, + to: null, + single: null, + bar: null, + line: null, + s_single: null, + s_from: null, + s_to: null, + shad_single: null, + shad_from: null, + shad_to: null, + edge: null, + grid: null, + grid_labels: [] + }; + + // storage for measure variables + this.coords = { + // left + x_gap: 0, + x_pointer: 0, + + // width + w_rs: 0, + w_rs_old: 0, + w_handle: 0, + + // percents + p_gap: 0, + p_gap_left: 0, + p_gap_right: 0, + p_step: 0, + p_pointer: 0, + p_handle: 0, + p_single_fake: 0, + p_single_real: 0, + p_from_fake: 0, + p_from_real: 0, + p_to_fake: 0, + p_to_real: 0, + p_bar_x: 0, + p_bar_w: 0, + + // grid + grid_gap: 0, + big_num: 0, + big: [], + big_w: [], + big_p: [], + big_x: [] + }; + + // storage for labels measure variables + this.labels = { + // width + w_min: 0, + w_max: 0, + w_from: 0, + w_to: 0, + w_single: 0, + + // percents + p_min: 0, + p_max: 0, + p_from_fake: 0, + p_from_left: 0, + p_to_fake: 0, + p_to_left: 0, + p_single_fake: 0, + p_single_left: 0 + }; + + + + /** + * get and validate config + */ + var $inp = this.$cache.input, + val = $inp.prop("value"), + config, config_from_data, prop; + + // default config + config = { + skin: "flat", + type: "single", + + min: 10, + max: 100, + from: null, + to: null, + step: 1, + + min_interval: 0, + max_interval: 0, + drag_interval: false, + + values: [], + p_values: [], + + from_fixed: false, + from_min: null, + from_max: null, + from_shadow: false, + + to_fixed: false, + to_min: null, + to_max: null, + to_shadow: false, + + prettify_enabled: true, + prettify_separator: " ", + prettify: null, + + force_edges: false, + + keyboard: true, + + grid: false, + grid_margin: true, + grid_num: 4, + grid_snap: false, + + hide_min_max: false, + hide_from_to: false, + + prefix: "", + postfix: "", + max_postfix: "", + decorate_both: true, + values_separator: " — ", + + input_values_separator: ";", + + disable: false, + block: false, + + extra_classes: "", + + scope: null, + onStart: null, + onChange: null, + onFinish: null, + onUpdate: null + }; + + + // check if base element is input + if ($inp[0].nodeName !== "INPUT") { + console && console.warn && console.warn("Base element should be !", $inp[0]); + } + + + // config from data-attributes extends js config + config_from_data = { + skin: $inp.data("skin"), + type: $inp.data("type"), + + min: $inp.data("min"), + max: $inp.data("max"), + from: $inp.data("from"), + to: $inp.data("to"), + step: $inp.data("step"), + + min_interval: $inp.data("minInterval"), + max_interval: $inp.data("maxInterval"), + drag_interval: $inp.data("dragInterval"), + + values: $inp.data("values"), + + from_fixed: $inp.data("fromFixed"), + from_min: $inp.data("fromMin"), + from_max: $inp.data("fromMax"), + from_shadow: $inp.data("fromShadow"), + + to_fixed: $inp.data("toFixed"), + to_min: $inp.data("toMin"), + to_max: $inp.data("toMax"), + to_shadow: $inp.data("toShadow"), + + prettify_enabled: $inp.data("prettifyEnabled"), + prettify_separator: $inp.data("prettifySeparator"), + + force_edges: $inp.data("forceEdges"), + + keyboard: $inp.data("keyboard"), + + grid: $inp.data("grid"), + grid_margin: $inp.data("gridMargin"), + grid_num: $inp.data("gridNum"), + grid_snap: $inp.data("gridSnap"), + + hide_min_max: $inp.data("hideMinMax"), + hide_from_to: $inp.data("hideFromTo"), + + prefix: $inp.data("prefix"), + postfix: $inp.data("postfix"), + max_postfix: $inp.data("maxPostfix"), + decorate_both: $inp.data("decorateBoth"), + values_separator: $inp.data("valuesSeparator"), + + input_values_separator: $inp.data("inputValuesSeparator"), + + disable: $inp.data("disable"), + block: $inp.data("block"), + + extra_classes: $inp.data("extraClasses"), + }; + config_from_data.values = config_from_data.values && config_from_data.values.split(","); + + for (prop in config_from_data) { + if (config_from_data.hasOwnProperty(prop)) { + if (config_from_data[prop] === undefined || config_from_data[prop] === "") { + delete config_from_data[prop]; + } + } + } + + + // input value extends default config + if (val !== undefined && val !== "") { + val = val.split(config_from_data.input_values_separator || options.input_values_separator || ";"); + + if (val[0] && val[0] == +val[0]) { + val[0] = +val[0]; + } + if (val[1] && val[1] == +val[1]) { + val[1] = +val[1]; + } + + if (options && options.values && options.values.length) { + config.from = val[0] && options.values.indexOf(val[0]); + config.to = val[1] && options.values.indexOf(val[1]); + } else { + config.from = val[0] && +val[0]; + config.to = val[1] && +val[1]; + } + } + + + + // js config extends default config + $.extend(config, options); + + + // data config extends config + $.extend(config, config_from_data); + this.options = config; + + + + // validate config, to be sure that all data types are correct + this.update_check = {}; + this.validate(); + + + + // default result object, returned to callbacks + this.result = { + input: this.$cache.input, + slider: null, + + min: this.options.min, + max: this.options.max, + + from: this.options.from, + from_percent: 0, + from_value: null, + + to: this.options.to, + to_percent: 0, + to_value: null + }; + + + + this.init(); + }; + + IonRangeSlider.prototype = { + + /** + * Starts or updates the plugin instance + * + * @param [is_update] {boolean} + */ + init: function (is_update) { + this.no_diapason = false; + this.coords.p_step = this.convertToPercent(this.options.step, true); + + this.target = "base"; + + this.toggleInput(); + this.append(); + this.setMinMax(); + + if (is_update) { + this.force_redraw = true; + this.calc(true); + + // callbacks called + this.callOnUpdate(); + } else { + this.force_redraw = true; + this.calc(true); + + // callbacks called + this.callOnStart(); + } + + this.updateScene(); + }, + + /** + * Appends slider template to a DOM + */ + append: function () { + var container_html = ''; + this.$cache.input.before(container_html); + this.$cache.input.prop("readonly", true); + this.$cache.cont = this.$cache.input.prev(); + this.result.slider = this.$cache.cont; + + this.$cache.cont.html(base_html); + this.$cache.rs = this.$cache.cont.find(".irs"); + this.$cache.min = this.$cache.cont.find(".irs-min"); + this.$cache.max = this.$cache.cont.find(".irs-max"); + this.$cache.from = this.$cache.cont.find(".irs-from"); + this.$cache.to = this.$cache.cont.find(".irs-to"); + this.$cache.single = this.$cache.cont.find(".irs-single"); + this.$cache.line = this.$cache.cont.find(".irs-line"); + this.$cache.grid = this.$cache.cont.find(".irs-grid"); + + if (this.options.type === "single") { + this.$cache.cont.append(single_html); + this.$cache.bar = this.$cache.cont.find(".irs-bar"); + this.$cache.edge = this.$cache.cont.find(".irs-bar-edge"); + this.$cache.s_single = this.$cache.cont.find(".single"); + this.$cache.from[0].style.visibility = "hidden"; + this.$cache.to[0].style.visibility = "hidden"; + this.$cache.shad_single = this.$cache.cont.find(".shadow-single"); + } else { + this.$cache.cont.append(double_html); + this.$cache.bar = this.$cache.cont.find(".irs-bar"); + this.$cache.s_from = this.$cache.cont.find(".from"); + this.$cache.s_to = this.$cache.cont.find(".to"); + this.$cache.shad_from = this.$cache.cont.find(".shadow-from"); + this.$cache.shad_to = this.$cache.cont.find(".shadow-to"); + + this.setTopHandler(); + } + + if (this.options.hide_from_to) { + this.$cache.from[0].style.display = "none"; + this.$cache.to[0].style.display = "none"; + this.$cache.single[0].style.display = "none"; + } + + this.appendGrid(); + + if (this.options.disable) { + this.appendDisableMask(); + this.$cache.input[0].disabled = true; + } else { + this.$cache.input[0].disabled = false; + this.removeDisableMask(); + this.bindEvents(); + } + + // block only if not disabled + if (!this.options.disable) { + if (this.options.block) { + this.appendDisableMask(); + } else { + this.removeDisableMask(); + } + } + + if (this.options.drag_interval) { + this.$cache.bar[0].style.cursor = "ew-resize"; + } + }, + + /** + * Determine which handler has a priority + * works only for double slider type + */ + setTopHandler: function () { + var min = this.options.min, + max = this.options.max, + from = this.options.from, + to = this.options.to; + + if (from > min && to === max) { + this.$cache.s_from.addClass("type_last"); + } else if (to < max) { + this.$cache.s_to.addClass("type_last"); + } + }, + + /** + * Determine which handles was clicked last + * and which handler should have hover effect + * + * @param target {String} + */ + changeLevel: function (target) { + switch (target) { + case "single": + this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_single_fake); + this.$cache.s_single.addClass("state_hover"); + break; + case "from": + this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake); + this.$cache.s_from.addClass("state_hover"); + this.$cache.s_from.addClass("type_last"); + this.$cache.s_to.removeClass("type_last"); + break; + case "to": + this.coords.p_gap = this.toFixed(this.coords.p_pointer - this.coords.p_to_fake); + this.$cache.s_to.addClass("state_hover"); + this.$cache.s_to.addClass("type_last"); + this.$cache.s_from.removeClass("type_last"); + break; + case "both": + this.coords.p_gap_left = this.toFixed(this.coords.p_pointer - this.coords.p_from_fake); + this.coords.p_gap_right = this.toFixed(this.coords.p_to_fake - this.coords.p_pointer); + this.$cache.s_to.removeClass("type_last"); + this.$cache.s_from.removeClass("type_last"); + break; + } + }, + + /** + * Then slider is disabled + * appends extra layer with opacity + */ + appendDisableMask: function () { + this.$cache.cont.append(disable_html); + this.$cache.cont.addClass("irs-disabled"); + }, + + /** + * Then slider is not disabled + * remove disable mask + */ + removeDisableMask: function () { + this.$cache.cont.remove(".irs-disable-mask"); + this.$cache.cont.removeClass("irs-disabled"); + }, + + /** + * Remove slider instance + * and unbind all events + */ + remove: function () { + this.$cache.cont.remove(); + this.$cache.cont = null; + + this.$cache.line.off("keydown.irs_" + this.plugin_count); + + this.$cache.body.off("touchmove.irs_" + this.plugin_count); + this.$cache.body.off("mousemove.irs_" + this.plugin_count); + + this.$cache.win.off("touchend.irs_" + this.plugin_count); + this.$cache.win.off("mouseup.irs_" + this.plugin_count); + + if (is_old_ie) { + this.$cache.body.off("mouseup.irs_" + this.plugin_count); + this.$cache.body.off("mouseleave.irs_" + this.plugin_count); + } + + this.$cache.grid_labels = []; + this.coords.big = []; + this.coords.big_w = []; + this.coords.big_p = []; + this.coords.big_x = []; + + cancelAnimationFrame(this.raf_id); + }, + + /** + * bind all slider events + */ + bindEvents: function () { + if (this.no_diapason) { + return; + } + + this.$cache.body.on("touchmove.irs_" + this.plugin_count, this.pointerMove.bind(this)); + this.$cache.body.on("mousemove.irs_" + this.plugin_count, this.pointerMove.bind(this)); + + this.$cache.win.on("touchend.irs_" + this.plugin_count, this.pointerUp.bind(this)); + this.$cache.win.on("mouseup.irs_" + this.plugin_count, this.pointerUp.bind(this)); + + this.$cache.line.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.line.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + + this.$cache.line.on("focus.irs_" + this.plugin_count, this.pointerFocus.bind(this)); + + if (this.options.drag_interval && this.options.type === "double") { + this.$cache.bar.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "both")); + this.$cache.bar.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "both")); + } else { + this.$cache.bar.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.bar.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + } + + if (this.options.type === "single") { + this.$cache.single.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "single")); + this.$cache.s_single.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "single")); + this.$cache.shad_single.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + + this.$cache.single.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "single")); + this.$cache.s_single.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "single")); + this.$cache.edge.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.shad_single.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + } else { + this.$cache.single.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, null)); + this.$cache.single.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, null)); + + this.$cache.from.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "from")); + this.$cache.s_from.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "from")); + this.$cache.to.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "to")); + this.$cache.s_to.on("touchstart.irs_" + this.plugin_count, this.pointerDown.bind(this, "to")); + this.$cache.shad_from.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.shad_to.on("touchstart.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + + this.$cache.from.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "from")); + this.$cache.s_from.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "from")); + this.$cache.to.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "to")); + this.$cache.s_to.on("mousedown.irs_" + this.plugin_count, this.pointerDown.bind(this, "to")); + this.$cache.shad_from.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + this.$cache.shad_to.on("mousedown.irs_" + this.plugin_count, this.pointerClick.bind(this, "click")); + } + + if (this.options.keyboard) { + this.$cache.line.on("keydown.irs_" + this.plugin_count, this.key.bind(this, "keyboard")); + } + + if (is_old_ie) { + this.$cache.body.on("mouseup.irs_" + this.plugin_count, this.pointerUp.bind(this)); + this.$cache.body.on("mouseleave.irs_" + this.plugin_count, this.pointerUp.bind(this)); + } + }, + + /** + * Focus with tabIndex + * + * @param e {Object} event object + */ + pointerFocus: function (e) { + if (!this.target) { + var x; + var $handle; + + if (this.options.type === "single") { + $handle = this.$cache.single; + } else { + $handle = this.$cache.from; + } + + x = $handle.offset().left; + x += ($handle.width() / 2) - 1; + + this.pointerClick("single", {preventDefault: function () {}, pageX: x}); + } + }, + + /** + * Mousemove or touchmove + * only for handlers + * + * @param e {Object} event object + */ + pointerMove: function (e) { + if (!this.dragging) { + return; + } + + var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX; + this.coords.x_pointer = x - this.coords.x_gap; + + this.calc(); + }, + + /** + * Mouseup or touchend + * only for handlers + * + * @param e {Object} event object + */ + pointerUp: function (e) { + if (this.current_plugin !== this.plugin_count) { + return; + } + + if (this.is_active) { + this.is_active = false; + } else { + return; + } + + this.$cache.cont.find(".state_hover").removeClass("state_hover"); + + this.force_redraw = true; + + if (is_old_ie) { + $("*").prop("unselectable", false); + } + + this.updateScene(); + this.restoreOriginalMinInterval(); + + // callbacks call + if ($.contains(this.$cache.cont[0], e.target) || this.dragging) { + this.callOnFinish(); + } + + this.dragging = false; + }, + + /** + * Mousedown or touchstart + * only for handlers + * + * @param target {String|null} + * @param e {Object} event object + */ + pointerDown: function (target, e) { + e.preventDefault(); + var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX; + if (e.button === 2) { + return; + } + + if (target === "both") { + this.setTempMinInterval(); + } + + if (!target) { + target = this.target || "from"; + } + + this.current_plugin = this.plugin_count; + this.target = target; + + this.is_active = true; + this.dragging = true; + + this.coords.x_gap = this.$cache.rs.offset().left; + this.coords.x_pointer = x - this.coords.x_gap; + + this.calcPointerPercent(); + this.changeLevel(target); + + if (is_old_ie) { + $("*").prop("unselectable", true); + } + + this.$cache.line.trigger("focus"); + + this.updateScene(); + }, + + /** + * Mousedown or touchstart + * for other slider elements, like diapason line + * + * @param target {String} + * @param e {Object} event object + */ + pointerClick: function (target, e) { + e.preventDefault(); + var x = e.pageX || e.originalEvent.touches && e.originalEvent.touches[0].pageX; + if (e.button === 2) { + return; + } + + this.current_plugin = this.plugin_count; + this.target = target; + + this.is_click = true; + this.coords.x_gap = this.$cache.rs.offset().left; + this.coords.x_pointer = +(x - this.coords.x_gap).toFixed(); + + this.force_redraw = true; + this.calc(); + + this.$cache.line.trigger("focus"); + }, + + /** + * Keyborard controls for focused slider + * + * @param target {String} + * @param e {Object} event object + * @returns {boolean|undefined} + */ + key: function (target, e) { + if (this.current_plugin !== this.plugin_count || e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) { + return; + } + + switch (e.which) { + case 83: // W + case 65: // A + case 40: // DOWN + case 37: // LEFT + e.preventDefault(); + this.moveByKey(false); + break; + + case 87: // S + case 68: // D + case 38: // UP + case 39: // RIGHT + e.preventDefault(); + this.moveByKey(true); + break; + } + + return true; + }, + + /** + * Move by key + * + * @param right {boolean} direction to move + */ + moveByKey: function (right) { + var p = this.coords.p_pointer; + var p_step = (this.options.max - this.options.min) / 100; + p_step = this.options.step / p_step; + + if (right) { + p += p_step; + } else { + p -= p_step; + } + + this.coords.x_pointer = this.toFixed(this.coords.w_rs / 100 * p); + this.is_key = true; + this.calc(); + }, + + /** + * Set visibility and content + * of Min and Max labels + */ + setMinMax: function () { + if (!this.options) { + return; + } + + if (this.options.hide_min_max) { + this.$cache.min[0].style.display = "none"; + this.$cache.max[0].style.display = "none"; + return; + } + + if (this.options.values.length) { + this.$cache.min.html(this.decorate(this.options.p_values[this.options.min])); + this.$cache.max.html(this.decorate(this.options.p_values[this.options.max])); + } else { + var min_pretty = this._prettify(this.options.min); + var max_pretty = this._prettify(this.options.max); + + this.result.min_pretty = min_pretty; + this.result.max_pretty = max_pretty; + + this.$cache.min.html(this.decorate(min_pretty, this.options.min)); + this.$cache.max.html(this.decorate(max_pretty, this.options.max)); + } + + this.labels.w_min = this.$cache.min.outerWidth(false); + this.labels.w_max = this.$cache.max.outerWidth(false); + }, + + /** + * Then dragging interval, prevent interval collapsing + * using min_interval option + */ + setTempMinInterval: function () { + var interval = this.result.to - this.result.from; + + if (this.old_min_interval === null) { + this.old_min_interval = this.options.min_interval; + } + + this.options.min_interval = interval; + }, + + /** + * Restore min_interval option to original + */ + restoreOriginalMinInterval: function () { + if (this.old_min_interval !== null) { + this.options.min_interval = this.old_min_interval; + this.old_min_interval = null; + } + }, + + + + // ============================================================================================================= + // Calculations + + /** + * All calculations and measures start here + * + * @param update {boolean=} + */ + calc: function (update) { + if (!this.options) { + return; + } + + this.calc_count++; + + if (this.calc_count === 10 || update) { + this.calc_count = 0; + this.coords.w_rs = this.$cache.rs.outerWidth(false); + + this.calcHandlePercent(); + } + + if (!this.coords.w_rs) { + return; + } + + this.calcPointerPercent(); + var handle_x = this.getHandleX(); + + + if (this.target === "both") { + this.coords.p_gap = 0; + handle_x = this.getHandleX(); + } + + if (this.target === "click") { + this.coords.p_gap = this.coords.p_handle / 2; + handle_x = this.getHandleX(); + + if (this.options.drag_interval) { + this.target = "both_one"; + } else { + this.target = this.chooseHandle(handle_x); + } + } + + switch (this.target) { + case "base": + var w = (this.options.max - this.options.min) / 100, + f = (this.result.from - this.options.min) / w, + t = (this.result.to - this.options.min) / w; + + this.coords.p_single_real = this.toFixed(f); + this.coords.p_from_real = this.toFixed(f); + this.coords.p_to_real = this.toFixed(t); + + this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max); + this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max); + this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max); + + this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real); + this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real); + this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real); + + this.target = null; + + break; + + case "single": + if (this.options.from_fixed) { + break; + } + + this.coords.p_single_real = this.convertToRealPercent(handle_x); + this.coords.p_single_real = this.calcWithStep(this.coords.p_single_real); + this.coords.p_single_real = this.checkDiapason(this.coords.p_single_real, this.options.from_min, this.options.from_max); + + this.coords.p_single_fake = this.convertToFakePercent(this.coords.p_single_real); + + break; + + case "from": + if (this.options.from_fixed) { + break; + } + + this.coords.p_from_real = this.convertToRealPercent(handle_x); + this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real); + if (this.coords.p_from_real > this.coords.p_to_real) { + this.coords.p_from_real = this.coords.p_to_real; + } + this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max); + this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, "from"); + this.coords.p_from_real = this.checkMaxInterval(this.coords.p_from_real, this.coords.p_to_real, "from"); + + this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real); + + break; + + case "to": + if (this.options.to_fixed) { + break; + } + + this.coords.p_to_real = this.convertToRealPercent(handle_x); + this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real); + if (this.coords.p_to_real < this.coords.p_from_real) { + this.coords.p_to_real = this.coords.p_from_real; + } + this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max); + this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, "to"); + this.coords.p_to_real = this.checkMaxInterval(this.coords.p_to_real, this.coords.p_from_real, "to"); + + this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real); + + break; + + case "both": + if (this.options.from_fixed || this.options.to_fixed) { + break; + } + + handle_x = this.toFixed(handle_x + (this.coords.p_handle * 0.001)); + + this.coords.p_from_real = this.convertToRealPercent(handle_x) - this.coords.p_gap_left; + this.coords.p_from_real = this.calcWithStep(this.coords.p_from_real); + this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max); + this.coords.p_from_real = this.checkMinInterval(this.coords.p_from_real, this.coords.p_to_real, "from"); + this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real); + + this.coords.p_to_real = this.convertToRealPercent(handle_x) + this.coords.p_gap_right; + this.coords.p_to_real = this.calcWithStep(this.coords.p_to_real); + this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max); + this.coords.p_to_real = this.checkMinInterval(this.coords.p_to_real, this.coords.p_from_real, "to"); + this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real); + + break; + + case "both_one": + if (this.options.from_fixed || this.options.to_fixed) { + break; + } + + var real_x = this.convertToRealPercent(handle_x), + from = this.result.from_percent, + to = this.result.to_percent, + full = to - from, + half = full / 2, + new_from = real_x - half, + new_to = real_x + half; + + if (new_from < 0) { + new_from = 0; + new_to = new_from + full; + } + + if (new_to > 100) { + new_to = 100; + new_from = new_to - full; + } + + this.coords.p_from_real = this.calcWithStep(new_from); + this.coords.p_from_real = this.checkDiapason(this.coords.p_from_real, this.options.from_min, this.options.from_max); + this.coords.p_from_fake = this.convertToFakePercent(this.coords.p_from_real); + + this.coords.p_to_real = this.calcWithStep(new_to); + this.coords.p_to_real = this.checkDiapason(this.coords.p_to_real, this.options.to_min, this.options.to_max); + this.coords.p_to_fake = this.convertToFakePercent(this.coords.p_to_real); + + break; + } + + if (this.options.type === "single") { + this.coords.p_bar_x = (this.coords.p_handle / 2); + this.coords.p_bar_w = this.coords.p_single_fake; + + this.result.from_percent = this.coords.p_single_real; + this.result.from = this.convertToValue(this.coords.p_single_real); + this.result.from_pretty = this._prettify(this.result.from); + + if (this.options.values.length) { + this.result.from_value = this.options.values[this.result.from]; + } + } else { + this.coords.p_bar_x = this.toFixed(this.coords.p_from_fake + (this.coords.p_handle / 2)); + this.coords.p_bar_w = this.toFixed(this.coords.p_to_fake - this.coords.p_from_fake); + + this.result.from_percent = this.coords.p_from_real; + this.result.from = this.convertToValue(this.coords.p_from_real); + this.result.from_pretty = this._prettify(this.result.from); + this.result.to_percent = this.coords.p_to_real; + this.result.to = this.convertToValue(this.coords.p_to_real); + this.result.to_pretty = this._prettify(this.result.to); + + if (this.options.values.length) { + this.result.from_value = this.options.values[this.result.from]; + this.result.to_value = this.options.values[this.result.to]; + } + } + + this.calcMinMax(); + this.calcLabels(); + }, + + + /** + * calculates pointer X in percent + */ + calcPointerPercent: function () { + if (!this.coords.w_rs) { + this.coords.p_pointer = 0; + return; + } + + if (this.coords.x_pointer < 0 || isNaN(this.coords.x_pointer) ) { + this.coords.x_pointer = 0; + } else if (this.coords.x_pointer > this.coords.w_rs) { + this.coords.x_pointer = this.coords.w_rs; + } + + this.coords.p_pointer = this.toFixed(this.coords.x_pointer / this.coords.w_rs * 100); + }, + + convertToRealPercent: function (fake) { + var full = 100 - this.coords.p_handle; + return fake / full * 100; + }, + + convertToFakePercent: function (real) { + var full = 100 - this.coords.p_handle; + return real / 100 * full; + }, + + getHandleX: function () { + var max = 100 - this.coords.p_handle, + x = this.toFixed(this.coords.p_pointer - this.coords.p_gap); + + if (x < 0) { + x = 0; + } else if (x > max) { + x = max; + } + + return x; + }, + + calcHandlePercent: function () { + if (this.options.type === "single") { + this.coords.w_handle = this.$cache.s_single.outerWidth(false); + } else { + this.coords.w_handle = this.$cache.s_from.outerWidth(false); + } + + this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100); + }, + + /** + * Find closest handle to pointer click + * + * @param real_x {Number} + * @returns {String} + */ + chooseHandle: function (real_x) { + if (this.options.type === "single") { + return "single"; + } else { + var m_point = this.coords.p_from_real + ((this.coords.p_to_real - this.coords.p_from_real) / 2); + if (real_x >= m_point) { + return this.options.to_fixed ? "from" : "to"; + } else { + return this.options.from_fixed ? "to" : "from"; + } + } + }, + + /** + * Measure Min and Max labels width in percent + */ + calcMinMax: function () { + if (!this.coords.w_rs) { + return; + } + + this.labels.p_min = this.labels.w_min / this.coords.w_rs * 100; + this.labels.p_max = this.labels.w_max / this.coords.w_rs * 100; + }, + + /** + * Measure labels width and X in percent + */ + calcLabels: function () { + if (!this.coords.w_rs || this.options.hide_from_to) { + return; + } + + if (this.options.type === "single") { + + this.labels.w_single = this.$cache.single.outerWidth(false); + this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100; + this.labels.p_single_left = this.coords.p_single_fake + (this.coords.p_handle / 2) - (this.labels.p_single_fake / 2); + this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake); + + } else { + + this.labels.w_from = this.$cache.from.outerWidth(false); + this.labels.p_from_fake = this.labels.w_from / this.coords.w_rs * 100; + this.labels.p_from_left = this.coords.p_from_fake + (this.coords.p_handle / 2) - (this.labels.p_from_fake / 2); + this.labels.p_from_left = this.toFixed(this.labels.p_from_left); + this.labels.p_from_left = this.checkEdges(this.labels.p_from_left, this.labels.p_from_fake); + + this.labels.w_to = this.$cache.to.outerWidth(false); + this.labels.p_to_fake = this.labels.w_to / this.coords.w_rs * 100; + this.labels.p_to_left = this.coords.p_to_fake + (this.coords.p_handle / 2) - (this.labels.p_to_fake / 2); + this.labels.p_to_left = this.toFixed(this.labels.p_to_left); + this.labels.p_to_left = this.checkEdges(this.labels.p_to_left, this.labels.p_to_fake); + + this.labels.w_single = this.$cache.single.outerWidth(false); + this.labels.p_single_fake = this.labels.w_single / this.coords.w_rs * 100; + this.labels.p_single_left = ((this.labels.p_from_left + this.labels.p_to_left + this.labels.p_to_fake) / 2) - (this.labels.p_single_fake / 2); + this.labels.p_single_left = this.toFixed(this.labels.p_single_left); + this.labels.p_single_left = this.checkEdges(this.labels.p_single_left, this.labels.p_single_fake); + + } + }, + + + + // ============================================================================================================= + // Drawings + + /** + * Main function called in request animation frame + * to update everything + */ + updateScene: function () { + if (this.raf_id) { + cancelAnimationFrame(this.raf_id); + this.raf_id = null; + } + + clearTimeout(this.update_tm); + this.update_tm = null; + + if (!this.options) { + return; + } + + this.drawHandles(); + + if (this.is_active) { + this.raf_id = requestAnimationFrame(this.updateScene.bind(this)); + } else { + this.update_tm = setTimeout(this.updateScene.bind(this), 300); + } + }, + + /** + * Draw handles + */ + drawHandles: function () { + this.coords.w_rs = this.$cache.rs.outerWidth(false); + + if (!this.coords.w_rs) { + return; + } + + if (this.coords.w_rs !== this.coords.w_rs_old) { + this.target = "base"; + this.is_resize = true; + } + + if (this.coords.w_rs !== this.coords.w_rs_old || this.force_redraw) { + this.setMinMax(); + this.calc(true); + this.drawLabels(); + if (this.options.grid) { + this.calcGridMargin(); + this.calcGridLabels(); + } + this.force_redraw = true; + this.coords.w_rs_old = this.coords.w_rs; + this.drawShadow(); + } + + if (!this.coords.w_rs) { + return; + } + + if (!this.dragging && !this.force_redraw && !this.is_key) { + return; + } + + if (this.old_from !== this.result.from || this.old_to !== this.result.to || this.force_redraw || this.is_key) { + + this.drawLabels(); + + this.$cache.bar[0].style.left = this.coords.p_bar_x + "%"; + this.$cache.bar[0].style.width = this.coords.p_bar_w + "%"; + + if (this.options.type === "single") { + this.$cache.bar[0].style.left = 0; + this.$cache.bar[0].style.width = this.coords.p_bar_w + this.coords.p_bar_x + "%"; + + this.$cache.s_single[0].style.left = this.coords.p_single_fake + "%"; + + this.$cache.single[0].style.left = this.labels.p_single_left + "%"; + } else { + this.$cache.s_from[0].style.left = this.coords.p_from_fake + "%"; + this.$cache.s_to[0].style.left = this.coords.p_to_fake + "%"; + + if (this.old_from !== this.result.from || this.force_redraw) { + this.$cache.from[0].style.left = this.labels.p_from_left + "%"; + } + if (this.old_to !== this.result.to || this.force_redraw) { + this.$cache.to[0].style.left = this.labels.p_to_left + "%"; + } + + this.$cache.single[0].style.left = this.labels.p_single_left + "%"; + } + + this.writeToInput(); + + if ((this.old_from !== this.result.from || this.old_to !== this.result.to) && !this.is_start) { + this.$cache.input.trigger("change"); + this.$cache.input.trigger("input"); + } + + this.old_from = this.result.from; + this.old_to = this.result.to; + + // callbacks call + if (!this.is_resize && !this.is_update && !this.is_start && !this.is_finish) { + this.callOnChange(); + } + if (this.is_key || this.is_click) { + this.is_key = false; + this.is_click = false; + this.callOnFinish(); + } + + this.is_update = false; + this.is_resize = false; + this.is_finish = false; + } + + this.is_start = false; + this.is_key = false; + this.is_click = false; + this.force_redraw = false; + }, + + /** + * Draw labels + * measure labels collisions + * collapse close labels + */ + drawLabels: function () { + if (!this.options) { + return; + } + + var values_num = this.options.values.length; + var p_values = this.options.p_values; + var text_single; + var text_from; + var text_to; + var from_pretty; + var to_pretty; + + if (this.options.hide_from_to) { + return; + } + + if (this.options.type === "single") { + + if (values_num) { + text_single = this.decorate(p_values[this.result.from]); + this.$cache.single.html(text_single); + } else { + from_pretty = this._prettify(this.result.from); + + text_single = this.decorate(from_pretty, this.result.from); + this.$cache.single.html(text_single); + } + + this.calcLabels(); + + if (this.labels.p_single_left < this.labels.p_min + 1) { + this.$cache.min[0].style.visibility = "hidden"; + } else { + this.$cache.min[0].style.visibility = "visible"; + } + + if (this.labels.p_single_left + this.labels.p_single_fake > 100 - this.labels.p_max - 1) { + this.$cache.max[0].style.visibility = "hidden"; + } else { + this.$cache.max[0].style.visibility = "visible"; + } + + } else { + + if (values_num) { + + if (this.options.decorate_both) { + text_single = this.decorate(p_values[this.result.from]); + text_single += this.options.values_separator; + text_single += this.decorate(p_values[this.result.to]); + } else { + text_single = this.decorate(p_values[this.result.from] + this.options.values_separator + p_values[this.result.to]); + } + text_from = this.decorate(p_values[this.result.from]); + text_to = this.decorate(p_values[this.result.to]); + + this.$cache.single.html(text_single); + this.$cache.from.html(text_from); + this.$cache.to.html(text_to); + + } else { + from_pretty = this._prettify(this.result.from); + to_pretty = this._prettify(this.result.to); + + if (this.options.decorate_both) { + text_single = this.decorate(from_pretty, this.result.from); + text_single += this.options.values_separator; + text_single += this.decorate(to_pretty, this.result.to); + } else { + text_single = this.decorate(from_pretty + this.options.values_separator + to_pretty, this.result.to); + } + text_from = this.decorate(from_pretty, this.result.from); + text_to = this.decorate(to_pretty, this.result.to); + + this.$cache.single.html(text_single); + this.$cache.from.html(text_from); + this.$cache.to.html(text_to); + + } + + this.calcLabels(); + + var min = Math.min(this.labels.p_single_left, this.labels.p_from_left), + single_left = this.labels.p_single_left + this.labels.p_single_fake, + to_left = this.labels.p_to_left + this.labels.p_to_fake, + max = Math.max(single_left, to_left); + + if (this.labels.p_from_left + this.labels.p_from_fake >= this.labels.p_to_left) { + this.$cache.from[0].style.visibility = "hidden"; + this.$cache.to[0].style.visibility = "hidden"; + this.$cache.single[0].style.visibility = "visible"; + + if (this.result.from === this.result.to) { + if (this.target === "from") { + this.$cache.from[0].style.visibility = "visible"; + } else if (this.target === "to") { + this.$cache.to[0].style.visibility = "visible"; + } else if (!this.target) { + this.$cache.from[0].style.visibility = "visible"; + } + this.$cache.single[0].style.visibility = "hidden"; + max = to_left; + } else { + this.$cache.from[0].style.visibility = "hidden"; + this.$cache.to[0].style.visibility = "hidden"; + this.$cache.single[0].style.visibility = "visible"; + max = Math.max(single_left, to_left); + } + } else { + this.$cache.from[0].style.visibility = "visible"; + this.$cache.to[0].style.visibility = "visible"; + this.$cache.single[0].style.visibility = "hidden"; + } + + if (min < this.labels.p_min + 1) { + this.$cache.min[0].style.visibility = "hidden"; + } else { + this.$cache.min[0].style.visibility = "visible"; + } + + if (max > 100 - this.labels.p_max - 1) { + this.$cache.max[0].style.visibility = "hidden"; + } else { + this.$cache.max[0].style.visibility = "visible"; + } + + } + }, + + /** + * Draw shadow intervals + */ + drawShadow: function () { + var o = this.options, + c = this.$cache, + + is_from_min = typeof o.from_min === "number" && !isNaN(o.from_min), + is_from_max = typeof o.from_max === "number" && !isNaN(o.from_max), + is_to_min = typeof o.to_min === "number" && !isNaN(o.to_min), + is_to_max = typeof o.to_max === "number" && !isNaN(o.to_max), + + from_min, + from_max, + to_min, + to_max; + + if (o.type === "single") { + if (o.from_shadow && (is_from_min || is_from_max)) { + from_min = this.convertToPercent(is_from_min ? o.from_min : o.min); + from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min; + from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min)); + from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max)); + from_min = from_min + (this.coords.p_handle / 2); + + c.shad_single[0].style.display = "block"; + c.shad_single[0].style.left = from_min + "%"; + c.shad_single[0].style.width = from_max + "%"; + } else { + c.shad_single[0].style.display = "none"; + } + } else { + if (o.from_shadow && (is_from_min || is_from_max)) { + from_min = this.convertToPercent(is_from_min ? o.from_min : o.min); + from_max = this.convertToPercent(is_from_max ? o.from_max : o.max) - from_min; + from_min = this.toFixed(from_min - (this.coords.p_handle / 100 * from_min)); + from_max = this.toFixed(from_max - (this.coords.p_handle / 100 * from_max)); + from_min = from_min + (this.coords.p_handle / 2); + + c.shad_from[0].style.display = "block"; + c.shad_from[0].style.left = from_min + "%"; + c.shad_from[0].style.width = from_max + "%"; + } else { + c.shad_from[0].style.display = "none"; + } + + if (o.to_shadow && (is_to_min || is_to_max)) { + to_min = this.convertToPercent(is_to_min ? o.to_min : o.min); + to_max = this.convertToPercent(is_to_max ? o.to_max : o.max) - to_min; + to_min = this.toFixed(to_min - (this.coords.p_handle / 100 * to_min)); + to_max = this.toFixed(to_max - (this.coords.p_handle / 100 * to_max)); + to_min = to_min + (this.coords.p_handle / 2); + + c.shad_to[0].style.display = "block"; + c.shad_to[0].style.left = to_min + "%"; + c.shad_to[0].style.width = to_max + "%"; + } else { + c.shad_to[0].style.display = "none"; + } + } + }, + + + + /** + * Write values to input element + */ + writeToInput: function () { + if (this.options.type === "single") { + if (this.options.values.length) { + this.$cache.input.prop("value", this.result.from_value); + } else { + this.$cache.input.prop("value", this.result.from); + } + this.$cache.input.data("from", this.result.from); + } else { + if (this.options.values.length) { + this.$cache.input.prop("value", this.result.from_value + this.options.input_values_separator + this.result.to_value); + } else { + this.$cache.input.prop("value", this.result.from + this.options.input_values_separator + this.result.to); + } + this.$cache.input.data("from", this.result.from); + this.$cache.input.data("to", this.result.to); + } + }, + + + + // ============================================================================================================= + // Callbacks + + callOnStart: function () { + this.writeToInput(); + + if (this.options.onStart && typeof this.options.onStart === "function") { + if (this.options.scope) { + this.options.onStart.call(this.options.scope, this.result); + } else { + this.options.onStart(this.result); + } + } + }, + callOnChange: function () { + this.writeToInput(); + + if (this.options.onChange && typeof this.options.onChange === "function") { + if (this.options.scope) { + this.options.onChange.call(this.options.scope, this.result); + } else { + this.options.onChange(this.result); + } + } + }, + callOnFinish: function () { + this.writeToInput(); + + if (this.options.onFinish && typeof this.options.onFinish === "function") { + if (this.options.scope) { + this.options.onFinish.call(this.options.scope, this.result); + } else { + this.options.onFinish(this.result); + } + } + }, + callOnUpdate: function () { + this.writeToInput(); + + if (this.options.onUpdate && typeof this.options.onUpdate === "function") { + if (this.options.scope) { + this.options.onUpdate.call(this.options.scope, this.result); + } else { + this.options.onUpdate(this.result); + } + } + }, + + + + + // ============================================================================================================= + // Service methods + + toggleInput: function () { + this.$cache.input.toggleClass("irs-hidden-input"); + + if (this.has_tab_index) { + this.$cache.input.prop("tabindex", -1); + } else { + this.$cache.input.removeProp("tabindex"); + } + + this.has_tab_index = !this.has_tab_index; + }, + + /** + * Convert real value to percent + * + * @param value {Number} X in real + * @param no_min {boolean=} don't use min value + * @returns {Number} X in percent + */ + convertToPercent: function (value, no_min) { + var diapason = this.options.max - this.options.min, + one_percent = diapason / 100, + val, percent; + + if (!diapason) { + this.no_diapason = true; + return 0; + } + + if (no_min) { + val = value; + } else { + val = value - this.options.min; + } + + percent = val / one_percent; + + return this.toFixed(percent); + }, + + /** + * Convert percent to real values + * + * @param percent {Number} X in percent + * @returns {Number} X in real + */ + convertToValue: function (percent) { + var min = this.options.min, + max = this.options.max, + min_decimals = min.toString().split(".")[1], + max_decimals = max.toString().split(".")[1], + min_length, max_length, + avg_decimals = 0, + abs = 0; + + if (percent === 0) { + return this.options.min; + } + if (percent === 100) { + return this.options.max; + } + + + if (min_decimals) { + min_length = min_decimals.length; + avg_decimals = min_length; + } + if (max_decimals) { + max_length = max_decimals.length; + avg_decimals = max_length; + } + if (min_length && max_length) { + avg_decimals = (min_length >= max_length) ? min_length : max_length; + } + + if (min < 0) { + abs = Math.abs(min); + min = +(min + abs).toFixed(avg_decimals); + max = +(max + abs).toFixed(avg_decimals); + } + + var number = ((max - min) / 100 * percent) + min, + string = this.options.step.toString().split(".")[1], + result; + + if (string) { + number = +number.toFixed(string.length); + } else { + number = number / this.options.step; + number = number * this.options.step; + + number = +number.toFixed(0); + } + + if (abs) { + number -= abs; + } + + if (string) { + result = +number.toFixed(string.length); + } else { + result = this.toFixed(number); + } + + if (result < this.options.min) { + result = this.options.min; + } else if (result > this.options.max) { + result = this.options.max; + } + + return result; + }, + + /** + * Round percent value with step + * + * @param percent {Number} + * @returns percent {Number} rounded + */ + calcWithStep: function (percent) { + var rounded = Math.round(percent / this.coords.p_step) * this.coords.p_step; + + if (rounded > 100) { + rounded = 100; + } + if (percent === 100) { + rounded = 100; + } + + return this.toFixed(rounded); + }, + + checkMinInterval: function (p_current, p_next, type) { + var o = this.options, + current, + next; + + if (!o.min_interval) { + return p_current; + } + + current = this.convertToValue(p_current); + next = this.convertToValue(p_next); + + if (type === "from") { + + if (next - current < o.min_interval) { + current = next - o.min_interval; + } + + } else { + + if (current - next < o.min_interval) { + current = next + o.min_interval; + } + + } + + return this.convertToPercent(current); + }, + + checkMaxInterval: function (p_current, p_next, type) { + var o = this.options, + current, + next; + + if (!o.max_interval) { + return p_current; + } + + current = this.convertToValue(p_current); + next = this.convertToValue(p_next); + + if (type === "from") { + + if (next - current > o.max_interval) { + current = next - o.max_interval; + } + + } else { + + if (current - next > o.max_interval) { + current = next + o.max_interval; + } + + } + + return this.convertToPercent(current); + }, + + checkDiapason: function (p_num, min, max) { + var num = this.convertToValue(p_num), + o = this.options; + + if (typeof min !== "number") { + min = o.min; + } + + if (typeof max !== "number") { + max = o.max; + } + + if (num < min) { + num = min; + } + + if (num > max) { + num = max; + } + + return this.convertToPercent(num); + }, + + toFixed: function (num) { + num = num.toFixed(20); + return +num; + }, + + _prettify: function (num) { + if (!this.options.prettify_enabled) { + return num; + } + + if (this.options.prettify && typeof this.options.prettify === "function") { + return this.options.prettify(num); + } else { + return this.prettify(num); + } + }, + + prettify: function (num) { + var n = num.toString(); + return n.replace(/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/g, "$1" + this.options.prettify_separator); + }, + + checkEdges: function (left, width) { + if (!this.options.force_edges) { + return this.toFixed(left); + } + + if (left < 0) { + left = 0; + } else if (left > 100 - width) { + left = 100 - width; + } + + return this.toFixed(left); + }, + + validate: function () { + var o = this.options, + r = this.result, + v = o.values, + vl = v.length, + value, + i; + + if (typeof o.min === "string") o.min = +o.min; + if (typeof o.max === "string") o.max = +o.max; + if (typeof o.from === "string") o.from = +o.from; + if (typeof o.to === "string") o.to = +o.to; + if (typeof o.step === "string") o.step = +o.step; + + if (typeof o.from_min === "string") o.from_min = +o.from_min; + if (typeof o.from_max === "string") o.from_max = +o.from_max; + if (typeof o.to_min === "string") o.to_min = +o.to_min; + if (typeof o.to_max === "string") o.to_max = +o.to_max; + + if (typeof o.grid_num === "string") o.grid_num = +o.grid_num; + + if (o.max < o.min) { + o.max = o.min; + } + + if (vl) { + o.p_values = []; + o.min = 0; + o.max = vl - 1; + o.step = 1; + o.grid_num = o.max; + o.grid_snap = true; + + for (i = 0; i < vl; i++) { + value = +v[i]; + + if (!isNaN(value)) { + v[i] = value; + value = this._prettify(value); + } else { + value = v[i]; + } + + o.p_values.push(value); + } + } + + if (typeof o.from !== "number" || isNaN(o.from)) { + o.from = o.min; + } + + if (typeof o.to !== "number" || isNaN(o.to)) { + o.to = o.max; + } + + if (o.type === "single") { + + if (o.from < o.min) o.from = o.min; + if (o.from > o.max) o.from = o.max; + + } else { + + if (o.from < o.min) o.from = o.min; + if (o.from > o.max) o.from = o.max; + + if (o.to < o.min) o.to = o.min; + if (o.to > o.max) o.to = o.max; + + if (this.update_check.from) { + + if (this.update_check.from !== o.from) { + if (o.from > o.to) o.from = o.to; + } + if (this.update_check.to !== o.to) { + if (o.to < o.from) o.to = o.from; + } + + } + + if (o.from > o.to) o.from = o.to; + if (o.to < o.from) o.to = o.from; + + } + + if (typeof o.step !== "number" || isNaN(o.step) || !o.step || o.step < 0) { + o.step = 1; + } + + if (typeof o.from_min === "number" && o.from < o.from_min) { + o.from = o.from_min; + } + + if (typeof o.from_max === "number" && o.from > o.from_max) { + o.from = o.from_max; + } + + if (typeof o.to_min === "number" && o.to < o.to_min) { + o.to = o.to_min; + } + + if (typeof o.to_max === "number" && o.from > o.to_max) { + o.to = o.to_max; + } + + if (r) { + if (r.min !== o.min) { + r.min = o.min; + } + + if (r.max !== o.max) { + r.max = o.max; + } + + if (r.from < r.min || r.from > r.max) { + r.from = o.from; + } + + if (r.to < r.min || r.to > r.max) { + r.to = o.to; + } + } + + if (typeof o.min_interval !== "number" || isNaN(o.min_interval) || !o.min_interval || o.min_interval < 0) { + o.min_interval = 0; + } + + if (typeof o.max_interval !== "number" || isNaN(o.max_interval) || !o.max_interval || o.max_interval < 0) { + o.max_interval = 0; + } + + if (o.min_interval && o.min_interval > o.max - o.min) { + o.min_interval = o.max - o.min; + } + + if (o.max_interval && o.max_interval > o.max - o.min) { + o.max_interval = o.max - o.min; + } + }, + + decorate: function (num, original) { + var decorated = "", + o = this.options; + + if (o.prefix) { + decorated += o.prefix; + } + + decorated += num; + + if (o.max_postfix) { + if (o.values.length && num === o.p_values[o.max]) { + decorated += o.max_postfix; + if (o.postfix) { + decorated += " "; + } + } else if (original === o.max) { + decorated += o.max_postfix; + if (o.postfix) { + decorated += " "; + } + } + } + + if (o.postfix) { + decorated += o.postfix; + } + + return decorated; + }, + + updateFrom: function () { + this.result.from = this.options.from; + this.result.from_percent = this.convertToPercent(this.result.from); + this.result.from_pretty = this._prettify(this.result.from); + if (this.options.values) { + this.result.from_value = this.options.values[this.result.from]; + } + }, + + updateTo: function () { + this.result.to = this.options.to; + this.result.to_percent = this.convertToPercent(this.result.to); + this.result.to_pretty = this._prettify(this.result.to); + if (this.options.values) { + this.result.to_value = this.options.values[this.result.to]; + } + }, + + updateResult: function () { + this.result.min = this.options.min; + this.result.max = this.options.max; + this.updateFrom(); + this.updateTo(); + }, + + + // ============================================================================================================= + // Grid + + appendGrid: function () { + if (!this.options.grid) { + return; + } + + var o = this.options, + i, z, + + total = o.max - o.min, + big_num = o.grid_num, + big_p = 0, + big_w = 0, + + small_max = 4, + local_small_max, + small_p, + small_w = 0, + + result, + html = ''; + + + + this.calcGridMargin(); + + if (o.grid_snap) { + big_num = total / o.step; + } + + if (big_num > 50) big_num = 50; + big_p = this.toFixed(100 / big_num); + + if (big_num > 4) { + small_max = 3; + } + if (big_num > 7) { + small_max = 2; + } + if (big_num > 14) { + small_max = 1; + } + if (big_num > 28) { + small_max = 0; + } + + for (i = 0; i < big_num + 1; i++) { + local_small_max = small_max; + + big_w = this.toFixed(big_p * i); + + if (big_w > 100) { + big_w = 100; + } + this.coords.big[i] = big_w; + + small_p = (big_w - (big_p * (i - 1))) / (local_small_max + 1); + + for (z = 1; z <= local_small_max; z++) { + if (big_w === 0) { + break; + } + + small_w = this.toFixed(big_w - (small_p * z)); + + html += ''; + } + + html += ''; + + result = this.convertToValue(big_w); + if (o.values.length) { + result = o.p_values[result]; + } else { + result = this._prettify(result); + } + + html += '' + result + ''; + } + this.coords.big_num = Math.ceil(big_num + 1); + + + + this.$cache.cont.addClass("irs-with-grid"); + this.$cache.grid.html(html); + this.cacheGridLabels(); + }, + + cacheGridLabels: function () { + var $label, i, + num = this.coords.big_num; + + for (i = 0; i < num; i++) { + $label = this.$cache.grid.find(".js-grid-text-" + i); + this.$cache.grid_labels.push($label); + } + + this.calcGridLabels(); + }, + + calcGridLabels: function () { + var i, label, start = [], finish = [], + num = this.coords.big_num; + + for (i = 0; i < num; i++) { + this.coords.big_w[i] = this.$cache.grid_labels[i].outerWidth(false); + this.coords.big_p[i] = this.toFixed(this.coords.big_w[i] / this.coords.w_rs * 100); + this.coords.big_x[i] = this.toFixed(this.coords.big_p[i] / 2); + + start[i] = this.toFixed(this.coords.big[i] - this.coords.big_x[i]); + finish[i] = this.toFixed(start[i] + this.coords.big_p[i]); + } + + if (this.options.force_edges) { + if (start[0] < -this.coords.grid_gap) { + start[0] = -this.coords.grid_gap; + finish[0] = this.toFixed(start[0] + this.coords.big_p[0]); + + this.coords.big_x[0] = this.coords.grid_gap; + } + + if (finish[num - 1] > 100 + this.coords.grid_gap) { + finish[num - 1] = 100 + this.coords.grid_gap; + start[num - 1] = this.toFixed(finish[num - 1] - this.coords.big_p[num - 1]); + + this.coords.big_x[num - 1] = this.toFixed(this.coords.big_p[num - 1] - this.coords.grid_gap); + } + } + + this.calcGridCollision(2, start, finish); + this.calcGridCollision(4, start, finish); + + for (i = 0; i < num; i++) { + label = this.$cache.grid_labels[i][0]; + + if (this.coords.big_x[i] !== Number.POSITIVE_INFINITY) { + label.style.marginLeft = -this.coords.big_x[i] + "%"; + } + } + }, + + // Collisions Calc Beta + // TODO: Refactor then have plenty of time + calcGridCollision: function (step, start, finish) { + var i, next_i, label, + num = this.coords.big_num; + + for (i = 0; i < num; i += step) { + next_i = i + (step / 2); + if (next_i >= num) { + break; + } + + label = this.$cache.grid_labels[next_i][0]; + + if (finish[i] <= start[next_i]) { + label.style.visibility = "visible"; + } else { + label.style.visibility = "hidden"; + } + } + }, + + calcGridMargin: function () { + if (!this.options.grid_margin) { + return; + } + + this.coords.w_rs = this.$cache.rs.outerWidth(false); + if (!this.coords.w_rs) { + return; + } + + if (this.options.type === "single") { + this.coords.w_handle = this.$cache.s_single.outerWidth(false); + } else { + this.coords.w_handle = this.$cache.s_from.outerWidth(false); + } + this.coords.p_handle = this.toFixed(this.coords.w_handle / this.coords.w_rs * 100); + this.coords.grid_gap = this.toFixed((this.coords.p_handle / 2) - 0.1); + + this.$cache.grid[0].style.width = this.toFixed(100 - this.coords.p_handle) + "%"; + this.$cache.grid[0].style.left = this.coords.grid_gap + "%"; + }, + + + + // ============================================================================================================= + // Public methods + + update: function (options) { + if (!this.input) { + return; + } + + this.is_update = true; + + this.options.from = this.result.from; + this.options.to = this.result.to; + this.update_check.from = this.result.from; + this.update_check.to = this.result.to; + + this.options = $.extend(this.options, options); + this.validate(); + this.updateResult(options); + + this.toggleInput(); + this.remove(); + this.init(true); + }, + + reset: function () { + if (!this.input) { + return; + } + + this.updateResult(); + this.update(); + }, + + destroy: function () { + if (!this.input) { + return; + } + + this.toggleInput(); + this.$cache.input.prop("readonly", false); + $.data(this.input, "ionRangeSlider", null); + + this.remove(); + this.input = null; + this.options = null; + } + }; + + $.fn.ionRangeSlider = function (options) { + return this.each(function() { + if (!$.data(this, "ionRangeSlider")) { + $.data(this, "ionRangeSlider", new IonRangeSlider(this, options, plugin_count++)); + } + }); + }; + + + + // ================================================================================================================= + // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ + // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating + + // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel + + // MIT license + + (function() { + var lastTime = 0; + var vendors = ['ms', 'moz', 'webkit', 'o']; + for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] + || window[vendors[x]+'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function() { callback(currTime + timeToCall); }, + timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; + }()); + +})); diff --git a/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.min.css b/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.min.css new file mode 100755 index 0000000..8b34de1 --- /dev/null +++ b/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.min.css @@ -0,0 +1 @@ +/*!Ion.RangeSlider, 2.3.1, © Denis Ineshin, 2010 - 2019, IonDen.com, Build date: 2019-12-19 16:51:02*/.irs{position:relative;display:block;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:12px;font-family:Arial,sans-serif}.irs-line{position:relative;display:block;overflow:hidden;outline:none !important}.irs-bar{position:absolute;display:block;left:0;width:0}.irs-shadow{position:absolute;display:none;left:0;width:0}.irs-handle{position:absolute;display:block;box-sizing:border-box;cursor:default;z-index:1}.irs-handle.type_last{z-index:2}.irs-min,.irs-max{position:absolute;display:block;cursor:default}.irs-min{left:0}.irs-max{right:0}.irs-from,.irs-to,.irs-single{position:absolute;display:block;top:0;left:0;cursor:default;white-space:nowrap}.irs-grid{position:absolute;display:none;bottom:0;left:0;width:100%;height:20px}.irs-with-grid .irs-grid{display:block}.irs-grid-pol{position:absolute;top:0;left:0;width:1px;height:8px;background:#000}.irs-grid-pol.small{height:4px}.irs-grid-text{position:absolute;bottom:0;left:0;white-space:nowrap;text-align:center;font-size:9px;line-height:9px;padding:0 3px;color:#000}.irs-disable-mask{position:absolute;display:block;top:0;left:-1%;width:102%;height:100%;cursor:default;background:rgba(0,0,0,0);z-index:2}.lt-ie9 .irs-disable-mask{background:#000;filter:alpha(opacity=0);cursor:not-allowed}.irs-disabled{opacity:.4}.irs-hidden-input{position:absolute !important;display:block !important;top:0 !important;left:0 !important;width:0 !important;height:0 !important;font-size:0 !important;line-height:0 !important;padding:0 !important;margin:0 !important;overflow:hidden;outline:none !important;z-index:-9999 !important;background:none !important;border-style:solid !important;border-color:transparent !important}.irs--flat{height:40px}.irs--flat.irs-with-grid{height:60px}.irs--flat .irs-line{top:25px;height:12px;background-color:#e1e4e9;border-radius:4px}.irs--flat .irs-bar{top:25px;height:12px;background-color:#ed5565}.irs--flat .irs-bar--single{border-radius:4px 0 0 4px}.irs--flat .irs-shadow{height:1px;bottom:16px;background-color:#e1e4e9}.irs--flat .irs-handle{top:22px;width:16px;height:18px;background-color:transparent}.irs--flat .irs-handle>i:first-child{position:absolute;display:block;top:0;left:50%;width:2px;height:100%;margin-left:-1px;background-color:#da4453}.irs--flat .irs-handle.state_hover>i:first-child,.irs--flat .irs-handle:hover>i:first-child{background-color:#a43540}.irs--flat .irs-min,.irs--flat .irs-max{top:0;padding:1px 3px;color:#999;font-size:10px;line-height:1.333;text-shadow:none;background-color:#e1e4e9;border-radius:4px}.irs--flat .irs-from,.irs--flat .irs-to,.irs--flat .irs-single{color:white;font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;background-color:#ed5565;border-radius:4px}.irs--flat .irs-from:before,.irs--flat .irs-to:before,.irs--flat .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#ed5565}.irs--flat .irs-grid-pol{background-color:#e1e4e9}.irs--flat .irs-grid-text{color:#999}.irs--big{height:55px}.irs--big.irs-with-grid{height:70px}.irs--big .irs-line{top:33px;height:12px;background-color:white;background:linear-gradient(to bottom, #ddd -50%, white 150%);border:1px solid #ccc;border-radius:12px}.irs--big .irs-bar{top:33px;height:12px;background-color:#92bce0;border:1px solid #428bca;background:linear-gradient(to bottom, #ffffff 0%, #428bca 30%, #b9d4ec 100%);box-shadow:inset 0 0 1px 1px rgba(255,255,255,0.5)}.irs--big .irs-bar--single{border-radius:12px 0 0 12px}.irs--big .irs-shadow{height:1px;bottom:16px;background-color:rgba(66,139,202,0.5)}.irs--big .irs-handle{top:25px;width:30px;height:30px;border:1px solid rgba(0,0,0,0.3);background-color:#cbcfd5;background:linear-gradient(to bottom, white 0%, #B4B9BE 30%, white 100%);box-shadow:1px 1px 2px rgba(0,0,0,0.2),inset 0 0 3px 1px white;border-radius:30px}.irs--big .irs-handle.state_hover,.irs--big .irs-handle:hover{border-color:rgba(0,0,0,0.45);background-color:#939ba7;background:linear-gradient(to bottom, white 0%, #919BA5 30%, white 100%)}.irs--big .irs-min,.irs--big .irs-max{top:0;padding:1px 5px;color:white;text-shadow:none;background-color:#9f9f9f;border-radius:3px}.irs--big .irs-from,.irs--big .irs-to,.irs--big .irs-single{color:white;text-shadow:none;padding:1px 5px;background-color:#428bca;background:linear-gradient(to bottom, #428bca 0%, #3071a9 100%);border-radius:3px}.irs--big .irs-grid-pol{background-color:#428bca}.irs--big .irs-grid-text{color:#428bca}.irs--modern{height:55px}.irs--modern.irs-with-grid{height:55px}.irs--modern .irs-line{top:25px;height:5px;background-color:#d1d6e0;background:linear-gradient(to bottom, #e0e4ea 0%, #d1d6e0 100%);border:1px solid #a3adc1;border-bottom-width:0;border-radius:5px}.irs--modern .irs-bar{top:25px;height:5px;background:#20b426;background:linear-gradient(to bottom, #20b426 0%, #18891d 100%)}.irs--modern .irs-bar--single{border-radius:5px 0 0 5px}.irs--modern .irs-shadow{height:1px;bottom:21px;background-color:rgba(209,214,224,0.5)}.irs--modern .irs-handle{top:37px;width:12px;height:13px;border:1px solid #a3adc1;border-top-width:0;box-shadow:1px 1px 1px rgba(0,0,0,0.1);border-radius:0 0 3px 3px}.irs--modern .irs-handle>i:nth-child(1){position:absolute;display:block;top:-4px;left:1px;width:6px;height:6px;border:1px solid #a3adc1;background:white;transform:rotate(45deg)}.irs--modern .irs-handle>i:nth-child(2){position:absolute;display:block;box-sizing:border-box;top:0;left:0;width:10px;height:12px;background:#e9e6e6;background:linear-gradient(to bottom, white 0%, #e9e6e6 100%);border-radius:0 0 3px 3px}.irs--modern .irs-handle>i:nth-child(3){position:absolute;display:block;box-sizing:border-box;top:3px;left:3px;width:4px;height:5px;border-left:1px solid #a3adc1;border-right:1px solid #a3adc1}.irs--modern .irs-handle.state_hover,.irs--modern .irs-handle:hover{border-color:#7685a2;background:#c3c7cd;background:linear-gradient(to bottom, #ffffff 0%, #919ba5 30%, #ffffff 100%)}.irs--modern .irs-handle.state_hover>i:nth-child(1),.irs--modern .irs-handle:hover>i:nth-child(1){border-color:#7685a2}.irs--modern .irs-handle.state_hover>i:nth-child(3),.irs--modern .irs-handle:hover>i:nth-child(3){border-color:#48536a}.irs--modern .irs-min,.irs--modern .irs-max{top:0;font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;color:white;background-color:#d1d6e0;border-radius:5px}.irs--modern .irs-from,.irs--modern .irs-to,.irs--modern .irs-single{font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;background-color:#20b426;color:white;border-radius:5px}.irs--modern .irs-from:before,.irs--modern .irs-to:before,.irs--modern .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#20b426}.irs--modern .irs-grid{height:25px}.irs--modern .irs-grid-pol{background-color:#dedede}.irs--modern .irs-grid-text{color:silver;font-size:13px}.irs--sharp{height:50px;font-size:12px;line-height:1}.irs--sharp.irs-with-grid{height:57px}.irs--sharp .irs-line{top:30px;height:2px;background-color:black;border-radius:2px}.irs--sharp .irs-bar{top:30px;height:2px;background-color:#ee22fa}.irs--sharp .irs-bar--single{border-radius:2px 0 0 2px}.irs--sharp .irs-shadow{height:1px;bottom:21px;background-color:rgba(0,0,0,0.5)}.irs--sharp .irs-handle{top:25px;width:10px;height:10px;background-color:#a804b2}.irs--sharp .irs-handle>i:first-child{position:absolute;display:block;top:100%;left:0;width:0;height:0;border:5px solid transparent;border-top-color:#a804b2}.irs--sharp .irs-handle.state_hover,.irs--sharp .irs-handle:hover{background-color:black}.irs--sharp .irs-handle.state_hover>i:first-child,.irs--sharp .irs-handle:hover>i:first-child{border-top-color:black}.irs--sharp .irs-min,.irs--sharp .irs-max{color:white;font-size:14px;line-height:1;top:0;padding:3px 4px;opacity:.4;background-color:#a804b2;border-radius:2px}.irs--sharp .irs-from,.irs--sharp .irs-to,.irs--sharp .irs-single{font-size:14px;line-height:1;text-shadow:none;padding:3px 4px;background-color:#a804b2;color:white;border-radius:2px}.irs--sharp .irs-from:before,.irs--sharp .irs-to:before,.irs--sharp .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#a804b2}.irs--sharp .irs-grid{height:25px}.irs--sharp .irs-grid-pol{background-color:#dedede}.irs--sharp .irs-grid-text{color:silver;font-size:13px}.irs--round{height:50px}.irs--round.irs-with-grid{height:65px}.irs--round .irs-line{top:36px;height:4px;background-color:#dee4ec;border-radius:4px}.irs--round .irs-bar{top:36px;height:4px;background-color:#006cfa}.irs--round .irs-bar--single{border-radius:4px 0 0 4px}.irs--round .irs-shadow{height:4px;bottom:21px;background-color:rgba(222,228,236,0.5)}.irs--round .irs-handle{top:26px;width:24px;height:24px;border:4px solid #006cfa;background-color:white;border-radius:24px;box-shadow:0 1px 3px rgba(0,0,255,0.3)}.irs--round .irs-handle.state_hover,.irs--round .irs-handle:hover{background-color:#f0f6ff}.irs--round .irs-min,.irs--round .irs-max{color:#333;font-size:14px;line-height:1;top:0;padding:3px 5px;background-color:rgba(0,0,0,0.1);border-radius:4px}.irs--round .irs-from,.irs--round .irs-to,.irs--round .irs-single{font-size:14px;line-height:1;text-shadow:none;padding:3px 5px;background-color:#006cfa;color:white;border-radius:4px}.irs--round .irs-from:before,.irs--round .irs-to:before,.irs--round .irs-single:before{position:absolute;display:block;content:"";bottom:-6px;left:50%;width:0;height:0;margin-left:-3px;overflow:hidden;border:3px solid transparent;border-top-color:#006cfa}.irs--round .irs-grid{height:25px}.irs--round .irs-grid-pol{background-color:#dedede}.irs--round .irs-grid-text{color:silver;font-size:13px}.irs--square{height:50px}.irs--square.irs-with-grid{height:60px}.irs--square .irs-line{top:31px;height:4px;background-color:#dedede}.irs--square .irs-bar{top:31px;height:4px;background-color:black}.irs--square .irs-shadow{height:2px;bottom:21px;background-color:#dedede}.irs--square .irs-handle{top:25px;width:16px;height:16px;border:3px solid black;background-color:white;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.irs--square .irs-handle.state_hover,.irs--square .irs-handle:hover{background-color:#f0f6ff}.irs--square .irs-min,.irs--square .irs-max{color:#333;font-size:14px;line-height:1;top:0;padding:3px 5px;background-color:rgba(0,0,0,0.1)}.irs--square .irs-from,.irs--square .irs-to,.irs--square .irs-single{font-size:14px;line-height:1;text-shadow:none;padding:3px 5px;background-color:black;color:white}.irs--square .irs-grid{height:25px}.irs--square .irs-grid-pol{background-color:#dedede}.irs--square .irs-grid-text{color:silver;font-size:11px} \ No newline at end of file diff --git a/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.min.js b/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.min.js new file mode 100755 index 0000000..ebc66b5 --- /dev/null +++ b/wp-content-pilot/assets/vendor/ionslider/ion.rangeSlider.min.js @@ -0,0 +1,2 @@ +// Ion.RangeSlider, 2.3.1, © Denis Ineshin, 2010 - 2019, IonDen.com, Build date: 2019-12-19 16:56:44 +!function(i){"undefined"!=typeof jQuery&&jQuery||"function"!=typeof define||!define.amd?"undefined"!=typeof jQuery&&jQuery||"object"!=typeof exports?i(jQuery,document,window,navigator):i(require("jquery"),document,window,navigator):define(["jquery"],function(t){return i(t,document,window,navigator)})}(function(a,c,l,t,_){"use strict";var i,s,o=0,e=(i=t.userAgent,s=/msie\s\d+/i,0>>0;if(0==e)return-1;var h=+i||0;if(Math.abs(h)===1/0&&(h=0),e<=h)return-1;for(s=Math.max(0<=h?h:e-Math.abs(h),0);s!",r[0]),(e={skin:r.data("skin"),type:r.data("type"),min:r.data("min"),max:r.data("max"),from:r.data("from"),to:r.data("to"),step:r.data("step"),min_interval:r.data("minInterval"),max_interval:r.data("maxInterval"),drag_interval:r.data("dragInterval"),values:r.data("values"),from_fixed:r.data("fromFixed"),from_min:r.data("fromMin"),from_max:r.data("fromMax"),from_shadow:r.data("fromShadow"),to_fixed:r.data("toFixed"),to_min:r.data("toMin"),to_max:r.data("toMax"),to_shadow:r.data("toShadow"),prettify_enabled:r.data("prettifyEnabled"),prettify_separator:r.data("prettifySeparator"),force_edges:r.data("forceEdges"),keyboard:r.data("keyboard"),grid:r.data("grid"),grid_margin:r.data("gridMargin"),grid_num:r.data("gridNum"),grid_snap:r.data("gridSnap"),hide_min_max:r.data("hideMinMax"),hide_from_to:r.data("hideFromTo"),prefix:r.data("prefix"),postfix:r.data("postfix"),max_postfix:r.data("maxPostfix"),decorate_both:r.data("decorateBoth"),values_separator:r.data("valuesSeparator"),input_values_separator:r.data("inputValuesSeparator"),disable:r.data("disable"),block:r.data("block"),extra_classes:r.data("extraClasses")}).values=e.values&&e.values.split(","),e)e.hasOwnProperty(h)&&(e[h]!==_&&""!==e[h]||delete e[h]);n!==_&&""!==n&&((n=n.split(e.input_values_separator||i.input_values_separator||";"))[0]&&n[0]==+n[0]&&(n[0]=+n[0]),n[1]&&n[1]==+n[1]&&(n[1]=+n[1]),i&&i.values&&i.values.length?(o.from=n[0]&&i.values.indexOf(n[0]),o.to=n[1]&&i.values.indexOf(n[1])):(o.from=n[0]&&+n[0],o.to=n[1]&&+n[1])),a.extend(o,i),a.extend(o,e),this.options=o,this.update_check={},this.validate(),this.result={input:this.$cache.input,slider:null,min:this.options.min,max:this.options.max,from:this.options.from,from_percent:0,from_value:null,to:this.options.to,to_percent:0,to_value:null},this.init()}h.prototype={init:function(t){this.no_diapason=!1,this.coords.p_step=this.convertToPercent(this.options.step,!0),this.target="base",this.toggleInput(),this.append(),this.setMinMax(),t?(this.force_redraw=!0,this.calc(!0),this.callOnUpdate()):(this.force_redraw=!0,this.calc(!0),this.callOnStart()),this.updateScene()},append:function(){var t='';this.$cache.input.before(t),this.$cache.input.prop("readonly",!0),this.$cache.cont=this.$cache.input.prev(),this.result.slider=this.$cache.cont,this.$cache.cont.html('01000'),this.$cache.rs=this.$cache.cont.find(".irs"),this.$cache.min=this.$cache.cont.find(".irs-min"),this.$cache.max=this.$cache.cont.find(".irs-max"),this.$cache.from=this.$cache.cont.find(".irs-from"),this.$cache.to=this.$cache.cont.find(".irs-to"),this.$cache.single=this.$cache.cont.find(".irs-single"),this.$cache.line=this.$cache.cont.find(".irs-line"),this.$cache.grid=this.$cache.cont.find(".irs-grid"),"single"===this.options.type?(this.$cache.cont.append(''),this.$cache.bar=this.$cache.cont.find(".irs-bar"),this.$cache.edge=this.$cache.cont.find(".irs-bar-edge"),this.$cache.s_single=this.$cache.cont.find(".single"),this.$cache.from[0].style.visibility="hidden",this.$cache.to[0].style.visibility="hidden",this.$cache.shad_single=this.$cache.cont.find(".shadow-single")):(this.$cache.cont.append(''),this.$cache.bar=this.$cache.cont.find(".irs-bar"),this.$cache.s_from=this.$cache.cont.find(".from"),this.$cache.s_to=this.$cache.cont.find(".to"),this.$cache.shad_from=this.$cache.cont.find(".shadow-from"),this.$cache.shad_to=this.$cache.cont.find(".shadow-to"),this.setTopHandler()),this.options.hide_from_to&&(this.$cache.from[0].style.display="none",this.$cache.to[0].style.display="none",this.$cache.single[0].style.display="none"),this.appendGrid(),this.options.disable?(this.appendDisableMask(),this.$cache.input[0].disabled=!0):(this.$cache.input[0].disabled=!1,this.removeDisableMask(),this.bindEvents()),this.options.disable||(this.options.block?this.appendDisableMask():this.removeDisableMask()),this.options.drag_interval&&(this.$cache.bar[0].style.cursor="ew-resize")},setTopHandler:function(){var t=this.options.min,i=this.options.max,s=this.options.from,o=this.options.to;t'),this.$cache.cont.addClass("irs-disabled")},removeDisableMask:function(){this.$cache.cont.remove(".irs-disable-mask"),this.$cache.cont.removeClass("irs-disabled")},remove:function(){this.$cache.cont.remove(),this.$cache.cont=null,this.$cache.line.off("keydown.irs_"+this.plugin_count),this.$cache.body.off("touchmove.irs_"+this.plugin_count),this.$cache.body.off("mousemove.irs_"+this.plugin_count),this.$cache.win.off("touchend.irs_"+this.plugin_count),this.$cache.win.off("mouseup.irs_"+this.plugin_count),e&&(this.$cache.body.off("mouseup.irs_"+this.plugin_count),this.$cache.body.off("mouseleave.irs_"+this.plugin_count)),this.$cache.grid_labels=[],this.coords.big=[],this.coords.big_w=[],this.coords.big_p=[],this.coords.big_x=[],cancelAnimationFrame(this.raf_id)},bindEvents:function(){this.no_diapason||(this.$cache.body.on("touchmove.irs_"+this.plugin_count,this.pointerMove.bind(this)),this.$cache.body.on("mousemove.irs_"+this.plugin_count,this.pointerMove.bind(this)),this.$cache.win.on("touchend.irs_"+this.plugin_count,this.pointerUp.bind(this)),this.$cache.win.on("mouseup.irs_"+this.plugin_count,this.pointerUp.bind(this)),this.$cache.line.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.line.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.line.on("focus.irs_"+this.plugin_count,this.pointerFocus.bind(this)),this.options.drag_interval&&"double"===this.options.type?(this.$cache.bar.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"both")),this.$cache.bar.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"both"))):(this.$cache.bar.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.bar.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click"))),"single"===this.options.type?(this.$cache.single.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"single")),this.$cache.s_single.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"single")),this.$cache.shad_single.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.single.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"single")),this.$cache.s_single.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"single")),this.$cache.edge.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.shad_single.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click"))):(this.$cache.single.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,null)),this.$cache.single.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,null)),this.$cache.from.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"from")),this.$cache.s_from.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"from")),this.$cache.to.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"to")),this.$cache.s_to.on("touchstart.irs_"+this.plugin_count,this.pointerDown.bind(this,"to")),this.$cache.shad_from.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.shad_to.on("touchstart.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.from.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"from")),this.$cache.s_from.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"from")),this.$cache.to.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"to")),this.$cache.s_to.on("mousedown.irs_"+this.plugin_count,this.pointerDown.bind(this,"to")),this.$cache.shad_from.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click")),this.$cache.shad_to.on("mousedown.irs_"+this.plugin_count,this.pointerClick.bind(this,"click"))),this.options.keyboard&&this.$cache.line.on("keydown.irs_"+this.plugin_count,this.key.bind(this,"keyboard")),e&&(this.$cache.body.on("mouseup.irs_"+this.plugin_count,this.pointerUp.bind(this)),this.$cache.body.on("mouseleave.irs_"+this.plugin_count,this.pointerUp.bind(this))))},pointerFocus:function(t){var i,s;this.target||(i=(s="single"===this.options.type?this.$cache.single:this.$cache.from).offset().left,i+=s.width()/2-1,this.pointerClick("single",{preventDefault:function(){},pageX:i}))},pointerMove:function(t){if(this.dragging){var i=t.pageX||t.originalEvent.touches&&t.originalEvent.touches[0].pageX;this.coords.x_pointer=i-this.coords.x_gap,this.calc()}},pointerUp:function(t){this.current_plugin===this.plugin_count&&this.is_active&&(this.is_active=!1,this.$cache.cont.find(".state_hover").removeClass("state_hover"),this.force_redraw=!0,e&&a("*").prop("unselectable",!1),this.updateScene(),this.restoreOriginalMinInterval(),(a.contains(this.$cache.cont[0],t.target)||this.dragging)&&this.callOnFinish(),this.dragging=!1)},pointerDown:function(t,i){i.preventDefault();var s=i.pageX||i.originalEvent.touches&&i.originalEvent.touches[0].pageX;2!==i.button&&("both"===t&&this.setTempMinInterval(),t=t||(this.target||"from"),this.current_plugin=this.plugin_count,this.target=t,this.is_active=!0,this.dragging=!0,this.coords.x_gap=this.$cache.rs.offset().left,this.coords.x_pointer=s-this.coords.x_gap,this.calcPointerPercent(),this.changeLevel(t),e&&a("*").prop("unselectable",!0),this.$cache.line.trigger("focus"),this.updateScene())},pointerClick:function(t,i){i.preventDefault();var s=i.pageX||i.originalEvent.touches&&i.originalEvent.touches[0].pageX;2!==i.button&&(this.current_plugin=this.plugin_count,this.target=t,this.is_click=!0,this.coords.x_gap=this.$cache.rs.offset().left,this.coords.x_pointer=+(s-this.coords.x_gap).toFixed(),this.force_redraw=!0,this.calc(),this.$cache.line.trigger("focus"))},key:function(t,i){if(!(this.current_plugin!==this.plugin_count||i.altKey||i.ctrlKey||i.shiftKey||i.metaKey)){switch(i.which){case 83:case 65:case 40:case 37:i.preventDefault(),this.moveByKey(!1);break;case 87:case 68:case 38:case 39:i.preventDefault(),this.moveByKey(!0)}return!0}},moveByKey:function(t){var i=this.coords.p_pointer,s=(this.options.max-this.options.min)/100;s=this.options.step/s,t?i+=s:i-=s,this.coords.x_pointer=this.toFixed(this.coords.w_rs/100*i),this.is_key=!0,this.calc()},setMinMax:function(){if(this.options){if(this.options.hide_min_max)return this.$cache.min[0].style.display="none",void(this.$cache.max[0].style.display="none");if(this.options.values.length)this.$cache.min.html(this.decorate(this.options.p_values[this.options.min])),this.$cache.max.html(this.decorate(this.options.p_values[this.options.max]));else{var t=this._prettify(this.options.min),i=this._prettify(this.options.max);this.result.min_pretty=t,this.result.max_pretty=i,this.$cache.min.html(this.decorate(t,this.options.min)),this.$cache.max.html(this.decorate(i,this.options.max))}this.labels.w_min=this.$cache.min.outerWidth(!1),this.labels.w_max=this.$cache.max.outerWidth(!1)}},setTempMinInterval:function(){var t=this.result.to-this.result.from;null===this.old_min_interval&&(this.old_min_interval=this.options.min_interval),this.options.min_interval=t},restoreOriginalMinInterval:function(){null!==this.old_min_interval&&(this.options.min_interval=this.old_min_interval,this.old_min_interval=null)},calc:function(t){if(this.options&&(this.calc_count++,10!==this.calc_count&&!t||(this.calc_count=0,this.coords.w_rs=this.$cache.rs.outerWidth(!1),this.calcHandlePercent()),this.coords.w_rs)){this.calcPointerPercent();var i=this.getHandleX();switch("both"===this.target&&(this.coords.p_gap=0,i=this.getHandleX()),"click"===this.target&&(this.coords.p_gap=this.coords.p_handle/2,i=this.getHandleX(),this.options.drag_interval?this.target="both_one":this.target=this.chooseHandle(i)),this.target){case"base":var s=(this.options.max-this.options.min)/100,o=(this.result.from-this.options.min)/s,e=(this.result.to-this.options.min)/s;this.coords.p_single_real=this.toFixed(o),this.coords.p_from_real=this.toFixed(o),this.coords.p_to_real=this.toFixed(e),this.coords.p_single_real=this.checkDiapason(this.coords.p_single_real,this.options.from_min,this.options.from_max),this.coords.p_from_real=this.checkDiapason(this.coords.p_from_real,this.options.from_min,this.options.from_max),this.coords.p_to_real=this.checkDiapason(this.coords.p_to_real,this.options.to_min,this.options.to_max),this.coords.p_single_fake=this.convertToFakePercent(this.coords.p_single_real),this.coords.p_from_fake=this.convertToFakePercent(this.coords.p_from_real),this.coords.p_to_fake=this.convertToFakePercent(this.coords.p_to_real),this.target=null;break;case"single":if(this.options.from_fixed)break;this.coords.p_single_real=this.convertToRealPercent(i),this.coords.p_single_real=this.calcWithStep(this.coords.p_single_real),this.coords.p_single_real=this.checkDiapason(this.coords.p_single_real,this.options.from_min,this.options.from_max),this.coords.p_single_fake=this.convertToFakePercent(this.coords.p_single_real);break;case"from":if(this.options.from_fixed)break;this.coords.p_from_real=this.convertToRealPercent(i),this.coords.p_from_real=this.calcWithStep(this.coords.p_from_real),this.coords.p_from_real>this.coords.p_to_real&&(this.coords.p_from_real=this.coords.p_to_real),this.coords.p_from_real=this.checkDiapason(this.coords.p_from_real,this.options.from_min,this.options.from_max),this.coords.p_from_real=this.checkMinInterval(this.coords.p_from_real,this.coords.p_to_real,"from"),this.coords.p_from_real=this.checkMaxInterval(this.coords.p_from_real,this.coords.p_to_real,"from"),this.coords.p_from_fake=this.convertToFakePercent(this.coords.p_from_real);break;case"to":if(this.options.to_fixed)break;this.coords.p_to_real=this.convertToRealPercent(i),this.coords.p_to_real=this.calcWithStep(this.coords.p_to_real),this.coords.p_to_realthis.coords.w_rs&&(this.coords.x_pointer=this.coords.w_rs),this.coords.p_pointer=this.toFixed(this.coords.x_pointer/this.coords.w_rs*100)):this.coords.p_pointer=0},convertToRealPercent:function(t){return t/(100-this.coords.p_handle)*100},convertToFakePercent:function(t){return t/100*(100-this.coords.p_handle)},getHandleX:function(){var t=100-this.coords.p_handle,i=this.toFixed(this.coords.p_pointer-this.coords.p_gap);return i<0?i=0:t100-this.labels.p_max-1?this.$cache.max[0].style.visibility="hidden":this.$cache.max[0].style.visibility="visible";else{s=h?(this.options.decorate_both?(t=this.decorate(r[this.result.from]),t+=this.options.values_separator,t+=this.decorate(r[this.result.to])):t=this.decorate(r[this.result.from]+this.options.values_separator+r[this.result.to]),i=this.decorate(r[this.result.from]),this.decorate(r[this.result.to])):(o=this._prettify(this.result.from),e=this._prettify(this.result.to),this.options.decorate_both?(t=this.decorate(o,this.result.from),t+=this.options.values_separator,t+=this.decorate(e,this.result.to)):t=this.decorate(o+this.options.values_separator+e,this.result.to),i=this.decorate(o,this.result.from),this.decorate(e,this.result.to)),this.$cache.single.html(t),this.$cache.from.html(i),this.$cache.to.html(s),this.calcLabels();var n=Math.min(this.labels.p_single_left,this.labels.p_from_left),a=this.labels.p_single_left+this.labels.p_single_fake,c=this.labels.p_to_left+this.labels.p_to_fake,l=Math.max(a,c);this.labels.p_from_left+this.labels.p_from_fake>=this.labels.p_to_left?(this.$cache.from[0].style.visibility="hidden",this.$cache.to[0].style.visibility="hidden",this.$cache.single[0].style.visibility="visible",l=this.result.from===this.result.to?("from"===this.target?this.$cache.from[0].style.visibility="visible":"to"===this.target?this.$cache.to[0].style.visibility="visible":this.target||(this.$cache.from[0].style.visibility="visible"),this.$cache.single[0].style.visibility="hidden",c):(this.$cache.from[0].style.visibility="hidden",this.$cache.to[0].style.visibility="hidden",this.$cache.single[0].style.visibility="visible",Math.max(a,c))):(this.$cache.from[0].style.visibility="visible",this.$cache.to[0].style.visibility="visible",this.$cache.single[0].style.visibility="hidden"),n100-this.labels.p_max-1?this.$cache.max[0].style.visibility="hidden":this.$cache.max[0].style.visibility="visible"}}},drawShadow:function(){var t,i,s,o,e=this.options,h=this.$cache,r="number"==typeof e.from_min&&!isNaN(e.from_min),n="number"==typeof e.from_max&&!isNaN(e.from_max),a="number"==typeof e.to_min&&!isNaN(e.to_min),c="number"==typeof e.to_max&&!isNaN(e.to_max);"single"===e.type?e.from_shadow&&(r||n)?(t=this.convertToPercent(r?e.from_min:e.min),i=this.convertToPercent(n?e.from_max:e.max)-t,t=this.toFixed(t-this.coords.p_handle/100*t),i=this.toFixed(i-this.coords.p_handle/100*i),t+=this.coords.p_handle/2,h.shad_single[0].style.display="block",h.shad_single[0].style.left=t+"%",h.shad_single[0].style.width=i+"%"):h.shad_single[0].style.display="none":(e.from_shadow&&(r||n)?(t=this.convertToPercent(r?e.from_min:e.min),i=this.convertToPercent(n?e.from_max:e.max)-t,t=this.toFixed(t-this.coords.p_handle/100*t),i=this.toFixed(i-this.coords.p_handle/100*i),t+=this.coords.p_handle/2,h.shad_from[0].style.display="block",h.shad_from[0].style.left=t+"%",h.shad_from[0].style.width=i+"%"):h.shad_from[0].style.display="none",e.to_shadow&&(a||c)?(s=this.convertToPercent(a?e.to_min:e.min),o=this.convertToPercent(c?e.to_max:e.max)-s,s=this.toFixed(s-this.coords.p_handle/100*s),o=this.toFixed(o-this.coords.p_handle/100*o),s+=this.coords.p_handle/2,h.shad_to[0].style.display="block",h.shad_to[0].style.left=s+"%",h.shad_to[0].style.width=o+"%"):h.shad_to[0].style.display="none")},writeToInput:function(){"single"===this.options.type?(this.options.values.length?this.$cache.input.prop("value",this.result.from_value):this.$cache.input.prop("value",this.result.from),this.$cache.input.data("from",this.result.from)):(this.options.values.length?this.$cache.input.prop("value",this.result.from_value+this.options.input_values_separator+this.result.to_value):this.$cache.input.prop("value",this.result.from+this.options.input_values_separator+this.result.to),this.$cache.input.data("from",this.result.from),this.$cache.input.data("to",this.result.to))},callOnStart:function(){this.writeToInput(),this.options.onStart&&"function"==typeof this.options.onStart&&(this.options.scope?this.options.onStart.call(this.options.scope,this.result):this.options.onStart(this.result))},callOnChange:function(){this.writeToInput(),this.options.onChange&&"function"==typeof this.options.onChange&&(this.options.scope?this.options.onChange.call(this.options.scope,this.result):this.options.onChange(this.result))},callOnFinish:function(){this.writeToInput(),this.options.onFinish&&"function"==typeof this.options.onFinish&&(this.options.scope?this.options.onFinish.call(this.options.scope,this.result):this.options.onFinish(this.result))},callOnUpdate:function(){this.writeToInput(),this.options.onUpdate&&"function"==typeof this.options.onUpdate&&(this.options.scope?this.options.onUpdate.call(this.options.scope,this.result):this.options.onUpdate(this.result))},toggleInput:function(){this.$cache.input.toggleClass("irs-hidden-input"),this.has_tab_index?this.$cache.input.prop("tabindex",-1):this.$cache.input.removeProp("tabindex"),this.has_tab_index=!this.has_tab_index},convertToPercent:function(t,i){var s,o=this.options.max-this.options.min,e=o/100;return o?(s=(i?t:t-this.options.min)/e,this.toFixed(s)):(this.no_diapason=!0,0)},convertToValue:function(t){var i,s,o=this.options.min,e=this.options.max,h=o.toString().split(".")[1],r=e.toString().split(".")[1],n=0,a=0;if(0===t)return this.options.min;if(100===t)return this.options.max;h&&(n=i=h.length),r&&(n=s=r.length),i&&s&&(n=s<=i?i:s),o<0&&(o=+(o+(a=Math.abs(o))).toFixed(n),e=+(e+a).toFixed(n));var c,l=(e-o)/100*t+o,_=this.options.step.toString().split(".")[1];return l=_?+l.toFixed(_.length):(l/=this.options.step,+(l*=this.options.step).toFixed(0)),a&&(l-=a),(c=_?+l.toFixed(_.length):this.toFixed(l))this.options.max&&(c=this.options.max),c},calcWithStep:function(t){var i=Math.round(t/this.coords.p_step)*this.coords.p_step;return 100h.max_interval&&(o=e-h.max_interval):o-e>h.max_interval&&(o=e+h.max_interval),this.convertToPercent(o)):t},checkDiapason:function(t,i,s){var o=this.convertToValue(t),e=this.options;return"number"!=typeof i&&(i=e.min),"number"!=typeof s&&(s=e.max),os.max&&(s.from=s.max)):(s.froms.max&&(s.from=s.max),s.tos.max&&(s.to=s.max),this.update_check.from&&(this.update_check.from!==s.from&&s.from>s.to&&(s.from=s.to),this.update_check.to!==s.to&&s.tos.to&&(s.from=s.to),s.tos.from_max&&(s.from=s.from_max),"number"==typeof s.to_min&&s.tos.to_max&&(s.to=s.to_max),o&&(o.min!==s.min&&(o.min=s.min),o.max!==s.max&&(o.max=s.max),(o.fromo.max)&&(o.from=s.from),(o.too.max)&&(o.to=s.to)),("number"!=typeof s.min_interval||isNaN(s.min_interval)||!s.min_interval||s.min_interval<0)&&(s.min_interval=0),("number"!=typeof s.max_interval||isNaN(s.max_interval)||!s.max_interval||s.max_interval<0)&&(s.max_interval=0),s.min_interval&&s.min_interval>s.max-s.min&&(s.min_interval=s.max-s.min),s.max_interval&&s.max_interval>s.max-s.min&&(s.max_interval=s.max-s.min)},decorate:function(t,i){var s="",o=this.options;return o.prefix&&(s+=o.prefix),s+=t,o.max_postfix&&(o.values.length&&t===o.p_values[o.max]?(s+=o.max_postfix,o.postfix&&(s+=" ")):i===o.max&&(s+=o.max_postfix,o.postfix&&(s+=" "))),o.postfix&&(s+=o.postfix),s},updateFrom:function(){this.result.from=this.options.from,this.result.from_percent=this.convertToPercent(this.result.from),this.result.from_pretty=this._prettify(this.result.from),this.options.values&&(this.result.from_value=this.options.values[this.result.from])},updateTo:function(){this.result.to=this.options.to,this.result.to_percent=this.convertToPercent(this.result.to),this.result.to_pretty=this._prettify(this.result.to),this.options.values&&(this.result.to_value=this.options.values[this.result.to])},updateResult:function(){this.result.min=this.options.min,this.result.max=this.options.max,this.updateFrom(),this.updateTo()},appendGrid:function(){if(this.options.grid){var t,i,s,o,e,h,r=this.options,n=r.max-r.min,a=r.grid_num,c=0,l=4,_="";for(this.calcGridMargin(),r.grid_snap&&(a=n/r.step),50';_+='',h=this.convertToValue(c),_+=''+(h=r.values.length?r.p_values[h]:this._prettify(h))+""}this.coords.big_num=Math.ceil(a+1),this.$cache.cont.addClass("irs-with-grid"),this.$cache.grid.html(_),this.cacheGridLabels()}},cacheGridLabels:function(){var t,i,s=this.coords.big_num;for(i=0;i100+this.coords.grid_gap&&(o[e-1]=100+this.coords.grid_gap,s[e-1]=this.toFixed(o[e-1]-this.coords.big_p[e-1]),this.coords.big_x[e-1]=this.toFixed(this.coords.big_p[e-1]-this.coords.grid_gap))),this.calcGridCollision(2,s,o),this.calcGridCollision(4,s,o),t=0;t

    ' + ); + + if (this.options.get('multiple')) { + $results.attr('aria-multiselectable', 'true'); + } + + this.$results = $results; + + return $results; + }; + + Results.prototype.clear = function () { + this.$results.empty(); + }; + + Results.prototype.displayMessage = function (params) { + var escapeMarkup = this.options.get('escapeMarkup'); + + this.clear(); + this.hideLoading(); + + var $message = $( + '' + ); + + var message = this.options.get('translations').get(params.message); + + $message.append( + escapeMarkup( + message(params.args) + ) + ); + + $message[0].className += ' select2-results__message'; + + this.$results.append($message); + }; + + Results.prototype.hideMessages = function () { + this.$results.find('.select2-results__message').remove(); + }; + + Results.prototype.append = function (data) { + this.hideLoading(); + + var $options = []; + + if (data.results == null || data.results.length === 0) { + if (this.$results.children().length === 0) { + this.trigger('results:message', { + message: 'noResults' + }); + } + + return; + } + + data.results = this.sort(data.results); + + for (var d = 0; d < data.results.length; d++) { + var item = data.results[d]; + + var $option = this.option(item); + + $options.push($option); + } + + this.$results.append($options); + }; + + Results.prototype.position = function ($results, $dropdown) { + var $resultsContainer = $dropdown.find('.select2-results'); + $resultsContainer.append($results); + }; + + Results.prototype.sort = function (data) { + var sorter = this.options.get('sorter'); + + return sorter(data); + }; + + Results.prototype.highlightFirstItem = function () { + var $options = this.$results + .find('.select2-results__option[aria-selected]'); + + var $selected = $options.filter('[aria-selected=true]'); + + // Check if there are any selected options + if ($selected.length > 0) { + // If there are selected options, highlight the first + $selected.first().trigger('mouseenter'); + } else { + // If there are no selected options, highlight the first option + // in the dropdown + $options.first().trigger('mouseenter'); + } + + this.ensureHighlightVisible(); + }; + + Results.prototype.setClasses = function () { + var self = this; + + this.data.current(function (selected) { + var selectedIds = $.map(selected, function (s) { + return s.id.toString(); + }); + + var $options = self.$results + .find('.select2-results__option[aria-selected]'); + + $options.each(function () { + var $option = $(this); + + var item = Utils.GetData(this, 'data'); + + // id needs to be converted to a string when comparing + var id = '' + item.id; + + if ((item.element != null && item.element.selected) || + (item.element == null && $.inArray(id, selectedIds) > -1)) { + $option.attr('aria-selected', 'true'); + } else { + $option.attr('aria-selected', 'false'); + } + }); + + }); + }; + + Results.prototype.showLoading = function (params) { + this.hideLoading(); + + var loadingMore = this.options.get('translations').get('searching'); + + var loading = { + disabled: true, + loading: true, + text: loadingMore(params) + }; + var $loading = this.option(loading); + $loading.className += ' loading-results'; + + this.$results.prepend($loading); + }; + + Results.prototype.hideLoading = function () { + this.$results.find('.loading-results').remove(); + }; + + Results.prototype.option = function (data) { + var option = document.createElement('li'); + option.className = 'select2-results__option'; + + var attrs = { + 'role': 'option', + 'aria-selected': 'false' + }; + + var matches = window.Element.prototype.matches || + window.Element.prototype.msMatchesSelector || + window.Element.prototype.webkitMatchesSelector; + + if ((data.element != null && matches.call(data.element, ':disabled')) || + (data.element == null && data.disabled)) { + delete attrs['aria-selected']; + attrs['aria-disabled'] = 'true'; + } + + if (data.id == null) { + delete attrs['aria-selected']; + } + + if (data._resultId != null) { + option.id = data._resultId; + } + + if (data.title) { + option.title = data.title; + } + + if (data.children) { + attrs.role = 'group'; + attrs['aria-label'] = data.text; + delete attrs['aria-selected']; + } + + for (var attr in attrs) { + var val = attrs[attr]; + + option.setAttribute(attr, val); + } + + if (data.children) { + var $option = $(option); + + var label = document.createElement('strong'); + label.className = 'select2-results__group'; + + var $label = $(label); + this.template(data, label); + + var $children = []; + + for (var c = 0; c < data.children.length; c++) { + var child = data.children[c]; + + var $child = this.option(child); + + $children.push($child); + } + + var $childrenContainer = $('
      ', { + 'class': 'select2-results__options select2-results__options--nested' + }); + + $childrenContainer.append($children); + + $option.append(label); + $option.append($childrenContainer); + } else { + this.template(data, option); + } + + Utils.StoreData(option, 'data', data); + + return option; + }; + + Results.prototype.bind = function (container, $container) { + var self = this; + + var id = container.id + '-results'; + + this.$results.attr('id', id); + + container.on('results:all', function (params) { + self.clear(); + self.append(params.data); + + if (container.isOpen()) { + self.setClasses(); + self.highlightFirstItem(); + } + }); + + container.on('results:append', function (params) { + self.append(params.data); + + if (container.isOpen()) { + self.setClasses(); + } + }); + + container.on('query', function (params) { + self.hideMessages(); + self.showLoading(params); + }); + + container.on('select', function () { + if (!container.isOpen()) { + return; + } + + self.setClasses(); + + if (self.options.get('scrollAfterSelect')) { + self.highlightFirstItem(); + } + }); + + container.on('unselect', function () { + if (!container.isOpen()) { + return; + } + + self.setClasses(); + + if (self.options.get('scrollAfterSelect')) { + self.highlightFirstItem(); + } + }); + + container.on('open', function () { + // When the dropdown is open, aria-expended="true" + self.$results.attr('aria-expanded', 'true'); + self.$results.attr('aria-hidden', 'false'); + + self.setClasses(); + self.ensureHighlightVisible(); + }); + + container.on('close', function () { + // When the dropdown is closed, aria-expended="false" + self.$results.attr('aria-expanded', 'false'); + self.$results.attr('aria-hidden', 'true'); + self.$results.removeAttr('aria-activedescendant'); + }); + + container.on('results:toggle', function () { + var $highlighted = self.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + $highlighted.trigger('mouseup'); + }); + + container.on('results:select', function () { + var $highlighted = self.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + var data = Utils.GetData($highlighted[0], 'data'); + + if ($highlighted.attr('aria-selected') == 'true') { + self.trigger('close', {}); + } else { + self.trigger('select', { + data: data + }); + } + }); + + container.on('results:previous', function () { + var $highlighted = self.getHighlightedResults(); + + var $options = self.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + // If we are already at the top, don't move further + // If no options, currentIndex will be -1 + if (currentIndex <= 0) { + return; + } + + var nextIndex = currentIndex - 1; + + // If none are highlighted, highlight the first + if ($highlighted.length === 0) { + nextIndex = 0; + } + + var $next = $options.eq(nextIndex); + + $next.trigger('mouseenter'); + + var currentOffset = self.$results.offset().top; + var nextTop = $next.offset().top; + var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset); + + if (nextIndex === 0) { + self.$results.scrollTop(0); + } else if (nextTop - currentOffset < 0) { + self.$results.scrollTop(nextOffset); + } + }); + + container.on('results:next', function () { + var $highlighted = self.getHighlightedResults(); + + var $options = self.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + var nextIndex = currentIndex + 1; + + // If we are at the last option, stay there + if (nextIndex >= $options.length) { + return; + } + + var $next = $options.eq(nextIndex); + + $next.trigger('mouseenter'); + + var currentOffset = self.$results.offset().top + + self.$results.outerHeight(false); + var nextBottom = $next.offset().top + $next.outerHeight(false); + var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset; + + if (nextIndex === 0) { + self.$results.scrollTop(0); + } else if (nextBottom > currentOffset) { + self.$results.scrollTop(nextOffset); + } + }); + + container.on('results:focus', function (params) { + params.element.addClass('select2-results__option--highlighted'); + }); + + container.on('results:message', function (params) { + self.displayMessage(params); + }); + + if ($.fn.mousewheel) { + this.$results.on('mousewheel', function (e) { + var top = self.$results.scrollTop(); + + var bottom = self.$results.get(0).scrollHeight - top + e.deltaY; + + var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0; + var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height(); + + if (isAtTop) { + self.$results.scrollTop(0); + + e.preventDefault(); + e.stopPropagation(); + } else if (isAtBottom) { + self.$results.scrollTop( + self.$results.get(0).scrollHeight - self.$results.height() + ); + + e.preventDefault(); + e.stopPropagation(); + } + }); + } + + this.$results.on('mouseup', '.select2-results__option[aria-selected]', + function (evt) { + var $this = $(this); + + var data = Utils.GetData(this, 'data'); + + if ($this.attr('aria-selected') === 'true') { + if (self.options.get('multiple')) { + self.trigger('unselect', { + originalEvent: evt, + data: data + }); + } else { + self.trigger('close', {}); + } + + return; + } + + self.trigger('select', { + originalEvent: evt, + data: data + }); + }); + + this.$results.on('mouseenter', '.select2-results__option[aria-selected]', + function (evt) { + var data = Utils.GetData(this, 'data'); + + self.getHighlightedResults() + .removeClass('select2-results__option--highlighted'); + + self.trigger('results:focus', { + data: data, + element: $(this) + }); + }); + }; + + Results.prototype.getHighlightedResults = function () { + var $highlighted = this.$results + .find('.select2-results__option--highlighted'); + + return $highlighted; + }; + + Results.prototype.destroy = function () { + this.$results.remove(); + }; + + Results.prototype.ensureHighlightVisible = function () { + var $highlighted = this.getHighlightedResults(); + + if ($highlighted.length === 0) { + return; + } + + var $options = this.$results.find('[aria-selected]'); + + var currentIndex = $options.index($highlighted); + + var currentOffset = this.$results.offset().top; + var nextTop = $highlighted.offset().top; + var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset); + + var offsetDelta = nextTop - currentOffset; + nextOffset -= $highlighted.outerHeight(false) * 2; + + if (currentIndex <= 2) { + this.$results.scrollTop(0); + } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) { + this.$results.scrollTop(nextOffset); + } + }; + + Results.prototype.template = function (result, container) { + var template = this.options.get('templateResult'); + var escapeMarkup = this.options.get('escapeMarkup'); + + var content = template(result, container); + + if (content == null) { + container.style.display = 'none'; + } else if (typeof content === 'string') { + container.innerHTML = escapeMarkup(content); + } else { + $(container).append(content); + } + }; + + return Results; +}); + +S2.define('select2/keys',[ + +], function () { + var KEYS = { + BACKSPACE: 8, + TAB: 9, + ENTER: 13, + SHIFT: 16, + CTRL: 17, + ALT: 18, + ESC: 27, + SPACE: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + DELETE: 46 + }; + + return KEYS; +}); + +S2.define('select2/selection/base',[ + 'jquery', + '../utils', + '../keys' +], function ($, Utils, KEYS) { + function BaseSelection ($element, options) { + this.$element = $element; + this.options = options; + + BaseSelection.__super__.constructor.call(this); + } + + Utils.Extend(BaseSelection, Utils.Observable); + + BaseSelection.prototype.render = function () { + var $selection = $( + '' + ); + + this._tabindex = 0; + + if (Utils.GetData(this.$element[0], 'old-tabindex') != null) { + this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex'); + } else if (this.$element.attr('tabindex') != null) { + this._tabindex = this.$element.attr('tabindex'); + } + + $selection.attr('title', this.$element.attr('title')); + $selection.attr('tabindex', this._tabindex); + $selection.attr('aria-disabled', 'false'); + + this.$selection = $selection; + + return $selection; + }; + + BaseSelection.prototype.bind = function (container, $container) { + var self = this; + + var resultsId = container.id + '-results'; + + this.container = container; + + this.$selection.on('focus', function (evt) { + self.trigger('focus', evt); + }); + + this.$selection.on('blur', function (evt) { + self._handleBlur(evt); + }); + + this.$selection.on('keydown', function (evt) { + self.trigger('keypress', evt); + + if (evt.which === KEYS.SPACE) { + evt.preventDefault(); + } + }); + + container.on('results:focus', function (params) { + self.$selection.attr('aria-activedescendant', params.data._resultId); + }); + + container.on('selection:update', function (params) { + self.update(params.data); + }); + + container.on('open', function () { + // When the dropdown is open, aria-expanded="true" + self.$selection.attr('aria-expanded', 'true'); + self.$selection.attr('aria-owns', resultsId); + + self._attachCloseHandler(container); + }); + + container.on('close', function () { + // When the dropdown is closed, aria-expanded="false" + self.$selection.attr('aria-expanded', 'false'); + self.$selection.removeAttr('aria-activedescendant'); + self.$selection.removeAttr('aria-owns'); + + self.$selection.trigger('focus'); + + self._detachCloseHandler(container); + }); + + container.on('enable', function () { + self.$selection.attr('tabindex', self._tabindex); + self.$selection.attr('aria-disabled', 'false'); + }); + + container.on('disable', function () { + self.$selection.attr('tabindex', '-1'); + self.$selection.attr('aria-disabled', 'true'); + }); + }; + + BaseSelection.prototype._handleBlur = function (evt) { + var self = this; + + // This needs to be delayed as the active element is the body when the tab + // key is pressed, possibly along with others. + window.setTimeout(function () { + // Don't trigger `blur` if the focus is still in the selection + if ( + (document.activeElement == self.$selection[0]) || + ($.contains(self.$selection[0], document.activeElement)) + ) { + return; + } + + self.trigger('blur', evt); + }, 1); + }; + + BaseSelection.prototype._attachCloseHandler = function (container) { + + $(document.body).on('mousedown.select2.' + container.id, function (e) { + var $target = $(e.target); + + var $select = $target.closest('.select2'); + + var $all = $('.select2.select2-container--open'); + + $all.each(function () { + if (this == $select[0]) { + return; + } + + var $element = Utils.GetData(this, 'element'); + + $element.select2('close'); + }); + }); + }; + + BaseSelection.prototype._detachCloseHandler = function (container) { + $(document.body).off('mousedown.select2.' + container.id); + }; + + BaseSelection.prototype.position = function ($selection, $container) { + var $selectionContainer = $container.find('.selection'); + $selectionContainer.append($selection); + }; + + BaseSelection.prototype.destroy = function () { + this._detachCloseHandler(this.container); + }; + + BaseSelection.prototype.update = function (data) { + throw new Error('The `update` method must be defined in child classes.'); + }; + + /** + * Helper method to abstract the "enabled" (not "disabled") state of this + * object. + * + * @return {true} if the instance is not disabled. + * @return {false} if the instance is disabled. + */ + BaseSelection.prototype.isEnabled = function () { + return !this.isDisabled(); + }; + + /** + * Helper method to abstract the "disabled" state of this object. + * + * @return {true} if the disabled option is true. + * @return {false} if the disabled option is false. + */ + BaseSelection.prototype.isDisabled = function () { + return this.options.get('disabled'); + }; + + return BaseSelection; +}); + +S2.define('select2/selection/single',[ + 'jquery', + './base', + '../utils', + '../keys' +], function ($, BaseSelection, Utils, KEYS) { + function SingleSelection () { + SingleSelection.__super__.constructor.apply(this, arguments); + } + + Utils.Extend(SingleSelection, BaseSelection); + + SingleSelection.prototype.render = function () { + var $selection = SingleSelection.__super__.render.call(this); + + $selection.addClass('select2-selection--single'); + + $selection.html( + '' + + '' + + '' + + '' + ); + + return $selection; + }; + + SingleSelection.prototype.bind = function (container, $container) { + var self = this; + + SingleSelection.__super__.bind.apply(this, arguments); + + var id = container.id + '-container'; + + this.$selection.find('.select2-selection__rendered') + .attr('id', id) + .attr('role', 'textbox') + .attr('aria-readonly', 'true'); + this.$selection.attr('aria-labelledby', id); + + this.$selection.on('mousedown', function (evt) { + // Only respond to left clicks + if (evt.which !== 1) { + return; + } + + self.trigger('toggle', { + originalEvent: evt + }); + }); + + this.$selection.on('focus', function (evt) { + // User focuses on the container + }); + + this.$selection.on('blur', function (evt) { + // User exits the container + }); + + container.on('focus', function (evt) { + if (!container.isOpen()) { + self.$selection.trigger('focus'); + } + }); + }; + + SingleSelection.prototype.clear = function () { + var $rendered = this.$selection.find('.select2-selection__rendered'); + $rendered.empty(); + $rendered.removeAttr('title'); // clear tooltip on empty + }; + + SingleSelection.prototype.display = function (data, container) { + var template = this.options.get('templateSelection'); + var escapeMarkup = this.options.get('escapeMarkup'); + + return escapeMarkup(template(data, container)); + }; + + SingleSelection.prototype.selectionContainer = function () { + return $(''); + }; + + SingleSelection.prototype.update = function (data) { + if (data.length === 0) { + this.clear(); + return; + } + + var selection = data[0]; + + var $rendered = this.$selection.find('.select2-selection__rendered'); + var formatted = this.display(selection, $rendered); + + $rendered.empty().append(formatted); + + var title = selection.title || selection.text; + + if (title) { + $rendered.attr('title', title); + } else { + $rendered.removeAttr('title'); + } + }; + + return SingleSelection; +}); + +S2.define('select2/selection/multiple',[ + 'jquery', + './base', + '../utils' +], function ($, BaseSelection, Utils) { + function MultipleSelection ($element, options) { + MultipleSelection.__super__.constructor.apply(this, arguments); + } + + Utils.Extend(MultipleSelection, BaseSelection); + + MultipleSelection.prototype.render = function () { + var $selection = MultipleSelection.__super__.render.call(this); + + $selection.addClass('select2-selection--multiple'); + + $selection.html( + '
        ' + ); + + return $selection; + }; + + MultipleSelection.prototype.bind = function (container, $container) { + var self = this; + + MultipleSelection.__super__.bind.apply(this, arguments); + + this.$selection.on('click', function (evt) { + self.trigger('toggle', { + originalEvent: evt + }); + }); + + this.$selection.on( + 'click', + '.select2-selection__choice__remove', + function (evt) { + // Ignore the event if it is disabled + if (self.isDisabled()) { + return; + } + + var $remove = $(this); + var $selection = $remove.parent(); + + var data = Utils.GetData($selection[0], 'data'); + + self.trigger('unselect', { + originalEvent: evt, + data: data + }); + } + ); + }; + + MultipleSelection.prototype.clear = function () { + var $rendered = this.$selection.find('.select2-selection__rendered'); + $rendered.empty(); + $rendered.removeAttr('title'); + }; + + MultipleSelection.prototype.display = function (data, container) { + var template = this.options.get('templateSelection'); + var escapeMarkup = this.options.get('escapeMarkup'); + + return escapeMarkup(template(data, container)); + }; + + MultipleSelection.prototype.selectionContainer = function () { + var $container = $( + '
      • ' + + '' + + '×' + + '' + + '
      • ' + ); + + return $container; + }; + + MultipleSelection.prototype.update = function (data) { + this.clear(); + + if (data.length === 0) { + return; + } + + var $selections = []; + + for (var d = 0; d < data.length; d++) { + var selection = data[d]; + + var $selection = this.selectionContainer(); + var formatted = this.display(selection, $selection); + + $selection.append(formatted); + + var title = selection.title || selection.text; + + if (title) { + $selection.attr('title', title); + } + + Utils.StoreData($selection[0], 'data', selection); + + $selections.push($selection); + } + + var $rendered = this.$selection.find('.select2-selection__rendered'); + + Utils.appendMany($rendered, $selections); + }; + + return MultipleSelection; +}); + +S2.define('select2/selection/placeholder',[ + '../utils' +], function (Utils) { + function Placeholder (decorated, $element, options) { + this.placeholder = this.normalizePlaceholder(options.get('placeholder')); + + decorated.call(this, $element, options); + } + + Placeholder.prototype.normalizePlaceholder = function (_, placeholder) { + if (typeof placeholder === 'string') { + placeholder = { + id: '', + text: placeholder + }; + } + + return placeholder; + }; + + Placeholder.prototype.createPlaceholder = function (decorated, placeholder) { + var $placeholder = this.selectionContainer(); + + $placeholder.html(this.display(placeholder)); + $placeholder.addClass('select2-selection__placeholder') + .removeClass('select2-selection__choice'); + + return $placeholder; + }; + + Placeholder.prototype.update = function (decorated, data) { + var singlePlaceholder = ( + data.length == 1 && data[0].id != this.placeholder.id + ); + var multipleSelections = data.length > 1; + + if (multipleSelections || singlePlaceholder) { + return decorated.call(this, data); + } + + this.clear(); + + var $placeholder = this.createPlaceholder(this.placeholder); + + this.$selection.find('.select2-selection__rendered').append($placeholder); + }; + + return Placeholder; +}); + +S2.define('select2/selection/allowClear',[ + 'jquery', + '../keys', + '../utils' +], function ($, KEYS, Utils) { + function AllowClear () { } + + AllowClear.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + if (this.placeholder == null) { + if (this.options.get('debug') && window.console && console.error) { + console.error( + 'Select2: The `allowClear` option should be used in combination ' + + 'with the `placeholder` option.' + ); + } + } + + this.$selection.on('mousedown', '.select2-selection__clear', + function (evt) { + self._handleClear(evt); + }); + + container.on('keypress', function (evt) { + self._handleKeyboardClear(evt, container); + }); + }; + + AllowClear.prototype._handleClear = function (_, evt) { + // Ignore the event if it is disabled + if (this.isDisabled()) { + return; + } + + var $clear = this.$selection.find('.select2-selection__clear'); + + // Ignore the event if nothing has been selected + if ($clear.length === 0) { + return; + } + + evt.stopPropagation(); + + var data = Utils.GetData($clear[0], 'data'); + + var previousVal = this.$element.val(); + this.$element.val(this.placeholder.id); + + var unselectData = { + data: data + }; + this.trigger('clear', unselectData); + if (unselectData.prevented) { + this.$element.val(previousVal); + return; + } + + for (var d = 0; d < data.length; d++) { + unselectData = { + data: data[d] + }; + + // Trigger the `unselect` event, so people can prevent it from being + // cleared. + this.trigger('unselect', unselectData); + + // If the event was prevented, don't clear it out. + if (unselectData.prevented) { + this.$element.val(previousVal); + return; + } + } + + this.$element.trigger('input').trigger('change'); + + this.trigger('toggle', {}); + }; + + AllowClear.prototype._handleKeyboardClear = function (_, evt, container) { + if (container.isOpen()) { + return; + } + + if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) { + this._handleClear(evt); + } + }; + + AllowClear.prototype.update = function (decorated, data) { + decorated.call(this, data); + + if (this.$selection.find('.select2-selection__placeholder').length > 0 || + data.length === 0) { + return; + } + + var removeAll = this.options.get('translations').get('removeAllItems'); + + var $remove = $( + '' + + '×' + + '' + ); + Utils.StoreData($remove[0], 'data', data); + + this.$selection.find('.select2-selection__rendered').prepend($remove); + }; + + return AllowClear; +}); + +S2.define('select2/selection/search',[ + 'jquery', + '../utils', + '../keys' +], function ($, Utils, KEYS) { + function Search (decorated, $element, options) { + decorated.call(this, $element, options); + } + + Search.prototype.render = function (decorated) { + var $search = $( + '' + ); + + this.$searchContainer = $search; + this.$search = $search.find('input'); + + var $rendered = decorated.call(this); + + this._transferTabIndex(); + + return $rendered; + }; + + Search.prototype.bind = function (decorated, container, $container) { + var self = this; + + var resultsId = container.id + '-results'; + + decorated.call(this, container, $container); + + container.on('open', function () { + self.$search.attr('aria-controls', resultsId); + self.$search.trigger('focus'); + }); + + container.on('close', function () { + self.$search.val(''); + self.$search.removeAttr('aria-controls'); + self.$search.removeAttr('aria-activedescendant'); + self.$search.trigger('focus'); + }); + + container.on('enable', function () { + self.$search.prop('disabled', false); + + self._transferTabIndex(); + }); + + container.on('disable', function () { + self.$search.prop('disabled', true); + }); + + container.on('focus', function (evt) { + self.$search.trigger('focus'); + }); + + container.on('results:focus', function (params) { + if (params.data._resultId) { + self.$search.attr('aria-activedescendant', params.data._resultId); + } else { + self.$search.removeAttr('aria-activedescendant'); + } + }); + + this.$selection.on('focusin', '.select2-search--inline', function (evt) { + self.trigger('focus', evt); + }); + + this.$selection.on('focusout', '.select2-search--inline', function (evt) { + self._handleBlur(evt); + }); + + this.$selection.on('keydown', '.select2-search--inline', function (evt) { + evt.stopPropagation(); + + self.trigger('keypress', evt); + + self._keyUpPrevented = evt.isDefaultPrevented(); + + var key = evt.which; + + if (key === KEYS.BACKSPACE && self.$search.val() === '') { + var $previousChoice = self.$searchContainer + .prev('.select2-selection__choice'); + + if ($previousChoice.length > 0) { + var item = Utils.GetData($previousChoice[0], 'data'); + + self.searchRemoveChoice(item); + + evt.preventDefault(); + } + } + }); + + this.$selection.on('click', '.select2-search--inline', function (evt) { + if (self.$search.val()) { + evt.stopPropagation(); + } + }); + + // Try to detect the IE version should the `documentMode` property that + // is stored on the document. This is only implemented in IE and is + // slightly cleaner than doing a user agent check. + // This property is not available in Edge, but Edge also doesn't have + // this bug. + var msie = document.documentMode; + var disableInputEvents = msie && msie <= 11; + + // Workaround for browsers which do not support the `input` event + // This will prevent double-triggering of events for browsers which support + // both the `keyup` and `input` events. + this.$selection.on( + 'input.searchcheck', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents) { + self.$selection.off('input.search input.searchcheck'); + return; + } + + // Unbind the duplicated `keyup` event + self.$selection.off('keyup.search'); + } + ); + + this.$selection.on( + 'keyup.search input.search', + '.select2-search--inline', + function (evt) { + // IE will trigger the `input` event when a placeholder is used on a + // search box. To get around this issue, we are forced to ignore all + // `input` events in IE and keep using `keyup`. + if (disableInputEvents && evt.type === 'input') { + self.$selection.off('input.search input.searchcheck'); + return; + } + + var key = evt.which; + + // We can freely ignore events from modifier keys + if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) { + return; + } + + // Tabbing will be handled during the `keydown` phase + if (key == KEYS.TAB) { + return; + } + + self.handleSearch(evt); + } + ); + }; + + /** + * This method will transfer the tabindex attribute from the rendered + * selection to the search box. This allows for the search box to be used as + * the primary focus instead of the selection container. + * + * @private + */ + Search.prototype._transferTabIndex = function (decorated) { + this.$search.attr('tabindex', this.$selection.attr('tabindex')); + this.$selection.attr('tabindex', '-1'); + }; + + Search.prototype.createPlaceholder = function (decorated, placeholder) { + this.$search.attr('placeholder', placeholder.text); + }; + + Search.prototype.update = function (decorated, data) { + var searchHadFocus = this.$search[0] == document.activeElement; + + this.$search.attr('placeholder', ''); + + decorated.call(this, data); + + this.$selection.find('.select2-selection__rendered') + .append(this.$searchContainer); + + this.resizeSearch(); + if (searchHadFocus) { + this.$search.trigger('focus'); + } + }; + + Search.prototype.handleSearch = function () { + this.resizeSearch(); + + if (!this._keyUpPrevented) { + var input = this.$search.val(); + + this.trigger('query', { + term: input + }); + } + + this._keyUpPrevented = false; + }; + + Search.prototype.searchRemoveChoice = function (decorated, item) { + this.trigger('unselect', { + data: item + }); + + this.$search.val(item.text); + this.handleSearch(); + }; + + Search.prototype.resizeSearch = function () { + this.$search.css('width', '25px'); + + var width = ''; + + if (this.$search.attr('placeholder') !== '') { + width = this.$selection.find('.select2-selection__rendered').width(); + } else { + var minimumWidth = this.$search.val().length + 1; + + width = (minimumWidth * 0.75) + 'em'; + } + + this.$search.css('width', width); + }; + + return Search; +}); + +S2.define('select2/selection/eventRelay',[ + 'jquery' +], function ($) { + function EventRelay () { } + + EventRelay.prototype.bind = function (decorated, container, $container) { + var self = this; + var relayEvents = [ + 'open', 'opening', + 'close', 'closing', + 'select', 'selecting', + 'unselect', 'unselecting', + 'clear', 'clearing' + ]; + + var preventableEvents = [ + 'opening', 'closing', 'selecting', 'unselecting', 'clearing' + ]; + + decorated.call(this, container, $container); + + container.on('*', function (name, params) { + // Ignore events that should not be relayed + if ($.inArray(name, relayEvents) === -1) { + return; + } + + // The parameters should always be an object + params = params || {}; + + // Generate the jQuery event for the Select2 event + var evt = $.Event('select2:' + name, { + params: params + }); + + self.$element.trigger(evt); + + // Only handle preventable events if it was one + if ($.inArray(name, preventableEvents) === -1) { + return; + } + + params.prevented = evt.isDefaultPrevented(); + }); + }; + + return EventRelay; +}); + +S2.define('select2/translation',[ + 'jquery', + 'require' +], function ($, require) { + function Translation (dict) { + this.dict = dict || {}; + } + + Translation.prototype.all = function () { + return this.dict; + }; + + Translation.prototype.get = function (key) { + return this.dict[key]; + }; + + Translation.prototype.extend = function (translation) { + this.dict = $.extend({}, translation.all(), this.dict); + }; + + // Static functions + + Translation._cache = {}; + + Translation.loadPath = function (path) { + if (!(path in Translation._cache)) { + var translations = require(path); + + Translation._cache[path] = translations; + } + + return new Translation(Translation._cache[path]); + }; + + return Translation; +}); + +S2.define('select2/diacritics',[ + +], function () { + var diacritics = { + '\u24B6': 'A', + '\uFF21': 'A', + '\u00C0': 'A', + '\u00C1': 'A', + '\u00C2': 'A', + '\u1EA6': 'A', + '\u1EA4': 'A', + '\u1EAA': 'A', + '\u1EA8': 'A', + '\u00C3': 'A', + '\u0100': 'A', + '\u0102': 'A', + '\u1EB0': 'A', + '\u1EAE': 'A', + '\u1EB4': 'A', + '\u1EB2': 'A', + '\u0226': 'A', + '\u01E0': 'A', + '\u00C4': 'A', + '\u01DE': 'A', + '\u1EA2': 'A', + '\u00C5': 'A', + '\u01FA': 'A', + '\u01CD': 'A', + '\u0200': 'A', + '\u0202': 'A', + '\u1EA0': 'A', + '\u1EAC': 'A', + '\u1EB6': 'A', + '\u1E00': 'A', + '\u0104': 'A', + '\u023A': 'A', + '\u2C6F': 'A', + '\uA732': 'AA', + '\u00C6': 'AE', + '\u01FC': 'AE', + '\u01E2': 'AE', + '\uA734': 'AO', + '\uA736': 'AU', + '\uA738': 'AV', + '\uA73A': 'AV', + '\uA73C': 'AY', + '\u24B7': 'B', + '\uFF22': 'B', + '\u1E02': 'B', + '\u1E04': 'B', + '\u1E06': 'B', + '\u0243': 'B', + '\u0182': 'B', + '\u0181': 'B', + '\u24B8': 'C', + '\uFF23': 'C', + '\u0106': 'C', + '\u0108': 'C', + '\u010A': 'C', + '\u010C': 'C', + '\u00C7': 'C', + '\u1E08': 'C', + '\u0187': 'C', + '\u023B': 'C', + '\uA73E': 'C', + '\u24B9': 'D', + '\uFF24': 'D', + '\u1E0A': 'D', + '\u010E': 'D', + '\u1E0C': 'D', + '\u1E10': 'D', + '\u1E12': 'D', + '\u1E0E': 'D', + '\u0110': 'D', + '\u018B': 'D', + '\u018A': 'D', + '\u0189': 'D', + '\uA779': 'D', + '\u01F1': 'DZ', + '\u01C4': 'DZ', + '\u01F2': 'Dz', + '\u01C5': 'Dz', + '\u24BA': 'E', + '\uFF25': 'E', + '\u00C8': 'E', + '\u00C9': 'E', + '\u00CA': 'E', + '\u1EC0': 'E', + '\u1EBE': 'E', + '\u1EC4': 'E', + '\u1EC2': 'E', + '\u1EBC': 'E', + '\u0112': 'E', + '\u1E14': 'E', + '\u1E16': 'E', + '\u0114': 'E', + '\u0116': 'E', + '\u00CB': 'E', + '\u1EBA': 'E', + '\u011A': 'E', + '\u0204': 'E', + '\u0206': 'E', + '\u1EB8': 'E', + '\u1EC6': 'E', + '\u0228': 'E', + '\u1E1C': 'E', + '\u0118': 'E', + '\u1E18': 'E', + '\u1E1A': 'E', + '\u0190': 'E', + '\u018E': 'E', + '\u24BB': 'F', + '\uFF26': 'F', + '\u1E1E': 'F', + '\u0191': 'F', + '\uA77B': 'F', + '\u24BC': 'G', + '\uFF27': 'G', + '\u01F4': 'G', + '\u011C': 'G', + '\u1E20': 'G', + '\u011E': 'G', + '\u0120': 'G', + '\u01E6': 'G', + '\u0122': 'G', + '\u01E4': 'G', + '\u0193': 'G', + '\uA7A0': 'G', + '\uA77D': 'G', + '\uA77E': 'G', + '\u24BD': 'H', + '\uFF28': 'H', + '\u0124': 'H', + '\u1E22': 'H', + '\u1E26': 'H', + '\u021E': 'H', + '\u1E24': 'H', + '\u1E28': 'H', + '\u1E2A': 'H', + '\u0126': 'H', + '\u2C67': 'H', + '\u2C75': 'H', + '\uA78D': 'H', + '\u24BE': 'I', + '\uFF29': 'I', + '\u00CC': 'I', + '\u00CD': 'I', + '\u00CE': 'I', + '\u0128': 'I', + '\u012A': 'I', + '\u012C': 'I', + '\u0130': 'I', + '\u00CF': 'I', + '\u1E2E': 'I', + '\u1EC8': 'I', + '\u01CF': 'I', + '\u0208': 'I', + '\u020A': 'I', + '\u1ECA': 'I', + '\u012E': 'I', + '\u1E2C': 'I', + '\u0197': 'I', + '\u24BF': 'J', + '\uFF2A': 'J', + '\u0134': 'J', + '\u0248': 'J', + '\u24C0': 'K', + '\uFF2B': 'K', + '\u1E30': 'K', + '\u01E8': 'K', + '\u1E32': 'K', + '\u0136': 'K', + '\u1E34': 'K', + '\u0198': 'K', + '\u2C69': 'K', + '\uA740': 'K', + '\uA742': 'K', + '\uA744': 'K', + '\uA7A2': 'K', + '\u24C1': 'L', + '\uFF2C': 'L', + '\u013F': 'L', + '\u0139': 'L', + '\u013D': 'L', + '\u1E36': 'L', + '\u1E38': 'L', + '\u013B': 'L', + '\u1E3C': 'L', + '\u1E3A': 'L', + '\u0141': 'L', + '\u023D': 'L', + '\u2C62': 'L', + '\u2C60': 'L', + '\uA748': 'L', + '\uA746': 'L', + '\uA780': 'L', + '\u01C7': 'LJ', + '\u01C8': 'Lj', + '\u24C2': 'M', + '\uFF2D': 'M', + '\u1E3E': 'M', + '\u1E40': 'M', + '\u1E42': 'M', + '\u2C6E': 'M', + '\u019C': 'M', + '\u24C3': 'N', + '\uFF2E': 'N', + '\u01F8': 'N', + '\u0143': 'N', + '\u00D1': 'N', + '\u1E44': 'N', + '\u0147': 'N', + '\u1E46': 'N', + '\u0145': 'N', + '\u1E4A': 'N', + '\u1E48': 'N', + '\u0220': 'N', + '\u019D': 'N', + '\uA790': 'N', + '\uA7A4': 'N', + '\u01CA': 'NJ', + '\u01CB': 'Nj', + '\u24C4': 'O', + '\uFF2F': 'O', + '\u00D2': 'O', + '\u00D3': 'O', + '\u00D4': 'O', + '\u1ED2': 'O', + '\u1ED0': 'O', + '\u1ED6': 'O', + '\u1ED4': 'O', + '\u00D5': 'O', + '\u1E4C': 'O', + '\u022C': 'O', + '\u1E4E': 'O', + '\u014C': 'O', + '\u1E50': 'O', + '\u1E52': 'O', + '\u014E': 'O', + '\u022E': 'O', + '\u0230': 'O', + '\u00D6': 'O', + '\u022A': 'O', + '\u1ECE': 'O', + '\u0150': 'O', + '\u01D1': 'O', + '\u020C': 'O', + '\u020E': 'O', + '\u01A0': 'O', + '\u1EDC': 'O', + '\u1EDA': 'O', + '\u1EE0': 'O', + '\u1EDE': 'O', + '\u1EE2': 'O', + '\u1ECC': 'O', + '\u1ED8': 'O', + '\u01EA': 'O', + '\u01EC': 'O', + '\u00D8': 'O', + '\u01FE': 'O', + '\u0186': 'O', + '\u019F': 'O', + '\uA74A': 'O', + '\uA74C': 'O', + '\u0152': 'OE', + '\u01A2': 'OI', + '\uA74E': 'OO', + '\u0222': 'OU', + '\u24C5': 'P', + '\uFF30': 'P', + '\u1E54': 'P', + '\u1E56': 'P', + '\u01A4': 'P', + '\u2C63': 'P', + '\uA750': 'P', + '\uA752': 'P', + '\uA754': 'P', + '\u24C6': 'Q', + '\uFF31': 'Q', + '\uA756': 'Q', + '\uA758': 'Q', + '\u024A': 'Q', + '\u24C7': 'R', + '\uFF32': 'R', + '\u0154': 'R', + '\u1E58': 'R', + '\u0158': 'R', + '\u0210': 'R', + '\u0212': 'R', + '\u1E5A': 'R', + '\u1E5C': 'R', + '\u0156': 'R', + '\u1E5E': 'R', + '\u024C': 'R', + '\u2C64': 'R', + '\uA75A': 'R', + '\uA7A6': 'R', + '\uA782': 'R', + '\u24C8': 'S', + '\uFF33': 'S', + '\u1E9E': 'S', + '\u015A': 'S', + '\u1E64': 'S', + '\u015C': 'S', + '\u1E60': 'S', + '\u0160': 'S', + '\u1E66': 'S', + '\u1E62': 'S', + '\u1E68': 'S', + '\u0218': 'S', + '\u015E': 'S', + '\u2C7E': 'S', + '\uA7A8': 'S', + '\uA784': 'S', + '\u24C9': 'T', + '\uFF34': 'T', + '\u1E6A': 'T', + '\u0164': 'T', + '\u1E6C': 'T', + '\u021A': 'T', + '\u0162': 'T', + '\u1E70': 'T', + '\u1E6E': 'T', + '\u0166': 'T', + '\u01AC': 'T', + '\u01AE': 'T', + '\u023E': 'T', + '\uA786': 'T', + '\uA728': 'TZ', + '\u24CA': 'U', + '\uFF35': 'U', + '\u00D9': 'U', + '\u00DA': 'U', + '\u00DB': 'U', + '\u0168': 'U', + '\u1E78': 'U', + '\u016A': 'U', + '\u1E7A': 'U', + '\u016C': 'U', + '\u00DC': 'U', + '\u01DB': 'U', + '\u01D7': 'U', + '\u01D5': 'U', + '\u01D9': 'U', + '\u1EE6': 'U', + '\u016E': 'U', + '\u0170': 'U', + '\u01D3': 'U', + '\u0214': 'U', + '\u0216': 'U', + '\u01AF': 'U', + '\u1EEA': 'U', + '\u1EE8': 'U', + '\u1EEE': 'U', + '\u1EEC': 'U', + '\u1EF0': 'U', + '\u1EE4': 'U', + '\u1E72': 'U', + '\u0172': 'U', + '\u1E76': 'U', + '\u1E74': 'U', + '\u0244': 'U', + '\u24CB': 'V', + '\uFF36': 'V', + '\u1E7C': 'V', + '\u1E7E': 'V', + '\u01B2': 'V', + '\uA75E': 'V', + '\u0245': 'V', + '\uA760': 'VY', + '\u24CC': 'W', + '\uFF37': 'W', + '\u1E80': 'W', + '\u1E82': 'W', + '\u0174': 'W', + '\u1E86': 'W', + '\u1E84': 'W', + '\u1E88': 'W', + '\u2C72': 'W', + '\u24CD': 'X', + '\uFF38': 'X', + '\u1E8A': 'X', + '\u1E8C': 'X', + '\u24CE': 'Y', + '\uFF39': 'Y', + '\u1EF2': 'Y', + '\u00DD': 'Y', + '\u0176': 'Y', + '\u1EF8': 'Y', + '\u0232': 'Y', + '\u1E8E': 'Y', + '\u0178': 'Y', + '\u1EF6': 'Y', + '\u1EF4': 'Y', + '\u01B3': 'Y', + '\u024E': 'Y', + '\u1EFE': 'Y', + '\u24CF': 'Z', + '\uFF3A': 'Z', + '\u0179': 'Z', + '\u1E90': 'Z', + '\u017B': 'Z', + '\u017D': 'Z', + '\u1E92': 'Z', + '\u1E94': 'Z', + '\u01B5': 'Z', + '\u0224': 'Z', + '\u2C7F': 'Z', + '\u2C6B': 'Z', + '\uA762': 'Z', + '\u24D0': 'a', + '\uFF41': 'a', + '\u1E9A': 'a', + '\u00E0': 'a', + '\u00E1': 'a', + '\u00E2': 'a', + '\u1EA7': 'a', + '\u1EA5': 'a', + '\u1EAB': 'a', + '\u1EA9': 'a', + '\u00E3': 'a', + '\u0101': 'a', + '\u0103': 'a', + '\u1EB1': 'a', + '\u1EAF': 'a', + '\u1EB5': 'a', + '\u1EB3': 'a', + '\u0227': 'a', + '\u01E1': 'a', + '\u00E4': 'a', + '\u01DF': 'a', + '\u1EA3': 'a', + '\u00E5': 'a', + '\u01FB': 'a', + '\u01CE': 'a', + '\u0201': 'a', + '\u0203': 'a', + '\u1EA1': 'a', + '\u1EAD': 'a', + '\u1EB7': 'a', + '\u1E01': 'a', + '\u0105': 'a', + '\u2C65': 'a', + '\u0250': 'a', + '\uA733': 'aa', + '\u00E6': 'ae', + '\u01FD': 'ae', + '\u01E3': 'ae', + '\uA735': 'ao', + '\uA737': 'au', + '\uA739': 'av', + '\uA73B': 'av', + '\uA73D': 'ay', + '\u24D1': 'b', + '\uFF42': 'b', + '\u1E03': 'b', + '\u1E05': 'b', + '\u1E07': 'b', + '\u0180': 'b', + '\u0183': 'b', + '\u0253': 'b', + '\u24D2': 'c', + '\uFF43': 'c', + '\u0107': 'c', + '\u0109': 'c', + '\u010B': 'c', + '\u010D': 'c', + '\u00E7': 'c', + '\u1E09': 'c', + '\u0188': 'c', + '\u023C': 'c', + '\uA73F': 'c', + '\u2184': 'c', + '\u24D3': 'd', + '\uFF44': 'd', + '\u1E0B': 'd', + '\u010F': 'd', + '\u1E0D': 'd', + '\u1E11': 'd', + '\u1E13': 'd', + '\u1E0F': 'd', + '\u0111': 'd', + '\u018C': 'd', + '\u0256': 'd', + '\u0257': 'd', + '\uA77A': 'd', + '\u01F3': 'dz', + '\u01C6': 'dz', + '\u24D4': 'e', + '\uFF45': 'e', + '\u00E8': 'e', + '\u00E9': 'e', + '\u00EA': 'e', + '\u1EC1': 'e', + '\u1EBF': 'e', + '\u1EC5': 'e', + '\u1EC3': 'e', + '\u1EBD': 'e', + '\u0113': 'e', + '\u1E15': 'e', + '\u1E17': 'e', + '\u0115': 'e', + '\u0117': 'e', + '\u00EB': 'e', + '\u1EBB': 'e', + '\u011B': 'e', + '\u0205': 'e', + '\u0207': 'e', + '\u1EB9': 'e', + '\u1EC7': 'e', + '\u0229': 'e', + '\u1E1D': 'e', + '\u0119': 'e', + '\u1E19': 'e', + '\u1E1B': 'e', + '\u0247': 'e', + '\u025B': 'e', + '\u01DD': 'e', + '\u24D5': 'f', + '\uFF46': 'f', + '\u1E1F': 'f', + '\u0192': 'f', + '\uA77C': 'f', + '\u24D6': 'g', + '\uFF47': 'g', + '\u01F5': 'g', + '\u011D': 'g', + '\u1E21': 'g', + '\u011F': 'g', + '\u0121': 'g', + '\u01E7': 'g', + '\u0123': 'g', + '\u01E5': 'g', + '\u0260': 'g', + '\uA7A1': 'g', + '\u1D79': 'g', + '\uA77F': 'g', + '\u24D7': 'h', + '\uFF48': 'h', + '\u0125': 'h', + '\u1E23': 'h', + '\u1E27': 'h', + '\u021F': 'h', + '\u1E25': 'h', + '\u1E29': 'h', + '\u1E2B': 'h', + '\u1E96': 'h', + '\u0127': 'h', + '\u2C68': 'h', + '\u2C76': 'h', + '\u0265': 'h', + '\u0195': 'hv', + '\u24D8': 'i', + '\uFF49': 'i', + '\u00EC': 'i', + '\u00ED': 'i', + '\u00EE': 'i', + '\u0129': 'i', + '\u012B': 'i', + '\u012D': 'i', + '\u00EF': 'i', + '\u1E2F': 'i', + '\u1EC9': 'i', + '\u01D0': 'i', + '\u0209': 'i', + '\u020B': 'i', + '\u1ECB': 'i', + '\u012F': 'i', + '\u1E2D': 'i', + '\u0268': 'i', + '\u0131': 'i', + '\u24D9': 'j', + '\uFF4A': 'j', + '\u0135': 'j', + '\u01F0': 'j', + '\u0249': 'j', + '\u24DA': 'k', + '\uFF4B': 'k', + '\u1E31': 'k', + '\u01E9': 'k', + '\u1E33': 'k', + '\u0137': 'k', + '\u1E35': 'k', + '\u0199': 'k', + '\u2C6A': 'k', + '\uA741': 'k', + '\uA743': 'k', + '\uA745': 'k', + '\uA7A3': 'k', + '\u24DB': 'l', + '\uFF4C': 'l', + '\u0140': 'l', + '\u013A': 'l', + '\u013E': 'l', + '\u1E37': 'l', + '\u1E39': 'l', + '\u013C': 'l', + '\u1E3D': 'l', + '\u1E3B': 'l', + '\u017F': 'l', + '\u0142': 'l', + '\u019A': 'l', + '\u026B': 'l', + '\u2C61': 'l', + '\uA749': 'l', + '\uA781': 'l', + '\uA747': 'l', + '\u01C9': 'lj', + '\u24DC': 'm', + '\uFF4D': 'm', + '\u1E3F': 'm', + '\u1E41': 'm', + '\u1E43': 'm', + '\u0271': 'm', + '\u026F': 'm', + '\u24DD': 'n', + '\uFF4E': 'n', + '\u01F9': 'n', + '\u0144': 'n', + '\u00F1': 'n', + '\u1E45': 'n', + '\u0148': 'n', + '\u1E47': 'n', + '\u0146': 'n', + '\u1E4B': 'n', + '\u1E49': 'n', + '\u019E': 'n', + '\u0272': 'n', + '\u0149': 'n', + '\uA791': 'n', + '\uA7A5': 'n', + '\u01CC': 'nj', + '\u24DE': 'o', + '\uFF4F': 'o', + '\u00F2': 'o', + '\u00F3': 'o', + '\u00F4': 'o', + '\u1ED3': 'o', + '\u1ED1': 'o', + '\u1ED7': 'o', + '\u1ED5': 'o', + '\u00F5': 'o', + '\u1E4D': 'o', + '\u022D': 'o', + '\u1E4F': 'o', + '\u014D': 'o', + '\u1E51': 'o', + '\u1E53': 'o', + '\u014F': 'o', + '\u022F': 'o', + '\u0231': 'o', + '\u00F6': 'o', + '\u022B': 'o', + '\u1ECF': 'o', + '\u0151': 'o', + '\u01D2': 'o', + '\u020D': 'o', + '\u020F': 'o', + '\u01A1': 'o', + '\u1EDD': 'o', + '\u1EDB': 'o', + '\u1EE1': 'o', + '\u1EDF': 'o', + '\u1EE3': 'o', + '\u1ECD': 'o', + '\u1ED9': 'o', + '\u01EB': 'o', + '\u01ED': 'o', + '\u00F8': 'o', + '\u01FF': 'o', + '\u0254': 'o', + '\uA74B': 'o', + '\uA74D': 'o', + '\u0275': 'o', + '\u0153': 'oe', + '\u01A3': 'oi', + '\u0223': 'ou', + '\uA74F': 'oo', + '\u24DF': 'p', + '\uFF50': 'p', + '\u1E55': 'p', + '\u1E57': 'p', + '\u01A5': 'p', + '\u1D7D': 'p', + '\uA751': 'p', + '\uA753': 'p', + '\uA755': 'p', + '\u24E0': 'q', + '\uFF51': 'q', + '\u024B': 'q', + '\uA757': 'q', + '\uA759': 'q', + '\u24E1': 'r', + '\uFF52': 'r', + '\u0155': 'r', + '\u1E59': 'r', + '\u0159': 'r', + '\u0211': 'r', + '\u0213': 'r', + '\u1E5B': 'r', + '\u1E5D': 'r', + '\u0157': 'r', + '\u1E5F': 'r', + '\u024D': 'r', + '\u027D': 'r', + '\uA75B': 'r', + '\uA7A7': 'r', + '\uA783': 'r', + '\u24E2': 's', + '\uFF53': 's', + '\u00DF': 's', + '\u015B': 's', + '\u1E65': 's', + '\u015D': 's', + '\u1E61': 's', + '\u0161': 's', + '\u1E67': 's', + '\u1E63': 's', + '\u1E69': 's', + '\u0219': 's', + '\u015F': 's', + '\u023F': 's', + '\uA7A9': 's', + '\uA785': 's', + '\u1E9B': 's', + '\u24E3': 't', + '\uFF54': 't', + '\u1E6B': 't', + '\u1E97': 't', + '\u0165': 't', + '\u1E6D': 't', + '\u021B': 't', + '\u0163': 't', + '\u1E71': 't', + '\u1E6F': 't', + '\u0167': 't', + '\u01AD': 't', + '\u0288': 't', + '\u2C66': 't', + '\uA787': 't', + '\uA729': 'tz', + '\u24E4': 'u', + '\uFF55': 'u', + '\u00F9': 'u', + '\u00FA': 'u', + '\u00FB': 'u', + '\u0169': 'u', + '\u1E79': 'u', + '\u016B': 'u', + '\u1E7B': 'u', + '\u016D': 'u', + '\u00FC': 'u', + '\u01DC': 'u', + '\u01D8': 'u', + '\u01D6': 'u', + '\u01DA': 'u', + '\u1EE7': 'u', + '\u016F': 'u', + '\u0171': 'u', + '\u01D4': 'u', + '\u0215': 'u', + '\u0217': 'u', + '\u01B0': 'u', + '\u1EEB': 'u', + '\u1EE9': 'u', + '\u1EEF': 'u', + '\u1EED': 'u', + '\u1EF1': 'u', + '\u1EE5': 'u', + '\u1E73': 'u', + '\u0173': 'u', + '\u1E77': 'u', + '\u1E75': 'u', + '\u0289': 'u', + '\u24E5': 'v', + '\uFF56': 'v', + '\u1E7D': 'v', + '\u1E7F': 'v', + '\u028B': 'v', + '\uA75F': 'v', + '\u028C': 'v', + '\uA761': 'vy', + '\u24E6': 'w', + '\uFF57': 'w', + '\u1E81': 'w', + '\u1E83': 'w', + '\u0175': 'w', + '\u1E87': 'w', + '\u1E85': 'w', + '\u1E98': 'w', + '\u1E89': 'w', + '\u2C73': 'w', + '\u24E7': 'x', + '\uFF58': 'x', + '\u1E8B': 'x', + '\u1E8D': 'x', + '\u24E8': 'y', + '\uFF59': 'y', + '\u1EF3': 'y', + '\u00FD': 'y', + '\u0177': 'y', + '\u1EF9': 'y', + '\u0233': 'y', + '\u1E8F': 'y', + '\u00FF': 'y', + '\u1EF7': 'y', + '\u1E99': 'y', + '\u1EF5': 'y', + '\u01B4': 'y', + '\u024F': 'y', + '\u1EFF': 'y', + '\u24E9': 'z', + '\uFF5A': 'z', + '\u017A': 'z', + '\u1E91': 'z', + '\u017C': 'z', + '\u017E': 'z', + '\u1E93': 'z', + '\u1E95': 'z', + '\u01B6': 'z', + '\u0225': 'z', + '\u0240': 'z', + '\u2C6C': 'z', + '\uA763': 'z', + '\u0386': '\u0391', + '\u0388': '\u0395', + '\u0389': '\u0397', + '\u038A': '\u0399', + '\u03AA': '\u0399', + '\u038C': '\u039F', + '\u038E': '\u03A5', + '\u03AB': '\u03A5', + '\u038F': '\u03A9', + '\u03AC': '\u03B1', + '\u03AD': '\u03B5', + '\u03AE': '\u03B7', + '\u03AF': '\u03B9', + '\u03CA': '\u03B9', + '\u0390': '\u03B9', + '\u03CC': '\u03BF', + '\u03CD': '\u03C5', + '\u03CB': '\u03C5', + '\u03B0': '\u03C5', + '\u03CE': '\u03C9', + '\u03C2': '\u03C3', + '\u2019': '\'' + }; + + return diacritics; +}); + +S2.define('select2/data/base',[ + '../utils' +], function (Utils) { + function BaseAdapter ($element, options) { + BaseAdapter.__super__.constructor.call(this); + } + + Utils.Extend(BaseAdapter, Utils.Observable); + + BaseAdapter.prototype.current = function (callback) { + throw new Error('The `current` method must be defined in child classes.'); + }; + + BaseAdapter.prototype.query = function (params, callback) { + throw new Error('The `query` method must be defined in child classes.'); + }; + + BaseAdapter.prototype.bind = function (container, $container) { + // Can be implemented in subclasses + }; + + BaseAdapter.prototype.destroy = function () { + // Can be implemented in subclasses + }; + + BaseAdapter.prototype.generateResultId = function (container, data) { + var id = container.id + '-result-'; + + id += Utils.generateChars(4); + + if (data.id != null) { + id += '-' + data.id.toString(); + } else { + id += '-' + Utils.generateChars(4); + } + return id; + }; + + return BaseAdapter; +}); + +S2.define('select2/data/select',[ + './base', + '../utils', + 'jquery' +], function (BaseAdapter, Utils, $) { + function SelectAdapter ($element, options) { + this.$element = $element; + this.options = options; + + SelectAdapter.__super__.constructor.call(this); + } + + Utils.Extend(SelectAdapter, BaseAdapter); + + SelectAdapter.prototype.current = function (callback) { + var data = []; + var self = this; + + this.$element.find(':selected').each(function () { + var $option = $(this); + + var option = self.item($option); + + data.push(option); + }); + + callback(data); + }; + + SelectAdapter.prototype.select = function (data) { + var self = this; + + data.selected = true; + + // If data.element is a DOM node, use it instead + if ($(data.element).is('option')) { + data.element.selected = true; + + this.$element.trigger('input').trigger('change'); + + return; + } + + if (this.$element.prop('multiple')) { + this.current(function (currentData) { + var val = []; + + data = [data]; + data.push.apply(data, currentData); + + for (var d = 0; d < data.length; d++) { + var id = data[d].id; + + if ($.inArray(id, val) === -1) { + val.push(id); + } + } + + self.$element.val(val); + self.$element.trigger('input').trigger('change'); + }); + } else { + var val = data.id; + + this.$element.val(val); + this.$element.trigger('input').trigger('change'); + } + }; + + SelectAdapter.prototype.unselect = function (data) { + var self = this; + + if (!this.$element.prop('multiple')) { + return; + } + + data.selected = false; + + if ($(data.element).is('option')) { + data.element.selected = false; + + this.$element.trigger('input').trigger('change'); + + return; + } + + this.current(function (currentData) { + var val = []; + + for (var d = 0; d < currentData.length; d++) { + var id = currentData[d].id; + + if (id !== data.id && $.inArray(id, val) === -1) { + val.push(id); + } + } + + self.$element.val(val); + + self.$element.trigger('input').trigger('change'); + }); + }; + + SelectAdapter.prototype.bind = function (container, $container) { + var self = this; + + this.container = container; + + container.on('select', function (params) { + self.select(params.data); + }); + + container.on('unselect', function (params) { + self.unselect(params.data); + }); + }; + + SelectAdapter.prototype.destroy = function () { + // Remove anything added to child elements + this.$element.find('*').each(function () { + // Remove any custom data set by Select2 + Utils.RemoveData(this); + }); + }; + + SelectAdapter.prototype.query = function (params, callback) { + var data = []; + var self = this; + + var $options = this.$element.children(); + + $options.each(function () { + var $option = $(this); + + if (!$option.is('option') && !$option.is('optgroup')) { + return; + } + + var option = self.item($option); + + var matches = self.matches(params, option); + + if (matches !== null) { + data.push(matches); + } + }); + + callback({ + results: data + }); + }; + + SelectAdapter.prototype.addOptions = function ($options) { + Utils.appendMany(this.$element, $options); + }; + + SelectAdapter.prototype.option = function (data) { + var option; + + if (data.children) { + option = document.createElement('optgroup'); + option.label = data.text; + } else { + option = document.createElement('option'); + + if (option.textContent !== undefined) { + option.textContent = data.text; + } else { + option.innerText = data.text; + } + } + + if (data.id !== undefined) { + option.value = data.id; + } + + if (data.disabled) { + option.disabled = true; + } + + if (data.selected) { + option.selected = true; + } + + if (data.title) { + option.title = data.title; + } + + var $option = $(option); + + var normalizedData = this._normalizeItem(data); + normalizedData.element = option; + + // Override the option's data with the combined data + Utils.StoreData(option, 'data', normalizedData); + + return $option; + }; + + SelectAdapter.prototype.item = function ($option) { + var data = {}; + + data = Utils.GetData($option[0], 'data'); + + if (data != null) { + return data; + } + + if ($option.is('option')) { + data = { + id: $option.val(), + text: $option.text(), + disabled: $option.prop('disabled'), + selected: $option.prop('selected'), + title: $option.prop('title') + }; + } else if ($option.is('optgroup')) { + data = { + text: $option.prop('label'), + children: [], + title: $option.prop('title') + }; + + var $children = $option.children('option'); + var children = []; + + for (var c = 0; c < $children.length; c++) { + var $child = $($children[c]); + + var child = this.item($child); + + children.push(child); + } + + data.children = children; + } + + data = this._normalizeItem(data); + data.element = $option[0]; + + Utils.StoreData($option[0], 'data', data); + + return data; + }; + + SelectAdapter.prototype._normalizeItem = function (item) { + if (item !== Object(item)) { + item = { + id: item, + text: item + }; + } + + item = $.extend({}, { + text: '' + }, item); + + var defaults = { + selected: false, + disabled: false + }; + + if (item.id != null) { + item.id = item.id.toString(); + } + + if (item.text != null) { + item.text = item.text.toString(); + } + + if (item._resultId == null && item.id && this.container != null) { + item._resultId = this.generateResultId(this.container, item); + } + + return $.extend({}, defaults, item); + }; + + SelectAdapter.prototype.matches = function (params, data) { + var matcher = this.options.get('matcher'); + + return matcher(params, data); + }; + + return SelectAdapter; +}); + +S2.define('select2/data/array',[ + './select', + '../utils', + 'jquery' +], function (SelectAdapter, Utils, $) { + function ArrayAdapter ($element, options) { + this._dataToConvert = options.get('data') || []; + + ArrayAdapter.__super__.constructor.call(this, $element, options); + } + + Utils.Extend(ArrayAdapter, SelectAdapter); + + ArrayAdapter.prototype.bind = function (container, $container) { + ArrayAdapter.__super__.bind.call(this, container, $container); + + this.addOptions(this.convertToOptions(this._dataToConvert)); + }; + + ArrayAdapter.prototype.select = function (data) { + var $option = this.$element.find('option').filter(function (i, elm) { + return elm.value == data.id.toString(); + }); + + if ($option.length === 0) { + $option = this.option(data); + + this.addOptions($option); + } + + ArrayAdapter.__super__.select.call(this, data); + }; + + ArrayAdapter.prototype.convertToOptions = function (data) { + var self = this; + + var $existing = this.$element.find('option'); + var existingIds = $existing.map(function () { + return self.item($(this)).id; + }).get(); + + var $options = []; + + // Filter out all items except for the one passed in the argument + function onlyItem (item) { + return function () { + return $(this).val() == item.id; + }; + } + + for (var d = 0; d < data.length; d++) { + var item = this._normalizeItem(data[d]); + + // Skip items which were pre-loaded, only merge the data + if ($.inArray(item.id, existingIds) >= 0) { + var $existingOption = $existing.filter(onlyItem(item)); + + var existingData = this.item($existingOption); + var newData = $.extend(true, {}, item, existingData); + + var $newOption = this.option(newData); + + $existingOption.replaceWith($newOption); + + continue; + } + + var $option = this.option(item); + + if (item.children) { + var $children = this.convertToOptions(item.children); + + Utils.appendMany($option, $children); + } + + $options.push($option); + } + + return $options; + }; + + return ArrayAdapter; +}); + +S2.define('select2/data/ajax',[ + './array', + '../utils', + 'jquery' +], function (ArrayAdapter, Utils, $) { + function AjaxAdapter ($element, options) { + this.ajaxOptions = this._applyDefaults(options.get('ajax')); + + if (this.ajaxOptions.processResults != null) { + this.processResults = this.ajaxOptions.processResults; + } + + AjaxAdapter.__super__.constructor.call(this, $element, options); + } + + Utils.Extend(AjaxAdapter, ArrayAdapter); + + AjaxAdapter.prototype._applyDefaults = function (options) { + var defaults = { + data: function (params) { + return $.extend({}, params, { + q: params.term + }); + }, + transport: function (params, success, failure) { + var $request = $.ajax(params); + + $request.then(success); + $request.fail(failure); + + return $request; + } + }; + + return $.extend({}, defaults, options, true); + }; + + AjaxAdapter.prototype.processResults = function (results) { + return results; + }; + + AjaxAdapter.prototype.query = function (params, callback) { + var matches = []; + var self = this; + + if (this._request != null) { + // JSONP requests cannot always be aborted + if ($.isFunction(this._request.abort)) { + this._request.abort(); + } + + this._request = null; + } + + var options = $.extend({ + type: 'GET' + }, this.ajaxOptions); + + if (typeof options.url === 'function') { + options.url = options.url.call(this.$element, params); + } + + if (typeof options.data === 'function') { + options.data = options.data.call(this.$element, params); + } + + function request () { + var $request = options.transport(options, function (data) { + var results = self.processResults(data, params); + + if (self.options.get('debug') && window.console && console.error) { + // Check to make sure that the response included a `results` key. + if (!results || !results.results || !$.isArray(results.results)) { + console.error( + 'Select2: The AJAX results did not return an array in the ' + + '`results` key of the response.' + ); + } + } + + callback(results); + }, function () { + // Attempt to detect if a request was aborted + // Only works if the transport exposes a status property + if ('status' in $request && + ($request.status === 0 || $request.status === '0')) { + return; + } + + self.trigger('results:message', { + message: 'errorLoading' + }); + }); + + self._request = $request; + } + + if (this.ajaxOptions.delay && params.term != null) { + if (this._queryTimeout) { + window.clearTimeout(this._queryTimeout); + } + + this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay); + } else { + request(); + } + }; + + return AjaxAdapter; +}); + +S2.define('select2/data/tags',[ + 'jquery' +], function ($) { + function Tags (decorated, $element, options) { + var tags = options.get('tags'); + + var createTag = options.get('createTag'); + + if (createTag !== undefined) { + this.createTag = createTag; + } + + var insertTag = options.get('insertTag'); + + if (insertTag !== undefined) { + this.insertTag = insertTag; + } + + decorated.call(this, $element, options); + + if ($.isArray(tags)) { + for (var t = 0; t < tags.length; t++) { + var tag = tags[t]; + var item = this._normalizeItem(tag); + + var $option = this.option(item); + + this.$element.append($option); + } + } + } + + Tags.prototype.query = function (decorated, params, callback) { + var self = this; + + this._removeOldTags(); + + if (params.term == null || params.page != null) { + decorated.call(this, params, callback); + return; + } + + function wrapper (obj, child) { + var data = obj.results; + + for (var i = 0; i < data.length; i++) { + var option = data[i]; + + var checkChildren = ( + option.children != null && + !wrapper({ + results: option.children + }, true) + ); + + var optionText = (option.text || '').toUpperCase(); + var paramsTerm = (params.term || '').toUpperCase(); + + var checkText = optionText === paramsTerm; + + if (checkText || checkChildren) { + if (child) { + return false; + } + + obj.data = data; + callback(obj); + + return; + } + } + + if (child) { + return true; + } + + var tag = self.createTag(params); + + if (tag != null) { + var $option = self.option(tag); + $option.attr('data-select2-tag', true); + + self.addOptions([$option]); + + self.insertTag(data, tag); + } + + obj.results = data; + + callback(obj); + } + + decorated.call(this, params, wrapper); + }; + + Tags.prototype.createTag = function (decorated, params) { + var term = $.trim(params.term); + + if (term === '') { + return null; + } + + return { + id: term, + text: term + }; + }; + + Tags.prototype.insertTag = function (_, data, tag) { + data.unshift(tag); + }; + + Tags.prototype._removeOldTags = function (_) { + var $options = this.$element.find('option[data-select2-tag]'); + + $options.each(function () { + if (this.selected) { + return; + } + + $(this).remove(); + }); + }; + + return Tags; +}); + +S2.define('select2/data/tokenizer',[ + 'jquery' +], function ($) { + function Tokenizer (decorated, $element, options) { + var tokenizer = options.get('tokenizer'); + + if (tokenizer !== undefined) { + this.tokenizer = tokenizer; + } + + decorated.call(this, $element, options); + } + + Tokenizer.prototype.bind = function (decorated, container, $container) { + decorated.call(this, container, $container); + + this.$search = container.dropdown.$search || container.selection.$search || + $container.find('.select2-search__field'); + }; + + Tokenizer.prototype.query = function (decorated, params, callback) { + var self = this; + + function createAndSelect (data) { + // Normalize the data object so we can use it for checks + var item = self._normalizeItem(data); + + // Check if the data object already exists as a tag + // Select it if it doesn't + var $existingOptions = self.$element.find('option').filter(function () { + return $(this).val() === item.id; + }); + + // If an existing option wasn't found for it, create the option + if (!$existingOptions.length) { + var $option = self.option(item); + $option.attr('data-select2-tag', true); + + self._removeOldTags(); + self.addOptions([$option]); + } + + // Select the item, now that we know there is an option for it + select(item); + } + + function select (data) { + self.trigger('select', { + data: data + }); + } + + params.term = params.term || ''; + + var tokenData = this.tokenizer(params, this.options, createAndSelect); + + if (tokenData.term !== params.term) { + // Replace the search term if we have the search box + if (this.$search.length) { + this.$search.val(tokenData.term); + this.$search.trigger('focus'); + } + + params.term = tokenData.term; + } + + decorated.call(this, params, callback); + }; + + Tokenizer.prototype.tokenizer = function (_, params, options, callback) { + var separators = options.get('tokenSeparators') || []; + var term = params.term; + var i = 0; + + var createTag = this.createTag || function (params) { + return { + id: params.term, + text: params.term + }; + }; + + while (i < term.length) { + var termChar = term[i]; + + if ($.inArray(termChar, separators) === -1) { + i++; + + continue; + } + + var part = term.substr(0, i); + var partParams = $.extend({}, params, { + term: part + }); + + var data = createTag(partParams); + + if (data == null) { + i++; + continue; + } + + callback(data); + + // Reset the term to not include the tokenized portion + term = term.substr(i + 1) || ''; + i = 0; + } + + return { + term: term + }; + }; + + return Tokenizer; +}); + +S2.define('select2/data/minimumInputLength',[ + +], function () { + function MinimumInputLength (decorated, $e, options) { + this.minimumInputLength = options.get('minimumInputLength'); + + decorated.call(this, $e, options); + } + + MinimumInputLength.prototype.query = function (decorated, params, callback) { + params.term = params.term || ''; + + if (params.term.length < this.minimumInputLength) { + this.trigger('results:message', { + message: 'inputTooShort', + args: { + minimum: this.minimumInputLength, + input: params.term, + params: params + } + }); + + return; + } + + decorated.call(this, params, callback); + }; + + return MinimumInputLength; +}); + +S2.define('select2/data/maximumInputLength',[ + +], function () { + function MaximumInputLength (decorated, $e, options) { + this.maximumInputLength = options.get('maximumInputLength'); + + decorated.call(this, $e, options); + } + + MaximumInputLength.prototype.query = function (decorated, params, callback) { + params.term = params.term || ''; + + if (this.maximumInputLength > 0 && + params.term.length > this.maximumInputLength) { + this.trigger('results:message', { + message: 'inputTooLong', + args: { + maximum: this.maximumInputLength, + input: params.term, + params: params + } + }); + + return; + } + + decorated.call(this, params, callback); + }; + + return MaximumInputLength; +}); + +S2.define('select2/data/maximumSelectionLength',[ + +], function (){ + function MaximumSelectionLength (decorated, $e, options) { + this.maximumSelectionLength = options.get('maximumSelectionLength'); + + decorated.call(this, $e, options); + } + + MaximumSelectionLength.prototype.bind = + function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('select', function () { + self._checkIfMaximumSelected(); + }); + }; + + MaximumSelectionLength.prototype.query = + function (decorated, params, callback) { + var self = this; + + this._checkIfMaximumSelected(function () { + decorated.call(self, params, callback); + }); + }; + + MaximumSelectionLength.prototype._checkIfMaximumSelected = + function (_, successCallback) { + var self = this; + + this.current(function (currentData) { + var count = currentData != null ? currentData.length : 0; + if (self.maximumSelectionLength > 0 && + count >= self.maximumSelectionLength) { + self.trigger('results:message', { + message: 'maximumSelected', + args: { + maximum: self.maximumSelectionLength + } + }); + return; + } + + if (successCallback) { + successCallback(); + } + }); + }; + + return MaximumSelectionLength; +}); + +S2.define('select2/dropdown',[ + 'jquery', + './utils' +], function ($, Utils) { + function Dropdown ($element, options) { + this.$element = $element; + this.options = options; + + Dropdown.__super__.constructor.call(this); + } + + Utils.Extend(Dropdown, Utils.Observable); + + Dropdown.prototype.render = function () { + var $dropdown = $( + '' + + '' + + '' + ); + + $dropdown.attr('dir', this.options.get('dir')); + + this.$dropdown = $dropdown; + + return $dropdown; + }; + + Dropdown.prototype.bind = function () { + // Should be implemented in subclasses + }; + + Dropdown.prototype.position = function ($dropdown, $container) { + // Should be implemented in subclasses + }; + + Dropdown.prototype.destroy = function () { + // Remove the dropdown from the DOM + this.$dropdown.remove(); + }; + + return Dropdown; +}); + +S2.define('select2/dropdown/search',[ + 'jquery', + '../utils' +], function ($, Utils) { + function Search () { } + + Search.prototype.render = function (decorated) { + var $rendered = decorated.call(this); + + var $search = $( + '' + + '' + + '' + ); + + this.$searchContainer = $search; + this.$search = $search.find('input'); + + $rendered.prepend($search); + + return $rendered; + }; + + Search.prototype.bind = function (decorated, container, $container) { + var self = this; + + var resultsId = container.id + '-results'; + + decorated.call(this, container, $container); + + this.$search.on('keydown', function (evt) { + self.trigger('keypress', evt); + + self._keyUpPrevented = evt.isDefaultPrevented(); + }); + + // Workaround for browsers which do not support the `input` event + // This will prevent double-triggering of events for browsers which support + // both the `keyup` and `input` events. + this.$search.on('input', function (evt) { + // Unbind the duplicated `keyup` event + $(this).off('keyup'); + }); + + this.$search.on('keyup input', function (evt) { + self.handleSearch(evt); + }); + + container.on('open', function () { + self.$search.attr('tabindex', 0); + self.$search.attr('aria-controls', resultsId); + + self.$search.trigger('focus'); + + window.setTimeout(function () { + self.$search.trigger('focus'); + }, 0); + }); + + container.on('close', function () { + self.$search.attr('tabindex', -1); + self.$search.removeAttr('aria-controls'); + self.$search.removeAttr('aria-activedescendant'); + + self.$search.val(''); + self.$search.trigger('blur'); + }); + + container.on('focus', function () { + if (!container.isOpen()) { + self.$search.trigger('focus'); + } + }); + + container.on('results:all', function (params) { + if (params.query.term == null || params.query.term === '') { + var showSearch = self.showSearch(params); + + if (showSearch) { + self.$searchContainer.removeClass('select2-search--hide'); + } else { + self.$searchContainer.addClass('select2-search--hide'); + } + } + }); + + container.on('results:focus', function (params) { + if (params.data._resultId) { + self.$search.attr('aria-activedescendant', params.data._resultId); + } else { + self.$search.removeAttr('aria-activedescendant'); + } + }); + }; + + Search.prototype.handleSearch = function (evt) { + if (!this._keyUpPrevented) { + var input = this.$search.val(); + + this.trigger('query', { + term: input + }); + } + + this._keyUpPrevented = false; + }; + + Search.prototype.showSearch = function (_, params) { + return true; + }; + + return Search; +}); + +S2.define('select2/dropdown/hidePlaceholder',[ + +], function () { + function HidePlaceholder (decorated, $element, options, dataAdapter) { + this.placeholder = this.normalizePlaceholder(options.get('placeholder')); + + decorated.call(this, $element, options, dataAdapter); + } + + HidePlaceholder.prototype.append = function (decorated, data) { + data.results = this.removePlaceholder(data.results); + + decorated.call(this, data); + }; + + HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) { + if (typeof placeholder === 'string') { + placeholder = { + id: '', + text: placeholder + }; + } + + return placeholder; + }; + + HidePlaceholder.prototype.removePlaceholder = function (_, data) { + var modifiedData = data.slice(0); + + for (var d = data.length - 1; d >= 0; d--) { + var item = data[d]; + + if (this.placeholder.id === item.id) { + modifiedData.splice(d, 1); + } + } + + return modifiedData; + }; + + return HidePlaceholder; +}); + +S2.define('select2/dropdown/infiniteScroll',[ + 'jquery' +], function ($) { + function InfiniteScroll (decorated, $element, options, dataAdapter) { + this.lastParams = {}; + + decorated.call(this, $element, options, dataAdapter); + + this.$loadingMore = this.createLoadingMore(); + this.loading = false; + } + + InfiniteScroll.prototype.append = function (decorated, data) { + this.$loadingMore.remove(); + this.loading = false; + + decorated.call(this, data); + + if (this.showLoadingMore(data)) { + this.$results.append(this.$loadingMore); + this.loadMoreIfNeeded(); + } + }; + + InfiniteScroll.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('query', function (params) { + self.lastParams = params; + self.loading = true; + }); + + container.on('query:append', function (params) { + self.lastParams = params; + self.loading = true; + }); + + this.$results.on('scroll', this.loadMoreIfNeeded.bind(this)); + }; + + InfiniteScroll.prototype.loadMoreIfNeeded = function () { + var isLoadMoreVisible = $.contains( + document.documentElement, + this.$loadingMore[0] + ); + + if (this.loading || !isLoadMoreVisible) { + return; + } + + var currentOffset = this.$results.offset().top + + this.$results.outerHeight(false); + var loadingMoreOffset = this.$loadingMore.offset().top + + this.$loadingMore.outerHeight(false); + + if (currentOffset + 50 >= loadingMoreOffset) { + this.loadMore(); + } + }; + + InfiniteScroll.prototype.loadMore = function () { + this.loading = true; + + var params = $.extend({}, {page: 1}, this.lastParams); + + params.page++; + + this.trigger('query:append', params); + }; + + InfiniteScroll.prototype.showLoadingMore = function (_, data) { + return data.pagination && data.pagination.more; + }; + + InfiniteScroll.prototype.createLoadingMore = function () { + var $option = $( + '
      • ' + ); + + var message = this.options.get('translations').get('loadingMore'); + + $option.html(message(this.lastParams)); + + return $option; + }; + + return InfiniteScroll; +}); + +S2.define('select2/dropdown/attachBody',[ + 'jquery', + '../utils' +], function ($, Utils) { + function AttachBody (decorated, $element, options) { + this.$dropdownParent = $(options.get('dropdownParent') || document.body); + + decorated.call(this, $element, options); + } + + AttachBody.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('open', function () { + self._showDropdown(); + self._attachPositioningHandler(container); + + // Must bind after the results handlers to ensure correct sizing + self._bindContainerResultHandlers(container); + }); + + container.on('close', function () { + self._hideDropdown(); + self._detachPositioningHandler(container); + }); + + this.$dropdownContainer.on('mousedown', function (evt) { + evt.stopPropagation(); + }); + }; + + AttachBody.prototype.destroy = function (decorated) { + decorated.call(this); + + this.$dropdownContainer.remove(); + }; + + AttachBody.prototype.position = function (decorated, $dropdown, $container) { + // Clone all of the container classes + $dropdown.attr('class', $container.attr('class')); + + $dropdown.removeClass('select2'); + $dropdown.addClass('select2-container--open'); + + $dropdown.css({ + position: 'absolute', + top: -999999 + }); + + this.$container = $container; + }; + + AttachBody.prototype.render = function (decorated) { + var $container = $(''); + + var $dropdown = decorated.call(this); + $container.append($dropdown); + + this.$dropdownContainer = $container; + + return $container; + }; + + AttachBody.prototype._hideDropdown = function (decorated) { + this.$dropdownContainer.detach(); + }; + + AttachBody.prototype._bindContainerResultHandlers = + function (decorated, container) { + + // These should only be bound once + if (this._containerResultsHandlersBound) { + return; + } + + var self = this; + + container.on('results:all', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('results:append', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('results:message', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('select', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + container.on('unselect', function () { + self._positionDropdown(); + self._resizeDropdown(); + }); + + this._containerResultsHandlersBound = true; + }; + + AttachBody.prototype._attachPositioningHandler = + function (decorated, container) { + var self = this; + + var scrollEvent = 'scroll.select2.' + container.id; + var resizeEvent = 'resize.select2.' + container.id; + var orientationEvent = 'orientationchange.select2.' + container.id; + + var $watchers = this.$container.parents().filter(Utils.hasScroll); + $watchers.each(function () { + Utils.StoreData(this, 'select2-scroll-position', { + x: $(this).scrollLeft(), + y: $(this).scrollTop() + }); + }); + + $watchers.on(scrollEvent, function (ev) { + var position = Utils.GetData(this, 'select2-scroll-position'); + $(this).scrollTop(position.y); + }); + + $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, + function (e) { + self._positionDropdown(); + self._resizeDropdown(); + }); + }; + + AttachBody.prototype._detachPositioningHandler = + function (decorated, container) { + var scrollEvent = 'scroll.select2.' + container.id; + var resizeEvent = 'resize.select2.' + container.id; + var orientationEvent = 'orientationchange.select2.' + container.id; + + var $watchers = this.$container.parents().filter(Utils.hasScroll); + $watchers.off(scrollEvent); + + $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent); + }; + + AttachBody.prototype._positionDropdown = function () { + var $window = $(window); + + var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above'); + var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below'); + + var newDirection = null; + + var offset = this.$container.offset(); + + offset.bottom = offset.top + this.$container.outerHeight(false); + + var container = { + height: this.$container.outerHeight(false) + }; + + container.top = offset.top; + container.bottom = offset.top + container.height; + + var dropdown = { + height: this.$dropdown.outerHeight(false) + }; + + var viewport = { + top: $window.scrollTop(), + bottom: $window.scrollTop() + $window.height() + }; + + var enoughRoomAbove = viewport.top < (offset.top - dropdown.height); + var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height); + + var css = { + left: offset.left, + top: container.bottom + }; + + // Determine what the parent element is to use for calculating the offset + var $offsetParent = this.$dropdownParent; + + // For statically positioned elements, we need to get the element + // that is determining the offset + if ($offsetParent.css('position') === 'static') { + $offsetParent = $offsetParent.offsetParent(); + } + + var parentOffset = { + top: 0, + left: 0 + }; + + if ( + $.contains(document.body, $offsetParent[0]) || + $offsetParent[0].isConnected + ) { + parentOffset = $offsetParent.offset(); + } + + css.top -= parentOffset.top; + css.left -= parentOffset.left; + + if (!isCurrentlyAbove && !isCurrentlyBelow) { + newDirection = 'below'; + } + + if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) { + newDirection = 'above'; + } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) { + newDirection = 'below'; + } + + if (newDirection == 'above' || + (isCurrentlyAbove && newDirection !== 'below')) { + css.top = container.top - parentOffset.top - dropdown.height; + } + + if (newDirection != null) { + this.$dropdown + .removeClass('select2-dropdown--below select2-dropdown--above') + .addClass('select2-dropdown--' + newDirection); + this.$container + .removeClass('select2-container--below select2-container--above') + .addClass('select2-container--' + newDirection); + } + + this.$dropdownContainer.css(css); + }; + + AttachBody.prototype._resizeDropdown = function () { + var css = { + width: this.$container.outerWidth(false) + 'px' + }; + + if (this.options.get('dropdownAutoWidth')) { + css.minWidth = css.width; + css.position = 'relative'; + css.width = 'auto'; + } + + this.$dropdown.css(css); + }; + + AttachBody.prototype._showDropdown = function (decorated) { + this.$dropdownContainer.appendTo(this.$dropdownParent); + + this._positionDropdown(); + this._resizeDropdown(); + }; + + return AttachBody; +}); + +S2.define('select2/dropdown/minimumResultsForSearch',[ + +], function () { + function countResults (data) { + var count = 0; + + for (var d = 0; d < data.length; d++) { + var item = data[d]; + + if (item.children) { + count += countResults(item.children); + } else { + count++; + } + } + + return count; + } + + function MinimumResultsForSearch (decorated, $element, options, dataAdapter) { + this.minimumResultsForSearch = options.get('minimumResultsForSearch'); + + if (this.minimumResultsForSearch < 0) { + this.minimumResultsForSearch = Infinity; + } + + decorated.call(this, $element, options, dataAdapter); + } + + MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { + if (countResults(params.data.results) < this.minimumResultsForSearch) { + return false; + } + + return decorated.call(this, params); + }; + + return MinimumResultsForSearch; +}); + +S2.define('select2/dropdown/selectOnClose',[ + '../utils' +], function (Utils) { + function SelectOnClose () { } + + SelectOnClose.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('close', function (params) { + self._handleSelectOnClose(params); + }); + }; + + SelectOnClose.prototype._handleSelectOnClose = function (_, params) { + if (params && params.originalSelect2Event != null) { + var event = params.originalSelect2Event; + + // Don't select an item if the close event was triggered from a select or + // unselect event + if (event._type === 'select' || event._type === 'unselect') { + return; + } + } + + var $highlightedResults = this.getHighlightedResults(); + + // Only select highlighted results + if ($highlightedResults.length < 1) { + return; + } + + var data = Utils.GetData($highlightedResults[0], 'data'); + + // Don't re-select already selected resulte + if ( + (data.element != null && data.element.selected) || + (data.element == null && data.selected) + ) { + return; + } + + this.trigger('select', { + data: data + }); + }; + + return SelectOnClose; +}); + +S2.define('select2/dropdown/closeOnSelect',[ + +], function () { + function CloseOnSelect () { } + + CloseOnSelect.prototype.bind = function (decorated, container, $container) { + var self = this; + + decorated.call(this, container, $container); + + container.on('select', function (evt) { + self._selectTriggered(evt); + }); + + container.on('unselect', function (evt) { + self._selectTriggered(evt); + }); + }; + + CloseOnSelect.prototype._selectTriggered = function (_, evt) { + var originalEvent = evt.originalEvent; + + // Don't close if the control key is being held + if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) { + return; + } + + this.trigger('close', { + originalEvent: originalEvent, + originalSelect2Event: evt + }); + }; + + return CloseOnSelect; +}); + +S2.define('select2/i18n/en',[],function () { + // English + return { + errorLoading: function () { + return 'The results could not be loaded.'; + }, + inputTooLong: function (args) { + var overChars = args.input.length - args.maximum; + + var message = 'Please delete ' + overChars + ' character'; + + if (overChars != 1) { + message += 's'; + } + + return message; + }, + inputTooShort: function (args) { + var remainingChars = args.minimum - args.input.length; + + var message = 'Please enter ' + remainingChars + ' or more characters'; + + return message; + }, + loadingMore: function () { + return 'Loading more results…'; + }, + maximumSelected: function (args) { + var message = 'You can only select ' + args.maximum + ' item'; + + if (args.maximum != 1) { + message += 's'; + } + + return message; + }, + noResults: function () { + return 'No results found'; + }, + searching: function () { + return 'Searching…'; + }, + removeAllItems: function () { + return 'Remove all items'; + } + }; +}); + +S2.define('select2/defaults',[ + 'jquery', + 'require', + + './results', + + './selection/single', + './selection/multiple', + './selection/placeholder', + './selection/allowClear', + './selection/search', + './selection/eventRelay', + + './utils', + './translation', + './diacritics', + + './data/select', + './data/array', + './data/ajax', + './data/tags', + './data/tokenizer', + './data/minimumInputLength', + './data/maximumInputLength', + './data/maximumSelectionLength', + + './dropdown', + './dropdown/search', + './dropdown/hidePlaceholder', + './dropdown/infiniteScroll', + './dropdown/attachBody', + './dropdown/minimumResultsForSearch', + './dropdown/selectOnClose', + './dropdown/closeOnSelect', + + './i18n/en' +], function ($, require, + + ResultsList, + + SingleSelection, MultipleSelection, Placeholder, AllowClear, + SelectionSearch, EventRelay, + + Utils, Translation, DIACRITICS, + + SelectData, ArrayData, AjaxData, Tags, Tokenizer, + MinimumInputLength, MaximumInputLength, MaximumSelectionLength, + + Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, + AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, + + EnglishTranslation) { + function Defaults () { + this.reset(); + } + + Defaults.prototype.apply = function (options) { + options = $.extend(true, {}, this.defaults, options); + + if (options.dataAdapter == null) { + if (options.ajax != null) { + options.dataAdapter = AjaxData; + } else if (options.data != null) { + options.dataAdapter = ArrayData; + } else { + options.dataAdapter = SelectData; + } + + if (options.minimumInputLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MinimumInputLength + ); + } + + if (options.maximumInputLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MaximumInputLength + ); + } + + if (options.maximumSelectionLength > 0) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + MaximumSelectionLength + ); + } + + if (options.tags) { + options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags); + } + + if (options.tokenSeparators != null || options.tokenizer != null) { + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Tokenizer + ); + } + + if (options.query != null) { + var Query = require(options.amdBase + 'compat/query'); + + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + Query + ); + } + + if (options.initSelection != null) { + var InitSelection = require(options.amdBase + 'compat/initSelection'); + + options.dataAdapter = Utils.Decorate( + options.dataAdapter, + InitSelection + ); + } + } + + if (options.resultsAdapter == null) { + options.resultsAdapter = ResultsList; + + if (options.ajax != null) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + InfiniteScroll + ); + } + + if (options.placeholder != null) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + HidePlaceholder + ); + } + + if (options.selectOnClose) { + options.resultsAdapter = Utils.Decorate( + options.resultsAdapter, + SelectOnClose + ); + } + } + + if (options.dropdownAdapter == null) { + if (options.multiple) { + options.dropdownAdapter = Dropdown; + } else { + var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch); + + options.dropdownAdapter = SearchableDropdown; + } + + if (options.minimumResultsForSearch !== 0) { + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + MinimumResultsForSearch + ); + } + + if (options.closeOnSelect) { + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + CloseOnSelect + ); + } + + if ( + options.dropdownCssClass != null || + options.dropdownCss != null || + options.adaptDropdownCssClass != null + ) { + var DropdownCSS = require(options.amdBase + 'compat/dropdownCss'); + + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + DropdownCSS + ); + } + + options.dropdownAdapter = Utils.Decorate( + options.dropdownAdapter, + AttachBody + ); + } + + if (options.selectionAdapter == null) { + if (options.multiple) { + options.selectionAdapter = MultipleSelection; + } else { + options.selectionAdapter = SingleSelection; + } + + // Add the placeholder mixin if a placeholder was specified + if (options.placeholder != null) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + Placeholder + ); + } + + if (options.allowClear) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + AllowClear + ); + } + + if (options.multiple) { + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + SelectionSearch + ); + } + + if ( + options.containerCssClass != null || + options.containerCss != null || + options.adaptContainerCssClass != null + ) { + var ContainerCSS = require(options.amdBase + 'compat/containerCss'); + + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + ContainerCSS + ); + } + + options.selectionAdapter = Utils.Decorate( + options.selectionAdapter, + EventRelay + ); + } + + // If the defaults were not previously applied from an element, it is + // possible for the language option to have not been resolved + options.language = this._resolveLanguage(options.language); + + // Always fall back to English since it will always be complete + options.language.push('en'); + + var uniqueLanguages = []; + + for (var l = 0; l < options.language.length; l++) { + var language = options.language[l]; + + if (uniqueLanguages.indexOf(language) === -1) { + uniqueLanguages.push(language); + } + } + + options.language = uniqueLanguages; + + options.translations = this._processTranslations( + options.language, + options.debug + ); + + return options; + }; + + Defaults.prototype.reset = function () { + function stripDiacritics (text) { + // Used 'uni range + named function' from http://jsperf.com/diacritics/18 + function match(a) { + return DIACRITICS[a] || a; + } + + return text.replace(/[^\u0000-\u007E]/g, match); + } + + function matcher (params, data) { + // Always return the object if there is nothing to compare + if ($.trim(params.term) === '') { + return data; + } + + // Do a recursive check for options with children + if (data.children && data.children.length > 0) { + // Clone the data object if there are children + // This is required as we modify the object to remove any non-matches + var match = $.extend(true, {}, data); + + // Check each child of the option + for (var c = data.children.length - 1; c >= 0; c--) { + var child = data.children[c]; + + var matches = matcher(params, child); + + // If there wasn't a match, remove the object in the array + if (matches == null) { + match.children.splice(c, 1); + } + } + + // If any children matched, return the new object + if (match.children.length > 0) { + return match; + } + + // If there were no matching children, check just the plain object + return matcher(params, match); + } + + var original = stripDiacritics(data.text).toUpperCase(); + var term = stripDiacritics(params.term).toUpperCase(); + + // Check if the text contains the term + if (original.indexOf(term) > -1) { + return data; + } + + // If it doesn't contain the term, don't return anything + return null; + } + + this.defaults = { + amdBase: './', + amdLanguageBase: './i18n/', + closeOnSelect: true, + debug: false, + dropdownAutoWidth: false, + escapeMarkup: Utils.escapeMarkup, + language: {}, + matcher: matcher, + minimumInputLength: 0, + maximumInputLength: 0, + maximumSelectionLength: 0, + minimumResultsForSearch: 0, + selectOnClose: false, + scrollAfterSelect: false, + sorter: function (data) { + return data; + }, + templateResult: function (result) { + return result.text; + }, + templateSelection: function (selection) { + return selection.text; + }, + theme: 'default', + width: 'resolve' + }; + }; + + Defaults.prototype.applyFromElement = function (options, $element) { + var optionLanguage = options.language; + var defaultLanguage = this.defaults.language; + var elementLanguage = $element.prop('lang'); + var parentLanguage = $element.closest('[lang]').prop('lang'); + + var languages = Array.prototype.concat.call( + this._resolveLanguage(elementLanguage), + this._resolveLanguage(optionLanguage), + this._resolveLanguage(defaultLanguage), + this._resolveLanguage(parentLanguage) + ); + + options.language = languages; + + return options; + }; + + Defaults.prototype._resolveLanguage = function (language) { + if (!language) { + return []; + } + + if ($.isEmptyObject(language)) { + return []; + } + + if ($.isPlainObject(language)) { + return [language]; + } + + var languages; + + if (!$.isArray(language)) { + languages = [language]; + } else { + languages = language; + } + + var resolvedLanguages = []; + + for (var l = 0; l < languages.length; l++) { + resolvedLanguages.push(languages[l]); + + if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) { + // Extract the region information if it is included + var languageParts = languages[l].split('-'); + var baseLanguage = languageParts[0]; + + resolvedLanguages.push(baseLanguage); + } + } + + return resolvedLanguages; + }; + + Defaults.prototype._processTranslations = function (languages, debug) { + var translations = new Translation(); + + for (var l = 0; l < languages.length; l++) { + var languageData = new Translation(); + + var language = languages[l]; + + if (typeof language === 'string') { + try { + // Try to load it with the original name + languageData = Translation.loadPath(language); + } catch (e) { + try { + // If we couldn't load it, check if it wasn't the full path + language = this.defaults.amdLanguageBase + language; + languageData = Translation.loadPath(language); + } catch (ex) { + // The translation could not be loaded at all. Sometimes this is + // because of a configuration problem, other times this can be + // because of how Select2 helps load all possible translation files + if (debug && window.console && console.warn) { + console.warn( + 'Select2: The language file for "' + language + '" could ' + + 'not be automatically loaded. A fallback will be used instead.' + ); + } + } + } + } else if ($.isPlainObject(language)) { + languageData = new Translation(language); + } else { + languageData = language; + } + + translations.extend(languageData); + } + + return translations; + }; + + Defaults.prototype.set = function (key, value) { + var camelKey = $.camelCase(key); + + var data = {}; + data[camelKey] = value; + + var convertedData = Utils._convertData(data); + + $.extend(true, this.defaults, convertedData); + }; + + var defaults = new Defaults(); + + return defaults; +}); + +S2.define('select2/options',[ + 'require', + 'jquery', + './defaults', + './utils' +], function (require, $, Defaults, Utils) { + function Options (options, $element) { + this.options = options; + + if ($element != null) { + this.fromElement($element); + } + + if ($element != null) { + this.options = Defaults.applyFromElement(this.options, $element); + } + + this.options = Defaults.apply(this.options); + + if ($element && $element.is('input')) { + var InputCompat = require(this.get('amdBase') + 'compat/inputData'); + + this.options.dataAdapter = Utils.Decorate( + this.options.dataAdapter, + InputCompat + ); + } + } + + Options.prototype.fromElement = function ($e) { + var excludedData = ['select2']; + + if (this.options.multiple == null) { + this.options.multiple = $e.prop('multiple'); + } + + if (this.options.disabled == null) { + this.options.disabled = $e.prop('disabled'); + } + + if (this.options.dir == null) { + if ($e.prop('dir')) { + this.options.dir = $e.prop('dir'); + } else if ($e.closest('[dir]').prop('dir')) { + this.options.dir = $e.closest('[dir]').prop('dir'); + } else { + this.options.dir = 'ltr'; + } + } + + $e.prop('disabled', this.options.disabled); + $e.prop('multiple', this.options.multiple); + + if (Utils.GetData($e[0], 'select2Tags')) { + if (this.options.debug && window.console && console.warn) { + console.warn( + 'Select2: The `data-select2-tags` attribute has been changed to ' + + 'use the `data-data` and `data-tags="true"` attributes and will be ' + + 'removed in future versions of Select2.' + ); + } + + Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags')); + Utils.StoreData($e[0], 'tags', true); + } + + if (Utils.GetData($e[0], 'ajaxUrl')) { + if (this.options.debug && window.console && console.warn) { + console.warn( + 'Select2: The `data-ajax-url` attribute has been changed to ' + + '`data-ajax--url` and support for the old attribute will be removed' + + ' in future versions of Select2.' + ); + } + + $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl')); + Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl')); + } + + var dataset = {}; + + function upperCaseLetter(_, letter) { + return letter.toUpperCase(); + } + + // Pre-load all of the attributes which are prefixed with `data-` + for (var attr = 0; attr < $e[0].attributes.length; attr++) { + var attributeName = $e[0].attributes[attr].name; + var prefix = 'data-'; + + if (attributeName.substr(0, prefix.length) == prefix) { + // Get the contents of the attribute after `data-` + var dataName = attributeName.substring(prefix.length); + + // Get the data contents from the consistent source + // This is more than likely the jQuery data helper + var dataValue = Utils.GetData($e[0], dataName); + + // camelCase the attribute name to match the spec + var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter); + + // Store the data attribute contents into the dataset since + dataset[camelDataName] = dataValue; + } + } + + // Prefer the element's `dataset` attribute if it exists + // jQuery 1.x does not correctly handle data attributes with multiple dashes + if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) { + dataset = $.extend(true, {}, $e[0].dataset, dataset); + } + + // Prefer our internal data cache if it exists + var data = $.extend(true, {}, Utils.GetData($e[0]), dataset); + + data = Utils._convertData(data); + + for (var key in data) { + if ($.inArray(key, excludedData) > -1) { + continue; + } + + if ($.isPlainObject(this.options[key])) { + $.extend(this.options[key], data[key]); + } else { + this.options[key] = data[key]; + } + } + + return this; + }; + + Options.prototype.get = function (key) { + return this.options[key]; + }; + + Options.prototype.set = function (key, val) { + this.options[key] = val; + }; + + return Options; +}); + +S2.define('select2/core',[ + 'jquery', + './options', + './utils', + './keys' +], function ($, Options, Utils, KEYS) { + var Select2 = function ($element, options) { + if (Utils.GetData($element[0], 'select2') != null) { + Utils.GetData($element[0], 'select2').destroy(); + } + + this.$element = $element; + + this.id = this._generateId($element); + + options = options || {}; + + this.options = new Options(options, $element); + + Select2.__super__.constructor.call(this); + + // Set up the tabindex + + var tabindex = $element.attr('tabindex') || 0; + Utils.StoreData($element[0], 'old-tabindex', tabindex); + $element.attr('tabindex', '-1'); + + // Set up containers and adapters + + var DataAdapter = this.options.get('dataAdapter'); + this.dataAdapter = new DataAdapter($element, this.options); + + var $container = this.render(); + + this._placeContainer($container); + + var SelectionAdapter = this.options.get('selectionAdapter'); + this.selection = new SelectionAdapter($element, this.options); + this.$selection = this.selection.render(); + + this.selection.position(this.$selection, $container); + + var DropdownAdapter = this.options.get('dropdownAdapter'); + this.dropdown = new DropdownAdapter($element, this.options); + this.$dropdown = this.dropdown.render(); + + this.dropdown.position(this.$dropdown, $container); + + var ResultsAdapter = this.options.get('resultsAdapter'); + this.results = new ResultsAdapter($element, this.options, this.dataAdapter); + this.$results = this.results.render(); + + this.results.position(this.$results, this.$dropdown); + + // Bind events + + var self = this; + + // Bind the container to all of the adapters + this._bindAdapters(); + + // Register any DOM event handlers + this._registerDomEvents(); + + // Register any internal event handlers + this._registerDataEvents(); + this._registerSelectionEvents(); + this._registerDropdownEvents(); + this._registerResultsEvents(); + this._registerEvents(); + + // Set the initial state + this.dataAdapter.current(function (initialData) { + self.trigger('selection:update', { + data: initialData + }); + }); + + // Hide the original select + $element.addClass('select2-hidden-accessible'); + $element.attr('aria-hidden', 'true'); + + // Synchronize any monitored attributes + this._syncAttributes(); + + Utils.StoreData($element[0], 'select2', this); + + // Ensure backwards compatibility with $element.data('select2'). + $element.data('select2', this); + }; + + Utils.Extend(Select2, Utils.Observable); + + Select2.prototype._generateId = function ($element) { + var id = ''; + + if ($element.attr('id') != null) { + id = $element.attr('id'); + } else if ($element.attr('name') != null) { + id = $element.attr('name') + '-' + Utils.generateChars(2); + } else { + id = Utils.generateChars(4); + } + + id = id.replace(/(:|\.|\[|\]|,)/g, ''); + id = 'select2-' + id; + + return id; + }; + + Select2.prototype._placeContainer = function ($container) { + $container.insertAfter(this.$element); + + var width = this._resolveWidth(this.$element, this.options.get('width')); + + if (width != null) { + $container.css('width', width); + } + }; + + Select2.prototype._resolveWidth = function ($element, method) { + var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i; + + if (method == 'resolve') { + var styleWidth = this._resolveWidth($element, 'style'); + + if (styleWidth != null) { + return styleWidth; + } + + return this._resolveWidth($element, 'element'); + } + + if (method == 'element') { + var elementWidth = $element.outerWidth(false); + + if (elementWidth <= 0) { + return 'auto'; + } + + return elementWidth + 'px'; + } + + if (method == 'style') { + var style = $element.attr('style'); + + if (typeof(style) !== 'string') { + return null; + } + + var attrs = style.split(';'); + + for (var i = 0, l = attrs.length; i < l; i = i + 1) { + var attr = attrs[i].replace(/\s/g, ''); + var matches = attr.match(WIDTH); + + if (matches !== null && matches.length >= 1) { + return matches[1]; + } + } + + return null; + } + + if (method == 'computedstyle') { + var computedStyle = window.getComputedStyle($element[0]); + + return computedStyle.width; + } + + return method; + }; + + Select2.prototype._bindAdapters = function () { + this.dataAdapter.bind(this, this.$container); + this.selection.bind(this, this.$container); + + this.dropdown.bind(this, this.$container); + this.results.bind(this, this.$container); + }; + + Select2.prototype._registerDomEvents = function () { + var self = this; + + this.$element.on('change.select2', function () { + self.dataAdapter.current(function (data) { + self.trigger('selection:update', { + data: data + }); + }); + }); + + this.$element.on('focus.select2', function (evt) { + self.trigger('focus', evt); + }); + + this._syncA = Utils.bind(this._syncAttributes, this); + this._syncS = Utils.bind(this._syncSubtree, this); + + if (this.$element[0].attachEvent) { + this.$element[0].attachEvent('onpropertychange', this._syncA); + } + + var observer = window.MutationObserver || + window.WebKitMutationObserver || + window.MozMutationObserver + ; + + if (observer != null) { + this._observer = new observer(function (mutations) { + self._syncA(); + self._syncS(null, mutations); + }); + this._observer.observe(this.$element[0], { + attributes: true, + childList: true, + subtree: false + }); + } else if (this.$element[0].addEventListener) { + this.$element[0].addEventListener( + 'DOMAttrModified', + self._syncA, + false + ); + this.$element[0].addEventListener( + 'DOMNodeInserted', + self._syncS, + false + ); + this.$element[0].addEventListener( + 'DOMNodeRemoved', + self._syncS, + false + ); + } + }; + + Select2.prototype._registerDataEvents = function () { + var self = this; + + this.dataAdapter.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerSelectionEvents = function () { + var self = this; + var nonRelayEvents = ['toggle', 'focus']; + + this.selection.on('toggle', function () { + self.toggleDropdown(); + }); + + this.selection.on('focus', function (params) { + self.focus(params); + }); + + this.selection.on('*', function (name, params) { + if ($.inArray(name, nonRelayEvents) !== -1) { + return; + } + + self.trigger(name, params); + }); + }; + + Select2.prototype._registerDropdownEvents = function () { + var self = this; + + this.dropdown.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerResultsEvents = function () { + var self = this; + + this.results.on('*', function (name, params) { + self.trigger(name, params); + }); + }; + + Select2.prototype._registerEvents = function () { + var self = this; + + this.on('open', function () { + self.$container.addClass('select2-container--open'); + }); + + this.on('close', function () { + self.$container.removeClass('select2-container--open'); + }); + + this.on('enable', function () { + self.$container.removeClass('select2-container--disabled'); + }); + + this.on('disable', function () { + self.$container.addClass('select2-container--disabled'); + }); + + this.on('blur', function () { + self.$container.removeClass('select2-container--focus'); + }); + + this.on('query', function (params) { + if (!self.isOpen()) { + self.trigger('open', {}); + } + + this.dataAdapter.query(params, function (data) { + self.trigger('results:all', { + data: data, + query: params + }); + }); + }); + + this.on('query:append', function (params) { + this.dataAdapter.query(params, function (data) { + self.trigger('results:append', { + data: data, + query: params + }); + }); + }); + + this.on('keypress', function (evt) { + var key = evt.which; + + if (self.isOpen()) { + if (key === KEYS.ESC || key === KEYS.TAB || + (key === KEYS.UP && evt.altKey)) { + self.close(evt); + + evt.preventDefault(); + } else if (key === KEYS.ENTER) { + self.trigger('results:select', {}); + + evt.preventDefault(); + } else if ((key === KEYS.SPACE && evt.ctrlKey)) { + self.trigger('results:toggle', {}); + + evt.preventDefault(); + } else if (key === KEYS.UP) { + self.trigger('results:previous', {}); + + evt.preventDefault(); + } else if (key === KEYS.DOWN) { + self.trigger('results:next', {}); + + evt.preventDefault(); + } + } else { + if (key === KEYS.ENTER || key === KEYS.SPACE || + (key === KEYS.DOWN && evt.altKey)) { + self.open(); + + evt.preventDefault(); + } + } + }); + }; + + Select2.prototype._syncAttributes = function () { + this.options.set('disabled', this.$element.prop('disabled')); + + if (this.isDisabled()) { + if (this.isOpen()) { + this.close(); + } + + this.trigger('disable', {}); + } else { + this.trigger('enable', {}); + } + }; + + Select2.prototype._isChangeMutation = function (evt, mutations) { + var changed = false; + var self = this; + + // Ignore any mutation events raised for elements that aren't options or + // optgroups. This handles the case when the select element is destroyed + if ( + evt && evt.target && ( + evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP' + ) + ) { + return; + } + + if (!mutations) { + // If mutation events aren't supported, then we can only assume that the + // change affected the selections + changed = true; + } else if (mutations.addedNodes && mutations.addedNodes.length > 0) { + for (var n = 0; n < mutations.addedNodes.length; n++) { + var node = mutations.addedNodes[n]; + + if (node.selected) { + changed = true; + } + } + } else if (mutations.removedNodes && mutations.removedNodes.length > 0) { + changed = true; + } else if ($.isArray(mutations)) { + $.each(mutations, function(evt, mutation) { + if (self._isChangeMutation(evt, mutation)) { + // We've found a change mutation. + // Let's escape from the loop and continue + changed = true; + return false; + } + }); + } + return changed; + }; + + Select2.prototype._syncSubtree = function (evt, mutations) { + var changed = this._isChangeMutation(evt, mutations); + var self = this; + + // Only re-pull the data if we think there is a change + if (changed) { + this.dataAdapter.current(function (currentData) { + self.trigger('selection:update', { + data: currentData + }); + }); + } + }; + + /** + * Override the trigger method to automatically trigger pre-events when + * there are events that can be prevented. + */ + Select2.prototype.trigger = function (name, args) { + var actualTrigger = Select2.__super__.trigger; + var preTriggerMap = { + 'open': 'opening', + 'close': 'closing', + 'select': 'selecting', + 'unselect': 'unselecting', + 'clear': 'clearing' + }; + + if (args === undefined) { + args = {}; + } + + if (name in preTriggerMap) { + var preTriggerName = preTriggerMap[name]; + var preTriggerArgs = { + prevented: false, + name: name, + args: args + }; + + actualTrigger.call(this, preTriggerName, preTriggerArgs); + + if (preTriggerArgs.prevented) { + args.prevented = true; + + return; + } + } + + actualTrigger.call(this, name, args); + }; + + Select2.prototype.toggleDropdown = function () { + if (this.isDisabled()) { + return; + } + + if (this.isOpen()) { + this.close(); + } else { + this.open(); + } + }; + + Select2.prototype.open = function () { + if (this.isOpen()) { + return; + } + + if (this.isDisabled()) { + return; + } + + this.trigger('query', {}); + }; + + Select2.prototype.close = function (evt) { + if (!this.isOpen()) { + return; + } + + this.trigger('close', { originalEvent : evt }); + }; + + /** + * Helper method to abstract the "enabled" (not "disabled") state of this + * object. + * + * @return {true} if the instance is not disabled. + * @return {false} if the instance is disabled. + */ + Select2.prototype.isEnabled = function () { + return !this.isDisabled(); + }; + + /** + * Helper method to abstract the "disabled" state of this object. + * + * @return {true} if the disabled option is true. + * @return {false} if the disabled option is false. + */ + Select2.prototype.isDisabled = function () { + return this.options.get('disabled'); + }; + + Select2.prototype.isOpen = function () { + return this.$container.hasClass('select2-container--open'); + }; + + Select2.prototype.hasFocus = function () { + return this.$container.hasClass('select2-container--focus'); + }; + + Select2.prototype.focus = function (data) { + // No need to re-trigger focus events if we are already focused + if (this.hasFocus()) { + return; + } + + this.$container.addClass('select2-container--focus'); + this.trigger('focus', {}); + }; + + Select2.prototype.enable = function (args) { + if (this.options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `select2("enable")` method has been deprecated and will' + + ' be removed in later Select2 versions. Use $element.prop("disabled")' + + ' instead.' + ); + } + + if (args == null || args.length === 0) { + args = [true]; + } + + var disabled = !args[0]; + + this.$element.prop('disabled', disabled); + }; + + Select2.prototype.data = function () { + if (this.options.get('debug') && + arguments.length > 0 && window.console && console.warn) { + console.warn( + 'Select2: Data can no longer be set using `select2("data")`. You ' + + 'should consider setting the value instead using `$element.val()`.' + ); + } + + var data = []; + + this.dataAdapter.current(function (currentData) { + data = currentData; + }); + + return data; + }; + + Select2.prototype.val = function (args) { + if (this.options.get('debug') && window.console && console.warn) { + console.warn( + 'Select2: The `select2("val")` method has been deprecated and will be' + + ' removed in later Select2 versions. Use $element.val() instead.' + ); + } + + if (args == null || args.length === 0) { + return this.$element.val(); + } + + var newVal = args[0]; + + if ($.isArray(newVal)) { + newVal = $.map(newVal, function (obj) { + return obj.toString(); + }); + } + + this.$element.val(newVal).trigger('input').trigger('change'); + }; + + Select2.prototype.destroy = function () { + this.$container.remove(); + + if (this.$element[0].detachEvent) { + this.$element[0].detachEvent('onpropertychange', this._syncA); + } + + if (this._observer != null) { + this._observer.disconnect(); + this._observer = null; + } else if (this.$element[0].removeEventListener) { + this.$element[0] + .removeEventListener('DOMAttrModified', this._syncA, false); + this.$element[0] + .removeEventListener('DOMNodeInserted', this._syncS, false); + this.$element[0] + .removeEventListener('DOMNodeRemoved', this._syncS, false); + } + + this._syncA = null; + this._syncS = null; + + this.$element.off('.select2'); + this.$element.attr('tabindex', + Utils.GetData(this.$element[0], 'old-tabindex')); + + this.$element.removeClass('select2-hidden-accessible'); + this.$element.attr('aria-hidden', 'false'); + Utils.RemoveData(this.$element[0]); + this.$element.removeData('select2'); + + this.dataAdapter.destroy(); + this.selection.destroy(); + this.dropdown.destroy(); + this.results.destroy(); + + this.dataAdapter = null; + this.selection = null; + this.dropdown = null; + this.results = null; + }; + + Select2.prototype.render = function () { + var $container = $( + '' + + '' + + '' + + '' + ); + + $container.attr('dir', this.options.get('dir')); + + this.$container = $container; + + this.$container.addClass('select2-container--' + this.options.get('theme')); + + Utils.StoreData($container[0], 'element', this.$element); + + return $container; + }; + + return Select2; +}); + +S2.define('jquery-mousewheel',[ + 'jquery' +], function ($) { + // Used to shim jQuery.mousewheel for non-full builds. + return $; +}); + +S2.define('jquery.select2',[ + 'jquery', + 'jquery-mousewheel', + + './select2/core', + './select2/defaults', + './select2/utils' +], function ($, _, Select2, Defaults, Utils) { + if ($.fn.select2 == null) { + // All methods that should return the element + var thisMethods = ['open', 'close', 'destroy']; + + $.fn.select2 = function (options) { + options = options || {}; + + if (typeof options === 'object') { + this.each(function () { + var instanceOptions = $.extend(true, {}, options); + + var instance = new Select2($(this), instanceOptions); + }); + + return this; + } else if (typeof options === 'string') { + var ret; + var args = Array.prototype.slice.call(arguments, 1); + + this.each(function () { + var instance = Utils.GetData(this, 'select2'); + + if (instance == null && window.console && console.error) { + console.error( + 'The select2(\'' + options + '\') method was called on an ' + + 'element that is not using Select2.' + ); + } + + ret = instance[options].apply(instance, args); + }); + + // Check if we should be returning `this` + if ($.inArray(options, thisMethods) > -1) { + return this; + } + + return ret; + } else { + throw new Error('Invalid arguments for Select2: ' + options); + } + }; + } + + if ($.fn.select2.defaults == null) { + $.fn.select2.defaults = Defaults; + } + + return Select2; +}); + + // Return the AMD loader configuration so it can be used outside of this file + return { + define: S2.define, + require: S2.require + }; +}()); + + // Autoload the jQuery bindings + // We know that all of the modules exist above this, so we're safe + var select2 = S2.require('jquery.select2'); + + // Hold the AMD module references on the jQuery function that was just loaded + // This allows Select2 to use the internal loader outside of this file, such + // as in the language files. + jQuery.fn.select2.amd = S2; + + // Return the Select2 instance for anyone who is importing it. + return select2; +})); diff --git a/wp-content-pilot/assets/vendor/select2/select2.min.css b/wp-content-pilot/assets/vendor/select2/select2.min.css new file mode 100644 index 0000000..7c18ad5 --- /dev/null +++ b/wp-content-pilot/assets/vendor/select2/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/wp-content-pilot/assets/vendor/select2/select2.min.js b/wp-content-pilot/assets/vendor/select2/select2.min.js new file mode 100644 index 0000000..e421426 --- /dev/null +++ b/wp-content-pilot/assets/vendor/select2/select2.min.js @@ -0,0 +1,2 @@ +/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ +!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(u){var e=function(){if(u&&u.fn&&u.fn.select2&&u.fn.select2.amd)var e=u.fn.select2.amd;var t,n,r,h,o,s,f,g,m,v,y,_,i,a,b;function w(e,t){return i.call(e,t)}function l(e,t){var n,r,i,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(s=(e=e.split("/")).length-1,y.nodeIdCompat&&b.test(e[s])&&(e[s]=e[s].replace(b,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},i.appendMany=function(e,t){if("1.7"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},i.__cache={};var n=0;return i.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++n),t=n.toString())),t},i.StoreData=function(e,t,n){var r=i.GetUniqueElementId(e);i.__cache[r]||(i.__cache[r]={}),i.__cache[r][t]=n},i.GetData=function(e,t){var n=i.GetUniqueElementId(e);return t?i.__cache[n]&&null!=i.__cache[n][t]?i.__cache[n][t]:o(e).data(t):i.__cache[n]},i.RemoveData=function(e){var t=i.GetUniqueElementId(e);null!=i.__cache[t]&&delete i.__cache[t],e.removeAttribute("data-select2-id")},i}),e.define("select2/results",["jquery","./utils"],function(h,f){function r(e,t,n){this.$element=e,this.data=n,this.options=t,r.__super__.constructor.call(this)}return f.Extend(r,f.Observable),r.prototype.render=function(){var e=h('
          ');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},r.prototype.clear=function(){this.$results.empty()},r.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h(''),r=this.options.get("translations").get(e.message);n.append(t(r(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},r.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},r.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n",{class:"select2-results__options select2-results__options--nested"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},r.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");"true"==e.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var r=n-1;0===e.length&&(r=0);var i=t.eq(r);i.trigger("mouseenter");var o=l.$results.offset().top,s=i.offset().top,a=l.$results.scrollTop()+(s-o);0===r?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var r=t.eq(n);r.trigger("mouseenter");var i=l.$results.offset().top+l.$results.outerHeight(!1),o=r.offset().top+r.outerHeight(!1),s=l.$results.scrollTop()+o-i;0===n?l.$results.scrollTop(0):ithis.$results.outerHeight()||o<0)&&this.$results.scrollTop(i)}},r.prototype.template=function(e,t){var n=this.options.get("templateResult"),r=this.options.get("escapeMarkup"),i=n(e,t);null==i?t.style.display="none":"string"==typeof i?t.innerHTML=r(i):h(t).append(i)},r}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,r,i){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return r.Extend(o,r.Observable),o.prototype.render=function(){var e=n('');return this._tabindex=0,null!=r.GetData(this.$element[0],"old-tabindex")?this._tabindex=r.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,r=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===i.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",r),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&r.GetData(this,"element").select2("close")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},o.prototype.position=function(e,t){t.find(".selection").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,r){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html(''),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var r=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",r).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",r),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e("")},i.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),r=this.display(t,n);n.empty().append(r);var i=t.title||t.text;i?n.attr("title",i):n.removeAttr("title")}else this.clear()},i}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(i,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html('
            '),e},n.prototype.bind=function(e,t){var r=this;n.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){r.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!r.isDisabled()){var t=i(this).parent(),n=l.GetData(t[0],"data");r.trigger("unselect",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},n.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},n.prototype.selectionContainer=function(){return i('
          • ×
          • ')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n×');a.StoreData(r[0],"data",t),this.$selection.find(".select2-selection__rendered").prepend(r)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(r,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=r('');this.$searchContainer=t,this.$search=t.find("input");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),t.on("open",function(){r.$search.attr("aria-controls",i),r.$search.trigger("focus")}),t.on("close",function(){r.$search.val(""),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.trigger("focus")}),t.on("enable",function(){r.$search.prop("disabled",!1),r._transferTabIndex()}),t.on("disable",function(){r.$search.prop("disabled",!0)}),t.on("focus",function(e){r.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){r.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){r._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&""===r.$search.val()){var t=r.$searchContainer.prev(".select2-selection__choice");if(0this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("select",function(){r._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var r=this;this._checkIfMaximumSelected(function(){e.call(r,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var r=this;this.current(function(e){var t=null!=e?e.length:0;0=r.maximumSelectionLength?r.trigger("results:message",{message:"maximumSelected",args:{maximum:r.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('');return this.$searchContainer=n,this.$search=n.find("input"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){o(this).off("keyup")}),this.$search.on("keyup input",function(e){r.handleSearch(e)}),t.on("open",function(){r.$search.attr("tabindex",0),r.$search.attr("aria-controls",i),r.$search.trigger("focus"),window.setTimeout(function(){r.$search.trigger("focus")},0)}),t.on("close",function(){r.$search.attr("tabindex",-1),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.val(""),r.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||r.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(r.showSearch(e)?r.$searchContainer.removeClass("select2-search--hide"):r.$searchContainer.addClass("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,r){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,r)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),r=t.length-1;0<=r;r--){var i=t[r];this.placeholder.id===i.id&&n.splice(r,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,r){this.lastParams={},e.call(this,t,n,r),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("query",function(e){r.lastParams=e,r.loading=!0}),t.on("query:append",function(e){r.lastParams=e,r.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('
          • '),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("open",function(){r._showDropdown(),r._attachPositioningHandler(t),r._bindContainerResultHandlers(t)}),t.on("close",function(){r._hideDropdown(),r._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(""),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,r="scroll.select2."+t.id,i="resize.select2."+t.id,o="orientationchange.select2."+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(r,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(r+" "+i+" "+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,r="resize.select2."+t.id,i="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+r+" "+i)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass("select2-dropdown--above"),n=this.$dropdown.hasClass("select2-dropdown--below"),r=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=i.top,o.bottom=i.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=ai.bottom+s,d={left:i.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(r="below"),u||!c||t?!c&&u&&t&&(r="below"):r="above",("above"==r||t&&"below"!==r)&&(d.top=o.top-h.top-s),null!=r&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+r),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+r)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,r){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,r)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,r=0;r');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("jquery-mousewheel",["jquery"],function(e){return e}),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(i,e,o,t,s){if(null==i.fn.select2){var a=["open","close","destroy"];i.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new o(i(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,r=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,r)}),-1')).css("max-width",i.maxWidth);var n=t('
            '),r=t('
            ');t("body").append(a.html(n).prepend(r.html('
            ')))}else var a=t("#tiptip_holder"),n=t("#tiptip_content"),r=t("#tiptip_arrow");return this.each(function(){function e(){i.enter.call(this),n.html(d),a.hide().removeAttr("class").css("margin","0"),r.removeAttr("style");var e=parseInt(f.offset().top),o=parseInt(f.offset().left),p=parseInt(f.outerWidth()),l=parseInt(f.outerHeight()),h=a.outerWidth(),c=a.outerHeight(),s=Math.round((p-h)/2),_=Math.round((l-c)/2),v=Math.round(o+s),m=Math.round(e+l+i.edgeOffset),g="",b="",M=Math.round(h-12)/2;"bottom"==i.defaultPosition?g="_bottom":"top"==i.defaultPosition?g="_top":"left"==i.defaultPosition?g="_left":"right"==i.defaultPosition&&(g="_right");var w=s+oparseInt(t(window).width());w&&s<0||"_right"==g&&!O||"_left"==g&&oparseInt(t(window).height()+t(window).scrollTop()),I=e+l-(i.edgeOffset+c+8)<0;x||"_bottom"==g&&x||"_top"==g&&!I?("_top"==g||"_bottom"==g?g="_top":g+="_top",b=c,m=Math.round(e-(c+5+i.edgeOffset))):(I|("_top"==g&&I)||"_bottom"==g&&!x)&&("_top"==g||"_bottom"==g?g="_bottom":g+="_bottom",b=-12,m=Math.round(e+l+i.edgeOffset)),"_right_top"==g||"_left_top"==g?m+=5:"_right_bottom"!=g&&"_left_bottom"!=g||(m-=5),"_left_top"!=g&&"_left_bottom"!=g||(v+=5),r.css({"margin-left":M+"px","margin-top":b+"px"}),a.css({"margin-left":v+"px","margin-top":m+"px"}).attr("class","tip"+g),u&&clearTimeout(u),u=setTimeout(function(){a.stop(!0,!0).fadeIn(i.fadeIn)},i.delay)}function o(){i.exit.call(this),u&&clearTimeout(u),a.fadeOut(i.fadeOut)}var f=t(this);if(i.content)d=i.content;else var d=f.attr(i.attribute);if(""!=d){i.content||f.removeAttr(i.attribute);var u=!1;"hover"==i.activation?(f.hover(function(){e()},function(){i.keepAlive||o()}),i.keepAlive&&a.hover(function(){},function(){o()})):"focus"==i.activation?f.focus(function(){e()}).blur(function(){o()}):"click"==i.activation&&(f.click(function(){return e(),!1}).hover(function(){},function(){i.keepAlive||o()}),i.keepAlive&&a.hover(function(){},function(){o()}))}})}}(jQuery); diff --git a/wp-content-pilot/i18n/languages/wp-content-pilot.pot b/wp-content-pilot/i18n/languages/wp-content-pilot.pot new file mode 100644 index 0000000..7f80e2e --- /dev/null +++ b/wp-content-pilot/i18n/languages/wp-content-pilot.pot @@ -0,0 +1,2940 @@ +# Copyright (C) 2022 pluginever +# This file is distributed under the GPLv2+. +msgid "" +msgstr "" +"Project-Id-Version: WP Content Pilot 1.3.1\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-content-pilot\n" +"POT-Creation-Date: 2022-04-24 05:15:51+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2022-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"X-Generator: grunt-wp-i18n 1.0.3\n" + +#: includes/action-functions.php:7 includes/action-functions.php:261 +msgid "No Cheating" +msgstr "" + +#: includes/action-functions.php:20 includes/action-functions.php:295 +msgid "Invalid post action" +msgstr "" + +#: includes/action-functions.php:42 +msgid "A post successfully created by %s titled %s" +msgstr "" + +#: includes/action-functions.php:92 +msgid "Reached campaign post limit. So campaign stopping publish new post" +msgstr "" + +#: includes/action-functions.php:226 +msgid "Post Publish" +msgstr "" + +#: includes/action-functions.php:280 includes/action-functions.php:331 +msgid "Cheating?" +msgstr "" + +#: includes/action-functions.php:302 +msgid "Campaign %s manually initiated by %s" +msgstr "" + +#: includes/action-functions.php:316 +msgid "A post successfully created by campaign %s titled %s" +msgstr "" + +#: includes/action-functions.php:343 +msgid "Something wrong, please try again." +msgstr "" + +#: includes/admin/class-settings-framework.php:376 +msgid "Choose File" +msgstr "" + +#: includes/admin/class-wpcp-admin.php:52 +#: includes/admin/views/metabox/campaign-status.php:23 +#: includes/admin/views/metabox/post-settings.php:17 +#: includes/post-types.php:117 +msgid "Status" +msgstr "" + +#: includes/admin/class-wpcp-admin.php:53 +#: includes/admin/views/page/logs-page.php:10 +msgid "Logs" +msgstr "" + +#: includes/admin/class-wpcp-admin.php:89 +msgid "Go Pro" +msgstr "" + +#: includes/admin/class-wpcp-admin.php:135 +msgid "" +"If you like WP Content Pilot please leave us a
            ★★★★★ " +"rating. Your Review is very important to us as it helps us to grow more." +msgstr "" + +#: includes/admin/class-wpcp-help.php:194 +#: includes/admin/views/page/help-page.php:7 +msgid "Looking for Something?" +msgstr "" + +#: includes/admin/class-wpcp-help.php:195 +#: includes/admin/views/page/help-page.php:8 +msgid "We have detailed documentation on every aspects of WP Content Pilot." +msgstr "" + +#: includes/admin/class-wpcp-help.php:197 +#: includes/admin/views/page/help-page.php:10 +msgid "Visit the Plugin Documentation" +msgstr "" + +#: includes/admin/class-wpcp-help.php:201 +#: includes/admin/views/page/help-page.php:14 +msgid "Need Any Assistance?" +msgstr "" + +#: includes/admin/class-wpcp-help.php:202 +#: includes/admin/views/page/help-page.php:15 +msgid "Our EXPERT Support Team is always ready to Help you out." +msgstr "" + +#: includes/admin/class-wpcp-help.php:204 +#: includes/admin/views/page/help-page.php:17 +msgid "Contact Support" +msgstr "" + +#: includes/admin/class-wpcp-help.php:208 +#: includes/admin/views/page/help-page.php:21 +msgid "Found Any Bugs?" +msgstr "" + +#: includes/admin/class-wpcp-help.php:209 +#: includes/admin/views/page/help-page.php:22 +msgid "OReport any Bug that you Discovered, Get Instant Solutions." +msgstr "" + +#: includes/admin/class-wpcp-help.php:211 +#: includes/admin/views/page/help-page.php:24 +msgid "Report to Github" +msgstr "" + +#: includes/admin/class-wpcp-help.php:215 +#: includes/admin/views/page/help-page.php:28 +msgid "Require Customization?" +msgstr "" + +#: includes/admin/class-wpcp-help.php:216 +#: includes/admin/views/page/help-page.php:29 +msgid "We would Love to hear your Integration and Customization Ideas." +msgstr "" + +#: includes/admin/class-wpcp-help.php:218 +#: includes/admin/views/page/help-page.php:31 +msgid "Contact Our Services" +msgstr "" + +#: includes/admin/class-wpcp-help.php:222 +#: includes/admin/views/page/help-page.php:35 +msgid "Like The Plugin?" +msgstr "" + +#: includes/admin/class-wpcp-help.php:223 +#: includes/admin/views/page/help-page.php:36 +msgid "Your Review is very important to us as it helps us to grow more." +msgstr "" + +#: includes/admin/class-wpcp-help.php:225 +#: includes/admin/views/page/help-page.php:38 +msgid "Review Us on WP.org" +msgstr "" + +#: includes/admin/class-wpcp-help.php:233 +#: includes/admin/views/page/help-page.php:43 +msgid "Article" +msgstr "" + +#: includes/admin/class-wpcp-help.php:234 +#: includes/admin/views/page/help-page.php:44 +msgid "Article module to auto import articles from web" +msgstr "" + +#: includes/admin/class-wpcp-help.php:239 +#: includes/admin/views/page/help-page.php:49 +msgid "Envato" +msgstr "" + +#: includes/admin/class-wpcp-help.php:240 +#: includes/admin/views/page/help-page.php:50 +msgid "Envato modules to import envato products and affiliation" +msgstr "" + +#: includes/admin/class-wpcp-help.php:245 +#: includes/admin/views/page/help-page.php:55 +msgid "Youtube" +msgstr "" + +#: includes/admin/class-wpcp-help.php:246 +#: includes/admin/views/page/help-page.php:56 +msgid "Youtube module to import youtube videos" +msgstr "" + +#: includes/admin/class-wpcp-help.php:251 +#: includes/admin/views/page/help-page.php:61 +msgid "Feed" +msgstr "" + +#: includes/admin/class-wpcp-help.php:252 +#: includes/admin/views/page/help-page.php:62 +msgid "RSS Feed module to import rss feeds" +msgstr "" + +#: includes/admin/class-wpcp-help.php:257 +#: includes/admin/views/page/help-page.php:67 +msgid "Flickr" +msgstr "" + +#: includes/admin/class-wpcp-help.php:258 +#: includes/admin/views/page/help-page.php:68 +msgid "Flickr module to import images" +msgstr "" + +#: includes/admin/class-wpcp-help.php:263 +#: includes/admin/views/page/help-page.php:73 +msgid "Amazon" +msgstr "" + +#: includes/admin/class-wpcp-help.php:264 +#: includes/admin/views/page/help-page.php:74 +msgid "Amazon module to import products & automatic affiliation" +msgstr "" + +#: includes/admin/class-wpcp-help.php:269 +#: includes/admin/views/page/help-page.php:79 +msgid "ClickBank" +msgstr "" + +#: includes/admin/class-wpcp-help.php:270 +#: includes/admin/views/page/help-page.php:80 +msgid "ClickBank module to import products & automatic affiliation" +msgstr "" + +#: includes/admin/class-wpcp-help.php:275 +#: includes/admin/views/page/help-page.php:85 +msgid "Ebay" +msgstr "" + +#: includes/admin/class-wpcp-help.php:276 +#: includes/admin/views/page/help-page.php:86 +msgid "Ebay module to import products & automatic affiliation" +msgstr "" + +#: includes/admin/class-wpcp-help.php:281 +#: includes/admin/views/page/help-page.php:91 +msgid "Facebook" +msgstr "" + +#: includes/admin/class-wpcp-help.php:282 +#: includes/admin/views/page/help-page.php:92 +msgid "Facebook module to import Facebook posts, events" +msgstr "" + +#: includes/admin/class-wpcp-help.php:287 +#: includes/admin/views/page/help-page.php:97 +msgid "Twitter" +msgstr "" + +#: includes/admin/class-wpcp-help.php:288 +#: includes/admin/views/page/help-page.php:98 +msgid "Twitter module to import twitter posts" +msgstr "" + +#: includes/admin/class-wpcp-help.php:293 +#: includes/admin/views/page/help-page.php:103 +msgid "Walmart" +msgstr "" + +#: includes/admin/class-wpcp-help.php:294 +#: includes/admin/views/page/help-page.php:104 +msgid "Walmart module to import products & automatic affiliation" +msgstr "" + +#: includes/admin/class-wpcp-help.php:299 +#: includes/admin/views/page/help-page.php:109 +msgid "Bestbuy" +msgstr "" + +#: includes/admin/class-wpcp-help.php:300 +#: includes/admin/views/page/help-page.php:110 +msgid "Bestbuy module to import products & automatic affiliation" +msgstr "" + +#: includes/admin/class-wpcp-help.php:305 +#: includes/admin/views/page/help-page.php:115 +msgid "Craiglist" +msgstr "" + +#: includes/admin/class-wpcp-help.php:306 +#: includes/admin/views/page/help-page.php:116 +msgid "Craiglist module to import Craiglist listings" +msgstr "" + +#: includes/admin/class-wpcp-help.php:311 +#: includes/admin/views/page/help-page.php:121 +msgid "Itunes" +msgstr "" + +#: includes/admin/class-wpcp-help.php:312 +#: includes/admin/views/page/help-page.php:122 +msgid "Itunes module to import products & automatic affiliation" +msgstr "" + +#: includes/admin/class-wpcp-help.php:317 +#: includes/admin/views/page/help-page.php:127 +msgid "CareerJet" +msgstr "" + +#: includes/admin/class-wpcp-help.php:318 +#: includes/admin/views/page/help-page.php:128 +msgid "CareerJet module to import jobs & automatic affiliation" +msgstr "" + +#: includes/admin/class-wpcp-help.php:323 +#: includes/admin/views/page/help-page.php:133 +msgid "EzineArticles" +msgstr "" + +#: includes/admin/class-wpcp-help.php:324 +#: includes/admin/views/page/help-page.php:134 +msgid "EzineArticles module to import articles" +msgstr "" + +#: includes/admin/class-wpcp-help.php:335 +#: includes/admin/views/page/help-page.php:145 +msgid "Reddit" +msgstr "" + +#: includes/admin/class-wpcp-help.php:336 +#: includes/admin/views/page/help-page.php:146 +msgid "Reddit module to import articles" +msgstr "" + +#: includes/admin/class-wpcp-help.php:341 +#: includes/admin/views/page/help-page.php:151 +msgid "SoundCloud" +msgstr "" + +#: includes/admin/class-wpcp-help.php:342 +#: includes/admin/views/page/help-page.php:152 +msgid "SoundCloud module to import audios" +msgstr "" + +#: includes/admin/class-wpcp-help.php:347 +#: includes/admin/views/page/help-page.php:157 +msgid "Instagram" +msgstr "" + +#: includes/admin/class-wpcp-help.php:348 +#: includes/admin/views/page/help-page.php:158 +msgid "Instagram module to import photos" +msgstr "" + +#: includes/admin/class-wpcp-help.php:353 +#: includes/admin/views/page/help-page.php:163 +msgid "Pinterest" +msgstr "" + +#: includes/admin/class-wpcp-help.php:354 +#: includes/admin/views/page/help-page.php:164 +msgid "Pinterest module to import photos" +msgstr "" + +#: includes/admin/class-wpcp-help.php:359 +msgid "Vimeo" +msgstr "" + +#: includes/admin/class-wpcp-help.php:360 +msgid "Vimeo module to import videos" +msgstr "" + +#: includes/admin/class-wpcp-help.php:365 +msgid "Yelp" +msgstr "" + +#: includes/admin/class-wpcp-help.php:366 +msgid "Yelp module to import business and reviews" +msgstr "" + +#: includes/admin/class-wpcp-help.php:371 +msgid "Eventful" +msgstr "" + +#: includes/admin/class-wpcp-help.php:372 +msgid "Eventful module to import events" +msgstr "" + +#: includes/admin/class-wpcp-help.php:377 +msgid "Etsy" +msgstr "" + +#: includes/admin/class-wpcp-help.php:378 +msgid "Etsy module to import products" +msgstr "" + +#: includes/admin/class-wpcp-help.php:383 +#: includes/admin/views/page/help-page.php:175 +msgid "Search Replace" +msgstr "" + +#: includes/admin/class-wpcp-help.php:384 +#: includes/admin/views/page/help-page.php:176 +msgid "Automatic search replace with regex support" +msgstr "" + +#: includes/admin/class-wpcp-help.php:389 +#: includes/admin/views/page/help-page.php:181 +msgid "Custom Post Meta" +msgstr "" + +#: includes/admin/class-wpcp-help.php:390 +#: includes/admin/views/page/help-page.php:182 +msgid "Insert custom post meta" +msgstr "" + +#: includes/admin/class-wpcp-help.php:395 +#: includes/admin/views/page/help-page.php:187 +msgid "Readability" +msgstr "" + +#: includes/admin/class-wpcp-help.php:396 +#: includes/admin/views/page/help-page.php:188 +msgid "Readability score controlled posts for clean articles" +msgstr "" + +#: includes/admin/class-wpcp-help.php:401 +#: includes/admin/metabox-functions.php:235 +#: includes/admin/views/page/help-page.php:193 +msgid "Keyword Suggestion" +msgstr "" + +#: includes/admin/class-wpcp-help.php:402 +#: includes/admin/views/page/help-page.php:194 +msgid "A tool to find a good keyword" +msgstr "" + +#: includes/admin/class-wpcp-help.php:407 +#: includes/admin/views/page/help-page.php:199 +msgid "Translation Support" +msgstr "" + +#: includes/admin/class-wpcp-help.php:408 +#: includes/admin/views/page/help-page.php:200 +msgid "Translate articles in other language" +msgstr "" + +#: includes/admin/class-wpcp-insight.php:279 +msgid "" +"Want to help make %s even more awesome? Allow Pluginever " +"to collect non-sensitive diagnostic data and usage information." +msgstr "" + +#: includes/admin/class-wpcp-insight.php:284 +msgid "what we collect" +msgstr "" + +#: includes/admin/class-wpcp-insight.php:290 +msgid "Allow" +msgstr "" + +#: includes/admin/class-wpcp-insight.php:291 +msgid "No thanks" +msgstr "" + +#: includes/admin/class-wpcp-insight.php:468 +msgid "Once Weekly" +msgstr "" + +#: includes/admin/class-wpcp-insight.php:606 +msgid "If you have a moment, please let us know why you are deactivating:" +msgstr "" + +#: includes/admin/class-wpcp-insight.php:620 +msgid "I rather wouldn't say" +msgstr "" + +#: includes/admin/class-wpcp-insight.php:621 +msgid "Submit & Deactivate" +msgstr "" + +#: includes/admin/class-wpcp-insight.php:622 +msgid "Canel" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:38 +#: includes/admin/views/metabox/spinner-settings.php:10 +#: wp-content-pilot.php:245 +msgid "Settings" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:52 +msgid "Misc Settings" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:56 +msgid "Article Spinner" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:73 +msgid "Remove Data on Uninstall?" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:74 +msgid "" +"Check this box if you would like to completely remove all of its data when " +"the plugin is deleted." +msgstr "" + +#: includes/admin/class-wpcp-settings.php:80 +msgid "Post Publish mail" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:81 +msgid "Send mail After post publish" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:96 +msgid "SpinreWriter" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:97 +msgid "" +"SpinreWriter is one of the best Article Spinner, if you do not have account " +"please %ssign up%s." +msgstr "" + +#: includes/admin/class-wpcp-settings.php:103 +msgid "Email" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:104 +msgid "Input your email address of SpinreWriter." +msgstr "" + +#: includes/admin/class-wpcp-settings.php:110 +msgid "API Key" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:111 +msgid "Input API key of SpinreWriter." +msgstr "" + +#: includes/admin/class-wpcp-settings.php:124 +msgid "WP Content Pilot Settings" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:133 wp-content-pilot.php:247 +msgid "Upgrade to PRO" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:136 +msgid "" +"Pro version support 15+ campaign sources with exclusive features, %supgrade " +"to pro now%s." +msgstr "" + +#: includes/admin/class-wpcp-settings.php:143 +msgid "Documentation" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:146 +msgid "" +"Please visit the %s WP Content Pilot %s plugin's documentation page to " +"learn how to use this plugin" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:152 +msgid "Support" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:155 +msgid "" +"Having issues or difficulties? You can post your issue on the %s Support " +"Forum.%s" +msgstr "" + +#: includes/admin/class-wpcp-settings.php:165 +msgid "Like the plugin? Please give us a %s rating.%s" +msgstr "" + +#: includes/admin/class-wpcp-tracker.php:7 +msgid "" +"Want to help make WP Content Pilot even more awesome? " +"Allow PluginEver to collect non-sensitive diagnostic data and usage " +"information." +msgstr "" + +#: includes/admin/metabox-functions.php:23 +msgid "Select a campaign to start" +msgstr "" + +#: includes/admin/metabox-functions.php:27 +#: includes/admin/views/metabox/action-metabox.php:62 +msgid "Campaign Status" +msgstr "" + +#: includes/admin/metabox-functions.php:28 +msgid "Campaign Options" +msgstr "" + +#: includes/admin/metabox-functions.php:29 +msgid "Campaign Log" +msgstr "" + +#: includes/admin/metabox-functions.php:30 +#: includes/admin/views/metabox/post-template.php:32 +msgid "Post Template" +msgstr "" + +#: includes/admin/metabox-functions.php:31 +msgid "Post Settings" +msgstr "" + +#: includes/admin/metabox-functions.php:32 +msgid "Posts Filter" +msgstr "" + +#: includes/admin/metabox-functions.php:33 +msgid "Advanced Settings" +msgstr "" + +#: includes/admin/metabox-functions.php:34 +msgid "Actions" +msgstr "" + +#: includes/admin/metabox-functions.php:36 +msgid "Miscellaneous" +msgstr "" + +#: includes/admin/metabox-functions.php:37 +msgid "Campaign Posts" +msgstr "" + +#: includes/admin/metabox-functions.php:38 +msgid "Spinner Settings" +msgstr "" + +#: includes/admin/metabox-functions.php:222 +msgid "Keywords" +msgstr "" + +#: includes/admin/metabox-functions.php:225 +msgid "Separate keywords by comma." +msgstr "" + +#: includes/admin/metabox-functions.php:250 +msgid "Strip original links from the post" +msgstr "" + +#: includes/admin/metabox-functions.php:252 +msgid "Remove hyperlinks found in the article" +msgstr "" + +#: includes/admin/metabox-functions.php:258 +msgid "Make permalink link directly to the source" +msgstr "" + +#: includes/admin/metabox-functions.php:260 +msgid "" +"Make post link directly to the source site, Posts will not load at your " +"site." +msgstr "" + +#: includes/admin/metabox-functions.php:270 +msgid "Add Canonical Tag with the original post link " +msgstr "" + +#: includes/admin/metabox-functions.php:281 +msgid "Set First image as featured image" +msgstr "" + +#: includes/admin/metabox-functions.php:288 +msgid "Remove images from content" +msgstr "" + +#: includes/admin/metabox-functions.php:295 +msgid "Set random featured image if no image exists" +msgstr "" + +#: includes/admin/metabox-functions.php:306 +msgid "Use original date if possible" +msgstr "" + +#: includes/admin/metabox-functions.php:317 +msgid "Use summary as excerpt" +msgstr "" + +#: includes/admin/metabox-functions.php:324 +msgid "Enable post with duplicate title" +msgstr "" + +#: includes/admin/metabox-functions.php:331 +msgid "Clean title" +msgstr "" + +#: includes/admin/metabox-functions.php:338 +msgid "Add rel nofollow & set target blank for all links" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:24 +msgid "Campaign Target" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:30 +#: includes/admin/views/metabox/action-metabox.php:40 +msgid "For better precision use keyboard arrows " +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:36 +msgid "Campaign Frequency" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:44 +msgid "Frequency Unit" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:47 +msgid "Minutes" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:48 +msgid "Hours" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:49 +msgid "Days" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:72 +msgid "Move to Trash" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:74 +msgid "Trash" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:82 +msgid "Reset" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:87 +msgid "Update" +msgstr "" + +#: includes/admin/views/metabox/action-metabox.php:90 +msgid "Update Campaign" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:6 +msgid "Limit Title" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:13 +msgid "Limit Content" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:20 +msgid "Excerpt Length" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:32 +msgid "Translator" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:38 +#: includes/admin/views/metabox/advanced-settings.php:52 +msgid "No Translation" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:48 +msgid "Translate To" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:53 +msgid "Afrikaans" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:54 +msgid "Albanian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:55 +msgid "Amharic" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:56 +msgid "Arabic" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:57 +msgid "Armenian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:58 +msgid "Azerbaijani" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:59 +msgid "Bashkir" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:60 +msgid "Basque" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:61 +msgid "Belarusian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:62 +msgid "Bengali" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:63 +msgid "Bosnian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:64 +msgid "Bulgarian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:65 +msgid "Burmese" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:66 +msgid "Catalan" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:67 +msgid "Cebuano" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:68 +msgid "Chinese" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:69 +msgid "Croatian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:70 +msgid "Czech" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:71 +msgid "Danish" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:72 +msgid "Dutch" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:73 +msgid "English" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:74 +msgid "Esperanto" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:75 +msgid "Estonian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:76 +msgid "Finnish" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:77 +msgid "French" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:78 +msgid "Galician" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:79 +msgid "Georgian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:80 +msgid "German" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:81 +msgid "Greek" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:82 +msgid "Gujarati" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:83 +msgid "Haitian Creole" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:84 +msgid "Hebrew" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:85 +msgid "Hill Mari" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:86 +msgid "Hindi" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:87 +msgid "Hungarian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:88 +msgid "Icelandic" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:89 +msgid "Indonesian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:90 +msgid "Irish" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:91 +msgid "Italian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:92 +msgid "Japanese" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:93 +msgid "Javanese" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:94 +msgid "Kannada" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:95 +msgid "Kazakh" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:96 +msgid "Khmer" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:97 +msgid "Korean" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:98 +msgid "Kyrgyz" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:99 +msgid "Lao" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:100 +msgid "Latin" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:101 +msgid "Latvian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:102 +msgid "Lithuanian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:103 +msgid "Luxembourgish" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:104 +msgid "Macedonian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:105 +msgid "Malagasy" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:106 +msgid "Malay" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:107 +msgid "Malayalam" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:108 +msgid "Maltese" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:109 +msgid "Maori" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:110 +msgid "Marathi" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:111 +msgid "Mari" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:112 +msgid "Mongolian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:113 +msgid "Nepali" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:114 +msgid "Norwegian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:115 +msgid "Papiamento" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:116 +msgid "Persian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:117 +msgid "Polish" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:118 +msgid "Portuguese" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:119 +msgid "Portuguese (Brazilian)" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:120 +msgid "Punjabi" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:121 +msgid "Romanian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:122 +msgid "Russian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:123 +msgid "Scottish Gaelic" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:124 +msgid "Serbian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:125 +msgid "Sinhala" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:126 +msgid "Slovak" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:127 +msgid "Slovenian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:128 +msgid "Spanish" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:129 +msgid "Sundanese" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:130 +msgid "Swahili" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:131 +msgid "Swedish" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:132 +msgid "Tagalog" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:133 +msgid "Tajik" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:134 +msgid "Tamil" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:135 +msgid "Tatar" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:136 +msgid "Telugu" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:137 +msgid "Thai" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:138 +msgid "Turkish" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:139 +msgid "Udmurt" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:140 +msgid "Ukrainian" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:141 +msgid "Urdu" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:142 +msgid "Uzbek" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:143 +msgid "Vietnamese" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:144 +msgid "Welsh" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:145 +msgid "Xhosa" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:146 +msgid "Yiddish" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:148 +msgid "Select a language to translate." +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:157 +msgid "Enable Polylang for published posts" +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:162 +msgid "Two letter language codes." +msgstr "" + +#: includes/admin/views/metabox/advanced-settings.php:164 +msgid "Just give 2 letter language code. Like \"de\" for german, \"bn\" for bangla" +msgstr "" + +#: includes/admin/views/metabox/campaign-miscellaneous.php:2 +msgid "Delete all posts by this campaign" +msgstr "" + +#: includes/admin/views/metabox/campaign-posts.php:11 +msgid "No posts generated yet" +msgstr "" + +#: includes/admin/views/metabox/campaign-selection.php:227 +msgid "Submit" +msgstr "" + +#: includes/admin/views/metabox/campaign-status.php:28 +msgid "Campaign Type" +msgstr "" + +#: includes/admin/views/metabox/campaign-status.php:33 +#: includes/post-types.php:121 +msgid "Last Run" +msgstr "" + +#: includes/admin/views/metabox/campaign-status.php:37 +msgid "Last Post" +msgstr "" + +#: includes/admin/views/metabox/campaign-status.php:48 +msgid "Run Campaign" +msgstr "" + +#: includes/admin/views/metabox/campaign-status.php:50 +msgid "Run Now" +msgstr "" + +#: includes/admin/views/metabox/post-filter.php:6 +msgid "Min Words" +msgstr "" + +#: includes/admin/views/metabox/post-filter.php:10 +msgid "Min required words, otherwise posts will be rejected. (PRO)" +msgstr "" + +#: includes/admin/views/metabox/post-filter.php:18 +msgid "Required Words" +msgstr "" + +#: includes/admin/views/metabox/post-filter.php:20 +msgid "Fashion, Secret, Awesome" +msgstr "" + +#: includes/admin/views/metabox/post-filter.php:21 +msgid "Must contain words, otherwise posts will be rejected. (PRO)" +msgstr "" + +#: includes/admin/views/metabox/post-filter.php:29 +msgid "Banned Words" +msgstr "" + +#: includes/admin/views/metabox/post-filter.php:31 +msgid "YouTube, Wikipedia, Google" +msgstr "" + +#: includes/admin/views/metabox/post-filter.php:32 +msgid "If a post contains the above words it will be rejected. (PRO)" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:6 +msgid "Post type" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:11 +msgid "Post" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:12 +msgid "Page" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:20 +msgid "Published" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:21 +msgid "Private" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:22 +msgid "Draft" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:23 +msgid "Pending" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:29 +msgid "Post Author" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:34 +msgid "Select author" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:45 +msgid "Post Category" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:49 +msgid "Select category for the post" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:56 +msgid "Keyword to category" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:59 +#: includes/admin/views/metabox/post-settings.php:82 +msgid "Separate with (,) comma" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:60 +msgid "" +"This option will search the content for the keyword and if exists, it will " +"assign & set category to the post" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:68 +msgid "Post Tags" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:72 +msgid "Select tags for the post" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:79 +msgid "Keyword to tag" +msgstr "" + +#: includes/admin/views/metabox/post-settings.php:83 +msgid "" +"This option will search the content for the keyword and if exists, it will " +"assign & set tag to the post" +msgstr "" + +#: includes/admin/views/metabox/post-template.php:12 +msgid "Could not find the module" +msgstr "" + +#: includes/admin/views/metabox/post-template.php:18 +msgid "Spin Article" +msgstr "" + +#: includes/admin/views/metabox/post-template.php:20 +msgid "" +"Spin article using using spinrewriter, if you do not have account please " +"%ssign up%s and set in settings page." +msgstr "" + +#: includes/admin/views/metabox/post-template.php:26 +msgid "Post Title" +msgstr "" + +#: includes/admin/views/metabox/post-template.php:44 +msgid "Supported Tags:" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:9 +msgid "Please configure spinner settings to use this section" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:17 +msgid "Action" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:20 +msgid "Api Quota" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:21 +msgid "Text with Spintax" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:22 +msgid "Unique Variation" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:23 +msgid "Unique Variation from Spintax" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:27 +msgid "The action that you're requesting from the Spin Rewriter server." +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:30 +msgid "Auto Protected Terms" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:33 +#: includes/admin/views/metabox/spinner-settings.php:56 +#: includes/admin/views/metabox/spinner-settings.php:68 +#: includes/admin/views/metabox/spinner-settings.php:80 +#: includes/admin/views/metabox/spinner-settings.php:91 +#: includes/admin/views/metabox/spinner-settings.php:102 +#: includes/admin/views/metabox/spinner-settings.php:113 +#: includes/admin/views/metabox/spinner-settings.php:124 +msgid "No" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:34 +#: includes/admin/views/metabox/spinner-settings.php:57 +#: includes/admin/views/metabox/spinner-settings.php:69 +#: includes/admin/views/metabox/spinner-settings.php:81 +#: includes/admin/views/metabox/spinner-settings.php:92 +#: includes/admin/views/metabox/spinner-settings.php:103 +#: includes/admin/views/metabox/spinner-settings.php:114 +#: includes/admin/views/metabox/spinner-settings.php:125 +msgid "Yes" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:37 +msgid "" +"Should Spin Rewriter automatically protect all Capitalized Words except for " +"those in the title of your original text?" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:40 +msgid "Confidence level" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:43 +msgid "Low" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:44 +msgid "Medium" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:45 +#: includes/modules/class-wpcp-youtube.php:152 +msgid "High" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:49 +msgid "The confidence level of the One-Click Rewrite process." +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:53 +msgid "Nested spintax" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:61 +msgid "Should Spin Rewriter also spin single words inside already spun phrases?" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:65 +msgid "Auto sentences" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:73 +msgid "Should Spin Rewriter spin complete sentences?" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:77 +msgid "Auto paragraphs" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:85 +msgid "Should Spin Rewriter spin entire paragraphs?" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:88 +msgid "Auto new paragraphs" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:96 +msgid "Should Spin Rewriter automatically write additional paragraphs on its own?" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:99 +msgid "Auto sentence trees" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:107 +msgid "" +"Should Spin Rewriter automatically change the entire structure of phrases " +"and sentences?" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:110 +msgid "Use Only Synonyms" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:118 +msgid "" +"Should Spin Rewriter use only synonyms of the original words instead of the " +"original words themselves?They work along side with action values \"unique " +"variation and unique variation from spintax\"" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:121 +msgid "Reorder paragraphs" +msgstr "" + +#: includes/admin/views/metabox/spinner-settings.php:129 +msgid "" +"Should Spin Rewriter intelligently randomize the order of paragraphs and " +"unordered lists when generating spun text? They work along side with action " +"values \"unique variation and unique variation from spintax\"" +msgstr "" + +#: includes/admin/views/page/help-page.php:139 +msgid "Quora" +msgstr "" + +#: includes/admin/views/page/help-page.php:140 +msgid "Quora module to import articles" +msgstr "" + +#: includes/admin/views/page/help-page.php:169 +msgid "Tiktok" +msgstr "" + +#: includes/admin/views/page/help-page.php:170 +msgid "Tiktok module to import videos" +msgstr "" + +#: includes/admin/views/page/status-page.php:51 +msgid "WordPress version" +msgstr "" + +#: includes/admin/views/page/status-page.php:56 +msgid "WP Content Pilot version" +msgstr "" + +#: includes/admin/views/page/status-page.php:61 +msgid "PHP version" +msgstr "" + +#: includes/admin/views/page/status-page.php:66 +msgid "MySQL version" +msgstr "" + +#: includes/admin/views/page/status-page.php:71 +msgid "cURL version" +msgstr "" + +#: includes/admin/views/page/status-page.php:76 +msgid "cURL SSL version" +msgstr "" + +#: includes/admin/views/page/status-page.php:81 +msgid "WP-Cron url" +msgstr "" + +#: includes/admin/views/page/status-page.php:86 +msgid "Document root" +msgstr "" + +#: includes/admin/views/page/status-page.php:91 +msgid "SERVER" +msgstr "" + +#: includes/admin/views/page/status-page.php:96 +msgid "Operating System" +msgstr "" + +#: includes/admin/views/page/status-page.php:101 +msgid "Maximum execution time" +msgstr "" + +#: includes/admin/views/page/status-page.php:102 +msgid "%s seconds" +msgstr "" + +#: includes/admin/views/page/status-page.php:106 +msgid "Language" +msgstr "" + +#: includes/admin/views/page/status-page.php:111 +msgid "MySQL Client encoding" +msgstr "" + +#: includes/admin/views/page/status-page.php:116 +msgid "Max Upload Size" +msgstr "" + +#: includes/admin/views/page/status-page.php:121 +msgid "Remote Post" +msgstr "" + +#: includes/admin/views/page/status-page.php:126 +msgid "Remote Get" +msgstr "" + +#: includes/admin/views/page/status-page.php:132 +msgid "Links Table" +msgstr "" + +#: includes/admin/views/page/status-page.php:137 +msgid "Log Table" +msgstr "" + +#: includes/admin/views/page/status-page.php:142 +msgid "Per Minute Cron Installed" +msgstr "" + +#: includes/admin/views/page/status-page.php:147 +msgid "Is CRON running" +msgstr "" + +#: includes/admin/views/page/status-page.php:153 +msgid "Loaded PHP Extensions" +msgstr "" + +#: includes/admin/views/page/status-page.php:157 +msgid "Required PHP Extensions" +msgstr "" + +#: includes/admin/views/page/status-page.php:168 +msgid "Total Campaigns" +msgstr "" + +#: includes/admin/views/page/status-page.php:187 +msgid "Status > WP Content Pilot" +msgstr "" + +#: includes/admin/views/page/status-page.php:190 +msgid "" +"Experiencing an issue and need to contact WP Content Pilot support? Click " +"the link below to get debug information you can send to us." +msgstr "" + +#: includes/admin/views/page/status-page.php:202 +msgid "Get System Information" +msgstr "" + +#: includes/admin/views/page/status-page.php:209 +msgid "System Information" +msgstr "" + +#: includes/admin/views/page/status-page.php:212 +#: includes/admin/views/page/status-page.php:219 +msgid "Setting" +msgstr "" + +#: includes/admin/views/page/status-page.php:213 +#: includes/admin/views/page/status-page.php:220 +#: includes/admin/views/page/status-page.php:243 +#: includes/admin/views/page/status-page.php:250 +msgid "Value" +msgstr "" + +#: includes/admin/views/page/status-page.php:239 +msgid "Campaigns Information" +msgstr "" + +#: includes/admin/views/page/status-page.php:242 +#: includes/admin/views/page/status-page.php:249 +msgid "Label" +msgstr "" + +#: includes/admin/views/page/status-page.php:276 +msgid "Copy System Information" +msgstr "" + +#: includes/admin/views/page/status-page.php:287 +msgid "Copied" +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:114 +msgid "No %s found." +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:162 +msgid "All" +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:163 +msgid "Info" +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:164 +msgid "Warning" +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:165 +msgid "Error" +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:173 +msgid "Clear Logs" +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:185 +msgid "Campaign" +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:186 +msgid "Level" +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:187 +msgid "Log" +msgstr "" + +#: includes/admin/views/tables/class-wpcp-logs-table.php:188 +#: includes/modules/class-wpcp-envato.php:114 +#: includes/modules/class-wpcp-youtube.php:116 +msgid "Date" +msgstr "" + +#: includes/class-wpcp-html.php:177 +msgid "-- Please Select --" +msgstr "" + +#: includes/class-wpcp-module.php:146 +msgid "Could not find the campaign" +msgstr "" + +#: includes/class-wpcp-module.php:153 +msgid "Campaign type mismatch" +msgstr "" + +#: includes/class-wpcp-module.php:157 includes/class-wpcp-module.php:160 +msgid "Tried maximum time but could not generate article check log" +msgstr "" + +#: includes/class-wpcp-module.php:189 +msgid "Content Pilot did not responded for the action" +msgstr "" + +#: includes/class-wpcp-module.php:219 +msgid "Article failed in acceptance test" +msgstr "" + +#: includes/class-wpcp-module.php:229 +msgid "Limiting title" +msgstr "" + +#: includes/class-wpcp-module.php:237 +msgid "Limiting content" +msgstr "" + +#: includes/class-wpcp-module.php:244 +msgid "Stripping links" +msgstr "" + +#: includes/class-wpcp-module.php:316 +msgid "Removing images from content" +msgstr "" + +#: includes/class-wpcp-module.php:395 +msgid "Setting featured image" +msgstr "" + +#: includes/class-wpcp-module.php:416 +msgid "Settings up polylang language" +msgstr "" + +#: includes/class-wpcp-notices.php:253 +msgid "" +"WP Content Pilot is powering 4000+ companies in generating " +"automatic contents and affiliation with its 20+ types of campaign. " +"Upgrade to Pro now & get 10% discount using coupon " +"WPCPFREE2PRO" +msgstr "" + +#: includes/class-wpcp-notices.php:265 +msgid "" +"The most wanted feature article spinner is now available with WP " +"Content Pilot. We have integrated spinrewriter support. If you do not " +"have account %ssignup now%s and configure in settings page." +msgstr "" + +#: includes/class-wpcp-readability.php:55 +msgid "Not readable [%s]" +msgstr "" + +#: includes/class-wpcp-readability.php:57 +msgid "Content is not readable" +msgstr "" + +#: includes/core-functions.php:379 +#. translators: 1: The name of the PHP constant that is set. +msgid "The %s constant is set to true. WP-Cron spawning is disabled." +msgstr "" + +#: includes/core-functions.php:384 +#. translators: 1: The name of the PHP constant that is set. +msgid "The %s constant is set to true." +msgstr "" + +#: includes/core-functions.php:415 +#. translators: 1: The HTTP response code. +msgid "Unexpected HTTP response code: %s" +msgstr "" + +#: includes/core-functions.php:599 +msgid "spinwritter API details is not set, aborting article spinner" +msgstr "" + +#: includes/core-functions.php:608 +msgid "Spinwritter could not send API request, aborting article spinner" +msgstr "" + +#: includes/core-functions.php:615 +msgid "Aborting article spinner Because [%s]" +msgstr "" + +#: includes/modules/class-wpcp-article.php:42 +#: includes/modules/class-wpcp-envato.php:34 +#: includes/modules/class-wpcp-feed.php:36 +#: includes/modules/class-wpcp-flickr.php:36 +#: includes/modules/class-wpcp-youtube.php:41 +#: includes/modules/class-wpcp-youtube.php:117 +msgid "Title" +msgstr "" + +#: includes/modules/class-wpcp-article.php:43 +#: includes/modules/class-wpcp-feed.php:37 +#: includes/modules/class-wpcp-youtube.php:42 +msgid "Summary" +msgstr "" + +#: includes/modules/class-wpcp-article.php:44 +#: includes/modules/class-wpcp-envato.php:35 +#: includes/modules/class-wpcp-feed.php:38 +#: includes/modules/class-wpcp-flickr.php:37 +#: includes/modules/class-wpcp-youtube.php:43 +msgid "Content" +msgstr "" + +#: includes/modules/class-wpcp-article.php:45 +#: includes/modules/class-wpcp-envato.php:36 +#: includes/modules/class-wpcp-feed.php:39 +#: includes/modules/class-wpcp-flickr.php:39 +#: includes/modules/class-wpcp-youtube.php:44 +msgid "Main image url" +msgstr "" + +#: includes/modules/class-wpcp-article.php:46 +#: includes/modules/class-wpcp-envato.php:37 +#: includes/modules/class-wpcp-feed.php:40 +#: includes/modules/class-wpcp-flickr.php:40 +#: includes/modules/class-wpcp-youtube.php:45 +msgid "Source link" +msgstr "" + +#: includes/modules/class-wpcp-article.php:84 +msgid "Select language to search article" +msgstr "" + +#: includes/modules/class-wpcp-article.php:113 +msgid "Article Settings" +msgstr "" + +#: includes/modules/class-wpcp-article.php:129 +msgid "Banned Hosts" +msgstr "" + +#: includes/modules/class-wpcp-article.php:130 +msgid "" +"Articles from the above hosts will be rejected. put single url/host per " +"line." +msgstr "" + +#: includes/modules/class-wpcp-article.php:131 +msgid "" +"example.com \n" +" example1.com" +msgstr "" + +#: includes/modules/class-wpcp-article.php:136 +msgid "Google Search Api Key" +msgstr "" + +#: includes/modules/class-wpcp-article.php:137 +msgid "Google custom search api key will be needed to get the result." +msgstr "" + +#: includes/modules/class-wpcp-article.php:144 +msgid "Search Engine ID" +msgstr "" + +#: includes/modules/class-wpcp-article.php:145 +msgid "Search engine id for searching the links" +msgstr "" + +#: includes/modules/class-wpcp-article.php:164 +msgid "Loaded Article campaign" +msgstr "" + +#: includes/modules/class-wpcp-article.php:169 +msgid "Checking google search api key and search engine id for authentication" +msgstr "" + +#: includes/modules/class-wpcp-article.php:173 +msgid "" +"Google custom search api or search engine id is not set.So, the campaign " +"wont run, disabling campaign." +msgstr "" + +#: includes/modules/class-wpcp-article.php:183 +#: includes/modules/class-wpcp-article.php:184 +#: includes/modules/class-wpcp-envato.php:239 +#: includes/modules/class-wpcp-flickr.php:209 +#: includes/modules/class-wpcp-youtube.php:281 +msgid "Campaign do not have keyword to proceed, please set keyword" +msgstr "" + +#: includes/modules/class-wpcp-article.php:189 +msgid "Looking for article for the keyword [ %s ]" +msgstr "" + +#: includes/modules/class-wpcp-article.php:199 +msgid "" +"The keyword is deactivated for 1 hr because last time could not find any " +"article with keyword [%s]" +msgstr "" + +#: includes/modules/class-wpcp-article.php:204 +msgid "Checking for cached links in store" +msgstr "" + +#: includes/modules/class-wpcp-article.php:207 +#: includes/modules/class-wpcp-youtube.php:299 +msgid "No cached links in store. Generating new links..." +msgstr "" + +#: includes/modules/class-wpcp-article.php:212 +#: includes/modules/class-wpcp-feed.php:153 +msgid "Looping through cached links for publishing article" +msgstr "" + +#: includes/modules/class-wpcp-article.php:214 +msgid "Generating article from [%s]" +msgstr "" + +#: includes/modules/class-wpcp-article.php:222 +#: includes/modules/class-wpcp-feed.php:165 +msgid "Failed processing link reason [%s]" +msgstr "" + +#: includes/modules/class-wpcp-article.php:226 +msgid "Extracting post content from request" +msgstr "" + +#: includes/modules/class-wpcp-article.php:232 +msgid "Failed readability reason [%s] changing to different link" +msgstr "" + +#: includes/modules/class-wpcp-article.php:240 +#: includes/modules/class-wpcp-envato.php:376 +#: includes/modules/class-wpcp-flickr.php:303 +#: includes/modules/class-wpcp-youtube.php:353 +msgid "Cleaning title" +msgstr "" + +#: includes/modules/class-wpcp-article.php:246 +#: includes/modules/class-wpcp-feed.php:189 +msgid "Making article content from response" +msgstr "" + +#: includes/modules/class-wpcp-article.php:257 +#: includes/modules/class-wpcp-envato.php:418 +#: includes/modules/class-wpcp-feed.php:203 +#: includes/modules/class-wpcp-flickr.php:344 +#: includes/modules/class-wpcp-youtube.php:392 +msgid "Article processed from campaign" +msgstr "" + +#: includes/modules/class-wpcp-article.php:345 +msgid "Searching page url [%s]" +msgstr "" + +#: includes/modules/class-wpcp-article.php:357 +#: includes/modules/class-wpcp-flickr.php:258 +#: includes/modules/class-wpcp-youtube.php:479 +msgid "Extracting response from request" +msgstr "" + +#: includes/modules/class-wpcp-article.php:361 +msgid "" +"Could not find any links from search engine, deactivating keyword for an " +"hour." +msgstr "" + +#: includes/modules/class-wpcp-article.php:368 +msgid "Getting banned hosts for skipping links" +msgstr "" + +#: includes/modules/class-wpcp-article.php:380 +#: includes/modules/class-wpcp-feed.php:253 +msgid "Finding links from response and inserting into database" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:38 +msgid "Item classification" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:39 +msgid "Item classification url" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:40 +msgid "Price USD" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:41 +msgid "Number of sales" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:42 +#: includes/modules/class-wpcp-envato.php:111 +#: includes/modules/class-wpcp-youtube.php:119 +msgid "Rating" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:43 +msgid "Author user name" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:44 +msgid "Author url" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:45 +msgid "Author image url" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:46 +msgid "Item summary" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:47 +msgid "Tags" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:48 +msgid "HTML description" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:49 +msgid "Affiliate URL" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:50 +msgid "Affiliate Live Preview URL" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:51 +msgid "Audio/Video Preview." +msgstr "" + +#: includes/modules/class-wpcp-envato.php:52 +msgid "Categories" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:83 +msgid "Platform" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:95 +msgid "Select envato platform" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:99 +msgid "Price Range" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:102 +msgid "separate min max price with (|). e.g. 20|100" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:106 +msgid "Sort By" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:109 +#: includes/modules/class-wpcp-flickr.php:93 +#: includes/modules/class-wpcp-youtube.php:115 +msgid "Relevance" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:110 +msgid "Following" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:112 +msgid "Sales" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:113 +msgid "Price" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:115 +msgid "Updated" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:116 +msgid "Name" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:117 +msgid "Trending" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:119 +msgid "Select how the result will be sorted" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:123 +msgid "Sort Direction" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:126 +msgid "ASC" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:127 +msgid "DESC" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:129 +msgid "Select sort direction for the result set" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:133 +msgid "Search in specific category" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:135 +msgid "" +"For example: Use site-templates for " +"this category." +msgstr "" + +#: includes/modules/class-wpcp-envato.php:139 +msgid "Search in specific author" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:141 +msgid "" +"For example: Use 2codethemes for this " +"author." +msgstr "" + +#: includes/modules/class-wpcp-envato.php:173 +msgid "Envato Settings" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:189 +msgid "Envato Token" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:190 +msgid "" +"Check this tutorial to get your Envato " +"token." +msgstr "" + +#: includes/modules/class-wpcp-envato.php:196 +msgid "Impact Radius affiliate URL" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:197 +msgid "Learn how to get your Impact Radius affiliate URL here." +msgstr "" + +#: includes/modules/class-wpcp-envato.php:214 +msgid "Loaded Envato Campaign" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:219 +msgid "Checking envato api key and impact radius url for authentication.." +msgstr "" + +#: includes/modules/class-wpcp-envato.php:221 +msgid "The Envato api key is not set so the campaign won't run, disabling campaign." +msgstr "" + +#: includes/modules/class-wpcp-envato.php:231 +msgid "" +"The Impact Radius affiliate url is not set. Set it from here" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:243 +msgid "Looping through keywords [ %s ]" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:286 +msgid "Searching for items url [ %s ]" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:293 +msgid "Envato api request failed response [ %s ]" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:303 +msgid "No matching data found from api disabling the keyword for 1 hour" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:310 +msgid "Checking duplicate links in store..." +msgstr "" + +#: includes/modules/class-wpcp-envato.php:322 +msgid "Finding images from item preview" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:348 +msgid "Making affiliate url" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:363 +msgid "Extracting tags from item" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:370 +msgid "Generating envato article from [ %s ]" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:384 +msgid "Extracting categories from response" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:390 +msgid "Extracting tags from response" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:396 +msgid "Combining all parts for article" +msgstr "" + +#: includes/modules/class-wpcp-envato.php:421 +msgid "Inserting link into store..." +msgstr "" + +#: includes/modules/class-wpcp-feed.php:65 +msgid "Feed Links" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:66 +msgid "Example: http://example.com/feed" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:67 +msgid "Input feed links, Separate links with a comma (,)" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:72 +msgid "Feed fetch full content" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:126 +msgid "Campaign do not have feed link to proceed, please set link" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:132 +msgid "Looping through feed link now trying with [ %s ]" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:141 +#: includes/modules/class-wpcp-youtube.php:295 +msgid "Checking cached links in store" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:144 +msgid "No cached links in store.Generating new links...." +msgstr "" + +#: includes/modules/class-wpcp-feed.php:150 +msgid "Could not find any new link, lets try later." +msgstr "" + +#: includes/modules/class-wpcp-feed.php:155 +msgid "Grabbing feed from [%s]" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:168 +msgid "Extracting post response from request" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:175 +msgid "Failed readability reason [%s]" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:183 +msgid "Cleaning post title" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:230 +msgid "Failed fetching feeds [%s]" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:232 +msgid "Checking for force feed and initiating force feed" +msgstr "" + +#: includes/modules/class-wpcp-feed.php:246 +#: includes/modules/class-wpcp-feed.php:248 +msgid "Could not find any article, waiting..." +msgstr "" + +#: includes/modules/class-wpcp-feed.php:298 +msgid "Total found links [%d] and accepted [%d] and reject [%d]" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:38 +msgid "Published date" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:41 +msgid "Author Name" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:42 +msgid "Author Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:43 +msgid "Photo Tags" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:44 +msgid "Photo Views" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:45 +msgid "Photo Taken Date" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:46 +msgid "Photo Posted Date" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:47 +msgid "User Id" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:48 +msgid "Square Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:49 +msgid "Large Square Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:50 +msgid "Thumbnail Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:51 +msgid "Small Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:52 +msgid "Small 320 Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:53 +msgid "Medium Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:54 +msgid "Medium 640 Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:55 +msgid "Medium 800 Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:56 +msgid "Large Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:57 +msgid "Original Image Url" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:91 +msgid "Sort Order" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:94 +msgid "Date Posted ASC" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:95 +msgid "Date Posted DESC" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:96 +msgid "Date Taken ASC" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:97 +msgid "Date Taken DESC" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:98 +msgid "Interestingness DESC" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:99 +msgid "Interestingness ASC" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:101 +msgid "Sort order for flickr" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:108 +msgid "Specific User ID" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:113 +msgid "Choose License" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:115 +msgid "All Rights Reserved" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:116 +msgid "Attribution-NonCommercial-ShareAlike License" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:117 +msgid "Attribution-NonCommercial License" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:118 +msgid "Attribution-NonCommercial-NoDerivs License" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:119 +msgid "Attribution License" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:120 +msgid "Attribution-ShareAlike License" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:121 +msgid "Attribution-NoDerivs License" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:122 +msgid "No known copyright restrictions" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:123 +msgid "United States Government Work" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:124 +msgid "Public Domain Dedication (CC0)" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:125 +msgid "Public Domain Mark" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:127 +msgid "License Restrictions flickr" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:157 +msgid "Flickr Settings" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:173 +msgid "Flickr API Key" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:174 +msgid "" +"Get your Flickr API key by following this link." +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:190 +msgid "Loaded Flickr Campaign" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:192 +msgid "Checking flick api key for authentication" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:201 +msgid "The Flickr api key is not set so the campaign won't run, disabling campaign." +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:221 +msgid "" +"Maximum page number reached for the keyword [%s] deactivating the keyword " +"for a week" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:246 +msgid "Looking for data from [%s]" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:252 +msgid "Flickr api request failed response [%s]" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:266 +msgid "Could not find any result for the keyword %s" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:274 +msgid "Requesting for images from flickr by title" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:280 +msgid "Extracting content from response" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:310 +msgid "Generating flickr article from [ %s ]" +msgstr "" + +#: includes/modules/class-wpcp-flickr.php:334 +msgid "Inserting links into store...." +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:46 +msgid "Video Id" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:47 +msgid "Channel Id" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:48 +msgid "Channel Name" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:49 +msgid "Video Tags" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:50 +#: includes/modules/class-wpcp-youtube.php:136 +msgid "Video Duration" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:51 +msgid "Video rating" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:52 +msgid "Total Views" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:53 +msgid "Total Likes" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:54 +msgid "Total Dislikes" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:55 +msgid "Total Favourites" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:56 +msgid "Total Comments" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:57 +msgid "HTML Embed Code " +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:58 +msgid "Video Download url" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:59 +msgid "Video transcript available in PRO" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:87 +msgid "Youtube Search Type" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:88 +msgid "" +"Use global search for all result or use specific channel if you want to " +"limit to that channel." +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:90 +msgid "Global" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:91 +msgid "From Playlist" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:92 +msgid "From Channel" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:99 +msgid "Example: PLiMD4qj5M_C2DLLi00-D2jnHt9eGPNqgs" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:100 +msgid "Youtube Playlist/Channel ID" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:101 +msgid "eg. playlist id is PLiMD4qj5M_C2DLLi00-D2jnHt9eGPNqgs" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:106 +msgid "Youtube Category" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:113 +msgid "Youtube Search Order" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:118 +msgid "View Count" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:125 +msgid "Video License" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:128 +#: includes/modules/class-wpcp-youtube.php:139 +#: includes/modules/class-wpcp-youtube.php:151 +#: includes/modules/class-wpcp-youtube.php:162 +msgid "Any" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:129 +msgid "Creative Common" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:130 +#: includes/modules/class-wpcp-youtube.php:153 +msgid "Standard" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:140 +msgid "Long (longer than 20 minutes)" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:141 +msgid "Medium (between four and 20 minutes)" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:142 +msgid "Short (less than four minutes)" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:148 +msgid "Video Definition" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:159 +msgid "Video Type" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:163 +msgid "Episode" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:164 +msgid "Movie" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:170 +msgid "Safe Search" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:173 +msgid "Moderate" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:174 +msgid "None (will not filter)" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:175 +msgid "Strict (Exclude all restricted content)" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:182 +msgid "Youtube - Auto hyperlink urls within the description" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:187 +msgid "Post only live videos only" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:192 +msgid "Post videos only with closed captions" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:225 +msgid "Youtube Settings" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:241 +msgid "Youtube API Key" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:242 +msgid "" +"Youtube campaigns won't run without API key. Learn how to get one." +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:263 +msgid "" +"The YouTube api key is not set so the campaign won't run, disabling " +"campaign." +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:268 +msgid "Loaded Youtube campaign" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:270 +msgid "Checking youtube search type..." +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:276 +msgid "Campaign do not have playlist URL to proceed, please set playlist URL" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:287 +msgid "Checking for links in store..." +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:290 +msgid "" +"This keyword deactivated for 1 hr because last time could not find any " +"article with url [%s]" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:305 +msgid "Looping through cached links for article" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:308 +msgid "Youtube link#[%s]" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:314 +msgid "Making request for getting youtube video content" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:320 +msgid "Request error in grabbing video details error [ %s ]" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:324 +msgid "Extracting article content from response" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:328 +msgid "Removing unauthorized html content from description" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:331 +msgid "Extracting thumbnail" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:338 +msgid "Extracting transcript" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:344 +msgid "Extracting hyperlink description" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:359 +msgid "Preparing different parts for article" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:465 +msgid "Requesting urls from Youtube [%s]" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:473 +msgid "Youtube api request failed response [%s]" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:496 +msgid "Finding links from response and storing....." +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:532 +msgid "Total found links [%d] and accepted [%d] and rejected [%d]" +msgstr "" + +#: includes/modules/class-wpcp-youtube.php:629 +msgid "Youtube campaign wont run because you did not set the API details yet." +msgstr "" + +#: includes/post-types.php:21 +msgid "Add New" +msgstr "" + +#: includes/post-types.php:22 +msgid "Add New Campaign" +msgstr "" + +#: includes/post-types.php:23 +msgid "Edit Campaign" +msgstr "" + +#: includes/post-types.php:24 +msgid "New Campaign" +msgstr "" + +#: includes/post-types.php:25 +msgid "All Campaigns" +msgstr "" + +#: includes/post-types.php:26 +msgid "View Campaign" +msgstr "" + +#: includes/post-types.php:27 +msgid "Search Campaigns" +msgstr "" + +#: includes/post-types.php:28 +msgid "No Campaigns found" +msgstr "" + +#: includes/post-types.php:29 +msgid "No Campaigns found in Trash" +msgstr "" + +#: includes/post-types.php:32 +msgid "Campaign Attributes" +msgstr "" + +#: includes/post-types.php:33 +msgid "Filter Campaigns list" +msgstr "" + +#: includes/post-types.php:34 +msgid "Campaigns list navigation" +msgstr "" + +#: includes/post-types.php:35 +msgid "Campaigns list" +msgstr "" + +#: includes/post-types.php:39 +msgid "Campaigns of Wordpress Content Pilot" +msgstr "" + +#: includes/post-types.php:70 includes/post-types.php:73 +#: includes/post-types.php:76 +msgid "Campaign updated." +msgstr "" + +#: includes/post-types.php:71 +msgid "Custom field updated." +msgstr "" + +#: includes/post-types.php:72 +msgid "Custom field deleted." +msgstr "" + +#: includes/post-types.php:75 +#. translators: %s: date and time of the revision +msgid "Campaign restored to revision from %s" +msgstr "" + +#: includes/post-types.php:77 +msgid "Campaign saved." +msgstr "" + +#: includes/post-types.php:78 +msgid "Campaign submitted." +msgstr "" + +#: includes/post-types.php:79 +msgid "Campaign scheduled for: %1$s." +msgstr "" + +#: includes/post-types.php:81 +#. translators: Publish box date format, see http:php.net/date. +msgid "M j, Y @ G:i" +msgstr "" + +#: includes/post-types.php:82 +msgid "Campaign draft updated." +msgstr "" + +#: includes/post-types.php:101 +msgid "Campaign Title" +msgstr "" + +#: includes/post-types.php:118 +msgid "Type" +msgstr "" + +#: includes/post-types.php:119 +msgid "Posts/Target" +msgstr "" + +#: includes/post-types.php:120 +msgid "Frequency" +msgstr "" + +#: includes/post-types.php:139 +msgid "Active" +msgstr "" + +#: includes/post-types.php:141 +msgid "Disabled" +msgstr "" + +#: wp-content-pilot.php:80 +msgid "Cloning is forbidden." +msgstr "" + +#: wp-content-pilot.php:89 +msgid "Universalizing instances of this class is forbidden." +msgstr "" + +#: wp-content-pilot.php:266 +msgid "View documentation" +msgstr "" + +#: wp-content-pilot.php:266 +msgid "Docs" +msgstr "" + +#: wp-content-pilot.php:285 +msgid "Once a Minute" +msgstr "" + +#: wp-content-pilot.php:311 +msgid "%1$s in %2$s on line %3$s" +msgstr "" + +#. Plugin Name of the plugin/theme +msgid "WP Content Pilot" +msgstr "" + +#. Author URI of the plugin/theme +msgid "https://www.pluginever.com" +msgstr "" + +#. Description of the plugin/theme +msgid "" +"WP Content Pilot automatically posts contents from various sources based on " +"the predefined keywords." +msgstr "" + +#. Author of the plugin/theme +msgid "pluginever" +msgstr "" + +#: includes/post-types.php:19 +msgctxt "campaign post type name" +msgid "Campaigns" +msgstr "" + +#: includes/post-types.php:20 +msgctxt "singular campaign post type name" +msgid "Campaign" +msgstr "" + +#: includes/post-types.php:31 +msgctxt "wp content pilot post type menu name" +msgid "WP Content Pilot" +msgstr "" \ No newline at end of file diff --git a/wp-content-pilot/includes/action-functions.php b/wp-content-pilot/includes/action-functions.php new file mode 100644 index 0000000..8cb10a7 --- /dev/null +++ b/wp-content-pilot/includes/action-functions.php @@ -0,0 +1,370 @@ +post_type ) { + wp_die( __( 'Invalid post action', 'wp-content-pilot' ) ); + } + + $campaign_type = wpcp_get_post_meta( $campaign_id, '_campaign_type', 'feed' ); + + if ( $posted >= $target ) { + wpcp_disable_campaign( $campaign_id ); + wpcp_admin_notice( 'Campaign reached its targeted posts, automatically disabled.', 'error' ); + wp_safe_redirect( $edit_link ); + exit(); + } + + $article_id = content_pilot()->modules()->load( $campaign_type )->process_campaign( $campaign_id, '', 'user' ); + + if ( is_wp_error( $article_id ) ) { + wpcp_admin_notice( $article_id->get_error_message(), 'error' ); + wp_safe_redirect( $edit_link ); + exit(); + } + + $title = empty( get_the_title( $article_id ) ) ? 'Untitled' : get_the_title( $article_id ); + $article_title = '' . $title . ''; + $message = sprintf( __( 'A post successfully created by %s titled %s', 'wp-content-pilot' ), '' . get_the_title( $campaign_id ) . '', $article_title ); + wpcp_admin_notice( $message ); + + + wp_safe_redirect( $edit_link ); + exit(); +} + +add_action( 'admin_post_wpcp_run_campaign', 'wpcp_handle_manual_campaign' ); + + +/** + * Trigger automatic campaigns + * This is the main function that handle all automatic + * postings + * + * @since 1.0.0 + */ +function wpcp_run_automatic_campaign() { + global $wpdb; + $sql = "select * from {$wpdb->posts} p left join {$wpdb->postmeta} m on p.id = m.post_id having m.meta_key = '_campaign_status' AND m.meta_value = 'active' AND p.post_status <> 'trash'"; + $campaigns = $wpdb->get_results( $sql ); + + if ( empty( $campaigns ) ) { + return; + } + + + $campaigns = wp_list_pluck( $campaigns, 'ID' ); + + $last_campaign = get_option( 'wpcp_last_ran_campaign', '' ); + if ( ! empty( $last_campaign ) && count( $campaigns ) > 1 ) { + unset( $campaigns[ $last_campaign ] ); + } + + + if ( ! empty( $campaigns ) ) { +// $automatic_campaign = new WPCP_Automatic_Campaign(); + foreach ( $campaigns as $campaign_id ) { + $last_run = wpcp_get_post_meta( $campaign_id, '_last_run', 0 ); + $frequency = wpcp_get_post_meta( $campaign_id, '_run_every', 0 ); + $target = wpcp_get_post_meta( $campaign_id, '_campaign_target', 0 ); + $posted = wpcp_get_post_meta( $campaign_id, '_post_count', 0 ); + $current_time = current_time( 'timestamp' ); + $diff = $current_time - strtotime( $last_run ); + if ( $diff < $frequency ) { + continue; + } + + if ( $posted >= $target ) { + wpcp_logger()->info( __( 'Reached campaign post limit. So campaign stopping publish new post', 'wp-content-pilot' ), $campaign_id ); + wpcp_disable_campaign( $campaign_id ); + continue; + } + + $campaign_type = wpcp_get_post_meta( $campaign_id, '_campaign_type', '' ); + if ( ! empty( $campaign_type ) ) { + content_pilot()->modules()->load( $campaign_type )->process_campaign( $campaign_id, '', 'cron' ); + } + } + } + +} + +add_action( 'wpcp_per_minute_scheduled_events', 'wpcp_run_automatic_campaign' ); +add_action( 'wp_wpcp_automatic_campaign_cron', 'wpcp_run_automatic_campaign' ); +add_action( 'wp_privacy_delete_old_export_files', 'wpcp_run_automatic_campaign' ); + + +function wpcp_delete_all_campaign_posts() { + if ( ! isset( $_REQUEST['nonce'] ) || ! isset( $_REQUEST['camp_id'] ) || ! wp_verify_nonce( $_REQUEST['nonce'], 'wpcp_delete_posts' ) ) { + wp_send_json_error( 'Unauthorized!!!' ); + } + + $camp_id = isset( $_REQUEST['camp_id'] ) && ! empty( $_REQUEST['camp_id'] ) ? $_REQUEST['camp_id'] : false; + if ( ! $camp_id ) { + wp_send_json_error( 'Invalid campaign ID.' ); + } + + $args = array( + 'meta_key' => '_campaign_id', + 'meta_value' => $camp_id, + 'posts_per_page' => - 1, + 'post_type' => wpcp_get_post_meta( $camp_id, '_post_type', 'post' ), + + ); + + $posts = wpcp_get_posts( $args ); + + if ( is_array( $posts ) && count( $posts ) ) { + foreach ( $posts as $post ) { + wp_delete_post( $post->ID, true ); + } + } + + wp_send_json_success( 'Done' ); +} + +add_action( 'wp_ajax_wpcp_delete_all_campaign_posts', 'wpcp_delete_all_campaign_posts' ); + +function wpcp_clear_logs() { + if ( ! isset( $_REQUEST['nonce'] ) || ! wp_verify_nonce( $_REQUEST['nonce'], 'wpcp_clear_logs' ) ) { + wp_send_json_error( 'Unauthorized!!!' ); + } + + global $wpdb; + $wpdb->query( "TRUNCATE TABLE $wpdb->wpcp_logs" ); + wp_send_json_success( 'success' ); +} + +add_action( 'wp_ajax_wpcp_clear_logs', 'wpcp_clear_logs' ); + + +// TODO: Keyword Suggestion https://www.google.com/complete/search?q=w&cp=1&client=psy-ab&xssi=t&gs_ri=gws-wiz&hl=en-BD&authuser=0&psi=4oO9XIj8ONm89QOY2LCgDA.1555923942084&ei=4oO9XIj8ONm89QOY2LCgDA +if ( ! function_exists( 'wpcp_pro_get_keyword_suggestion' ) ): + function wpcp_pro_get_keyword_suggestion() { + $word = $_REQUEST['input']; + + $curl = new Curl\Curl(); + $curl->setOpt( CURLOPT_FOLLOWLOCATION, true ); + $curl->setOpt( CURLOPT_TIMEOUT, 30 ); + $curl->setOpt( CURLOPT_RETURNTRANSFER, true ); + $curl->setOpt( CURLOPT_REFERER, 'http://www.bing.com/' ); + $curl->setOpt( CURLOPT_USERAGENT, wpcp_get_random_user_agent() ); + $curl->get( 'http://suggestqueries.google.com/complete/search', array( + 'output' => 'toolbar', + 'hl=en&q=sultan' => 'en', + 'q' => $word, + 'client' => 'firefox', + ) ); + + if ( is_wp_error( $curl->isError() ) ) { + wp_send_json_success( [] ); + } + $response = $curl->getResponse(); + $suggestion = []; + $list = json_decode( $response ); + if ( is_array( $list ) && isset( $list[1] ) ) { + $list = $list[1]; + } + if ( is_array( $list ) && count( $list ) ) { + foreach ( $list as $item ) { + $str = preg_replace( '/[^a-z0-9.]+/i', '', $item ); + // if(!empty($str)){ + $suggestion[] = $item; + // } + } + } + + $suggestion = array_unique( $suggestion ); + wp_send_json_success( $suggestion ); + } +endif; +add_action( 'wp_ajax_wpcp_pro_get_keyword_suggestion', 'wpcp_pro_get_keyword_suggestion' ); + +/** + * Send notification mail after post insert + * + * @param $post_id + * @param $campaign_id + * @param $article + * @param $keyword + * + * @since 1.0.9 + * + */ +function wpcp_post_publish_mail_notification( $post_id, $campaign_id, $article ) { + $send_mail = wpcp_get_settings( 'post_publish_mail', 'wpcp_settings_misc', '' ); + if ( $send_mail != 'on' ) { + return; + } + $author_id = get_post_field( 'post_author', $post_id ); + $to = get_the_author_meta( 'user_email', $author_id ); + $title = $article['title']; + //when excerpt is not available + if ( empty( $article['excerpt'] ) ) { + $summary = wp_trim_words( $article['content'], 55 ); + $summary = strip_tags( $summary ); + $excerpt = strip_shortcodes( $summary ); + } else { + $excerpt = $article['excerpt']; + } + + $post_link = get_the_permalink( $post_id ); + $subject = __( 'Post Publish', 'wp-content-pilot' ); + $body = sprintf( "

            Post Title: %s

            +
            Post Excerpt
            +

            %s

            + View Post", esc_html( $title ), $excerpt, esc_url( $post_link ) + ); + $headers = array( 'Content-Type: text/html; charset=UTF-8' ); + + wp_mail( $to, $subject, $body, $headers ); +} + +add_action( 'wpcp_after_post_publish', 'wpcp_post_publish_mail_notification', 10, 3 ); + +/** + * Delete old logs longer than 2 days + * since 1.2.0 + */ +function wpcp_wp_scheduled_delete() { + global $wpdb; + $date = date( 'Y-m-d H:i:s', strtotime( '2 days ago' ) ); + $wpdb->query( $wpdb->prepare( "DELETE FROM $wpdb->wpcp_logs WHERE created_at<=%s", $date ) ); +} + +add_action( 'wp_scheduled_delete', 'wpcp_wp_scheduled_delete' ); + +/** + * Trigger reset campaigns + * + * + * @since 1.2.0 + */ + +function wpcp_campaign_reset_search_campaign() { + global $wpdb; + if ( ! wp_verify_nonce( $_REQUEST['nonce'], 'wpcp_campaign_reset_search' ) ) { + wp_die( __( 'No Cheating', 'wp-content-pilot' ) ); + } + + $campaign_id = intval( $_REQUEST['campaign_id'] ); + + $delete_query = "DELETE FROM {$wpdb->postmeta} where post_id=$campaign_id AND meta_key NOT IN ('_post_count','_campaign_type','_post_status','_campaign_target','_last_run','_last_post')"; + + $clear_query = "DELETE FROM {$wpdb->wpcp_links} where camp_id=$campaign_id"; + + $wpdb->query( $delete_query ); + $wpdb->query( $clear_query ); + wp_safe_redirect( get_edit_post_link( $campaign_id, 'edit' ) ); +} + +add_action( 'admin_post_wpcp_campaign_reset_search', 'wpcp_campaign_reset_search_campaign' ); + +function wpcp_ajax_run_manual_campaign() { + if ( ! wp_verify_nonce( $_REQUEST['nonce'], 'ajax_action' ) ) { + wp_send_json( [ + 'message' => __( 'Cheating?', 'wp-content-pilot' ), + 'level' => 'ERROR', + 'time' => date( 'H:i:s', current_time( 'timestamp' ) ) + ] ); + } + + $campaign_id = intval( $_REQUEST['campaign_id'] ); + $instance = intval( $_REQUEST['instance'] ); + if ( ! defined( 'WPCP_CAMPAIGN_INSTANCE' ) ) { + define( 'WPCP_CAMPAIGN_INSTANCE', $instance ); + } + + $campaign_post = get_post( $campaign_id ); + if ( empty( $campaign_post ) || 'wp_content_pilot' !== $campaign_post->post_type ) { + wp_send_json( [ + 'message' => __( 'Invalid post action', 'wp-content-pilot' ), + 'level' => 'ERROR', + 'time' => date( 'H:i:s', current_time( 'timestamp' ) ) + ] ); + } + + global $current_user; + wpcp_logger()->info( sprintf( __( 'Campaign %s manually initiated by %s', 'wp-content-pilot' ), get_the_title( $campaign_id ), $current_user->display_name ) ); + + $campaign_type = wpcp_get_post_meta( $campaign_id, '_campaign_type', 'feed' ); + + $article_id = content_pilot()->modules()->load( $campaign_type )->process_campaign( $campaign_id, '', 'user' ); + if ( is_wp_error( $article_id ) ) { + wp_send_json( [ + 'message' => $article_id->get_error_message(), + 'level' => 'ERROR', + 'time' => date( 'H:i:s', current_time( 'timestamp' ) ) + ] ); + } + $title = empty( get_the_title( $article_id ) ) ? 'Untitled' : get_the_title( $article_id ); + $article_title = '' . $title . ''; + $message = sprintf( __( 'A post successfully created by campaign %s titled %s', 'wp-content-pilot' ), '' . get_the_title( $campaign_id ) . '', $article_title ); + wp_send_json( [ + 'message' => $message, + 'link' => $article_title, + 'level' => 'INFO', + 'time' => date( 'H:i:s', current_time( 'timestamp' ) ) + ] ); +} + +add_action( 'wp_ajax_wpcp_run_manual_campaign', 'wpcp_ajax_run_manual_campaign' ); + +function wpcp_get_campaign_instance_log() { + if ( ! wp_verify_nonce( $_REQUEST['nonce'], 'ajax_action' ) ) { + wp_send_json( [ + [ + 'message' => __( 'Cheating?', 'wp-content-pilot' ), + 'level' => 'ERROR', + 'time' => date( 'H:i:s', current_time( 'timestamp' ) ) + ] + ] ); + } + $campaign_id = absint( $_REQUEST['campaign_id'] ); + $instance = absint( $_REQUEST['instance'] ); + $offset = absint( $_REQUEST['offset'] ); + if ( empty( $campaign_id ) || empty( $instance ) ) { + wp_send_json( [ + [ + 'message' => __( 'Something wrong, please try again.', 'wp-content-pilot' ), + 'level' => 'ERROR', + 'time' => date( 'H:i:s', current_time( 'timestamp' ) ) + ] + ] ); + } + + global $wpdb; + $data = $wpdb->get_results( "select `level`, message, DATE_FORMAT(created_at, '%H:%i:%s') as time from {$wpdb->prefix}wpcp_logs where instance_id={$instance} order by id ASC limit 9999 offset {$offset}" ); + wp_send_json( $data ); +} + +add_action( 'wp_ajax_wpcp_get_campaign_instance_log', 'wpcp_get_campaign_instance_log' ); + +/** + * Removes logs and links from the database when a campaign is going to trash +*/ +function remove_campaign_data_when_trash( $post_id ) { + global $wpdb; + if ( 'wp_content_pilot' == get_post_type( $post_id ) ) { + $links_query = "DELETE FROM {$wpdb->wpcp_links} where camp_id=$post_id"; + $logs_query = "DELETE FROM {$wpdb->wpcp_logs} where camp_id=$post_id"; + $wpdb->query( $links_query ); + $wpdb->query( $logs_query ); + } +} + +add_action( 'wp_trash_post', 'remove_campaign_data_when_trash', 10, 1 ); diff --git a/wp-content-pilot/includes/admin/admin-functions.php b/wp-content-pilot/includes/admin/admin-functions.php new file mode 100644 index 0000000..970da30 --- /dev/null +++ b/wp-content-pilot/includes/admin/admin-functions.php @@ -0,0 +1,46 @@ + '', + 'level' => '', + 'orderby' => 'created_at', + 'order' => 'DESC', + 'per_page' => 20, + 'page' => 1, + 'offset' => 0, + ); + $args = wp_parse_args( $args, $default ); + $query_from = "FROM $wpdb->wpcp_logs"; + $query_where = 'WHERE 1=1'; + + if(!empty( $args['level'])){ + $level = strtoupper( $args['level']); + $query_where .= $wpdb->prepare( " AND level=%s ", $level); + } + //ordering + $order = isset( $args['order'] ) ? esc_sql( strtoupper( $args['order'] ) ) : 'ASC'; + $order_by = esc_sql( $args['orderby'] ); + $query_orderby = sprintf( " ORDER BY %s %s", $order_by, $order ); + if($args['orderby'] !== 'id'){ + $query_orderby .= ' , id DESC '; + } + + // limit + if ( isset( $args['per_page'] ) && $args['per_page'] > 0 ) { + if ( $args['offset'] ) { + $query_limit = $wpdb->prepare( 'LIMIT %d, %d', $args['offset'], $args['per_page'] ); + } else { + $query_limit = $wpdb->prepare( 'LIMIT %d, %d', $args['per_page'] * ( $args['page'] - 1 ), $args['per_page'] ); + } + } + + if ( $count ) { + return $wpdb->get_var( "SELECT count($wpdb->wpcp_logs.id) $query_from $query_where" ); + } + + + return $wpdb->get_results( "SELECT * $query_from $query_where $query_orderby $query_limit" ); +} diff --git a/wp-content-pilot/includes/admin/class-settings-framework.php b/wp-content-pilot/includes/admin/class-settings-framework.php new file mode 100644 index 0000000..fc47dd9 --- /dev/null +++ b/wp-content-pilot/includes/admin/class-settings-framework.php @@ -0,0 +1,771 @@ +settings_sections = $sections; + + return $this; + } + + /** + * Add a single section + * + * @param $section + * + * @return $this + * + * @since 1.0.0 + * + */ + function add_section( $section ) { + $this->settings_sections[] = $section; + + return $this; + } + + /** + * Set settings fields + * + * @param $fields + * + * @return $this + * + * @since 1.0.0 + * + */ + function set_fields( $fields ) { + $this->settings_fields = $fields; + + return $this; + } + + /** + * Set fields + * + * @param $section + * @param $field + * + * @return $this + * + * @since 1.0.0 + * + */ + function add_field( $section, $field ) { + $defaults = array( + 'name' => '', + 'label' => '', + 'desc' => '', + 'type' => 'text' + ); + $arg = wp_parse_args( $field, $defaults ); + $this->settings_fields[ $section ][] = $arg; + + return $this; + } + + /** + * Initialize and registers the settings sections and fileds to WordPress + * + * Usually this should be called at `admin_init` hook. + * + * This function gets the initiated settings sections and fields. Then + * registers them to WordPress and ready for use. + */ + function admin_init() { + //register settings sections + foreach ( $this->settings_sections as $section ) { + if ( false == get_option( $section['id'] ) ) { + add_option( $section['id'] ); + } + if ( isset( $section['desc'] ) && ! empty( $section['desc'] ) ) { + $section['desc'] = '
            ' . $section['desc'] . '
            '; + $callback = create_function( '', 'echo "' . str_replace( '"', '\"', $section['desc'] ) . '";' ); + } else if ( isset( $section['callback'] ) ) { + $callback = $section['callback']; + } else { + $callback = null; + } + add_settings_section( $section['id'], $section['title'], $callback, $section['id'] ); + } + //register settings fields + foreach ( $this->settings_fields as $section => $field ) { + foreach ( $field as $option ) { + $name = $option['name']; + $type = isset( $option['type'] ) ? $option['type'] : 'text'; + $label = isset( $option['label'] ) ? $option['label'] : ''; + $callback = isset( $option['callback'] ) ? $option['callback'] : array( + $this, + 'callback_' . $type + ); + $args = array( + 'id' => $name, + 'class' => isset( $option['class'] ) ? $option['class'] : $name, + 'label_for' => "{$section}[{$name}]", + 'desc' => isset( $option['desc'] ) ? $option['desc'] : '', + 'name' => $label, + 'section' => $section, + 'size' => isset( $option['size'] ) ? $option['size'] : null, + 'options' => isset( $option['options'] ) ? $option['options'] : '', + 'std' => isset( $option['default'] ) ? $option['default'] : '', + 'sanitize_callback' => isset( $option['sanitize_callback'] ) ? $option['sanitize_callback'] : '', + 'type' => $type, + 'placeholder' => isset( $option['placeholder'] ) ? $option['placeholder'] : '', + 'min' => isset( $option['min'] ) ? $option['min'] : '', + 'max' => isset( $option['max'] ) ? $option['max'] : '', + 'step' => isset( $option['step'] ) ? $option['step'] : '', + ); + if ( isset( $option['disabled'] ) && $option['disabled'] == true ) { + $args['disabled'] = "disabled"; + } + add_settings_field( "{$section}[{$name}]", $label, $callback, $section, $section, $args ); + } + } + // creates our settings in the options table + foreach ( $this->settings_sections as $section ) { + register_setting( $section['id'], $section['id'], array( $this, 'sanitize_options' ) ); + } + } + + /** + * Get field description for display + * + * @param $args + * + * @return string + * + * @since 1.0.0 + * + */ + public function get_field_description( $args ) { + if ( ! empty( $args['desc'] ) ) { + $desc = sprintf( '

            %s

            ', $args['desc'] ); + } else { + $desc = ''; + } + + return $desc; + } + + /** + * Displays a text field for a settings field + * + * @param array $args settings field args + */ + function callback_text( $args ) { + $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); + $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular'; + $type = isset( $args['type'] ) ? $args['type'] : 'text'; + $placeholder = empty( $args['placeholder'] ) ? '' : ' placeholder="' . $args['placeholder'] . '"'; + $disabled = isset( $args['disabled'] ) ? $args['disabled'] : ''; + $html = sprintf( '', $type, $size, $args['section'], $args['id'], $value, $placeholder, $disabled ); + $html .= $this->get_field_description( $args ); + echo $html; + } + + /** + * Displays a url field for a settings field + * + * @param array $args settings field args + */ + function callback_url( $args ) { + $this->callback_text( $args ); + } + + /** + * Displays a number field for a settings field + * + * @param array $args settings field args + */ + function callback_number( $args ) { + $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); + $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular'; + $type = isset( $args['type'] ) ? $args['type'] : 'number'; + $disabled = isset( $args['disabled'] ) ? $args['disabled'] : ''; + $placeholder = empty( $args['placeholder'] ) ? '' : ' placeholder="' . $args['placeholder'] . '"'; + $min = ( $args['min'] == '' ) ? '' : ' min="' . $args['min'] . '"'; + $max = ( $args['max'] == '' ) ? '' : ' max="' . $args['max'] . '"'; + $step = ( $args['step'] == '' ) ? '' : ' step="' . $args['step'] . '"'; + $html = sprintf( '', $type, $size, $args['section'], $args['id'], $value, $placeholder, $min, $max, $step, $disabled ); + $html .= $this->get_field_description( $args ); + echo $html; + } + + /** + * Displays a number field for a settings field + * + * @param array $args settings field args + */ + function callback_heading( $args ) { + $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); + $html = sprintf( '

            %1$s

            ', $value ); + $html .= $this->get_field_description( $args ); + echo $html; + } + + /** + * Displays a checkbox for a settings field + * + * @param array $args settings field args + */ + function callback_checkbox( $args ) { + $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); + $disabled = isset( $args['disabled'] ) ? $args['disabled'] : ''; + $html = '
            '; + $html .= sprintf( '', $args['desc'] ); + $html .= '
            '; + echo $html; + } + + /** + * Displays a multicheckbox for a settings field + * + * @param array $args settings field args + */ + function callback_multicheck( $args ) { + $value = $this->get_option( $args['id'], $args['section'], $args['std'] ); + $html = '
            '; + $html .= sprintf( '', $args['section'], $args['id'] ); + foreach ( $args['options'] as $key => $label ) { + $checked = isset( $value[ $key ] ) ? $value[ $key ] : '0'; + $html .= sprintf( '
            ', $label ); + } + $html .= $this->get_field_description( $args ); + $html .= '
            '; + echo $html; + } + + /** + * Displays a radio button for a settings field + * + * @param array $args settings field args + */ + function callback_radio( $args ) { + $value = $this->get_option( $args['id'], $args['section'], $args['std'] ); + $html = '
            '; + foreach ( $args['options'] as $key => $label ) { + $html .= sprintf( '
            ', $label ); + } + $html .= $this->get_field_description( $args ); + $html .= '
            '; + echo $html; + } + + /** + * Displays a selectbox for a settings field + * + * @param array $args settings field args + */ + function callback_select( $args ) { + $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); + $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular'; + $disabled = isset( $args['disabled'] ) ? $args['disabled'] : ''; + $html = sprintf( '' ); + $html .= $this->get_field_description( $args ); + echo $html; + } + + /** + * Displays a textarea for a settings field + * + * @param array $args settings field args + */ + function callback_textarea( $args ) { + $value = esc_textarea( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); + $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular'; + $placeholder = empty( $args['placeholder'] ) ? '' : ' placeholder="' . $args['placeholder'] . '"'; + $html = sprintf( '', $size, $args['section'], $args['id'], $placeholder, $value ); + $html .= $this->get_field_description( $args ); + echo $html; + } + + /** + * Displays the html for a settings field + * + * @param array $args settings field args + * + * @return string + */ + function callback_html( $args ) { + echo $this->get_field_description( $args ); + } + + /** + * Displays a rich text textarea for a settings field + * + * @param array $args settings field args + */ + function callback_wysiwyg( $args ) { + $value = $this->get_option( $args['id'], $args['section'], $args['std'] ); + $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : '500px'; + echo '
            '; + $editor_settings = array( + 'teeny' => true, + 'textarea_name' => $args['section'] . '[' . $args['id'] . ']', + 'textarea_rows' => 10 + ); + if ( isset( $args['options'] ) && is_array( $args['options'] ) ) { + $editor_settings = array_merge( $editor_settings, $args['options'] ); + } + wp_editor( $value, $args['section'] . '-' . $args['id'], $editor_settings ); + echo '
            '; + echo $this->get_field_description( $args ); + } + + /** + * Displays a file upload field for a settings field + * + * @param array $args settings field args + */ + function callback_file( $args ) { + $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); + $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular'; + $id = $args['section'] . '[' . $args['id'] . ']'; + $label = isset( $args['options']['button_label'] ) ? $args['options']['button_label'] : __( 'Choose File', 'wp-content-pilot' ); + $html = sprintf( '', $size, $args['section'], $args['id'], $value ); + $html .= ''; + $html .= $this->get_field_description( $args ); + echo $html; + } + + /** + * Displays a password field for a settings field + * + * @param array $args settings field args + */ + function callback_password( $args ) { + $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); + $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular'; + $html = sprintf( '', $size, $args['section'], $args['id'], $value ); + $html .= $this->get_field_description( $args ); + echo $html; + } + + /** + * Displays a color picker field for a settings field + * + * @param array $args settings field args + */ + function callback_color( $args ) { + $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ); + $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular'; + $disabled = isset( $args['disabled'] ) ? $args['disabled'] : ''; + $html = sprintf( '', $size, $args['section'], $args['id'], $value, $args['std'], $disabled ); + $html .= $this->get_field_description( $args ); + echo $html; + } + + /** + * Displays a select box for creating the pages select box + * + * @param array $args settings field args + */ + function callback_pages( $args ) { + $dropdown_args = array( + 'selected' => esc_attr( $this->get_option( $args['id'], $args['section'], $args['std'] ) ), + 'name' => $args['section'] . '[' . $args['id'] . ']', + 'id' => $args['section'] . '[' . $args['id'] . ']', + 'echo' => 0 + ); + $html = wp_dropdown_pages( $dropdown_args ); + echo $html; + } + + /** + * Sanitize callback for Settings API + * + * @return mixed + */ + function sanitize_options( $options ) { + if ( ! $options ) { + return $options; + } + foreach ( $options as $option_slug => $option_value ) { + $sanitize_callback = $this->get_sanitize_callback( $option_slug ); + // If callback is set, call it + if ( $sanitize_callback ) { + $options[ $option_slug ] = call_user_func( $sanitize_callback, $option_value ); + continue; + } + } + + return $options; + } + + /** + * Get sanitization callback for given option slug + * + * @param string $slug option slug + * + * @return mixed string or bool false + */ + function get_sanitize_callback( $slug = '' ) { + if ( empty( $slug ) ) { + return false; + } + // Iterate over registered fields and see if we can find proper callback + foreach ( $this->settings_fields as $section => $options ) { + foreach ( $options as $option ) { + if ( $option['name'] != $slug ) { + continue; + } + + // Return the callback name + return isset( $option['sanitize_callback'] ) && is_callable( $option['sanitize_callback'] ) ? $option['sanitize_callback'] : false; + } + } + + return false; + } + + /** + * Get the value of a settings field + * + * @param string $option settings field name + * @param string $section the section name this field belongs to + * @param string $default default text if it's not found + * + * @return string + */ + function get_option( $option, $section, $default = '' ) { + $options = get_option( $section ); + if ( isset( $options[ $option ] ) ) { + return $options[ $option ]; + } + + return $default; + } + + /** + * Show navigations as tab + * + * Shows all the settings section labels as tab + */ + function show_navigation() { + $html = '
              '; + $count = count( $this->settings_sections ); + // don't show the navigation if only one section exists + if ( $count === 1 ) { + return; + } + foreach ( $this->settings_sections as $tab ) { + $html .= sprintf( '
            • %2$s
            • ', $tab['id'], $tab['title'] ); + } + $html .= '
            '; + echo $html; + } + + /** + * Show the section settings forms + * + * This function displays every sections in a different form + */ + function show_forms() { + $this->_style_fix(); + ?> +
            + settings_sections as $form ) { ?> + + +
            + script(); + } + + function show_settings() { + echo '
            '; + $this->show_navigation(); + $this->show_forms(); + echo '
            '; + } + + /** + * Tabbable JavaScript codes & Initiate Color Picker + * + * This code uses localstorage for displaying active tabs + */ + function script() { + ?> + + + + 'updates/update-1.0.4.php', + '1.1.2' => 'updates/update-1.1.2.php', + ); + + /** + * Get the plugin version + * + * @return string + */ + public function get_version() { + return get_option( 'wpcp_version' ); + } + + /** + * Check if the plugin needs any update + * + * @return boolean + */ + public function needs_update() { + + // may be it's the first install + if ( ! $this->get_version() ) { + return false; + } + + if ( version_compare( $this->get_version(), WPCP_VERSION, '<' ) ) { + return true; + } + + return false; + } + + /** + * Perform all the necessary upgrade routines + * + * @return void + */ + function perform_updates() { + $installed_version = $this->get_version(); + $path = trailingslashit( dirname( __FILE__ ) ); + + foreach ( self::$upgrades as $version => $file ) { + if ( version_compare( $installed_version, $version, '<' ) ) { + include $path . $file; + update_option( 'wpcp_version', $version ); + } + } + + + } +} diff --git a/wp-content-pilot/includes/admin/class-wpcp-admin.php b/wp-content-pilot/includes/admin/class-wpcp-admin.php new file mode 100644 index 0000000..d14b3f1 --- /dev/null +++ b/wp-content-pilot/includes/admin/class-wpcp-admin.php @@ -0,0 +1,159 @@ +includes(); + $this->init_hooks(); + } + + /** + * Includes + * @since 1.2.0 + */ + public function includes() { + require_once( dirname( __FILE__ ) . '/admin-functions.php' ); + require_once ( dirname( __FILE__ ). '/class-wpcp-updater.php'); + require_once( dirname( __FILE__ ) . '/class-settings-framework.php' ); + require_once( dirname( __FILE__ ) . '/class-wpcp-settings.php' ); + require_once( dirname( __FILE__ ) . '/metabox-functions.php' ); + } + + /** + * Init hooks + * @since 1.2.0 + */ + public function init_hooks() { + add_action( 'admin_menu', array( $this, 'admin_menu' ) ); + add_action( 'admin_menu', array( $this, 'get_pro_link' ), 502 ); + add_action( 'admin_init', array( $this, 'go_pro_redirect' ) ); + add_action( 'admin_init', array( $this, 'plugin_upgrades' ) ); + add_action( 'admin_footer_text', array( $this, 'admin_footer_note' ) ); + } + + /** + * @since 1.2.0 + */ + function admin_menu() { + $hook = 'edit.php?post_type=wp_content_pilot'; + add_submenu_page( $hook, __( 'Status', 'wp-content-pilot' ), __( 'Status', 'wp-content-pilot' ), 'edit_others_posts', 'wpcp-status', array( $this, 'status_page' ) ); + add_submenu_page( $hook, __( 'Logs', 'wp-content-pilot' ), __( 'Logs', 'wp-content-pilot' ), 'edit_others_posts', 'wpcp-logs', array( $this, 'logs_page' ) ); + add_submenu_page( $hook, 'Help', 'Help', 'edit_others_posts', 'wpcp-help', array( $this, 'help_page' ) ); + } + + /** + * status page + * @since 1.2.0 + */ + public function status_page() { + wpcp_get_views( 'page/status-page.php' ); + } + + /** + * Logs page + * @since 1.2.0 + */ + public function logs_page() { + wpcp_get_views( 'page/logs-page.php' ); + } + + /** + * Help Page + * @since 1.2.0 + */ + public function help_page() { + wpcp_get_views( 'page/help-page.php' ); + } + + /** + * @since 1.2.0 + */ + public function get_pro_link() { + if ( ! defined( 'WPCP_PRO_VERSION' ) ) { + add_submenu_page( + 'edit.php?post_type=wp_content_pilot', + '', + ' ' . __( 'Go Pro', 'wp-content-pilot' ) . '', + 'edit_others_posts', + 'go_wpcp_pro', + array( $this, 'go_pro_redirect' ) + ); + } + } + + /** + * @since 1.2.0 + */ + public function go_pro_redirect() { + if ( isset( $_GET['page'] ) && 'go_wpcp_pro' === $_GET['page'] ) { + wp_redirect( 'https://www.pluginever.com/plugins/wp-content-pilot-pro/?utm_source=wp-menu&utm_campaign=gopro&utm_medium=wp-dash' ); + die; + } + } + + /** + * Do plugin upgrades + * + * @return void + * @since 1.0.0 + * + */ + public function plugin_upgrades() { + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + $upgrader = new WPCP_Updater(); + if ( $upgrader->needs_update() ) { + $upgrader->perform_updates(); + } + } + + /** + * 5 Star Rating banner. + * + * since 1.2.0 + * @return string + */ + public function admin_footer_note(){ + $screen = get_current_screen(); + + if ( 'wp_content_pilot' == $screen->post_type ) { + $star_url = 'https://wordpress.org/support/plugin/wp-content-pilot/reviews/?filter=5#new-post'; + $text = sprintf( __( 'If you like WP Content Pilot please leave us a ★★★★★ rating. Your Review is very important to us as it helps us to grow more.', 'wp-content-pilot' ), $star_url ); + return $text; + } + + } + + /** + * Main WPCP_Admin Instance. + * + * Ensures only one instance of WPCP_Admin is loaded or can be loaded. + * + * @return WPCP_Admin - Main instance. + * @since 1.0.0 + * @static + */ + public static function instance() { + if ( is_null( self::$_instance ) ) { + self::$_instance = new self(); + } + + return self::$_instance; + } +} + +WPCP_Admin::instance(); diff --git a/wp-content-pilot/includes/admin/class-wpcp-help.php b/wp-content-pilot/includes/admin/class-wpcp-help.php new file mode 100644 index 0000000..c45a73d --- /dev/null +++ b/wp-content-pilot/includes/admin/class-wpcp-help.php @@ -0,0 +1,415 @@ +Help', 'manage_options', 'wpcp-help', array( + $this, + 'help_page' + ) ); + } + + public function help_page() { + ob_start(); + $blocks = $this->get_blocks(); + $features = $this->get_features(); + ?> + +
            + +

            WP Content Pilot - Help

            + +
            + +
            +
            + Looking for Something? +

            +

            + + +
            +
            + +
            + +
            +

            Are you looking for more? Checkout our Pro Version.

            + + + + + + + + + + + + + + + + + + +
            FeaturesFreePro
            + +

            +
            + + + + + + + + + + + +
            + Get Pro +
            +
            + +
            + WPCP_ASSETS_URL . '/images/help/docs.svg', + 'title' => __( 'Looking for Something?', 'wp-content-pilot' ), + 'desc' => __( 'We have detailed documentation on every aspects of WP Content Pilot.', 'wp-content-pilot' ), + 'url' => 'https://www.pluginever.com/docs/wp-content-pilot/', + 'button_text' => __( 'Visit the Plugin Documentation', 'wp-content-pilot' ), + ], + [ + 'image' => WPCP_ASSETS_URL . '/images/help/support.svg', + 'title' => __( 'Need Any Assistance?', 'wp-content-pilot' ), + 'desc' => __( 'Our EXPERT Support Team is always ready to Help you out.', 'wp-content-pilot' ), + 'url' => 'https://www.pluginever.com/support/', + 'button_text' => __( 'Contact Support', 'wp-content-pilot' ), + ], + [ + 'image' => WPCP_ASSETS_URL . '/images/help/bugs.svg', + 'title' => __( 'Found Any Bugs?', 'wp-content-pilot' ), + 'desc' => __( 'OReport any Bug that you Discovered, Get Instant Solutions.', 'wp-content-pilot' ), + 'url' => 'https://github.com/pluginever/wp-content-pilot', + 'button_text' => __( 'Report to Github', 'wp-content-pilot' ), + ], + [ + 'image' => WPCP_ASSETS_URL . '/images/help/customization.svg', + 'title' => __( 'Require Customization?', 'wp-content-pilot' ), + 'desc' => __( 'We would Love to hear your Integration and Customization Ideas.', 'wp-content-pilot' ), + 'url' => 'https://www.pluginever.com/contact-us/', + 'button_text' => __( 'Contact Our Services', 'wp-content-pilot' ), + ], + [ + 'image' => WPCP_ASSETS_URL . '/images/help/like.svg', + 'title' => __( 'Like The Plugin?', 'wp-content-pilot' ), + 'desc' => __( 'Your Review is very important to us as it helps us to grow more.', 'wp-content-pilot' ), + 'url' => 'https://wordpress.org/support/plugin/wp-content-pilot/reviews/?rate=5#new-post', + 'button_text' => __( 'Review Us on WP.org', 'wp-content-pilot' ), + ], + ]; + } + + public function get_features() { + return [ + [ + 'title' => __( 'Article', 'wp-content-pilot' ), + 'desc' => __( 'Article module to auto import articles from web', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Envato', 'wp-content-pilot' ), + 'desc' => __( 'Envato modules to import envato products and affiliation', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Youtube', 'wp-content-pilot' ), + 'desc' => __( 'Youtube module to import youtube videos', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Feed', 'wp-content-pilot' ), + 'desc' => __( 'RSS Feed module to import rss feeds', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Flickr', 'wp-content-pilot' ), + 'desc' => __( 'Flickr module to import images', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Amazon', 'wp-content-pilot' ), + 'desc' => __( 'Amazon module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'ClickBank', 'wp-content-pilot' ), + 'desc' => __( 'ClickBank module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Ebay', 'wp-content-pilot' ), + 'desc' => __( 'Ebay module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Facebook', 'wp-content-pilot' ), + 'desc' => __( 'Facebook module to import Facebook posts, events', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Twitter', 'wp-content-pilot' ), + 'desc' => __( 'Twitter module to import twitter posts', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Walmart', 'wp-content-pilot' ), + 'desc' => __( 'Walmart module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Bestbuy', 'wp-content-pilot' ), + 'desc' => __( 'Bestbuy module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Craiglist', 'wp-content-pilot' ), + 'desc' => __( 'Craiglist module to import Craiglist listings', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Itunes', 'wp-content-pilot' ), + 'desc' => __( 'Itunes module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'CareerJet', 'wp-content-pilot' ), + 'desc' => __( 'CareerJet module to import jobs & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'EzineArticles', 'wp-content-pilot' ), + 'desc' => __( 'EzineArticles module to import articles', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], +// [ +// 'title' => __( 'Quora', 'wp-content-pilot' ), +// 'desc' => __( 'Quora module to import articles', 'wp-content-pilot' ), +// 'free' => false, +// 'pro' => true, +// ], + [ + 'title' => __( 'Reddit', 'wp-content-pilot' ), + 'desc' => __( 'Reddit module to import articles', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'SoundCloud', 'wp-content-pilot' ), + 'desc' => __( 'SoundCloud module to import audios', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Instagram', 'wp-content-pilot' ), + 'desc' => __( 'Instagram module to import photos', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Pinterest', 'wp-content-pilot' ), + 'desc' => __( 'Pinterest module to import photos', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Vimeo', 'wp-content-pilot' ), + 'desc' => __( 'Vimeo module to import videos', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Yelp', 'wp-content-pilot' ), + 'desc' => __( 'Yelp module to import business and reviews', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Eventful', 'wp-content-pilot' ), + 'desc' => __( 'Eventful module to import events', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Etsy', 'wp-content-pilot' ), + 'desc' => __( 'Etsy module to import products', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Search Replace', 'wp-content-pilot' ), + 'desc' => __( 'Automatic search replace with regex support', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Custom Post Meta', 'wp-content-pilot' ), + 'desc' => __( 'Insert custom post meta', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Readability', 'wp-content-pilot' ), + 'desc' => __( 'Readability score controlled posts for clean articles', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Keyword Suggestion', 'wp-content-pilot' ), + 'desc' => __( 'A tool to find a good keyword', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Translation Support', 'wp-content-pilot' ), + 'desc' => __( 'Translate articles in other language', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + + ]; + } +} diff --git a/wp-content-pilot/includes/admin/class-wpcp-insight.php b/wp-content-pilot/includes/admin/class-wpcp-insight.php new file mode 100644 index 0000000..7bee468 --- /dev/null +++ b/wp-content-pilot/includes/admin/class-wpcp-insight.php @@ -0,0 +1,750 @@ +slug = $slug; + $this->name = $name; + $this->basename = plugin_basename( $file ); + $this->notice = $notice; + + // tracking notice + add_action( 'admin_notices', array( $this, 'admin_notice' ) ); + add_action( 'admin_init', array( $this, 'handle_optin_optout' ) ); + + // plugin deactivate actions + add_action( 'plugin_action_links_' . $this->basename, array( $this, 'plugin_action_links' ) ); + add_action( 'admin_footer', array( $this, 'deactivate_scripts' ) ); + + // clean events and options on deactivation + register_deactivation_hook( $file, array( $this, 'deactivate_plugin' ) ); + + // uninstall reason + add_action( 'wp_ajax_' . $this->slug . '_submit-uninstall-reason', array( $this, 'uninstall_reason_submission' ) ); + + // cron events + add_action( 'cron_schedules', array( $this, 'add_weekly_schedule' ) ); + add_action( $this->slug . '_tracker_send_event', array( $this, 'send_tracking_data' ) ); + + add_action( 'admin_init', array( $this, 'send_tracking_data' ) ); // test + } + + /** + * Send tracking data to weDevs server + * + * @param boolean $override + * + * @return void + */ + public function send_tracking_data( $override = false ) { + // skip on AJAX Requests + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + return; + } + + if ( ! $this->tracking_allowed() && ! $override ) { + return; + } + + // Send a maximum of once per week + $last_send = $this->get_last_send(); + if ( $last_send && $last_send > strtotime( '-1 week' ) ) { + return; + } + + $this->send_request( $this->get_tracking_data(), 'track' ); + + update_option( $this->slug . '_tracking_last_send', time() ); + } + + /** + * Send request to remote endpoint + * + * @param array $params + * @param string $route + * + * @return void + */ + private function send_request( $params, $route ) { + $resp = wp_remote_post( self::$api_url . $route, array( + 'method' => 'POST', + 'timeout' => 45, + 'redirection' => 5, + 'httpversion' => '1.0', + 'blocking' => false, + 'headers' => array( 'user-agent' => 'PlugineverTracker/' . md5( esc_url( home_url() ) ) . ';' ), + 'body' => $params, + 'cookies' => array() + ) + ); + } + + /** + * Get the tracking data points + * + * @return array + */ + protected function get_tracking_data() { + $all_plugins = $this->get_all_plugins(); + $admin_user = get_user_by( 'id', 1 ); + + $data = array( + 'url' => home_url(), + 'site' => get_bloginfo( 'name' ), + 'admin_email' => get_option( 'admin_email' ), + 'user_name' => $admin_user->display_name, + 'user_email' => $admin_user->user_email, + 'plugin' => $this->slug, + 'server' => $this->get_server_info(), + 'wp' => $this->get_wp_info(), + 'users' => $this->get_user_counts(), + 'active_plugins' => count( $all_plugins['active_plugins'] ), + 'inactive_plugins' => count( $all_plugins['inactive_plugins'] ), + ); + + // for child classes + if ( $extra = $this->get_extra_data() ) { + $data['extra'] = $extra; + } + + return apply_filters( $this->slug . '_tracker_data', $data ); + } + + /** + * If a child class wants to send extra data + * + * @return mixed + */ + protected function get_extra_data() { + return false; + } + + /** + * Explain the user which data we collect + * + * @return string + */ + protected function data_we_collect() { + $data = array( + 'Server environment details (php, mysql, server, WordPress versions)', + 'Number of users in your site', + 'Site language', + 'Number of active and inactive plugins', + 'Site name and url', + 'Your name and email address', + ); + + return $data; + } + + /** + * Check if the user has opted into tracking + * + * @return bool + */ + private function tracking_allowed() { + $allow_tracking = get_option( $this->slug . '_allow_tracking', 'no' ); + + return $allow_tracking == 'yes'; + } + + /** + * Get the last time a tracking was sent + * + * @return false|string + */ + private function get_last_send() { + return get_option( $this->slug . '_tracking_last_send', false ); + } + + /** + * Check if the notice has been dismissed or enabled + * + * @return boolean + */ + private function notice_dismissed() { + $hide_notice = get_option( $this->slug . '_tracking_notice', 'no' ); + + if ( 'hide' == $hide_notice ) { + return true; + } + + return false; + } + + /** + * Check if the current server is localhost + * + * @return boolean + */ + private function is_local_server() { + return in_array( $_SERVER['REMOTE_ADDR'], array( '127.0.0.1', '::1' ) ); + } + + /** + * Schedule the event weekly + * + * @return void + */ + private function schedule_event() { + wp_schedule_event( time(), 'weekly', $this->slug . '_tracker_send_event' ); + } + + /** + * Clear any scheduled hook + * + * @return void + */ + private function clear_schedule_event() { + wp_clear_scheduled_hook( $this->slug . '_tracker_send_event' ); + } + + /** + * Display the admin notice to users that have not opted-in or out + * + * @return void + */ + public function admin_notice() { + + if ( $this->notice_dismissed() ) { + return; + } + + if ( $this->tracking_allowed() ) { + return; + } + + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + + // don't show tracking if a local server + if ( ! $this->is_local_server() ) { + $optin_url = add_query_arg( $this->slug . '_tracker_optin', 'true' ); + $optout_url = add_query_arg( $this->slug . '_tracker_optout', 'true' ); + + if ( empty( $this->notice ) ) { + $notice = sprintf( __( 'Want to help make %s even more awesome? Allow Pluginever to collect non-sensitive diagnostic data and usage information.', 'wp-content-pilot' ), $this->name ); + } else { + $notice = $this->notice; + } + + $notice .= ' (' . __( 'what we collect', 'wp-content-pilot' ) . ')'; + $notice .= ''; + + echo '

            '; + echo $notice; + echo '

            '; + echo ' ' . __( 'Allow', 'wp-content-pilot' ) . ''; + echo ' ' . __( 'No thanks', 'wp-content-pilot' ) . ''; + echo '

            '; + + echo " + "; + } + } + + /** + * handle the optin/optout + * + * @return void + */ + public function handle_optin_optout() { + if ( isset( $_GET[ $this->slug . '_tracker_optin' ] ) && $_GET[ $this->slug . '_tracker_optin' ] == 'true' ) { + update_option( $this->slug . '_allow_tracking', 'yes' ); + update_option( $this->slug . '_tracking_notice', 'hide' ); + + $this->clear_schedule_event(); + $this->schedule_event(); + $this->send_tracking_data(); + + wp_redirect( remove_query_arg( $this->slug . '_tracker_optin' ) ); + exit; + } + + if ( isset( $_GET[ $this->slug . '_tracker_optout' ] ) && $_GET[ $this->slug . '_tracker_optout' ] == 'true' ) { + update_option( $this->slug . '_allow_tracking', 'no' ); + update_option( $this->slug . '_tracking_notice', 'hide' ); + + $this->clear_schedule_event(); + + wp_redirect( remove_query_arg( $this->slug . '_tracker_optout' ) ); + exit; + } + } + + /** + * Get the number of post counts + * + * @param string $post_type + * + * @return integer + */ + protected function get_post_count( $post_type ) { + global $wpdb; + + return (int) $wpdb->get_var( "SELECT count(ID) FROM $wpdb->posts WHERE post_type = '$post_type' and post_status = 'publish'" ); + } + + /** + * Get server related info. + * + * @return array + */ + private static function get_server_info() { + global $wpdb; + + $server_data = array(); + + if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) { + $server_data['software'] = $_SERVER['SERVER_SOFTWARE']; + } + + if ( function_exists( 'phpversion' ) ) { + $server_data['php_version'] = phpversion(); + } + + $server_data['mysql_version'] = $wpdb->db_version(); + + $server_data['php_max_upload_size'] = size_format( wp_max_upload_size() ); + $server_data['php_default_timezone'] = date_default_timezone_get(); + $server_data['php_soap'] = class_exists( 'SoapClient' ) ? 'Yes' : 'No'; + $server_data['php_fsockopen'] = function_exists( 'fsockopen' ) ? 'Yes' : 'No'; + $server_data['php_curl'] = function_exists( 'curl_init' ) ? 'Yes' : 'No'; + + return $server_data; + } + + /** + * Get WordPress related data. + * + * @return array + */ + private function get_wp_info() { + $wp_data = array(); + + $wp_data['memory_limit'] = WP_MEMORY_LIMIT; + $wp_data['debug_mode'] = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? 'Yes' : 'No'; + $wp_data['locale'] = get_locale(); + $wp_data['version'] = get_bloginfo( 'version' ); + $wp_data['multisite'] = is_multisite() ? 'Yes' : 'No'; + + return $wp_data; + } + + /** + * Get the list of active and inactive plugins + * + * @return array + */ + private function get_all_plugins() { + // Ensure get_plugins function is loaded + if ( ! function_exists( 'get_plugins' ) ) { + include ABSPATH . '/wp-admin/includes/plugin.php'; + } + + $plugins = get_plugins(); + $active_plugins_keys = get_option( 'active_plugins', array() ); + $active_plugins = array(); + + foreach ( $plugins as $k => $v ) { + // Take care of formatting the data how we want it. + $formatted = array(); + $formatted['name'] = strip_tags( $v['Name'] ); + + if ( isset( $v['Version'] ) ) { + $formatted['version'] = strip_tags( $v['Version'] ); + } + + if ( isset( $v['Author'] ) ) { + $formatted['author'] = strip_tags( $v['Author'] ); + } + + if ( isset( $v['Network'] ) ) { + $formatted['network'] = strip_tags( $v['Network'] ); + } + + if ( isset( $v['PluginURI'] ) ) { + $formatted['plugin_uri'] = strip_tags( $v['PluginURI'] ); + } + + if ( in_array( $k, $active_plugins_keys ) ) { + // Remove active plugins from list so we can show active and inactive separately + unset( $plugins[ $k ] ); + $active_plugins[ $k ] = $formatted; + } else { + $plugins[ $k ] = $formatted; + } + } + + return array( 'active_plugins' => $active_plugins, 'inactive_plugins' => $plugins ); + } + + /** + * Get user totals based on user role. + * + * @return array + */ + private function get_user_counts() { + $user_count = array(); + $user_count_data = count_users(); + $user_count['total'] = $user_count_data['total_users']; + + // Get user count based on user role + foreach ( $user_count_data['avail_roles'] as $role => $count ) { + $user_count[ $role ] = $count; + } + + return $user_count; + } + + /** + * Add weekly cron schedule + * + * @param array $schedules + * + * @return array + */ + public function add_weekly_schedule( $schedules ) { + + $schedules['weekly'] = array( + 'interval' => DAY_IN_SECONDS * 7, + 'display' => __( 'Once Weekly', 'wp-content-pilot' ) + ); + + return $schedules; + } + + /** + * Clear our options upon deactivation + * + * @return void + */ + public function deactivate_plugin() { + $this->clear_schedule_event(); + + delete_option( $this->slug . '_allow_tracking' ); + delete_option( $this->slug . '_tracking_notice' ); + delete_option( $this->slug . '_tracking_last_send' ); + } + + /** + * Hook into action links and modify the deactivate link + * + * @param array $links + * + * @return array + */ + public function plugin_action_links( $links ) { + + if ( array_key_exists( 'deactivate', $links ) ) { + $links['deactivate'] = str_replace( ' 'could-not-understand', + 'text' => 'I couldn\'t understand how to make it work', + 'type' => 'textarea', + 'placeholder' => 'Would you like us to assist you?' + ), + array( + 'id' => 'found-better-plugin', + 'text' => 'I found a better plugin', + 'type' => 'text', + 'placeholder' => 'Which plugin?' + ), + array( + 'id' => 'not-have-that-feature', + 'text' => 'The plugin is great, but I need specific feature that you don\'t support', + 'type' => 'textarea', + 'placeholder' => 'Could you tell us more about that feature?' + ), + array( + 'id' => 'is-not-working', + 'text' => 'The plugin is not working', + 'type' => 'textarea', + 'placeholder' => 'Could you tell us a bit more whats not working?' + ), + array( + 'id' => 'looking-for-other', + 'text' => 'It\'s not what I was looking for', + 'type' => '', + 'placeholder' => '' + ), + array( + 'id' => 'did-not-work-as-expected', + 'text' => 'The plugin didn\'t work as expected', + 'type' => 'textarea', + 'placeholder' => 'What did you expect?' + ), + array( + 'id' => 'other', + 'text' => 'Other', + 'type' => 'textarea', + 'placeholder' => 'Could you tell us a bit more?' + ), + ); + + return $reasons; + } + + /** + * Plugin deactivation uninstall reason submission + * + * @return void + */ + public function uninstall_reason_submission() { + global $wpdb; + + if ( ! isset( $_POST['reason_id'] ) ) { + wp_send_json_error(); + } + + $current_user = wp_get_current_user(); + + $data = array( + 'reason_id' => sanitize_text_field( $_POST['reason_id'] ), + 'plugin' => $this->slug, + 'url' => home_url(), + 'name' => get_option('blogname'), + 'admin_email' => get_option('admin_email'), + 'user_email' => $current_user->user_email, + 'user_name' => $current_user->display_name, + 'reason_info' => isset( $_REQUEST['reason_info'] ) ? trim( stripslashes( $_REQUEST['reason_info'] ) ) : '', + 'software' => $_SERVER['SERVER_SOFTWARE'], + 'php_version' => phpversion(), + 'mysql_version' => $wpdb->db_version(), + 'wp_version' => get_bloginfo( 'version' ), + 'locale' => get_locale(), + 'multisite' => is_multisite() ? 'Yes' : 'No' + ); + + $this->send_request( $data, 'uninstall_reason' ); + + wp_send_json_success(); + } + + /** + * Handle the plugin deactivation feedback + * + * @return void + */ + public function deactivate_scripts() { + global $pagenow; + + if ( 'plugins.php' != $pagenow ) { + return; + } + + $reasons = $this->get_uninstall_reasons(); + ?> + +
            +
            +
            +

            +
            + +
            +
              + +
            • + +
            • + +
            +
            + + +
            +
            + + + + + + settings_api = new Ever_Settings_Framework(); + add_action( 'admin_init', array( $this, 'admin_init' ) ); + add_action( 'admin_menu', array( $this, 'admin_menu' ), 99 ); + } + + /** + * @since 1.2.0 + */ + function admin_init() { + //set the settings + $this->settings_api->set_sections( $this->get_settings_sections() ); + $this->settings_api->set_fields( $this->get_settings_fields() ); + //initialize settings + $this->settings_api->admin_init(); + } + + /** + * @since 1.2.0 + */ + function admin_menu() { + add_submenu_page( 'edit.php?post_type=wp_content_pilot', __( 'Settings', 'wp-content-pilot' ), __( 'Settings', 'wp-content-pilot' ), 'edit_others_posts', 'wpcp-settings', array( + $this, + 'settings_page' + ) ); + } + + /** + * @return mixed|void + * @since 1.2.0 + */ + function get_settings_sections() { + $sections = array( + array( + 'id' => 'wpcp_settings_misc', + 'title' => __( 'Misc Settings', 'wp-content-pilot' ) + ), + array( + 'id' => 'wpcp_article_spinner', + 'title' => __( 'Article Spinner', 'wp-content-pilot' ) + ) + ); + + return apply_filters( 'wpcp_settings_sections', $sections ); + } + + /** + * Returns all the settings fields + * + * @return array settings fields + */ + function get_settings_fields() { + $settings_fields = array( + 'wpcp_settings_misc' => array( + array( + 'name' => 'uninstall_on_delete', + 'label' => __( 'Remove Data on Uninstall?', 'wp-content-pilot' ), + 'desc' => __( 'Check this box if you would like to completely remove all of its data when the plugin is deleted.', 'wp-content-pilot' ), + 'type' => 'checkbox', + 'default' => '' + ), + array( + 'name' => 'post_publish_mail', + 'label' => __( 'Post Publish mail', 'wp-content-pilot' ), + 'desc' => __( 'Send mail After post publish', 'wp-content-pilot' ), + 'type' => 'checkbox', + 'default' => '' + ), +// array( +// 'name' => 'skip_duplicate_url', +// 'label' => __( 'Never post duplicate title', 'wp-content-pilot' ), +// 'desc' => __( 'Skip post having duplicate url that are already in the database and already published posts.', 'wp-content-pilot' ), +// 'type' => 'checkbox', +// 'default' => '' +// ), + ), + 'wpcp_article_spinner' => array( + array( + 'name' => 'spinrewriter_head', + 'label' => __( 'SpinreWriter', 'wp-content-pilot' ), + 'desc' => sprintf( __( 'SpinreWriter is one of the best Article Spinner, if you do not have account please %ssign up%s.', 'wp-content-pilot' ), '', '' ), + 'type' => 'html', + 'default' => '' + ), + array( + 'name' => 'spinrewriter_email', + 'label' => __( 'Email', 'wp-content-pilot' ), + 'desc' => __( 'Input your email address of SpinreWriter.', 'wp-content-pilot' ), + 'type' => 'text', + 'default' => '' + ), + array( + 'name' => 'spinrewriter_api_key', + 'label' => __( 'API Key', 'wp-content-pilot' ), + 'desc' => __( 'Input API key of SpinreWriter.', 'wp-content-pilot' ), + 'type' => 'text', + 'default' => '' + ), + ), + ); + + return apply_filters( 'wpcp_settings_fields', $settings_fields ); + } + + function settings_page() { + ?> +
            + %s", __( 'WP Content Pilot Settings', 'wp-content-pilot' ) ); ?> +
            +
            +
            + settings_api->show_settings(); ?> +
            +
            + +
            +

            +
            + ', '' ) + ?> +
            +
            + + +
            +

            +
            + ', '' ) + ?> +
            +
            + +
            +

            +
            + ', '' ) + ?> + +
            +
            + +
            +

            +
            + ', '' ) + ?> +
            + + +
            +
            +
            + +
            +
            +
            +
            +
            + ID ] = $page->post_title; + } + } + + return $pages_options; + } +} + +new WPCP_Settings(); diff --git a/wp-content-pilot/includes/admin/class-wpcp-tracker.php b/wp-content-pilot/includes/admin/class-wpcp-tracker.php new file mode 100644 index 0000000..0ef33ca --- /dev/null +++ b/wp-content-pilot/includes/admin/class-wpcp-tracker.php @@ -0,0 +1,50 @@ +WP Content Pilot even more awesome? Allow PluginEver to collect non-sensitive diagnostic data and usage information.', 'wp-content-pilot' ); + + parent::__construct( 'wp-content-pilot', 'WP Content Pilot', WPCP_FILE, $notice ); + } + + /** + * Get the extra data + * + * @return array + */ + protected function get_extra_data() { + global $wpdb; + $campaigns = $wpdb->get_results( "select meta_value as type, count(meta_value) count from $wpdb->postmeta where meta_key='_campaign_type' AND post_id in (select ID from $wpdb->posts where post_type='wp_content_pilot') group by meta_value order by count desc" ); + $data = array( + 'total_campaign' => $this->get_post_count( 'wp_content_pilot' ), + 'is_pro' => defined( 'WPCP_PRO_VERSION' ) ? 'yes' : 'no', + 'campaigns' => $campaigns, + ); + + return $data; + } + + + /** + * Explain the user which data we collect + * + * @return array + */ + protected function data_we_collect() { + $data = array( + 'Server environment details (php, mysql, server, WordPress versions)', + 'Number of Campaigns', + 'Site language', + 'Number of active and inactive plugins', + 'Site name and url', + 'Your name and email address', + ); + + return $data; + } + +} + +new WPCP_Tracker(); diff --git a/wp-content-pilot/includes/admin/class-wpcp-updater.php b/wp-content-pilot/includes/admin/class-wpcp-updater.php new file mode 100644 index 0000000..6a77264 --- /dev/null +++ b/wp-content-pilot/includes/admin/class-wpcp-updater.php @@ -0,0 +1,64 @@ + 'updates/update-1.0.4.php', + '1.1.2' => 'updates/update-1.1.2.php', + '1.2.0' => 'updates/update-1.2.0.php', + '1.2.3' => 'updates/update-1.2.3.php', + '1.2.4' => 'updates/update-1.2.4.php', + '1.2.7' => 'updates/update-1.2.7.php', + ); + + /** + * Get the plugin version + * + * @return string + */ + public function get_version() { + return get_option( 'wpcp_version' ); + } + + /** + * Check if the plugin needs any update + * + * @return boolean + */ + public function needs_update() { + // may be it's the first install + if ( ! $this->get_version() ) { + return false; + } + + if ( version_compare( $this->get_version(), WPCP_VERSION, '<' ) ) { + return true; + } + + return false; + } + + /** + * Perform all the necessary upgrade routines + * + * @return void + */ + function perform_updates() { + $installed_version = $this->get_version(); + $path = trailingslashit( dirname( __FILE__ ) ); + + foreach ( self::$upgrades as $version => $file ) { + if ( version_compare( $installed_version, $version, '<' ) ) { + include $path . $file; + update_option( 'wpcp_version', $version ); + } + } + } + + +} diff --git a/wp-content-pilot/includes/admin/metabox-functions.php b/wp-content-pilot/includes/admin/metabox-functions.php new file mode 100644 index 0000000..314395a --- /dev/null +++ b/wp-content-pilot/includes/admin/metabox-functions.php @@ -0,0 +1,417 @@ +ID, '_campaign_type', true ); + if ( empty( $campaign_type ) ) { + add_meta_box( 'campaign-selection', __( 'Select a campaign to start', 'wp-content-pilot' ), 'wpcp_campaign_selection_metabox_callback', 'wp_content_pilot', 'normal', 'high' ); + + return ''; + } + add_meta_box( 'wpcp-campaign-status', __( 'Campaign Status', 'wp-content-pilot' ), 'wpcp_campaign_status_metabox_callback', 'wp_content_pilot', 'normal', 'high' ); + add_meta_box( 'wpcp-campaign-options', __( 'Campaign Options', 'wp-content-pilot' ), 'wpcp_campaign_options_metabox_callback', 'wp_content_pilot', 'normal', 'low' ); + add_meta_box( 'wpcp-campaign-log', __( 'Campaign Log', 'wp-content-pilot' ), 'wpcp_campaign_log_metabox_callback', 'wp_content_pilot', 'normal', 'low' ); + add_meta_box( 'wpcp-post-template', __( 'Post Template', 'wp-content-pilot' ), 'wpcp_post_template_metabox_callback', 'wp_content_pilot', 'normal', 'low' ); + add_meta_box( 'wpcp-post-settings', __( 'Post Settings', 'wp-content-pilot' ), 'wpcp_post_settings_metabox_callback', 'wp_content_pilot', 'normal', 'low' ); + add_meta_box( 'wpcp-post-filters', __( 'Posts Filter', 'wp-content-pilot' ), 'wpcp_posts_filter_metabox_callback', 'wp_content_pilot', 'normal', 'low' ); + add_meta_box( 'wpcp-advanced-settings', __( 'Advanced Settings', 'wp-content-pilot' ), 'wpcp_advanced_settings_metabox_callback', 'wp_content_pilot', 'normal', 'low' ); + add_meta_box( 'wpcp-campaign-actions', __( 'Actions', 'wp-content-pilot' ), 'wpcp_campaign_action_metabox_callback', 'wp_content_pilot', 'side', 'high' ); + //add_meta_box( 'wpcp-campaign-details', __( 'Campaign Details', 'wp-content-pilot' ), 'wpcp_campaign_details_metabox_callback', 'wp_content_pilot', 'side', 'high' ); + add_meta_box( 'wpcp-campaign-misc', __( 'Miscellaneous', 'wp-content-pilot' ), 'wpcp_campaign_miscellaneous_metabox_callback', 'wp_content_pilot', 'side', 'high' ); + add_meta_box( 'wpcp-campaign-posts', __( 'Campaign Posts', 'wp-content-pilot' ), 'wpcp_campaign_posts_metabox_callback', 'wp_content_pilot', 'side', 'high' ); + add_meta_box( 'wpcp-spinner-settings', __( 'Spinner Settings', 'wp-content-pilot' ), 'wpcp_spinner_metabox_callback', 'wp_content_pilot', 'normal', 'low' ); +} + +add_action( 'add_meta_boxes_wp_content_pilot', 'wpcp_register_meta_boxes', 10 ); + +/** + * Conditionally render metabox + * + * @param $post_type + * @param $context + * @param $post + */ + +function wpcp_conditional_metabox_remove( $post_type, $context, $post ) { + $post_type = 'wp_content_pilot'; + remove_meta_box( 'submitdiv', $post_type, 'side' ); + remove_meta_box( 'commentsdiv', $post_type, 'normal' ); + remove_meta_box( 'commentstatusdiv', $post_type, 'normal' ); + remove_meta_box( 'slugdiv', $post_type, 'normal' ); +} + +add_action( 'do_meta_boxes', 'wpcp_conditional_metabox_remove', 10, 3 ); + + +/** + * Campaign selection metabox + * + * @param $post + */ +function wpcp_campaign_selection_metabox_callback( $post ) { + wpcp_get_views( 'metabox/campaign-selection.php', array( 'post' => $post ) ); +} + +/** + * Render campaign status + * + * @param $post + */ +function wpcp_campaign_status_metabox_callback( $post ) { + wpcp_get_views( 'metabox/campaign-status.php', array( 'post' => $post ) ); +} + +function wpcp_campaign_log_metabox_callback( $post ) { + ?> +
            + ID, '_campaign_type', true ); + do_action( 'wpcp_' . sanitize_key( $campaign_type ) . '_campaign_options_meta_fields', $post ); + do_action( 'wpcp_campaign_options_meta_fields', $campaign_type, $post ); +} +function wpcp_spinner_metabox_callback($post){ + wpcp_get_views('metabox/spinner-settings.php'); +} +function wpcp_post_template_metabox_callback( $post ) { + wpcp_get_views( 'metabox/post-template.php' ); +} + +function wpcp_post_settings_metabox_callback( $post ) { + wpcp_get_views( 'metabox/post-settings.php' ); +} + +function wpcp_posts_filter_metabox_callback( $post ) { + wpcp_get_views( 'metabox/post-filter.php' ); +} + +function wpcp_advanced_settings_metabox_callback( $post ) { + wpcp_get_views( 'metabox/advanced-settings.php' ); + do_action( 'wpcp_advanced_settings_metabox', $post ); +} + +function wpcp_campaign_action_metabox_callback( $post ) { + wpcp_get_views( 'metabox/action-metabox.php' ); +} + +function wpcp_campaign_details_metabox_callback( $post ) { + +} + +function wpcp_campaign_miscellaneous_metabox_callback( $post ) { + wpcp_get_views( 'metabox/campaign-miscellaneous.php', [ 'campaign_id' => $post->ID ] ); +} + +function wpcp_campaign_posts_metabox_callback( $post ) { + wpcp_get_views( 'metabox/campaign-posts.php', [ 'campaign_id' => $post->ID ] ); +} + +function wpcp_update_campaign_settings( $post_id ) { + if ( ! current_user_can( 'edit_post', $post_id ) ) { + return false; + } + + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + return false; + } + + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { + return false; + } + + //save post meta + $posted = empty( $_POST ) ? [] : $_POST; + if ( empty( $posted['_campaign_type'] ) ) { + return false; + } + + $frequency_unit = ! empty( $posted['_frequency_unit'] ) && in_array( $posted['_frequency_unit'], [ + 'minutes', + 'hours', + 'days' + ] ) ? sanitize_key( $posted['_frequency_unit'] ) : 'hours'; + + if ( $frequency_unit == 'minutes' ) { + $every = MINUTE_IN_SECONDS; + } elseif ( $frequency_unit == 'hours' ) { + $every = HOUR_IN_SECONDS; + } else { + $every = DAY_IN_SECONDS; + } + + + $campaign_target = empty( $posted['_campaign_target'] ) ? 10 : absint( $posted['_campaign_target'] ); + $campaign_frequency = empty( $posted['_campaign_frequency'] ) ? 5 : absint( $posted['_campaign_frequency'] ); + + update_post_meta( $post_id, '_campaign_type', empty( $posted['_campaign_type'] ) ? 'feed' : sanitize_text_field( $posted['_campaign_type'] ) ); + update_post_meta( $post_id, '_campaign_target', $campaign_target ); + update_post_meta( $post_id, '_campaign_frequency', $campaign_frequency ); + update_post_meta( $post_id, '_frequency_unit', $frequency_unit ); + //update_post_meta( $post_id, '_run_every', ( $every * absint( $posted['_campaign_frequency'] ) ) ); + update_post_meta( $post_id, '_run_every', ( $every * $campaign_frequency ) ); + update_post_meta( $post_id, '_campaign_status', empty( $posted['_campaign_status'] ) ? 'inactive' : sanitize_text_field( $posted['_campaign_status'] ) ); + + update_post_meta( $post_id, '_keywords', empty( $posted['_keywords'] ) ? '' : sanitize_text_field( $posted['_keywords'] ) ); + update_post_meta( $post_id, '_content_type', empty( $posted['_content_type'] ) ? 'html' : sanitize_text_field( $posted['_content_type'] ) ); + + update_post_meta( $post_id, '_set_featured_image', empty( $posted['_set_featured_image'] ) ? '' : sanitize_text_field( $posted['_set_featured_image'] ) ); + update_post_meta( $post_id, '_remove_images', empty( $posted['_remove_images'] ) ? '' : sanitize_text_field( $posted['_remove_images'] ) ); + update_post_meta( $post_id, '_excerpt', empty( $posted['_excerpt'] ) ? '' : sanitize_text_field( $posted['_excerpt'] ) ); + update_post_meta( $post_id, '_strip_links', empty( $posted['_strip_links'] ) ? '' : sanitize_text_field( $posted['_strip_links'] ) ); + update_post_meta( $post_id, '_allow_comments', empty( $posted['_allow_comments'] ) ? '' : sanitize_text_field( $posted['_allow_comments'] ) ); + update_post_meta( $post_id, '_allow_pingbacks', empty( $posted['_allow_pingbacks'] ) ? '' : sanitize_text_field( $posted['_allow_pingbacks'] ) ); + update_post_meta( $post_id, '_use_original_date', empty( $posted['_use_original_date'] ) ? '' : sanitize_text_field( $posted['_use_original_date'] ) ); + update_post_meta( $post_id, '_skip_no_image', empty( $posted['_skip_no_image'] ) ? '' : sanitize_text_field( $posted['_skip_no_image'] ) ); + update_post_meta( $post_id, '_enable_duplicate_title', empty( $posted['_enable_duplicate_title'] ) ? '' : sanitize_text_field( $posted['_enable_duplicate_title'] ) ); + update_post_meta( $post_id, '_skip_duplicate_title', empty( $posted['_skip_duplicate_title'] ) ? '' : sanitize_text_field( $posted['_skip_duplicate_title'] ) ); + update_post_meta( $post_id, '_clean_title', empty( $posted['_clean_title'] ) ? '' : sanitize_text_field( $posted['_clean_title'] ) ); + + update_post_meta( $post_id, '_spin_article', empty( $posted['_spin_article'] ) ? '' : sanitize_text_field( $posted['_spin_article'] ) ); + update_post_meta( $post_id, '_post_title', empty( $posted['_post_title'] ) ? '' : sanitize_text_field( $posted['_post_title'] ) ); + update_post_meta( $post_id, '_post_template', empty( $posted['_post_template'] ) ? '' : wp_kses_post( $posted['_post_template'] ) ); + update_post_meta( $post_id, '_post_type', empty( $posted['_post_type'] ) ? 'post' : wp_kses_post( $posted['_post_type'] ) ); + update_post_meta( $post_id, '_post_status', empty( $posted['_post_status'] ) ? 'publish' : wp_kses_post( $posted['_post_status'] ) ); + update_post_meta( $post_id, '_author', empty( $posted['_author'] ) ? '' : intval( $posted['_author'] ) ); + update_post_meta( $post_id, '_categories', empty( $posted['_categories'] ) ? '' : $posted['_categories'] ); + update_post_meta( $post_id, '_tags', empty( $posted['_tags'] ) ? '' : $posted['_tags'] ); + + update_post_meta( $post_id, '_title_limit', empty( $posted['_title_limit'] ) ? '' : esc_attr( $posted['_title_limit'] ) ); + update_post_meta( $post_id, '_content_limit', empty( $posted['_content_limit'] ) ? '' : esc_attr( $posted['_content_limit'] ) ); + + update_post_meta($post_id,'_spinner_action',empty($posted['_spinner_action']) ? 'unique_variation': sanitize_key($posted['_spinner_action'])); + update_post_meta($post_id,'_spinner_auto_protected_terms',empty($posted['_spinner_auto_protected_terms']) ? false: sanitize_key($posted['_spinner_auto_protected_terms'])); + update_post_meta($post_id,'_spinner_confidence_level',empty($posted['_spinner_confidence_level']) ? 'high': sanitize_key($posted['_spinner_confidence_level'])); + update_post_meta($post_id,'_spinner_nested_spintax',empty($posted['_spinner_nested_spintax']) ? true: sanitize_key($posted['_spinner_nested_spintax'])); + update_post_meta($post_id,'_spinner_auto_sentences',empty($posted['_spinner_auto_sentences']) ? false: sanitize_key($posted['_spinner_auto_sentences'])); + update_post_meta($post_id,'_spinner_auto_paragraphs',empty($posted['_spinner_auto_paragraphs']) ? false: sanitize_key($posted['_spinner_auto_paragraphs'])); + update_post_meta($post_id,'_spinner_auto_new_paragraphs',empty($posted['_spinner_auto_new_paragraphsv']) ? false: sanitize_key($posted['_spinner_auto_new_paragraphs'])); + update_post_meta($post_id,'_spinner_auto_sentence_trees',empty($posted['_spinner_auto_sentence_trees']) ? false: sanitize_key($posted['_spinner_auto_sentence_trees'])); + update_post_meta($post_id,'_spinner_use_only_synonyms',empty($posted['_spinner_use_only_synonyms']) ? false: sanitize_key($posted['_spinner_use_only_synonyms'])); + update_post_meta($post_id,'_spinner_reorder_paragraphs',empty($posted['_spinner_reorder_paragraphs']) ? false: sanitize_key($posted['_spinner_reorder_paragraphs'])); + + update_post_meta($post_id,'_enable_polylang',empty($posted['_enable_polylang']) ? '': sanitize_text_field($posted['_enable_polylang'])); + update_post_meta($post_id,'_polylang_language_code',empty($posted['_polylang_language_code']) ? '': sanitize_text_field($posted['_polylang_language_code'])); + + do_action( 'wpcp_update_campaign_settings', $post_id, $posted ); + do_action( 'wpcp_' . sanitize_key( $posted['_campaign_type'] ) . '_update_campaign_settings', $post_id, $posted ); +} + +add_action( 'save_post_wp_content_pilot', 'wpcp_update_campaign_settings' ); + + +function wpcp_keyword_field() { + echo WPCP_HTML::textarea_input( array( + 'label' => __( 'Keywords', 'wp-content-pilot' ), + 'name' => '_keywords', + 'placeholder' => 'Bonsai tree care', + 'desc' => __( 'Separate keywords by comma.', 'wp-content-pilot' ), + 'attrs' => array( + 'rows' => 3, + 'required' => 'required' + ), + ) ); +} + +function wpcp_keyword_suggestion_field() { + echo WPCP_HTML::text_input( array( + 'label' => __( 'Keyword Suggestion', 'wp-content-pilot' ), + 'name' => '_keyword_suggestion', + 'placeholder' => 'Enter Keyword Here', + 'wrapper_class' => 'pro', + 'after' => '', + 'attrs' => array( + 'disabled' => 'disabled', + 'list' => 'wpcp-keyword-suggester', + ) + ) ); +} + + +function wpcp_strip_links_field() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Strip original links from the post', 'wp-content-pilot' ), + 'name' => '_strip_links', + 'tooltip' => __( 'Remove hyperlinks found in the article', 'wp-content-pilot' ), + ) ); +} + +function wpcp_external_link_field() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Make permalink link directly to the source', 'wp-content-pilot' ), + 'name' => '_external_post', + 'tooltip' => __( 'Make post link directly to the source site, Posts will not load at your site.', 'wp-content-pilot' ), + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) + ) ); +} + +function wpcp_canonical_link_field() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Add Canonical Tag with the original post link ', 'wp-content-pilot' ), + 'name' => '_canonical_tag', + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) + ) ); +} + +function wpcp_featured_image_field() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Set First image as featured image', 'wp-content-pilot' ), + 'name' => '_set_featured_image', + ) ); +} + +function wpcp_remove_images() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Remove images from content', 'wp-content-pilot' ), + 'name' => '_remove_images', + ) ); +} + +function wpcp_featured_image_random_field() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Set random featured image if no image exists', 'wp-content-pilot' ), + 'name' => '_random_featured_image', + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) + ) ); +} + +function wpcp_use_original_date_field() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Use original date if possible', 'wp-content-pilot' ), + 'name' => '_use_original_date', + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) + ) ); +} + +function wpcp_use_excerpt_field() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Use summary as excerpt', 'wp-content-pilot' ), + 'name' => '_excerpt', + ) ); +} + +function wpcp_escape_duplicate_title() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Enable post with duplicate title', 'wp-content-pilot' ), + 'name' => '_enable_duplicate_title', + ) ); +} + +function wpcp_clean_post_title() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Clean title', 'wp-content-pilot' ), + 'name' => '_clean_title', + ) ); +} + +function wpcp_target_rel_field() { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Add rel nofollow & set target blank for all links', 'wp-content-pilot' ), + 'name' => '_add_rel_no_follow_target', + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) + ) ); +} + + +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_featured_image_field', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_remove_images', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_strip_links_field', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_use_excerpt_field', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_escape_duplicate_title', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_clean_post_title', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_use_original_date_field', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_external_link_field', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_featured_image_random_field', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_canonical_link_field', 20 ); +add_action( 'wpcp_campaign_options_meta_fields', 'wpcp_target_rel_field', 20 ); + + +function wpcp_search_replace_metafield( $post ) { + ?> +
            + + + + + + + + + + + + + + + + + +
            SearchReplace
            + +
            + +
            + + + + + + + + + + + + + + + + + +
            Meta KeyMeta Value
            + + +
            + hide_errors(); + $columns = $wpdb->query("DESCRIBE {$wpdb->prefix}wpcp_links"); + if($columns < 15){ + $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}wpcp_links;"); + WPCP_Install::create_tables(); + } +} + +content_pilot_update_1_0_4(); diff --git a/wp-content-pilot/includes/admin/updates/update-1.1.2.php b/wp-content-pilot/includes/admin/updates/update-1.1.2.php new file mode 100644 index 0000000..457b588 --- /dev/null +++ b/wp-content-pilot/includes/admin/updates/update-1.1.2.php @@ -0,0 +1,9 @@ +hide_errors(); + $columns = $wpdb->query("DELETE FROM {$wpdb->prefix}options WHERE option_name LIKE 'wp_wpcp_automatic_campaign_batch_%'"); + $columns = $wpdb->query("DELETE FROM {$wpdb->prefix}options WHERE option_name LIKE 'wp_wpcp_fetch_contents_batch_%'"); +} + +content_pilot_update_1_1_2(); diff --git a/wp-content-pilot/includes/admin/updates/update-1.2.0.php b/wp-content-pilot/includes/admin/updates/update-1.2.0.php new file mode 100644 index 0000000..fa8aa6b --- /dev/null +++ b/wp-content-pilot/includes/admin/updates/update-1.2.0.php @@ -0,0 +1,25 @@ +hide_errors(); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN post_id;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN camp_type;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN image;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN content;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN raw_content;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN score;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN gmt_date;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN data;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN created_at;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links DROP COLUMN updated_at;"); + + + $wpdb->query( "ALTER TABLE $wpdb->wpcp_logs DROP COLUMN updated_at;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_logs DROP COLUMN keyword;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_logs DROP COLUMN log_level;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_logs DROP COLUMN message;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_logs ADD COLUMN level varchar(20) NOT NULL DEFAULT 'info' AFTER camp_id;"); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_logs ADD COLUMN message text DEFAULT '' AFTER camp_id;"); +} + +content_pilot_update_1_2_0(); diff --git a/wp-content-pilot/includes/admin/updates/update-1.2.3.php b/wp-content-pilot/includes/admin/updates/update-1.2.3.php new file mode 100644 index 0000000..ef399e8 --- /dev/null +++ b/wp-content-pilot/includes/admin/updates/update-1.2.3.php @@ -0,0 +1,8 @@ +hide_errors(); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links ADD COLUMN `meta` text DEFAULT NULL AFTER `keyword`;"); +} + +content_pilot_update_1_2_3(); diff --git a/wp-content-pilot/includes/admin/updates/update-1.2.4.php b/wp-content-pilot/includes/admin/updates/update-1.2.4.php new file mode 100644 index 0000000..98e9bc1 --- /dev/null +++ b/wp-content-pilot/includes/admin/updates/update-1.2.4.php @@ -0,0 +1,10 @@ +hide_errors(); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_links CHANGE keyword `for` text DEFAULT NULL;"); + $wpdb->query( "update {$wpdb->postmeta} set meta_value='playlist' where meta_key='_youtube_search_type' AND meta_value='channel';"); + $wpdb->query( "update {$wpdb->postmeta} set meta_key='_youtube_playlist_id' where meta_key='_youtube_channel_id';"); +} + +content_pilot_update_1_2_4(); diff --git a/wp-content-pilot/includes/admin/updates/update-1.2.7.php b/wp-content-pilot/includes/admin/updates/update-1.2.7.php new file mode 100644 index 0000000..cece98f --- /dev/null +++ b/wp-content-pilot/includes/admin/updates/update-1.2.7.php @@ -0,0 +1,8 @@ +hide_errors(); + $wpdb->query( "ALTER TABLE $wpdb->wpcp_logs ADD COLUMN `instance_id` varchar(30) DEFAULT NULL AFTER `message`;"); +} + +content_pilot_update_1_2_6(); diff --git a/wp-content-pilot/includes/admin/views/metabox/action-metabox.php b/wp-content-pilot/includes/admin/views/metabox/action-metabox.php new file mode 100644 index 0000000..2e1e1a5 --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/action-metabox.php @@ -0,0 +1,98 @@ + 'wpcp_campaign_reset_search', + 'campaign_id' => $post->ID, + 'nonce' => wp_create_nonce( 'wpcp_campaign_reset_search' ) +), esc_url( admin_url( 'admin-post.php' ) ) ); + +$action = empty( $_GET['action'] ) ? '' : esc_attr( $_GET['action'] ); +$campaign_type = get_post_meta( $post->ID, '_campaign_type', true ); +if ( empty( $campaign_type ) ) { + $campaign_type = 'feed'; +} + +$can_publish = true; +?> +
            + '_campaign_target', + 'label' => __( 'Campaign Target', 'wp-content-pilot' ), + 'default' => 5, + 'max' => is_plugin_active( 'wp-content-pilot-pro/wp-content-pilot-pro.php' ) ? 5000 : 500, + 'attrs' => array( + 'required' => 'required', + ), + 'tooltip' => __( 'For better precision use keyboard arrows ', 'wp-content-pilot' ), + + ) ); + + echo WPCP_HTML::range_input( array( + 'name' => '_campaign_frequency', + 'label' => __( 'Campaign Frequency', 'wp-content-pilot' ), + 'default' => 10, + 'min' => '1', + 'max' => '100', + 'tooltip' => __( 'For better precision use keyboard arrows ', 'wp-content-pilot' ), + ) ); + + echo WPCP_HTML::select_input( array( + 'label' => __( 'Frequency Unit', 'wp-content-pilot' ), + 'name' => '_frequency_unit', + 'options' => array( + 'minutes' => __( 'Minutes', 'wp-content-pilot' ), + 'hours' => __( 'Hours', 'wp-content-pilot' ), + 'days' => __( 'Days', 'wp-content-pilot' ), + ), + 'default' => 'hours', + 'required' => true, + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) + ) ); + + echo WPCP_HTML::switch_input( array( + 'name' => '_campaign_status', + 'check' => 'active', + 'label' => __( 'Campaign Status', 'wp-content-pilot' ), + ) ); + + ?> + +
            + + + + + + + + + +
            + +
            + +
            +
            + +
            + + +
            +
            diff --git a/wp-content-pilot/includes/admin/views/metabox/advanced-settings.php b/wp-content-pilot/includes/admin/views/metabox/advanced-settings.php new file mode 100644 index 0000000..b5d4081 --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/advanced-settings.php @@ -0,0 +1,167 @@ + __( 'Limit Title', 'wp-content-pilot' ), + 'type' => 'number', + 'name' => '_title_limit', + 'tooltip' => 'Input the number of words to limit the title. Default full title.', +) ); + +echo WPCP_HTML::text_input( array( + 'label' => __( 'Limit Content', 'wp-content-pilot' ), + 'type' => 'number', + 'name' => '_content_limit', + 'tooltip' => 'Input the number of words to limit content. Default full content.', +) ); + +echo WPCP_HTML::text_input( array( + 'label' => __( 'Excerpt Length', 'wp-content-pilot' ), + 'type' => 'number', + 'name' => '_excerpt_length', + 'default' => '55', + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) +) ); + + +echo WPCP_HTML::select_input( array( + 'label' => __( 'Translator', 'wp-content-pilot' ), + 'type' => 'select', + 'name' => '_translator', + 'default' => 'dropl', + 'wrapper_class' => 'pro', + 'options' => array( + '' => __( 'No Translation', 'wp-content-pilot' ), + 'yandex' => 'Yandex', + 'deepl' => 'deepL', + ), + 'attrs' => array( + 'disabled' => 'disabled', + ) +) ); + +echo WPCP_HTML::select_input( array( + 'label' => __( 'Translate To', 'wp-content-pilot' ), + 'name' => '_translate_to', + 'class' => 'wpcp-select2', + 'options' => array( + '' => __( 'No Translation', 'wp-content-pilot' ), + 'af' => __( 'Afrikaans', 'wp-content-pilot' ), + 'sq' => __( 'Albanian', 'wp-content-pilot' ), + 'am' => __( 'Amharic', 'wp-content-pilot' ), + 'ar' => __( 'Arabic', 'wp-content-pilot' ), + 'hy' => __( 'Armenian', 'wp-content-pilot' ), + 'az' => __( 'Azerbaijani', 'wp-content-pilot' ), + 'ba' => __( 'Bashkir', 'wp-content-pilot' ), + 'eu' => __( 'Basque', 'wp-content-pilot' ), + 'be' => __( 'Belarusian', 'wp-content-pilot' ), + 'bn' => __( 'Bengali', 'wp-content-pilot' ), + 'bs' => __( 'Bosnian', 'wp-content-pilot' ), + 'bg' => __( 'Bulgarian', 'wp-content-pilot' ), + 'my' => __( 'Burmese', 'wp-content-pilot' ), + 'ca' => __( 'Catalan', 'wp-content-pilot' ), + 'ceb' => __( 'Cebuano', 'wp-content-pilot' ), + 'zh' => __( 'Chinese', 'wp-content-pilot' ), + 'hr' => __( 'Croatian', 'wp-content-pilot' ), + 'cs' => __( 'Czech', 'wp-content-pilot' ), + 'da' => __( 'Danish', 'wp-content-pilot' ), + 'nl' => __( 'Dutch', 'wp-content-pilot' ), + 'en' => __( 'English', 'wp-content-pilot' ), + 'eo' => __( 'Esperanto', 'wp-content-pilot' ), + 'et' => __( 'Estonian', 'wp-content-pilot' ), + 'fi' => __( 'Finnish', 'wp-content-pilot' ), + 'fr' => __( 'French', 'wp-content-pilot' ), + 'gl' => __( 'Galician', 'wp-content-pilot' ), + 'ka' => __( 'Georgian', 'wp-content-pilot' ), + 'de' => __( 'German', 'wp-content-pilot' ), + 'el' => __( 'Greek', 'wp-content-pilot' ), + 'gu' => __( 'Gujarati', 'wp-content-pilot' ), + 'ht' => __( 'Haitian Creole', 'wp-content-pilot' ), + 'he' => __( 'Hebrew', 'wp-content-pilot' ), + 'mrj' => __( 'Hill Mari', 'wp-content-pilot' ), + 'hi' => __( 'Hindi', 'wp-content-pilot' ), + 'hu' => __( 'Hungarian', 'wp-content-pilot' ), + 'is' => __( 'Icelandic', 'wp-content-pilot' ), + 'id' => __( 'Indonesian', 'wp-content-pilot' ), + 'ga' => __( 'Irish', 'wp-content-pilot' ), + 'it' => __( 'Italian', 'wp-content-pilot' ), + 'ja' => __( 'Japanese', 'wp-content-pilot' ), + 'jv' => __( 'Javanese', 'wp-content-pilot' ), + 'kn' => __( 'Kannada', 'wp-content-pilot' ), + 'kk' => __( 'Kazakh', 'wp-content-pilot' ), + 'km' => __( 'Khmer', 'wp-content-pilot' ), + 'ko' => __( 'Korean', 'wp-content-pilot' ), + 'ky' => __( 'Kyrgyz', 'wp-content-pilot' ), + 'lo' => __( 'Lao', 'wp-content-pilot' ), + 'la' => __( 'Latin', 'wp-content-pilot' ), + 'lv' => __( 'Latvian', 'wp-content-pilot' ), + 'lt' => __( 'Lithuanian', 'wp-content-pilot' ), + 'lb' => __( 'Luxembourgish', 'wp-content-pilot' ), + 'mk' => __( 'Macedonian', 'wp-content-pilot' ), + 'mg' => __( 'Malagasy', 'wp-content-pilot' ), + 'ms' => __( 'Malay', 'wp-content-pilot' ), + 'ml' => __( 'Malayalam', 'wp-content-pilot' ), + 'mt' => __( 'Maltese', 'wp-content-pilot' ), + 'mi' => __( 'Maori', 'wp-content-pilot' ), + 'mr' => __( 'Marathi', 'wp-content-pilot' ), + 'mhr' => __( 'Mari', 'wp-content-pilot' ), + 'mn' => __( 'Mongolian', 'wp-content-pilot' ), + 'ne' => __( 'Nepali', 'wp-content-pilot' ), + 'no' => __( 'Norwegian', 'wp-content-pilot' ), + 'pap' => __( 'Papiamento', 'wp-content-pilot' ), + 'fa' => __( 'Persian', 'wp-content-pilot' ), + 'pl' => __( 'Polish', 'wp-content-pilot' ), + 'pt' => __( 'Portuguese', 'wp-content-pilot' ), + 'pt-BR' => __( 'Portuguese (Brazilian)', 'wp-content-pilot' ), + 'pa' => __( 'Punjabi', 'wp-content-pilot' ), + 'ro' => __( 'Romanian', 'wp-content-pilot' ), + 'ru' => __( 'Russian', 'wp-content-pilot' ), + 'gd' => __( 'Scottish Gaelic', 'wp-content-pilot' ), + 'sr' => __( 'Serbian', 'wp-content-pilot' ), + 'si' => __( 'Sinhala', 'wp-content-pilot' ), + 'sk' => __( 'Slovak', 'wp-content-pilot' ), + 'sl' => __( 'Slovenian', 'wp-content-pilot' ), + 'es' => __( 'Spanish', 'wp-content-pilot' ), + 'su' => __( 'Sundanese', 'wp-content-pilot' ), + 'sw' => __( 'Swahili', 'wp-content-pilot' ), + 'sv' => __( 'Swedish', 'wp-content-pilot' ), + 'tl' => __( 'Tagalog', 'wp-content-pilot' ), + 'tg' => __( 'Tajik', 'wp-content-pilot' ), + 'ta' => __( 'Tamil', 'wp-content-pilot' ), + 'tt' => __( 'Tatar', 'wp-content-pilot' ), + 'te' => __( 'Telugu', 'wp-content-pilot' ), + 'th' => __( 'Thai', 'wp-content-pilot' ), + 'tr' => __( 'Turkish', 'wp-content-pilot' ), + 'udm' => __( 'Udmurt', 'wp-content-pilot' ), + 'uk' => __( 'Ukrainian', 'wp-content-pilot' ), + 'ur' => __( 'Urdu', 'wp-content-pilot' ), + 'uz' => __( 'Uzbek', 'wp-content-pilot' ), + 'vi' => __( 'Vietnamese', 'wp-content-pilot' ), + 'cy' => __( 'Welsh', 'wp-content-pilot' ), + 'xh' => __( 'Xhosa', 'wp-content-pilot' ), + 'yi' => __( 'Yiddish', 'wp-content-pilot' ), + ), + 'tooltip' => __( 'Select a language to translate.', 'wp-content-pilot' ), + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled' + ) +) ); + +if ( is_plugin_active( 'polylang/polylang.php' ) || is_plugin_active( 'polylang-pro/polylang.php' ) ) { + echo WPCP_HTML::checkbox_input( array( + 'label' => __( 'Enable Polylang for published posts', 'wp-content-pilot' ), + 'name' => '_enable_polylang' + ) + ); + echo WPCP_HTML::text_input( array( + 'label' => __( 'Two letter language codes.', 'wp-content-pilot' ), + 'name' => '_polylang_language_code', + 'desc' => __( 'Just give 2 letter language code. Like "de" for german, "bn" for bangla', 'wp-content-pilot' ) + ) ); +} + diff --git a/wp-content-pilot/includes/admin/views/metabox/campaign-miscellaneous.php b/wp-content-pilot/includes/admin/views/metabox/campaign-miscellaneous.php new file mode 100644 index 0000000..570560b --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/campaign-miscellaneous.php @@ -0,0 +1,3 @@ +%s

            ', __('Delete all posts by this campaign', 'wp-content-pilot')); +echo sprintf( 'Delete', $campaign_id, wp_create_nonce('wpcp_delete_posts')); diff --git a/wp-content-pilot/includes/admin/views/metabox/campaign-posts.php b/wp-content-pilot/includes/admin/views/metabox/campaign-posts.php new file mode 100644 index 0000000..ad7dc58 --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/campaign-posts.php @@ -0,0 +1,19 @@ + wpcp_get_post_meta( $campaign_id, '_post_type', 'post' ), + 'numberposts' => 10, + 'meta_key' => '_campaign_id', + 'meta_value' => $campaign_id, + 'post_status' => array( 'publish', 'private', 'draft', 'pending' ), +) ); + +if ( empty( $posts ) ) { + echo sprintf( '

            %s

            ', __( 'No posts generated yet', 'wp-content-pilot' ) ); +} else { + echo '
              '; + foreach ( $posts as $post ) { + echo sprintf( '
            • %s
            • ', get_the_permalink( $post ), get_the_title( $post ) ); + } + + echo '
            '; +} diff --git a/wp-content-pilot/includes/admin/views/metabox/campaign-selection.php b/wp-content-pilot/includes/admin/views/metabox/campaign-selection.php new file mode 100644 index 0000000..2863b46 --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/campaign-selection.php @@ -0,0 +1,229 @@ + 'Article', + 'name' => 'article', + 'keywords' => 'article, articles, blog, posts, news', + 'disabled' => false, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/article.png' ) + ), + array( + 'label' => 'Feed', + 'name' => 'feed', + 'keywords' => 'job', + 'disabled' => false, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/feed.png' ) + ), + array( + 'label' => 'Youtube', + 'name' => 'youtube', + 'keywords' => 'job', + 'disabled' => false, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/youtube.png' ) + ), + array( + 'label' => 'Flickr', + 'name' => 'flickr', + 'keywords' => 'job', + 'disabled' => false, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/flickr.png' ) + ), + array( + 'label' => 'Envato', + 'name' => 'envato', + 'keywords' => 'job', + 'disabled' => false, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/envato.png' ) + ), + array( + 'label' => 'Amazon', + 'name' => 'amazon', + 'keywords' => 'bestbuy, affiliation, affiliate', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/amazon.png' ) + ), + array( + 'label' => 'BestBuy', + 'name' => 'bestBuy', + 'keywords' => 'bestbuy, affiliation, affiliate', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/bestbuy.png' ) + ), + array( + 'label' => 'CareerJet', + 'name' => 'careerjet', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/careerjet.png' ) + ), + array( + 'label' => 'ClickBank', + 'name' => 'clickBank', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/clickbank.png' ) + ), + array( + 'label' => 'Craigslist', + 'name' => 'craigslist', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/craigslist.png' ) + ), + array( + 'label' => 'Ebay', + 'name' => 'ebay', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/ebay.png' ) + ), + array( + 'label' => 'Ezine Articles', + 'name' => 'ezine-articles', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/ezine.png' ) + ), + array( + 'label' => 'FaceBook', + 'name' => 'faceBook', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/facebook.png' ) + ), + array( + 'label' => 'Instagram', + 'name' => 'instagram', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/instragram.png' ) + ), + array( + 'label' => 'Itunes', + 'name' => 'itunes', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/itunes.png' ) + ), + array( + 'label' => 'Pinterest', + 'name' => 'pinterest', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/pinterest.png' ) + ), +// array( +// 'label' => 'Quora', +// 'name' => 'quora', +// 'keywords' => 'job', +// 'disabled' => true, +// 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/quora.png' ) +// ), + array( + 'label' => 'Reddit', + 'name' => 'reddit', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/reddit.png' ) + ), + array( + 'label' => 'Twitter', + 'name' => 'twitter', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/twitter.png' ) + ), + array( + 'name' => 'SoundCloud', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/soundcloud.png' ) + ), + array( + 'label' => 'Walmart', + 'name' => 'walmart', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/walmart.png' ) + ), + array( + 'label' => 'Gearbest', + 'name' => 'gearbest', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/gearbest.png' ) + ), + array( + 'label' => 'Vimeo', + 'name' => 'vimeo', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/vimeo.png' ) + ), + array( + 'label' => 'Yelp', + 'name' => 'yelp', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/yelp.png' ) + ), + array( + 'label' => 'Eventful', + 'name' => 'eventful', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/eventful.png' ) + ), + array( + 'label' => 'Etsy', + 'name' => 'etsy', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/etsy.png' ) + ), + array( + 'label' => 'Daily Motion', + 'name' => 'dailymotion', + 'keywords' => 'job', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/dailymotion.png' ), + + ), + array( + 'label' => 'Tiktok', + 'name' => 'tiktok', + 'keywords' => 'tiktok,video', + 'disabled' => true, + 'image' => esc_url( WPCP_ASSETS_URL . '/images/modules/tiktok.png' ), + ) +) ); +?> + +
            +
            + ', $slug, $slug, $disabled ); + $image_link = $module['image']; + $label = sprintf( '', $slug, $image_link, $module['name'] ); + $wrap_class = $module['disabled'] == true ? 'disabled-item' : ''; + echo sprintf( '
            ' . $input . $label . '
            ' ); + } + ?> +
            +

            + +

            +
            diff --git a/wp-content-pilot/includes/admin/views/metabox/campaign-status.php b/wp-content-pilot/includes/admin/views/metabox/campaign-status.php new file mode 100644 index 0000000..28ca02d --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/campaign-status.php @@ -0,0 +1,52 @@ + 'wpcp_run_campaign', + 'campaign_id' => $post->ID, + 'nonce' => wp_create_nonce( 'wpcp_run_campaign' ) +), esc_url( admin_url( 'admin-post.php' ) ) ); +$last_run = wpcp_get_post_meta( $post->ID, '_last_run', 0 ); +if ( $last_run ) { + $last_run = date_i18n( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), strtotime( $last_run ) ); +} +$campaign_type = wpcp_get_post_meta( $post->ID, '_campaign_type', '' ); +$status = wpcp_get_post_meta( $post->ID, '_campaign_status', '' ); +$last_post = wpcp_get_post_meta( $post->ID, '_last_post', '' ); +if ( ! empty( $last_post ) && $last_post = get_post( $last_post ) ) { + $last_post = get_post( $last_post ); +} +?> +
            +
            + %s', __( 'Status', 'wp-content-pilot' ) ); ?> + +
            + +
            + %s', __( 'Campaign Type', 'wp-content-pilot' ) ); ?> + +
            + +
            + %s', __( 'Last Run', 'wp-content-pilot' ) ); ?> + +
            +
            + %s', __( 'Last Post', 'wp-content-pilot' ) ); ?> + %s', get_permalink( $last_post ), wp_trim_words( get_the_title( $last_post ), '4' ) ); + } + ?> +
            + +
            + %s', __( 'Run Campaign', 'wp-content-pilot' ) ); ?> + + %s', esc_url( $run_campaign_url ), $post->ID, current_time( 'timestamp' ), __( 'Run Now', 'wp-content-pilot' ) ); ?> +
            +
            diff --git a/wp-content-pilot/includes/admin/views/metabox/post-filter.php b/wp-content-pilot/includes/admin/views/metabox/post-filter.php new file mode 100644 index 0000000..69af6b3 --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/post-filter.php @@ -0,0 +1,37 @@ + __( 'Min Words', 'wp-content-pilot' ), + 'name' => '_min_words', + 'type' => 'number', + 'placeholder' => 500, + 'tooltip' => __( 'Min required words, otherwise posts will be rejected. (PRO)', 'wp-content-pilot' ), + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) +) ); + +echo WPCP_HTML::text_input( array( + 'label' => __( 'Required Words', 'wp-content-pilot' ), + 'name' => '_required_words', + 'placeholder' => __( 'Fashion, Secret, Awesome', 'wp-content-pilot' ), + 'tooltip' => __( 'Must contain words, otherwise posts will be rejected. (PRO)', 'wp-content-pilot' ), + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) +) ); + +echo WPCP_HTML::text_input( array( + 'label' => __( 'Banned Words', 'wp-content-pilot' ), + 'name' => '_banned_words', + 'placeholder' => __( 'YouTube, Wikipedia, Google', 'wp-content-pilot' ), + 'tooltip' => __( 'If a post contains the above words it will be rejected. (PRO)', 'wp-content-pilot' ), + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) +) ); diff --git a/wp-content-pilot/includes/admin/views/metabox/post-settings.php b/wp-content-pilot/includes/admin/views/metabox/post-settings.php new file mode 100644 index 0000000..826c277 --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/post-settings.php @@ -0,0 +1,104 @@ + __( 'Post type', 'wp-content-pilot' ), + 'name' => '_post_type', + 'placeholder' => '', + 'double_columns' => true, + 'options' => apply_filters( 'wpcp_campaign_post_types', array( + 'post' => __( 'Post', 'wp-content-pilot' ), + 'page' => __( 'Page', 'wp-content-pilot' ), + ) ), +) ); + +echo WPCP_HTML::select_input( array( + 'label' => __( 'Status', 'wp-content-pilot' ), + 'name' => '_post_status', + 'options' => apply_filters( 'wpcp_campaign_post_statuses', array( + 'publish' => __( 'Published', 'wp-content-pilot' ), + 'private' => __( 'Private', 'wp-content-pilot' ), + 'draft' => __( 'Draft', 'wp-content-pilot' ), + 'pending' => __( 'Pending', 'wp-content-pilot' ), + ) ), + 'required' => true, +) ); + +echo WPCP_HTML::select_input( array( + 'label' => __( 'Post Author', 'wp-content-pilot' ), + 'name' => '_author', + 'placeholder' => '', + 'options' => wpcp_get_authors(), + 'required' => true, + 'tooltip' => __( 'Select author', 'wp-content-pilot' ), +) ); + +//echo WPCP_HTML::text_input( array( +// 'label' => __( 'Post Format', 'wp-content-pilot' ), +// 'name' => '_post_format', +// 'placeholder' => 'audio', +// 'tooltip' => __( 'Select post format', 'wp-content-pilot' ), +//) ); + +echo WPCP_HTML::select_input( array( + 'label' => __( 'Post Category', 'wp-content-pilot' ), + 'name' => '_categories[]', + 'options' => wpcp_get_post_categories(), + 'class' => 'wpcp-select2', + 'tooltip' => __( 'Select category for the post', 'wp-content-pilot' ), + 'attrs' => array( + 'multiple' => 'multiple', + ) +) ); + +echo WPCP_HTML::text_input( array( + 'label' => __( 'Keyword to category', 'wp-content-pilot' ), + 'name' => '_keyword_to_category', + 'required' => true, + 'placeholder' => __( 'Separate with (,) comma', 'wp-content-pilot' ), + 'tooltip' => __( 'This option will search the content for the keyword and if exists, it will assign & set category to the post', 'wp-content-pilot' ), + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) +) ); + +echo WPCP_HTML::select_input( array( + 'label' => __( 'Post Tags', 'wp-content-pilot' ), + 'name' => '_tags[]', + 'class' => 'wpcp-select2', + 'options' => wpcp_get_post_tags(), + 'tooltip' => __( 'Select tags for the post', 'wp-content-pilot' ), + 'attrs' => array( + 'multiple' => 'multiple', + ) +) ); + +echo WPCP_HTML::text_input( array( + 'label' => __( 'Keyword to tag', 'wp-content-pilot' ), + 'name' => '_keyword_to_tag', + 'required' => true, + 'placeholder' => __( 'Separate with (,) comma', 'wp-content-pilot' ), + 'tooltip' => __( 'This option will search the content for the keyword and if exists, it will assign & set tag to the post', 'wp-content-pilot' ), + 'wrapper_class' => 'pro', + 'attrs' => array( + 'disabled' => 'disabled', + ) +) ); + +//echo WPCP_HTML::checkbox_input( array( +// 'label' => __( 'Allow Comment', 'wp-content-pilot' ), +// 'name' => '_allow_comments', +//) ); +// +// +//echo WPCP_HTML::checkbox_input( array( +// 'label' => __( 'Allow pingbacks', 'wp-content-pilot' ), +// 'name' => '_allow_pingbacks', +//) ); +// +//echo WPCP_HTML::checkbox_input( array( +// 'label' => __( 'Add excerpt', 'wp-content-pilot' ), +// 'name' => '_excerpt', +//) ); diff --git a/wp-content-pilot/includes/admin/views/metabox/post-template.php b/wp-content-pilot/includes/admin/views/metabox/post-template.php new file mode 100644 index 0000000..839a453 --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/post-template.php @@ -0,0 +1,48 @@ +ID, '_campaign_type', true ); +if ( empty( $campaign_type ) ) { + return false; +} +$module = content_pilot()->modules()->load( $campaign_type ); + +if(! is_callable(array($module,'get_template_tags' ))){ + _e('Could not find the module', 'wp-content-pilot'); + return false; +} +$template_tags = $module->get_template_tags(); +$default_template = $module->get_default_template(); + +echo sprintf( '', __( 'Spin Article', 'wp-content-pilot' ) ); +echo WPCP_HTML::checkbox_input( array( + 'label' => sprintf(__( 'Spin article using using spinrewriter, if you do not have account please %ssign up%s and set in settings page.', 'wp-content-pilot' ), '', ''), + 'name' => '_spin_article', + 'required' => false, +) ); + +echo WPCP_HTML::text_input( array( + 'label' => __( 'Post Title', 'wp-content-pilot' ), + 'name' => '_post_title', + 'default' => '{title}', + 'required' => true, +) ); +echo WPCP_HTML::textarea_input( array( + 'label' => __( 'Post Template', 'wp-content-pilot' ), + 'name' => '_post_template', + 'default' => $default_template, + 'required' => true, + 'css' => 'min-height:200px;', + 'attributes' => array( + 'rows' => 5, + ), +) ); + +echo '
            '; + +echo sprintf( '', __( 'Supported Tags:', 'wp-content-pilot' ) ); +foreach ( $template_tags as $tag => $description ) { + echo sprintf( '{%s}', wp_kses_post( $description ), $tag ); +} +echo '
            '; diff --git a/wp-content-pilot/includes/admin/views/metabox/spinner-settings.php b/wp-content-pilot/includes/admin/views/metabox/spinner-settings.php new file mode 100644 index 0000000..2bef9fa --- /dev/null +++ b/wp-content-pilot/includes/admin/views/metabox/spinner-settings.php @@ -0,0 +1,132 @@ + +

            + +

            + __( 'Action', 'wp-content-pilot' ), + 'name' => '_spinner_action', + 'options' => array( + 'api_quota' => __( 'Api Quota', 'wp-content-pilot' ), + 'text_with_spintax' => __( 'Text with Spintax', 'wp-content-pilot' ), + 'unique_variation' => __( 'Unique Variation', 'wp-content-pilot' ), + 'unique_variation_from_spintax' => __( 'Unique Variation from Spintax', 'wp-content-pilot' ), + ), + 'class' => 'wpcp-select2', + 'default' => 'unique_variation', + 'desc' => __( 'The action that you\'re requesting from the Spin Rewriter server.', 'wp-content-pilot' ), +) ); +echo WPCP_HTML::select_input( array( + 'label' => __( 'Auto Protected Terms', 'wp-content-pilot' ), + 'name' => '_spinner_auto_protected_terms', + 'options' => array( + false => __( 'No', 'wp-content-pilot' ), + true => __( 'Yes', 'wp-content-pilot' ) + ), + 'default' => false, + 'desc' => __( 'Should Spin Rewriter automatically protect all Capitalized Words except for those in the title of your original text?', 'wp-content-pilot' ) +) ); +echo WPCP_HTML::select_input( array( + 'label' => __( 'Confidence level', 'wp-content-pilot' ), + 'name' => '_spinner_confidence_level', + 'options' => array( + 'low' => __( "Low", 'wp-content-pilot' ), + 'medium' => __( "Medium", 'wp-content-pilot' ), + 'high' => __( 'High', 'wp-content-pilot' ), + ), + 'class' => 'wpcp-select2', + 'default' => 'high', + 'desc' => __( 'The confidence level of the One-Click Rewrite process.', 'wp-content-pilot' ), + +) ); +echo WPCP_HTML::select_input( array( + 'label' => __( 'Nested spintax', 'wp-content-pilot' ), + 'name' => '_spinner_nested_spintax', + 'options' => array( + false => __( "No", 'wp-content-pilot' ), + true => __( "Yes", 'wp-content-pilot' ), + ), + 'class' => 'wpcp-select2', + 'default' => false, + 'desc' => __( 'Should Spin Rewriter also spin single words inside already spun phrases?', 'wp-content-pilot' ), + +) ); +echo WPCP_HTML::select_input( array( + 'label' => __( 'Auto sentences', 'wp-content-pilot' ), + 'name' => '_spinner_auto_sentences', + 'options' => array( + false => __( "No", 'wp-content-pilot' ), + true => __( "Yes", 'wp-content-pilot' ), + ), + 'class' => 'wpcp-select2', + 'default' => false, + 'desc' => __( 'Should Spin Rewriter spin complete sentences?', 'wp-content-pilot' ), + +) ); +echo WPCP_HTML::select_input( array( + 'label' => __( 'Auto paragraphs', 'wp-content-pilot' ), + 'name' => '_spinner_auto_paragraphs', + 'options' => array( + false => __( "No", 'wp-content-pilot' ), + true => __( "Yes", 'wp-content-pilot' ), + ), + 'class' => 'wpcp-select2', + 'default' => false, + 'desc' => __( 'Should Spin Rewriter spin entire paragraphs?', 'wp-content-pilot' ), +) ); +echo WPCP_HTML::select_input( array( + 'label' => __( 'Auto new paragraphs', 'wp-content-pilot' ), + 'name' => '_spinner_auto_new_paragraphs', + 'options' => array( + false => __( "No", 'wp-content-pilot' ), + true => __( "Yes", 'wp-content-pilot' ), + ), + 'class' => 'wpcp-select2', + 'default' => false, + 'desc' => __( 'Should Spin Rewriter automatically write additional paragraphs on its own?', 'wp-content-pilot' ), +) ); +echo WPCP_HTML::select_input( array( + 'label' => __( 'Auto sentence trees', 'wp-content-pilot' ), + 'name' => '_spinner_auto_sentence_trees', + 'options' => array( + false => __( "No", 'wp-content-pilot' ), + true => __( "Yes", 'wp-content-pilot' ), + ), + 'class' => 'wpcp-select2', + 'default' => false, + 'desc' => __( 'Should Spin Rewriter automatically change the entire structure of phrases and sentences?', 'wp-content-pilot' ), +) ); +echo WPCP_HTML::select_input( array( + 'label' => __( 'Use Only Synonyms', 'wp-content-pilot' ), + 'name' => '_spinner_use_only_synonyms', + 'options' => array( + false => __( "No", 'wp-content-pilot' ), + true => __( "Yes", 'wp-content-pilot' ), + ), + 'class' => 'wpcp-select2', + 'default' => false, + 'desc' => __( 'Should Spin Rewriter use only synonyms of the original words instead of the original words themselves?They work along side with action values "unique variation and unique variation from spintax"', 'wp-content-pilot' ), +) ); +echo WPCP_HTML::select_input( array( + 'label' => __( 'Reorder paragraphs', 'wp-content-pilot' ), + 'name' => '_spinner_reorder_paragraphs', + 'options' => array( + false => __( "No", 'wp-content-pilot' ), + true => __( "Yes", 'wp-content-pilot' ), + ), + 'class' => 'wpcp-select2', + 'default' => false, + 'desc' => __( 'Should Spin Rewriter intelligently randomize the order of paragraphs and unordered lists when generating spun text? They work along side with action values "unique variation and unique variation from spintax"', 'wp-content-pilot' ), +) ); + +echo WPCP_HTML::end_double_columns(); diff --git a/wp-content-pilot/includes/admin/views/page/help-page.php b/wp-content-pilot/includes/admin/views/page/help-page.php new file mode 100644 index 0000000..dca9f4e --- /dev/null +++ b/wp-content-pilot/includes/admin/views/page/help-page.php @@ -0,0 +1,366 @@ + WPCP_ASSETS_URL . '/images/help/docs.svg', + 'title' => __( 'Looking for Something?', 'wp-content-pilot' ), + 'desc' => __( 'We have detailed documentation on every aspects of WP Content Pilot.', 'wp-content-pilot' ), + 'url' => 'https://www.pluginever.com/docs/wp-content-pilot/', + 'button_text' => __( 'Visit the Plugin Documentation', 'wp-content-pilot' ), + ], + [ + 'image' => WPCP_ASSETS_URL . '/images/help/support.svg', + 'title' => __( 'Need Any Assistance?', 'wp-content-pilot' ), + 'desc' => __( 'Our EXPERT Support Team is always ready to Help you out.', 'wp-content-pilot' ), + 'url' => 'https://www.pluginever.com/support/', + 'button_text' => __( 'Contact Support', 'wp-content-pilot' ), + ], + [ + 'image' => WPCP_ASSETS_URL . '/images/help/bugs.svg', + 'title' => __( 'Found Any Bugs?', 'wp-content-pilot' ), + 'desc' => __( 'OReport any Bug that you Discovered, Get Instant Solutions.', 'wp-content-pilot' ), + 'url' => 'https://github.com/pluginever/wp-content-pilot', + 'button_text' => __( 'Report to Github', 'wp-content-pilot' ), + ], + [ + 'image' => WPCP_ASSETS_URL . '/images/help/customization.svg', + 'title' => __( 'Require Customization?', 'wp-content-pilot' ), + 'desc' => __( 'We would Love to hear your Integration and Customization Ideas.', 'wp-content-pilot' ), + 'url' => 'https://www.pluginever.com/contact-us/', + 'button_text' => __( 'Contact Our Services', 'wp-content-pilot' ), + ], + [ + 'image' => WPCP_ASSETS_URL . '/images/help/like.svg', + 'title' => __( 'Like The Plugin?', 'wp-content-pilot' ), + 'desc' => __( 'Your Review is very important to us as it helps us to grow more.', 'wp-content-pilot' ), + 'url' => 'https://wordpress.org/support/plugin/wp-content-pilot/reviews/?rate=5#new-post', + 'button_text' => __( 'Review Us on WP.org', 'wp-content-pilot' ), + ], +]; +$features = [ + [ + 'title' => __( 'Article', 'wp-content-pilot' ), + 'desc' => __( 'Article module to auto import articles from web', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Envato', 'wp-content-pilot' ), + 'desc' => __( 'Envato modules to import envato products and affiliation', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Youtube', 'wp-content-pilot' ), + 'desc' => __( 'Youtube module to import youtube videos', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Feed', 'wp-content-pilot' ), + 'desc' => __( 'RSS Feed module to import rss feeds', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Flickr', 'wp-content-pilot' ), + 'desc' => __( 'Flickr module to import images', 'wp-content-pilot' ), + 'free' => true, + 'pro' => true, + ], + [ + 'title' => __( 'Amazon', 'wp-content-pilot' ), + 'desc' => __( 'Amazon module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'ClickBank', 'wp-content-pilot' ), + 'desc' => __( 'ClickBank module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Ebay', 'wp-content-pilot' ), + 'desc' => __( 'Ebay module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Facebook', 'wp-content-pilot' ), + 'desc' => __( 'Facebook module to import Facebook posts, events', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Twitter', 'wp-content-pilot' ), + 'desc' => __( 'Twitter module to import twitter posts', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Walmart', 'wp-content-pilot' ), + 'desc' => __( 'Walmart module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Bestbuy', 'wp-content-pilot' ), + 'desc' => __( 'Bestbuy module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Craiglist', 'wp-content-pilot' ), + 'desc' => __( 'Craiglist module to import Craiglist listings', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Itunes', 'wp-content-pilot' ), + 'desc' => __( 'Itunes module to import products & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'CareerJet', 'wp-content-pilot' ), + 'desc' => __( 'CareerJet module to import jobs & automatic affiliation', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'EzineArticles', 'wp-content-pilot' ), + 'desc' => __( 'EzineArticles module to import articles', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Quora', 'wp-content-pilot' ), + 'desc' => __( 'Quora module to import articles', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Reddit', 'wp-content-pilot' ), + 'desc' => __( 'Reddit module to import articles', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'SoundCloud', 'wp-content-pilot' ), + 'desc' => __( 'SoundCloud module to import audios', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Instagram', 'wp-content-pilot' ), + 'desc' => __( 'Instagram module to import photos', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Pinterest', 'wp-content-pilot' ), + 'desc' => __( 'Pinterest module to import photos', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Tiktok', 'wp-content-pilot' ), + 'desc' => __( 'Tiktok module to import videos', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Search Replace', 'wp-content-pilot' ), + 'desc' => __( 'Automatic search replace with regex support', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Custom Post Meta', 'wp-content-pilot' ), + 'desc' => __( 'Insert custom post meta', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Readability', 'wp-content-pilot' ), + 'desc' => __( 'Readability score controlled posts for clean articles', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Keyword Suggestion', 'wp-content-pilot' ), + 'desc' => __( 'A tool to find a good keyword', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + [ + 'title' => __( 'Translation Support', 'wp-content-pilot' ), + 'desc' => __( 'Translate articles in other language', 'wp-content-pilot' ), + 'free' => false, + 'pro' => true, + ], + +]; +?> + +
            + +

            WP Content Pilot - Help

            + +
            + +
            +
            + Looking for Something? +

            +

            + + +
            +
            + +
            + +
            +

            Are you looking for more? Checkout our Pro Version.

            + + + + + + + + + + + + + + + + + + +
            FeaturesFreePro
            + +

            +
            + + + + + + + + + + + +
            + Get Pro +
            +
            + +
            + diff --git a/wp-content-pilot/includes/admin/views/page/logs-page.php b/wp-content-pilot/includes/admin/views/page/logs-page.php new file mode 100644 index 0000000..b9f0271 --- /dev/null +++ b/wp-content-pilot/includes/admin/views/page/logs-page.php @@ -0,0 +1,20 @@ +prepare_items(); +$base_url = admin_url( 'edit.php?post_type=wp_content_pilot&page=wpcp-logs' ); + +?> +
            +

            +
            +
            + search_box( __( 'Search', 'wp-content-pilot' ), 'eaccounting-contacts' ); ?> + + + views() ?> + display() ?> +
            +
            +
            diff --git a/wp-content-pilot/includes/admin/views/page/status-page.php b/wp-content-pilot/includes/admin/views/page/status-page.php new file mode 100644 index 0000000..9034be8 --- /dev/null +++ b/wp-content-pilot/includes/admin/views/page/status-page.php @@ -0,0 +1,291 @@ +dom' : 'dom'; +$extensions['xml'] = in_array( 'xml', $loaded_extensions ) ? 'xml' : 'xml'; +$extensions['mbstring'] = in_array( 'mbstring', $loaded_extensions ) ? 'mbstring' : 'mbstring'; +$extensions['curl'] = in_array( 'curl', $loaded_extensions ) ? 'curl' : 'curl'; + + +// Test POST requests. +function wpcp_test_post_reponse() { + + $post_response = wp_safe_remote_post( + 'https://www.paypal.com/cgi-bin/webscr', + array( + 'timeout' => 10, + 'httpversion' => '1.1', + 'body' => array( + 'cmd' => '_notify-validate', + ), + ) + ); + + + if ( ! is_wp_error( $post_response ) && $post_response['response']['code'] >= 200 && $post_response['response']['code'] < 300 ) { + return true; + } + + return false; +} + +// Test GET requests. +function wpcp_test_get_reponse() { + + $get_response = wp_safe_remote_get( 'https://woocommerce.com/wc-api/product-key-api?request=ping&network=' . ( is_multisite() ? '1' : '0' ) ); + + if ( ! is_wp_error( $get_response ) && $get_response['response']['code'] >= 200 && $get_response['response']['code'] < 300 ) { + return true; + } + + return false; +} + +$information = array(); + +$information['wordpress_version'] = array( + 'label' => __( 'WordPress version', 'wp-content-pilot' ), + 'value' => ! empty( $wp_version ) ? $wp_version : '-', +); + +$information['wpcp_version'] = array( + 'label' => __( 'WP Content Pilot version', 'wp-content-pilot' ), + 'value' => WPCP_VERSION, +); + +$information['php_version'] = array( + 'label' => __( 'PHP version', 'wp-content-pilot' ), + 'value' => ! empty( PHP_VERSION ) ? PHP_VERSION : '-', +); + +$information['mysql_version'] = array( + 'label' => __( 'MySQL version', 'wp-content-pilot' ), + 'value' => $wpdb->get_var( "SELECT VERSION() AS version" ), +); + +$information['curl_version'] = array( + 'label' => __( 'cURL version', 'wp-content-pilot' ), + 'value' => function_exists( 'curl_version' ) ? curl_version()['version'] : '', +); + +$information['curlssl_version'] = array( + 'label' => __( 'cURL SSL version', 'wp-content-pilot' ), + 'value' => function_exists( 'curl_version' ) ? curl_version()['ssl_version'] : '', +); + +$information['cron_url'] = array( + 'label' => __( 'WP-Cron url', 'wp-content-pilot' ), + 'value' => site_url( 'wp-cron.php' ), +); + +$information['docroot'] = array( + 'label' => __( 'Document root', 'wp-content-pilot' ), + 'value' => $_SERVER['DOCUMENT_ROOT'], +); + +$information['server'] = array( + 'label' => __( 'SERVER', 'wp-content-pilot' ), + 'value' => $_SERVER['SERVER_SOFTWARE'], +); + +$information['os'] = array( + 'label' => __( 'Operating System', 'wp-content-pilot' ), + 'value' => PHP_OS, +); + +$information['maxexectime'] = array( + 'label' => __( 'Maximum execution time', 'wp-content-pilot' ), + 'value' => sprintf( __( '%s seconds', 'wp-content-pilot' ), ini_get( 'max_execution_time' ) ), +); + +$information['language'] = array( + 'label' => __( 'Language', 'wp-content-pilot' ), + 'value' => get_bloginfo( 'language' ), +); + +$information['mysql_encoding'] = array( + 'label' => __( 'MySQL Client encoding', 'wp-content-pilot' ), + 'value' => ! empty( DB_CHARSET ) ? DB_CHARSET : '-', +); + +$information['max_upload'] = array( + 'label' => __( 'Max Upload Size', 'wp-content-pilot' ), + 'value' => ini_get( 'memory_limit' ), +); + +$information['remote_post'] = array( + 'label' => __( 'Remote Post', 'wp-content-pilot' ), + 'value' => wpcp_test_post_reponse() ? 'ON' : 'OFF', +); + +$information['remote_get'] = array( + 'label' => __( 'Remote Get', 'wp-content-pilot' ), + 'value' => wpcp_test_get_reponse() ? 'ON' : 'OFF', +); +global $wpdb; + +$information['links_table'] = array( + 'label' => __( 'Links Table', 'wp-content-pilot' ), + 'value' => !empty($wpdb->query("DESCRIBE {$wpdb->prefix}wpcp_links")) ? 'Yes' : 'No', +); + +$information['log_table'] = array( + 'label' => __( 'Log Table', 'wp-content-pilot' ), + 'value' => !empty($wpdb->query("DESCRIBE {$wpdb->prefix}wpcp_logs")) ? 'Yes' : 'No', +); + +$information['per_minute_cron'] = array( + 'label' => __( 'Per Minute Cron Installed', 'wp-content-pilot' ), + 'value' => !empty(wp_get_scheduled_event('wpcp_per_minute_scheduled_events')) ? 'Yes' : 'No', +); +$cron_status = wpcp_check_cron_status(); +$information['cron_running'] = array( + 'label' => __( 'Is CRON running', 'wp-content-pilot' ), + 'value' => is_wp_error($cron_status)? 'No '.esc_html($cron_status->get_error_message()): 'Yes' , +); + + +$information['loaded_extensions'] = array( + 'label' => __( 'Loaded PHP Extensions', 'wp-content-pilot' ), + 'value' => implode( ', ', $loaded_extensions ), +); +$information['required_extensions'] = array( + 'label' => __( 'Required PHP Extensions', 'wp-content-pilot' ), + 'value' => implode( ', ', $extensions ), +); + +//todo check if wpcp_links and wpcp_logs table exists or not + +/** + * Campagin Information + */ + +$campaigns_info['count'] = array( + 'label' => __( 'Total Campaigns', 'wp-content-pilot' ), +); +$campaigns = $wpdb->get_results( $wpdb->prepare( "SELECT count(pm.post_id) AS total_post,pm.meta_value as status FROM {$wpdb->prefix}posts p INNER JOIN {$wpdb->prefix}postmeta pm ON p.ID = pm.post_id WHERE p.post_type = %s AND p.post_status = %s AND pm.meta_key = %s GROUP BY pm.meta_value", 'wp_content_pilot', 'publish', '_campaign_status' ) ); +$total = 0; +$string = ''; +if ( ! empty( $campaigns ) ) { + foreach ( $campaigns as $campaign ) { + $total += $campaign->total_post; + $string .= "$campaign->status $campaign->total_post, "; + } + $total = sprintf( '%d ( %s)', intval( $total ), sanitize_text_field( $string ) ); +} +$campaigns_info['count']['value'] = $total; + +?> + + +
            + +

            WP Content Pilot', 'wp-content-pilot' ) ?>

            + +
            +

            + + + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

            + +
            + + diff --git a/wp-content-pilot/includes/admin/views/tables/class-wpcp-logs-table.php b/wp-content-pilot/includes/admin/views/tables/class-wpcp-logs-table.php new file mode 100644 index 0000000..82d18bf --- /dev/null +++ b/wp-content-pilot/includes/admin/views/tables/class-wpcp-logs-table.php @@ -0,0 +1,291 @@ + 'log', + 'plural' => 'logs', + 'ajax' => false, + ) ); + $this->base_url = admin_url( 'edit.php?post_type=wp_content_pilot&page=wpcp-logs' ); + $this->process_bulk_action(); + } + + /** + * Setup the final data for the table + * + * @return void + * @since 1.0.0 + */ + public function prepare_items() { + $per_page = $this->per_page; + $columns = $this->get_columns(); + $hidden = array(); + $sortable = $this->get_sortable_columns(); + $this->_column_headers = array( $columns, $hidden, $sortable ); + $this->process_bulk_action(); + $data = $this->get_results(); + $level = isset( $_GET['level'] ) ? $_GET['level'] : 'any'; + + switch ( $level ) { + case 'info': + $total_items = $this->info_count; + break; + case 'warning': + $total_items = $this->warning_count; + break; + case 'error': + $total_items = $this->error_count; + break; + case 'any': + default: + $total_items = $this->total_count; + break; + } + $this->items = $data; + $this->set_pagination_args( array( + 'total_items' => $total_items, + 'per_page' => $per_page, + 'total_pages' => ceil( $total_items / $per_page ), + ) ); + } + + /** + * Message to be displayed when there are no items + * + * @since 1.0.0 + */ + function no_items() { + echo sprintf( __( 'No %s found.', 'wp-content-pilot' ), $this->_args['plural'] ); + } + + /** + * Show the search field + * + * @param string $text Label for the search box + * @param string $input_id ID of the search box + * + * @return void + * @since 1.0.0 + * + */ + public function search_box( $text, $input_id ) { + if ( empty( $_REQUEST['s'] ) && ! $this->has_items() ) { + return; + } + + $input_id = $input_id . '-search-input'; + + if ( ! empty( $_REQUEST['orderby'] ) ) { + echo ''; + } + if ( ! empty( $_REQUEST['order'] ) ) { + echo ''; + } + ?> + + (' . $this->total_count . ')'; + $info_count = ' (' . $this->info_count . ')'; + $warning_count = ' (' . $this->warning_count . ')'; + $error_count = ' (' . $this->error_count . ')'; + $views = array( + 'all' => sprintf( '%s', remove_query_arg( 'level', $this->base_url ), $current === 'all' || $current == '' ? ' class="current"' : '', __( 'All', 'wp-content-pilot' ) . $total_count ), + 'info' => sprintf( '%s', add_query_arg( 'level', 'info', $this->base_url ), $current === 'info' ? ' class="current"' : '', __( 'Info', 'wp-content-pilot' ) . $info_count ), + 'warning' => sprintf( '%s', add_query_arg( 'level', 'warning', $this->base_url ), $current === 'warning' ? ' class="current"' : '', __( 'Warning', 'wp-content-pilot' ) . $warning_count ), + 'error' => sprintf( '%s', add_query_arg( 'level', 'error', $this->base_url ), $current === 'error' ? ' class="current"' : '', __( 'Error', 'wp-content-pilot' ) . $error_count ), + ); + + return $views; + } + + function extra_tablenav( $which ) { + if ( $which == "top" ){ + echo sprintf( '%s', wp_create_nonce('wpcp_clear_logs'), __('Clear Logs', 'wp-content-pilot')); + } + } + + /** + * Retrieve the table columns + * + * @return array $columns Array of all the list table columns + * @since 1.0.0 + */ + public function get_columns() { + $columns = array( + 'campaign' => __( 'Campaign', 'wp-content-pilot' ), + 'level' => __( 'Level', 'wp-content-pilot' ), + 'log' => __( 'Log', 'wp-content-pilot' ), + 'date' => __( 'Date', 'wp-content-pilot' ), + ); + + return $columns; + } + + /** + * Retrieve the table's sortable columns + * + * @return array Array of all the sortable columns + * + * @since 1.0.0 + */ + public function get_sortable_columns() { + return array( + 'campaign' => array( 'camp_id', false ), + 'level' => array( 'level', false ), + 'log' => array( 'message', false ), + 'date' => array( 'created_at', false ) + ); + } + + /** + * @param object $item + * @param string $column_name + * + * @return string; + * @since 1.0.0 + */ + function column_default( $item, $column_name ) { + switch ( $column_name ) { + case 'campaign': + $campaign_id = $item->camp_id ? $item->camp_id : ''; + if ( empty( $campaign_id ) ) { + return '—'; + } + $title = wp_trim_words( get_the_title( $campaign_id ), 2 ); + $url = admin_url( "post.php?post={$item->camp_id}&action=edit" ); + + return sprintf( '#(%d) - %s', $url, $campaign_id, $title ); + break; + case 'level': + return $item->level ? sprintf( '%s', sanitize_html_class( strtolower( $item->level) ), $item->level ) : '—'; + break; + case 'log': + return $item->message ? strip_tags( $item->message ) : '—'; + break; + case 'date': + return $item->created_at; + default: + return '—'; + break; + } + } + + /** + * Process the bulk actions + * + * @return void + * @since 1.0.0 + * + */ + public function process_bulk_action() { + + } + + /** + * Retrieve all the data for all the discount codes + * + * @return array $get_results Array of all the data for the discount codes + * @since 1.0.0 + */ + public function get_results() { + $per_page = $this->per_page; + $orderby = isset( $_GET['orderby'] ) ? sanitize_key( $_GET['orderby'] ) : 'created_at'; + $order = isset( $_GET['order'] ) ? sanitize_key( $_GET['order'] ) : 'DESC'; + $level = isset( $_GET['level'] ) ? sanitize_key( $_GET['level'] ) : ''; + $search = isset( $_GET['s'] ) ? sanitize_text_field( $_GET['s'] ) : null; + + $args = array( + 'per_page' => $per_page, + 'page' => isset( $_GET['paged'] ) ? $_GET['paged'] : 1, + 'orderby' => $orderby, + 'order' => $order, + 'level' => $level, + 'search' => $search + ); + + + if ( array_key_exists( $orderby, $this->get_sortable_columns() ) && 'name' != $orderby ) { + $args['orderby'] = $orderby; + } + + $this->total_count = wpcp_get_logs( array_merge( $args, array( 'level' => '' ) ), true ); + $this->info_count = wpcp_get_logs( array_merge( $args, array( 'level' => 'info' ) ), true ); + $this->warning_count = wpcp_get_logs( array_merge( $args, array( 'level' => 'warning' ) ), true ); + $this->error_count = wpcp_get_logs( array_merge( $args, array( 'level' => 'error' ) ), true ); + + $results = wpcp_get_logs( $args ); + + return $results; + } + +} diff --git a/wp-content-pilot/includes/class-wpcp-dom.php b/wp-content-pilot/includes/class-wpcp-dom.php new file mode 100644 index 0000000..ba1515c --- /dev/null +++ b/wp-content-pilot/includes/class-wpcp-dom.php @@ -0,0 +1,2374 @@ +dom = $dom; + $dom->nodes[] = $this; + } + + function __destruct() { + $this->clear(); + } + + function __toString() { + return $this->outertext(); + } + + function clear() { + $this->dom = null; + $this->nodes = null; + $this->parent = null; + $this->children = null; + } + + function dump( $show_attr = true, $depth = 0 ) { + echo str_repeat( "\t", $depth ) . $this->tag; + + if ( $show_attr && count( $this->attr ) > 0 ) { + echo '('; + foreach ( $this->attr as $k => $v ) { + echo "[$k]=>\"$v\", "; + } + echo ')'; + } + + echo "\n"; + + if ( $this->nodes ) { + foreach ( $this->nodes as $node ) { + $node->dump( $show_attr, $depth + 1 ); + } + } + } + + function dump_node( $echo = true ) { + $string = $this->tag; + + if ( count( $this->attr ) > 0 ) { + $string .= '('; + foreach ( $this->attr as $k => $v ) { + $string .= "[$k]=>\"$v\", "; + } + $string .= ')'; + } + + if ( count( $this->_ ) > 0 ) { + $string .= ' $_ ('; + foreach ( $this->_ as $k => $v ) { + if ( is_array( $v ) ) { + $string .= "[$k]=>("; + foreach ( $v as $k2 => $v2 ) { + $string .= "[$k2]=>\"$v2\", "; + } + $string .= ')'; + } else { + $string .= "[$k]=>\"$v\", "; + } + } + $string .= ')'; + } + + if ( isset( $this->text ) ) { + $string .= " text: ({$this->text})"; + } + + $string .= ' HDOM_INNER_INFO: '; + + if ( isset( $node->_[ HDOM_INFO_INNER ] ) ) { + $string .= "'" . $node->_[ HDOM_INFO_INNER ] . "'"; + } else { + $string .= ' NULL '; + } + + $string .= ' children: ' . count( $this->children ); + $string .= ' nodes: ' . count( $this->nodes ); + $string .= ' tag_start: ' . $this->tag_start; + $string .= "\n"; + + if ( $echo ) { + echo $string; + + return; + } else { + return $string; + } + } + + function parent( $parent = null ) { + // I am SURE that this doesn't work properly. + // It fails to unset the current node from it's current parents nodes or + // children list first. + if ( $parent !== null ) { + $this->parent = $parent; + $this->parent->nodes[] = $this; + $this->parent->children[] = $this; + } + + return $this->parent; + } + + function has_child() { + return ! empty( $this->children ); + } + + function children( $idx = - 1 ) { + if ( $idx === - 1 ) { + return $this->children; + } + + if ( isset( $this->children[ $idx ] ) ) { + return $this->children[ $idx ]; + } + + return null; + } + + function first_child() { + if ( count( $this->children ) > 0 ) { + return $this->children[0]; + } + + return null; + } + + function last_child() { + if ( count( $this->children ) > 0 ) { + return end( $this->children ); + } + + return null; + } + + function next_sibling() { + if ( $this->parent === null ) { + return null; + } + + $idx = array_search( $this, $this->parent->children, true ); + + if ( $idx !== false && isset( $this->parent->children[ $idx + 1 ] ) ) { + return $this->parent->children[ $idx + 1 ]; + } + + return null; + } + + function prev_sibling() { + if ( $this->parent === null ) { + return null; + } + + $idx = array_search( $this, $this->parent->children, true ); + + if ( $idx !== false && $idx > 0 ) { + return $this->parent->children[ $idx - 1 ]; + } + + return null; + } + + function find_ancestor_tag( $tag ) { + global $debug_object; + if ( is_object( $debug_object ) ) { + $debug_object->debug_log_entry( 1 ); + } + + if ( $this->parent === null ) { + return null; + } + + $ancestor = $this->parent; + + while ( ! is_null( $ancestor ) ) { + if ( is_object( $debug_object ) ) { + $debug_object->debug_log( 2, 'Current tag is: ' . $ancestor->tag ); + } + + if ( $ancestor->tag === $tag ) { + break; + } + + $ancestor = $ancestor->parent; + } + + return $ancestor; + } + + function innertext() { + if ( isset( $this->_[ HDOM_INFO_INNER ] ) ) { + return $this->_[ HDOM_INFO_INNER ]; + } + + if ( isset( $this->_[ HDOM_INFO_TEXT ] ) ) { + return $this->dom->restore_noise( $this->_[ HDOM_INFO_TEXT ] ); + } + + $ret = ''; + + foreach ( $this->nodes as $n ) { + $ret .= $n->outertext(); + } + + return $ret; + } + + function outertext() { + global $debug_object; + + if ( is_object( $debug_object ) ) { + $text = ''; + + if ( $this->tag === 'text' ) { + if ( ! empty( $this->text ) ) { + $text = ' with text: ' . $this->text; + } + } + + $debug_object->debug_log( 1, 'Innertext of tag: ' . $this->tag . $text ); + } + + if ( $this->tag === 'root' ) { + return $this->innertext(); + } + + // todo: What is the use of this callback? Remove? + if ( $this->dom && $this->dom->callback !== null ) { + call_user_func_array( $this->dom->callback, array( $this ) ); + } + + if ( isset( $this->_[ HDOM_INFO_OUTER ] ) ) { + return $this->_[ HDOM_INFO_OUTER ]; + } + + if ( isset( $this->_[ HDOM_INFO_TEXT ] ) ) { + return $this->dom->restore_noise( $this->_[ HDOM_INFO_TEXT ] ); + } + + $ret = ''; + + if ( $this->dom && $this->dom->nodes[ $this->_[ HDOM_INFO_BEGIN ] ] ) { + $ret = $this->dom->nodes[ $this->_[ HDOM_INFO_BEGIN ] ]->makeup(); + } + + if ( isset( $this->_[ HDOM_INFO_INNER ] ) ) { + // todo:
            should either never have HDOM_INFO_INNER or always + if ( $this->tag !== 'br' ) { + $ret .= $this->_[ HDOM_INFO_INNER ]; + } + } elseif ( $this->nodes ) { + foreach ( $this->nodes as $n ) { + $ret .= $this->convert_text( $n->outertext() ); + } + } + + if ( isset( $this->_[ HDOM_INFO_END ] ) && $this->_[ HDOM_INFO_END ] != 0 ) { + $ret .= 'tag . '>'; + } + + return $ret; + } + + function text() { + if ( isset( $this->_[ HDOM_INFO_INNER ] ) ) { + return $this->_[ HDOM_INFO_INNER ]; + } + + switch ( $this->nodetype ) { + case HDOM_TYPE_TEXT: + return $this->dom->restore_noise( $this->_[ HDOM_INFO_TEXT ] ); + case HDOM_TYPE_COMMENT: + return ''; + case HDOM_TYPE_UNKNOWN: + return ''; + } + + if ( strcasecmp( $this->tag, 'script' ) === 0 ) { + return ''; + } + if ( strcasecmp( $this->tag, 'style' ) === 0 ) { + return ''; + } + + $ret = ''; + + // In rare cases, (always node type 1 or HDOM_TYPE_ELEMENT - observed + // for some span tags, and some p tags) $this->nodes is set to NULL. + // NOTE: This indicates that there is a problem where it's set to NULL + // without a clear happening. + // WHY is this happening? + if ( ! is_null( $this->nodes ) ) { + foreach ( $this->nodes as $n ) { + // Start paragraph after a blank line + if ( $n->tag === 'p' ) { + $ret = trim( $ret ) . "\n\n"; + } + + $ret .= $this->convert_text( $n->text() ); + + // If this node is a span... add a space at the end of it so + // multiple spans don't run into each other. This is plaintext + // after all. + if ( $n->tag === 'span' ) { + $ret .= $this->dom->default_span_text; + } + } + } + + return $ret; + } + + function xmltext() { + $ret = $this->innertext(); + $ret = str_ireplace( '', '', $ret ); + + return $ret; + } + + function makeup() { + // text, comment, unknown + if ( isset( $this->_[ HDOM_INFO_TEXT ] ) ) { + return $this->dom->restore_noise( $this->_[ HDOM_INFO_TEXT ] ); + } + + $ret = '<' . $this->tag; + $i = - 1; + + foreach ( $this->attr as $key => $val ) { + ++ $i; + + // skip removed attribute + if ( $val === null || $val === false ) { + continue; + } + + $ret .= $this->_[ HDOM_INFO_SPACE ][ $i ][0]; + + //no value attr: nowrap, checked selected... + if ( $val === true ) { + $ret .= $key; + } else { + switch ( $this->_[ HDOM_INFO_QUOTE ][ $i ] ) { + case HDOM_QUOTE_DOUBLE: + $quote = '"'; + break; + case HDOM_QUOTE_SINGLE: + $quote = '\''; + break; + default: + $quote = ''; + } + + $ret .= $key + . $this->_[ HDOM_INFO_SPACE ][ $i ][1] + . '=' + . $this->_[ HDOM_INFO_SPACE ][ $i ][2] + . $quote + . $val + . $quote; + } + } + + $ret = $this->dom->restore_noise( $ret ); + + return $ret . $this->_[ HDOM_INFO_ENDSPACE ] . '>'; + } + + function find( $selector, $idx = null, $lowercase = false ) { + $selectors = $this->parse_selector( $selector ); + if ( ( $count = count( $selectors ) ) === 0 ) { + return array(); + } + $found_keys = array(); + + // find each selector + for ( $c = 0; $c < $count; ++ $c ) { + // The change on the below line was documented on the sourceforge + // code tracker id 2788009 + // used to be: if (($levle=count($selectors[0]))===0) return array(); + if ( ( $levle = count( $selectors[ $c ] ) ) === 0 ) { + return array(); + } + if ( ! isset( $this->_[ HDOM_INFO_BEGIN ] ) ) { + return array(); + } + + $head = array( $this->_[ HDOM_INFO_BEGIN ] => 1 ); + $cmd = ' '; // Combinator + + // handle descendant selectors, no recursive! + for ( $l = 0; $l < $levle; ++ $l ) { + $ret = array(); + + foreach ( $head as $k => $v ) { + $n = ( $k === - 1 ) ? $this->dom->root : $this->dom->nodes[ $k ]; + //PaperG - Pass this optional parameter on to the seek function. + $n->seek( $selectors[ $c ][ $l ], $ret, $cmd, $lowercase ); + } + + $head = $ret; + $cmd = $selectors[ $c ][ $l ][4]; // Next Combinator + } + + foreach ( $head as $k => $v ) { + if ( ! isset( $found_keys[ $k ] ) ) { + $found_keys[ $k ] = 1; + } + } + } + + // sort keys + ksort( $found_keys ); + + $found = array(); + foreach ( $found_keys as $k => $v ) { + $found[] = $this->dom->nodes[ $k ]; + } + + // return nth-element or array + if ( is_null( $idx ) ) { + return $found; + } elseif ( $idx < 0 ) { + $idx = count( $found ) + $idx; + } + + return ( isset( $found[ $idx ] ) ) ? $found[ $idx ] : null; + } + + protected function seek( $selector, &$ret, $parent_cmd, $lowercase = false ) { + global $debug_object; + if ( is_object( $debug_object ) ) { + $debug_object->debug_log_entry( 1 ); + } + + list( $tag, $id, $class, $attributes, $cmb ) = $selector; + $nodes = array(); + + if ( $parent_cmd === ' ' ) { // Descendant Combinator + // Find parent closing tag if the current element doesn't have a closing + // tag (i.e. void element) + $end = ( ! empty( $this->_[ HDOM_INFO_END ] ) ) ? $this->_[ HDOM_INFO_END ] : 0; + if ( $end == 0 ) { + $parent = $this->parent; + while ( ! isset( $parent->_[ HDOM_INFO_END ] ) && $parent !== null ) { + $end -= 1; + $parent = $parent->parent; + } + $end += $parent->_[ HDOM_INFO_END ]; + } + + // Get list of target nodes + $nodes_start = $this->_[ HDOM_INFO_BEGIN ] + 1; + $nodes_count = $end - $nodes_start; + $nodes = array_slice( $this->dom->nodes, $nodes_start, $nodes_count, true ); + } elseif ( $parent_cmd === '>' ) { // Child Combinator + $nodes = $this->children; + } elseif ( $parent_cmd === '+' + && $this->parent + && in_array( $this, $this->parent->children ) ) { // Next-Sibling Combinator + $index = array_search( $this, $this->parent->children, true ) + 1; + if ( $index < count( $this->parent->children ) ) { + $nodes[] = $this->parent->children[ $index ]; + } + } elseif ( $parent_cmd === '~' + && $this->parent + && in_array( $this, $this->parent->children ) ) { // Subsequent Sibling Combinator + $index = array_search( $this, $this->parent->children, true ); + $nodes = array_slice( $this->parent->children, $index ); + } + + // Go throgh each element starting at this element until the end tag + // Note: If this element is a void tag, any previous void element is + // skipped. + foreach ( $nodes as $node ) { + $pass = true; + + // Skip root nodes + if ( ! $node->parent ) { + $pass = false; + } + + // Handle 'text' selector + if ( $pass && $tag === 'text' && $node->tag === 'text' ) { + $ret[ array_search( $node, $this->dom->nodes, true ) ] = 1; + unset( $node ); + continue; + } + + // Skip if node isn't a child node (i.e. text nodes) + if ( $pass && ! in_array( $node, $node->parent->children, true ) ) { + $pass = false; + } + + // Skip if tag doesn't match + if ( $pass && $tag !== '' && $tag !== $node->tag && $tag !== '*' ) { + $pass = false; + } + + // Skip if ID doesn't exist + if ( $pass && $id !== '' && ! isset( $node->attr['id'] ) ) { + $pass = false; + } + + // Check if ID matches + if ( $pass && $id !== '' && isset( $node->attr['id'] ) ) { + // Note: Only consider the first ID (as browsers do) + $node_id = explode( ' ', trim( $node->attr['id'] ) )[0]; + + if ( $id !== $node_id ) { + $pass = false; + } + } + + // Check if all class(es) exist + if ( $pass && $class !== '' && is_array( $class ) && ! empty( $class ) ) { + if ( isset( $node->attr['class'] ) ) { + $node_classes = explode( ' ', $node->attr['class'] ); + + if ( $lowercase ) { + $node_classes = array_map( 'strtolower', $node_classes ); + } + + foreach ( $class as $c ) { + if ( ! in_array( $c, $node_classes ) ) { + $pass = false; + break; + } + } + } else { + $pass = false; + } + } + + // Check attributes + if ( $pass + && $attributes !== '' + && is_array( $attributes ) + && ! empty( $attributes ) ) { + foreach ( $attributes as $a ) { + list ( + $att_name, + $att_expr, + $att_val, + $att_inv, + $att_case_sensitivity + ) = $a; + + // Handle indexing attributes (i.e. "[2]") + /** + * Note: This is not supported by the CSS Standard but adds + * the ability to select items compatible to XPath (i.e. + * the 3rd element within it's parent). + * + * Note: This doesn't conflict with the CSS Standard which + * doesn't work on numeric attributes anyway. + */ + if ( is_numeric( $att_name ) + && $att_expr === '' + && $att_val === '' ) { + $count = 0; + + // Find index of current element in parent + foreach ( $node->parent->children as $c ) { + if ( $c->tag === $node->tag ) { + ++ $count; + } + if ( $c === $node ) { + break; + } + } + + // If this is the correct node, continue with next + // attribute + if ( $count === (int) $att_name ) { + continue; + } + } + + // Check attribute availability + if ( $att_inv ) { // Attribute should NOT be set + if ( isset( $node->attr[ $att_name ] ) ) { + $pass = false; + break; + } + } else { // Attribute should be set + // todo: "plaintext" is not a valid CSS selector! + if ( $att_name !== 'plaintext' + && ! isset( $node->attr[ $att_name ] ) ) { + $pass = false; + break; + } + } + + // Continue with next attribute if expression isn't defined + if ( $att_expr === '' ) { + continue; + } + + // If they have told us that this is a "plaintext" + // search then we want the plaintext of the node - right? + // todo "plaintext" is not a valid CSS selector! + if ( $att_name === 'plaintext' ) { + $nodeKeyValue = $node->text(); + } else { + $nodeKeyValue = $node->attr[ $att_name ]; + } + + if ( is_object( $debug_object ) ) { + $debug_object->debug_log( 2, + 'testing node: ' + . $node->tag + . ' for attribute: ' + . $att_name + . $att_expr + . $att_val + . ' where nodes value is: ' + . $nodeKeyValue + ); + } + + // If lowercase is set, do a case insensitive test of + // the value of the selector. + if ( $lowercase ) { + $check = $this->match( + $att_expr, + strtolower( $att_val ), + strtolower( $nodeKeyValue ), + $att_case_sensitivity + ); + } else { + $check = $this->match( + $att_expr, + $att_val, + $nodeKeyValue, + $att_case_sensitivity + ); + } + + if ( is_object( $debug_object ) ) { + $debug_object->debug_log( 2, + 'after match: ' + . ( $check ? 'true' : 'false' ) + ); + } + + if ( ! $check ) { + $pass = false; + break; + } + } + } + + // Found a match. Add to list and clear node + if ( $pass ) { + $ret[ $node->_[ HDOM_INFO_BEGIN ] ] = 1; + } + unset( $node ); + } + // It's passed by reference so this is actually what this function returns. + if ( is_object( $debug_object ) ) { + $debug_object->debug_log( 1, 'EXIT - ret: ', $ret ); + } + } + + protected function match( $exp, $pattern, $value, $case_sensitivity ) { + global $debug_object; + if ( is_object( $debug_object ) ) { + $debug_object->debug_log_entry( 1 ); + } + + if ( $case_sensitivity === 'i' ) { + $pattern = strtolower( $pattern ); + $value = strtolower( $value ); + } + + switch ( $exp ) { + case '=': + return ( $value === $pattern ); + case '!=': + return ( $value !== $pattern ); + case '^=': + return preg_match( '/^' . preg_quote( $pattern, '/' ) . '/', $value ); + case '$=': + return preg_match( '/' . preg_quote( $pattern, '/' ) . '$/', $value ); + case '*=': + return preg_match( '/' . preg_quote( $pattern, '/' ) . '/', $value ); + case '|=': + /** + * [att|=val] + * + * Represents an element with the att attribute, its value + * either being exactly "val" or beginning with "val" + * immediately followed by "-" (U+002D). + */ + return strpos( $value, $pattern ) === 0; + case '~=': + /** + * [att~=val] + * + * Represents an element with the att attribute whose value is a + * whitespace-separated list of words, one of which is exactly + * "val". If "val" contains whitespace, it will never represent + * anything (since the words are separated by spaces). Also if + * "val" is the empty string, it will never represent anything. + */ + return in_array( $pattern, explode( ' ', trim( $value ) ), true ); + } + + return false; + } + + protected function parse_selector( $selector_string ) { + global $debug_object; + if ( is_object( $debug_object ) ) { + $debug_object->debug_log_entry( 1 ); + } + + /** + * Pattern of CSS selectors, modified from mootools (https://mootools.net/) + * + * Paperg: Add the colon to the attribute, so that it properly finds + * like google does. + * + * Note: if you try to look at this attribute, you MUST use getAttribute + * since $dom->x:y will fail the php syntax check. + * + * Notice the \[ starting the attribute? and the @? following? This + * implies that an attribute can begin with an @ sign that is not + * captured. This implies that an html attribute specifier may start + * with an @ sign that is NOT captured by the expression. Farther study + * is required to determine of this should be documented or removed. + * + * Matches selectors in this order: + * + * [0] - full match + * + * [1] - tag name + * ([\w:\*-]*) + * Matches the tag name consisting of zero or more words, colons, + * asterisks and hyphens. + * + * [2] - id name + * (?:\#([\w-]+)) + * Optionally matches a id name, consisting of an "#" followed by + * the id name (one or more words and hyphens). + * + * [3] - class names (including dots) + * (?:\.([\w\.-]+))? + * Optionally matches a list of classs, consisting of an "." + * followed by the class name (one or more words and hyphens) + * where multiple classes can be chained (i.e. ".foo.bar.baz") + * + * [4] - attributes + * ((?:\[@?(?:!?[\w:-]+)(?:(?:[!*^$|~]?=)[\"']?(?:.*?)[\"']?)?(?:\s*?(?:[iIsS])?)?\])+)? + * Optionally matches the attributes list + * + * [5] - separator + * ([\/, >+~]+) + * Matches the selector list separator + */ + // phpcs:ignore Generic.Files.LineLength + $pattern = "/([\w:\*-]*)(?:\#([\w-]+))?(?:|\.([\w\.-]+))?((?:\[@?(?:!?[\w:-]+)(?:(?:[!*^$|~]?=)[\"']?(?:.*?)[\"']?)?(?:\s*?(?:[iIsS])?)?\])+)?([\/, >+~]+)/is"; + + preg_match_all( + $pattern, + trim( $selector_string ) . ' ', // Add final ' ' as pseudo separator + $matches, + PREG_SET_ORDER + ); + + if ( is_object( $debug_object ) ) { + $debug_object->debug_log( 2, 'Matches Array: ', $matches ); + } + + $selectors = array(); + $result = array(); + + foreach ( $matches as $m ) { + $m[0] = trim( $m[0] ); + + // Skip NoOps + if ( $m[0] === '' || $m[0] === '/' || $m[0] === '//' ) { + continue; + } + + // Convert to lowercase + if ( $this->dom->lowercase ) { + $m[1] = strtolower( $m[1] ); + } + + // Extract classes + if ( $m[3] !== '' ) { + $m[3] = explode( '.', $m[3] ); + } + + /* Extract attributes (pattern based on the pattern above!) + + * [0] - full match + * [1] - attribute name + * [2] - attribute expression + * [3] - attribute value + * [4] - case sensitivity + * + * Note: Attributes can be negated with a "!" prefix to their name + */ + if ( $m[4] !== '' ) { + preg_match_all( + "/\[@?(!?[\w:-]+)(?:([!*^$|~]?=)[\"']?(.*?)[\"']?)?(?:\s+?([iIsS])?)?\]/is", + trim( $m[4] ), + $attributes, + PREG_SET_ORDER + ); + + // Replace element by array + $m[4] = array(); + + foreach ( $attributes as $att ) { + // Skip empty matches + if ( trim( $att[0] ) === '' ) { + continue; + } + + $inverted = ( isset( $att[1][0] ) && $att[1][0] === '!' ); + $m[4][] = array( + $inverted ? substr( $att[1], 1 ) : $att[1], // Name + ( isset( $att[2] ) ) ? $att[2] : '', // Expression + ( isset( $att[3] ) ) ? $att[3] : '', // Value + $inverted, // Inverted Flag + ( isset( $att[4] ) ) ? strtolower( $att[4] ) : '', // Case-Sensitivity + ); + } + } + + // Sanitize Separator + if ( $m[5] !== '' && trim( $m[5] ) === '' ) { // Descendant Separator + $m[5] = ' '; + } else { // Other Separator + $m[5] = trim( $m[5] ); + } + + // Clear Separator if it's a Selector List + if ( $is_list = ( $m[5] === ',' ) ) { + $m[5] = ''; + } + + // Remove full match before adding to results + array_shift( $m ); + $result[] = $m; + + if ( $is_list ) { // Selector List + $selectors[] = $result; + $result = array(); + } + } + + if ( count( $result ) > 0 ) { + $selectors[] = $result; + } + + return $selectors; + } + + function __get( $name ) { + if ( isset( $this->attr[ $name ] ) ) { + return $this->convert_text( $this->attr[ $name ] ); + } + switch ( $name ) { + case 'outertext': + return $this->outertext(); + case 'innertext': + return $this->innertext(); + case 'plaintext': + return $this->text(); + case 'xmltext': + return $this->xmltext(); + default: + return array_key_exists( $name, $this->attr ); + } + } + + function __set( $name, $value ) { + global $debug_object; + if ( is_object( $debug_object ) ) { + $debug_object->debug_log_entry( 1 ); + } + + switch ( $name ) { + case 'outertext': + return $this->_[ HDOM_INFO_OUTER ] = $value; + case 'innertext': + if ( isset( $this->_[ HDOM_INFO_TEXT ] ) ) { + return $this->_[ HDOM_INFO_TEXT ] = $value; + } + + return $this->_[ HDOM_INFO_INNER ] = $value; + } + + if ( ! isset( $this->attr[ $name ] ) ) { + $this->_[ HDOM_INFO_SPACE ][] = array( ' ', '', '' ); + $this->_[ HDOM_INFO_QUOTE ][] = HDOM_QUOTE_DOUBLE; + } + + $this->attr[ $name ] = $value; + } + + function __isset( $name ) { + switch ( $name ) { + case 'outertext': + return true; + case 'innertext': + return true; + case 'plaintext': + return true; + } + + //no value attr: nowrap, checked selected... + return ( array_key_exists( $name, $this->attr ) ) ? true : isset( $this->attr[ $name ] ); + } + + function __unset( $name ) { + if ( isset( $this->attr[ $name ] ) ) { + unset( $this->attr[ $name ] ); + } + } + + function convert_text( $text ) { + global $debug_object; + if ( is_object( $debug_object ) ) { + $debug_object->debug_log_entry( 1 ); + } + + $converted_text = $text; + + $sourceCharset = ''; + $targetCharset = ''; + + if ( $this->dom ) { + $sourceCharset = strtoupper( $this->dom->_charset ); + $targetCharset = strtoupper( $this->dom->_target_charset ); + } + + if ( is_object( $debug_object ) ) { + $debug_object->debug_log( 3, + 'source charset: ' + . $sourceCharset + . ' target charaset: ' + . $targetCharset + ); + } + + if ( ! empty( $sourceCharset ) + && ! empty( $targetCharset ) + && ( strcasecmp( $sourceCharset, $targetCharset ) != 0 ) ) { + // Check if the reported encoding could have been incorrect and the text is actually already UTF-8 + if ( ( strcasecmp( $targetCharset, 'UTF-8' ) == 0 ) + && ( $this->is_utf8( $text ) ) ) { + $converted_text = $text; + } else { + $converted_text = iconv( $sourceCharset, $targetCharset, $text ); + } + } + + // Lets make sure that we don't have that silly BOM issue with any of the utf-8 text we output. + if ( $targetCharset === 'UTF-8' ) { + if ( substr( $converted_text, 0, 3 ) === "\xef\xbb\xbf" ) { + $converted_text = substr( $converted_text, 3 ); + } + + if ( substr( $converted_text, - 3 ) === "\xef\xbb\xbf" ) { + $converted_text = substr( $converted_text, 0, - 3 ); + } + } + + return $converted_text; + } + + static function is_utf8( $str ) { + $c = 0; + $b = 0; + $bits = 0; + $len = strlen( $str ); + for ( $i = 0; $i < $len; $i ++ ) { + $c = ord( $str[ $i ] ); + if ( $c > 128 ) { + if ( ( $c >= 254 ) ) { + return false; + } elseif ( $c >= 252 ) { + $bits = 6; + } elseif ( $c >= 248 ) { + $bits = 5; + } elseif ( $c >= 240 ) { + $bits = 4; + } elseif ( $c >= 224 ) { + $bits = 3; + } elseif ( $c >= 192 ) { + $bits = 2; + } else { + return false; + } + if ( ( $i + $bits ) > $len ) { + return false; + } + while ( $bits > 1 ) { + $i ++; + $b = ord( $str[ $i ] ); + if ( $b < 128 || $b > 191 ) { + return false; + } + $bits --; + } + } + } + + return true; + } + + function get_display_size() { + global $debug_object; + + $width = - 1; + $height = - 1; + + if ( $this->tag !== 'img' ) { + return false; + } + + // See if there is aheight or width attribute in the tag itself. + if ( isset( $this->attr['width'] ) ) { + $width = $this->attr['width']; + } + + if ( isset( $this->attr['height'] ) ) { + $height = $this->attr['height']; + } + + // Now look for an inline style. + if ( isset( $this->attr['style'] ) ) { + // Thanks to user gnarf from stackoverflow for this regular expression. + $attributes = array(); + + preg_match_all( + '/([\w-]+)\s*:\s*([^;]+)\s*;?/', + $this->attr['style'], + $matches, + PREG_SET_ORDER + ); + + foreach ( $matches as $match ) { + $attributes[ $match[1] ] = $match[2]; + } + + // If there is a width in the style attributes: + if ( isset( $attributes['width'] ) && $width == - 1 ) { + // check that the last two characters are px (pixels) + if ( strtolower( substr( $attributes['width'], - 2 ) ) === 'px' ) { + $proposed_width = substr( $attributes['width'], 0, - 2 ); + // Now make sure that it's an integer and not something stupid. + if ( filter_var( $proposed_width, FILTER_VALIDATE_INT ) ) { + $width = $proposed_width; + } + } + } + + // If there is a width in the style attributes: + if ( isset( $attributes['height'] ) && $height == - 1 ) { + // check that the last two characters are px (pixels) + if ( strtolower( substr( $attributes['height'], - 2 ) ) == 'px' ) { + $proposed_height = substr( $attributes['height'], 0, - 2 ); + // Now make sure that it's an integer and not something stupid. + if ( filter_var( $proposed_height, FILTER_VALIDATE_INT ) ) { + $height = $proposed_height; + } + } + } + + } + + // Future enhancement: + // Look in the tag to see if there is a class or id specified that has + // a height or width attribute to it. + + // Far future enhancement + // Look at all the parent tags of this image to see if they specify a + // class or id that has an img selector that specifies a height or width + // Note that in this case, the class or id will have the img subselector + // for it to apply to the image. + + // ridiculously far future development + // If the class or id is specified in a SEPARATE css file thats not on + // the page, go get it and do what we were just doing for the ones on + // the page. + + $result = array( + 'height' => $height, + 'width' => $width + ); + + return $result; + } + + function save( $filepath = '' ) { + $ret = $this->outertext(); + + if ( $filepath !== '' ) { + file_put_contents( $filepath, $ret, LOCK_EX ); + } + + return $ret; + } + + function addClass( $class ) { + if ( is_string( $class ) ) { + $class = explode( ' ', $class ); + } + + if ( is_array( $class ) ) { + foreach ( $class as $c ) { + if ( isset( $this->class ) ) { + if ( $this->hasClass( $c ) ) { + continue; + } else { + $this->class .= ' ' . $c; + } + } else { + $this->class = $c; + } + } + } else { + if ( is_object( $debug_object ) ) { + $debug_object->debug_log( 2, 'Invalid type: ', gettype( $class ) ); + } + } + } + + function hasClass( $class ) { + if ( is_string( $class ) ) { + if ( isset( $this->class ) ) { + return in_array( $class, explode( ' ', $this->class ), true ); + } + } else { + if ( is_object( $debug_object ) ) { + $debug_object->debug_log( 2, 'Invalid type: ', gettype( $class ) ); + } + } + + return false; + } + + function removeClass( $class = null ) { + if ( ! isset( $this->class ) ) { + return; + } + + if ( is_null( $class ) ) { + $this->removeAttribute( 'class' ); + + return; + } + + if ( is_string( $class ) ) { + $class = explode( ' ', $class ); + } + + if ( is_array( $class ) ) { + $class = array_diff( explode( ' ', $this->class ), $class ); + if ( empty( $class ) ) { + $this->removeAttribute( 'class' ); + } else { + $this->class = implode( ' ', $class ); + } + } + } + + function getAllAttributes() { + return $this->attr; + } + + function getAttribute( $name ) { + return $this->__get( $name ); + } + + function setAttribute( $name, $value ) { + $this->__set( $name, $value ); + } + + function hasAttribute( $name ) { + return $this->__isset( $name ); + } + + function removeAttribute( $name ) { + $this->__set( $name, null ); + } + + function remove() { + if ( $this->parent ) { + $this->parent->removeChild( $this ); + } + } + + function removeChild( $node ) { + $nidx = array_search( $node, $this->nodes, true ); + $cidx = array_search( $node, $this->children, true ); + $didx = array_search( $node, $this->dom->nodes, true ); + + if ( $nidx !== false && $cidx !== false && $didx !== false ) { + + foreach ( $node->children as $child ) { + $node->removeChild( $child ); + } + + foreach ( $node->nodes as $entity ) { + $enidx = array_search( $entity, $node->nodes, true ); + $edidx = array_search( $entity, $node->dom->nodes, true ); + + if ( $enidx !== false && $edidx !== false ) { + unset( $node->nodes[ $enidx ] ); + unset( $node->dom->nodes[ $edidx ] ); + } + } + + unset( $this->nodes[ $nidx ] ); + unset( $this->children[ $cidx ] ); + unset( $this->dom->nodes[ $didx ] ); + + $node->clear(); + + } + } + + function getElementById( $id ) { + return $this->find( "#$id", 0 ); + } + + function getElementsById( $id, $idx = null ) { + return $this->find( "#$id", $idx ); + } + + function getElementByTagName( $name ) { + return $this->find( $name, 0 ); + } + + function getElementsByTagName( $name, $idx = null ) { + return $this->find( $name, $idx ); + } + + function parentNode() { + return $this->parent(); + } + + function childNodes( $idx = - 1 ) { + return $this->children( $idx ); + } + + function firstChild() { + return $this->first_child(); + } + + function lastChild() { + return $this->last_child(); + } + + function nextSibling() { + return $this->next_sibling(); + } + + function previousSibling() { + return $this->prev_sibling(); + } + + function hasChildNodes() { + return $this->has_child(); + } + + function nodeName() { + return $this->tag; + } + + function appendChild( $node ) { + $node->parent( $this ); + + return $node; + } + + } + + class simple_html_dom { + public $root = null; + public $nodes = array(); + public $callback = null; + public $lowercase = false; + public $original_size; + public $size; + + protected $pos; + protected $doc; + protected $char; + + protected $cursor; + protected $parent; + protected $noise = array(); + protected $token_blank = " \t\r\n"; + protected $token_equal = ' =/>'; + protected $token_slash = " />\r\n\t"; + protected $token_attr = ' >'; + + public $_charset = ''; + public $_target_charset = ''; + + protected $default_br_text = ''; + + public $default_span_text = ''; + + protected $self_closing_tags = array( + 'area' => 1, + 'base' => 1, + 'br' => 1, + 'col' => 1, + 'embed' => 1, + 'hr' => 1, + 'img' => 1, + 'input' => 1, + 'link' => 1, + 'meta' => 1, + 'param' => 1, + 'source' => 1, + 'track' => 1, + 'wbr' => 1 + ); + protected $block_tags = array( + 'body' => 1, + 'div' => 1, + 'form' => 1, + 'root' => 1, + 'span' => 1, + 'table' => 1 + ); + protected $optional_closing_tags = array( + // Not optional, see + // https://www.w3.org/TR/html/textlevel-semantics.html#the-b-element + 'b' => array( 'b' => 1 ), + 'dd' => array( 'dd' => 1, 'dt' => 1 ), + // Not optional, see + // https://www.w3.org/TR/html/grouping-content.html#the-dl-element + 'dl' => array( 'dd' => 1, 'dt' => 1 ), + 'dt' => array( 'dd' => 1, 'dt' => 1 ), + 'li' => array( 'li' => 1 ), + 'optgroup' => array( 'optgroup' => 1, 'option' => 1 ), + 'option' => array( 'optgroup' => 1, 'option' => 1 ), + 'p' => array( 'p' => 1 ), + 'rp' => array( 'rp' => 1, 'rt' => 1 ), + 'rt' => array( 'rp' => 1, 'rt' => 1 ), + 'td' => array( 'td' => 1, 'th' => 1 ), + 'th' => array( 'td' => 1, 'th' => 1 ), + 'tr' => array( 'td' => 1, 'th' => 1, 'tr' => 1 ), + ); + + function __construct( + $str = null, + $lowercase = true, + $forceTagsClosed = true, + $target_charset = DEFAULT_TARGET_CHARSET, + $stripRN = true, + $defaultBRText = DEFAULT_BR_TEXT, + $defaultSpanText = DEFAULT_SPAN_TEXT, + $options = 0 + ) { + if ( $str ) { + if ( preg_match( '/^http:\/\//i', $str ) || is_file( $str ) ) { + $this->load_file( $str ); + } else { + $this->load( + $str, + $lowercase, + $stripRN, + $defaultBRText, + $defaultSpanText, + $options + ); + } + } + // Forcing tags to be closed implies that we don't trust the html, but + // it can lead to parsing errors if we SHOULD trust the html. + if ( ! $forceTagsClosed ) { + $this->optional_closing_array = array(); + } + + $this->_target_charset = $target_charset; + } + + function __destruct() { + $this->clear(); + } + + function load( + $str, + $lowercase = true, + $stripRN = true, + $defaultBRText = DEFAULT_BR_TEXT, + $defaultSpanText = DEFAULT_SPAN_TEXT, + $options = 0 + ) { + global $debug_object; + + // prepare + $this->prepare( $str, $lowercase, $defaultBRText, $defaultSpanText ); + + // Per sourceforge http://sourceforge.net/tracker/?func=detail&aid=2949097&group_id=218559&atid=1044037 + // Script tags removal now preceeds style tag removal. + // strip out !is' => '', + // remove obvious styles + '!]*>(.*?)!is' => '', + // remove spans as we redefine styles and they're probably special-styled + '!]*>!is' => '', + // HACK: firewall-filtered content + '!]*>\s*\[AD\]\s*!is' => '', + // HACK: replace linebreaks plus br's with p's + '!(]*>[ \r\n\s]*){2,}!i' => '

            ', + // replace noscripts + //'!!is' => '', + // replace fonts to spans + '!<(/?)font[^>]*>!is' => '<\\1span>', + ]; + // output HTML filters + protected $post_filters = [ + // replace excessive br's + '/\s*

            ']+/>!is' => '', + // remove all attributes on text tags + //'!<(\s*/?\s*(?:blockquote|br|hr|code|div|article|span|footer|aside|p|pre|dl|li|ul|ol)) [^>]+>!is' => "<\\1>", + //single newlines cleanup + "/\n+/" => "\n", + // modern web... + '!]*>\s* '\s*!is' => '', + '!<[hb]r>!is' => '<\\1 />', + ]; + + /** + * Create instance of Readability. + * + * @param string $html UTF-8 encoded string + * @param string $url URL associated with HTML (for footnotes) + * @param string $parser Which parser to use for turning raw HTML into a DOMDocument + * @param bool $use_tidy Use tidy + */ + public function __construct( $html, $url = null, $parser = 'libxml', $use_tidy = true ) { + $this->url = $url; + $this->html = $html; + $this->parser = $parser; + $this->useTidy = $use_tidy && \function_exists( 'tidy_parse_string' ); + + $this->loadHtml(); + } + + public function setLogger( LoggerInterface $logger ) { + $this->logger = $logger; + } + + /** + * Get article title element. + * + * @return \DOMElement + */ + public function getTitle() { + return $this->articleTitle; + } + + /** + * Get article content element. + * + * @return \DOMElement + */ + public function getContent() { + return $this->articleContent; + } + + /** + * Add pre filter for raw input HTML processing. + * + * @param string $filter RegExp for replace + * @param string $replacer Replacer + */ + public function addPreFilter( $filter, $replacer = '' ) { + $this->pre_filters[ $filter ] = $replacer; + } + + /** + * Add post filter for raw output HTML processing. + * + * @param string $filter RegExp for replace + * @param string $replacer Replacer + */ + public function addPostFilter( $filter, $replacer = '' ) { + $this->post_filters[ $filter ] = $replacer; + } + + /** + * Runs readability. + * + * Workflow: + * 1. Prep the document by removing script tags, css, etc. + * 2. Build readability's DOM tree. + * 3. Grab the article content from the current dom tree. + * 4. Replace the current DOM tree with the new one. + * 5. Read peacefully. + * + * @return bool true if we found content, false otherwise + */ + public function init() { + if ( ! isset( $this->dom->documentElement ) ) { + return false; + } + + // Assume successful outcome + $this->success = true; + $bodyElems = $this->dom->getElementsByTagName( 'body' ); + + // WTF multiple body nodes? + if ( null === $this->bodyCache ) { + $this->bodyCache = ''; + foreach ( $bodyElems as $bodyNode ) { + $this->bodyCache .= trim( $bodyNode->getInnerHTML() ); + } + } + + if ( $bodyElems->length > 0 && null === $this->body ) { + $this->body = $bodyElems->item( 0 ); + } + + $this->prepDocument(); + + // Build readability's DOM tree. + $overlay = $this->dom->createElement( 'div' ); + $innerDiv = $this->dom->createElement( 'div' ); + $articleTitle = $this->getArticleTitle(); + $articleContent = $this->grabArticle(); + + if ( ! $articleContent ) { + $this->success = false; + $articleContent = $this->dom->createElement( 'div' ); + $articleContent->setAttribute( 'class', 'readability-content' ); + $articleContent->setInnerHtml( '

            Sorry, Readability was unable to parse this page for content.

            ' ); + } + + $overlay->setAttribute( 'class', 'readOverlay' ); + $innerDiv->setAttribute( 'class', 'readInner' ); + + // Glue the structure of our document together. + $innerDiv->appendChild( $articleTitle ); + $innerDiv->appendChild( $articleContent ); + $overlay->appendChild( $innerDiv ); + + // Clear the old HTML, insert the new content. + $this->body->setInnerHtml( '' ); + $this->body->appendChild( $overlay ); + $this->body->removeAttribute( 'style' ); + $this->postProcessContent( $articleContent ); + + // Set title and content instance variables. + $this->articleTitle = $articleTitle; + $this->articleContent = $articleContent; + + return $this->success; + } + + /** + * Run any post-process modifications to article content as necessary. + */ + public function postProcessContent( \DOMElement $articleContent ) { + if ( $this->convertLinksToFootnotes && ! preg_match( '/\bwiki/', $this->url ) ) { + $this->addFootnotes( $articleContent ); + } + } + + /** + * For easier reading, convert this document to have footnotes at the bottom rather than inline links. + * + * @see http://www.roughtype.com/archives/2010/05/experiments_in.php + */ + public function addFootnotes( \DOMElement $articleContent ) { + $footnotesWrapper = $this->dom->createElement( 'footer' ); + $footnotesWrapper->setAttribute( 'class', 'readability-footnotes' ); + $footnotesWrapper->setInnerHtml( '

            References

            ' ); + $articleFootnotes = $this->dom->createElement( 'ol' ); + $articleFootnotes->setAttribute( 'class', 'readability-footnotes-list' ); + $footnotesWrapper->appendChild( $articleFootnotes ); + $articleLinks = $articleContent->getElementsByTagName( 'a' ); + $linkCount = 0; + + for ( $i = 0; $i < $articleLinks->length; ++ $i ) { + $articleLink = $articleLinks->item( $i ); + $footnoteLink = $articleLink->cloneNode( true ); + $refLink = $this->dom->createElement( 'a' ); + $footnote = $this->dom->createElement( 'li' ); + $linkDomain = @parse_url( $footnoteLink->getAttribute( 'href' ), PHP_URL_HOST ); + if ( ! $linkDomain && isset( $this->url ) ) { + $linkDomain = @parse_url( $this->url, PHP_URL_HOST ); + } + + $linkText = $this->getInnerText( $articleLink ); + if ( ( false !== strpos( $articleLink->getAttribute( 'class' ), 'readability-DoNotFootnote' ) ) || preg_match( $this->regexps['skipFootnoteLink'], $linkText ) ) { + continue; + } + + ++ $linkCount; + + // Add a superscript reference after the article link. + $refLink->setAttribute( 'href', '#readabilityFootnoteLink-' . $linkCount ); + $refLink->setInnerHtml( '[' . $linkCount . ']' ); + $refLink->setAttribute( 'class', 'readability-DoNotFootnote' ); + $refLink->setAttribute( 'style', 'color: inherit;' ); + + if ( $articleLink->parentNode->lastChild->isSameNode( $articleLink ) ) { + $articleLink->parentNode->appendChild( $refLink ); + } else { + $articleLink->parentNode->insertBefore( $refLink, $articleLink->nextSibling ); + } + + $articleLink->setAttribute( 'style', 'color: inherit; text-decoration: none;' ); + $articleLink->setAttribute( 'name', 'readabilityLink-' . $linkCount ); + $footnote->setInnerHtml( '^ ' ); + $footnoteLink->setInnerHtml( ( '' !== $footnoteLink->getAttribute( 'title' ) ? $footnoteLink->getAttribute( 'title' ) : $linkText ) ); + $footnoteLink->setAttribute( 'name', 'readabilityFootnoteLink-' . $linkCount ); + $footnote->appendChild( $footnoteLink ); + + if ( $linkDomain ) { + $footnote->setInnerHtml( $footnote->getInnerHTML() . ' (' . $linkDomain . ')' ); + } + $articleFootnotes->appendChild( $footnote ); + } + + if ( $linkCount > 0 ) { + $articleContent->appendChild( $footnotesWrapper ); + } + } + + /** + * Prepare the article node for display. Clean out any inline styles, + * iframes, forms, strip extraneous

            tags, etc. + */ + public function prepArticle( \DOMNode $articleContent ) { + if ( ! $articleContent instanceof \DOMElement ) { + return; + } + +// error_log( $this->lightClean ? 'Light clean enabled.' : 'Standard clean enabled.' ); + + $this->cleanStyles( $articleContent ); + $this->killBreaks( $articleContent ); + + $xpath = new \DOMXPath( $articleContent->ownerDocument ); + + if ( $this->revertForcedParagraphElements ) { + /* + * Reverts P elements with class 'readability-styled' to text nodes: + * which is what they were before. + */ + $elems = $xpath->query( './/p[@data-readability-styled]', $articleContent ); + for ( $i = $elems->length - 1; $i >= 0; -- $i ) { + $e = $elems->item( $i ); + $e->parentNode->replaceChild( $articleContent->ownerDocument->createTextNode( $e->textContent ), $e ); + } + } + + // Remove service data-candidate attribute. + $elems = $xpath->query( './/*[@data-candidate]', $articleContent ); + for ( $i = $elems->length - 1; $i >= 0; -- $i ) { + $elems->item( $i )->removeAttribute( 'data-candidate' ); + } + + // Clean out junk from the article content. + $this->clean( $articleContent, 'input' ); + $this->clean( $articleContent, 'button' ); + $this->clean( $articleContent, 'nav' ); + $this->clean( $articleContent, 'object' ); + $this->clean( $articleContent, 'iframe' ); + $this->clean( $articleContent, 'canvas' ); + $this->clean( $articleContent, 'h1' ); + + /* + * If there is only one h2, they are probably using it as a main header, so remove it since we + * already have a header. + */ + $h2s = $articleContent->getElementsByTagName( 'h2' ); + if ( 1 === $h2s->length && mb_strlen( $this->getInnerText( $h2s->item( 0 ), true, true ) ) < 100 ) { + $this->clean( $articleContent, 'h2' ); + } + + $this->cleanHeaders( $articleContent ); + + // Do these last as the previous stuff may have removed junk that will affect these. + $this->cleanConditionally( $articleContent, 'form' ); + $this->cleanConditionally( $articleContent, 'table' ); + $this->cleanConditionally( $articleContent, 'ul' ); + $this->cleanConditionally( $articleContent, 'div' ); + + // Remove extra paragraphs. + $articleParagraphs = $articleContent->getElementsByTagName( 'p' ); + + for ( $i = $articleParagraphs->length - 1; $i >= 0; -- $i ) { + $item = $articleParagraphs->item( $i ); + + $imgCount = $item->getElementsByTagName( 'img' )->length; + $embedCount = $item->getElementsByTagName( 'embed' )->length; + $objectCount = $item->getElementsByTagName( 'object' )->length; + $videoCount = $item->getElementsByTagName( 'video' )->length; + $audioCount = $item->getElementsByTagName( 'audio' )->length; + $iframeCount = $item->getElementsByTagName( 'iframe' )->length; + + if ( 0 === $iframeCount && 0 === $imgCount && 0 === $embedCount && 0 === $objectCount && 0 === $videoCount && 0 === $audioCount && 0 === mb_strlen( preg_replace( '/\s+/is', '', $this->getInnerText( $item, false, false ) ) ) ) { + $item->parentNode->removeChild( $item ); + } + + // add extra text to iframe tag to avoid an auto-closing iframe and then break the html code + if ( $iframeCount ) { + $iframe = $item->getElementsByTagName( 'iframe' ); + $iframe->item( 0 )->nodeValue = ' '; + + $item->parentNode->replaceChild( $iframe->item( 0 ), $item ); + } + } + + if ( ! $this->flagIsActive( self::FLAG_DISABLE_POSTFILTER ) ) { + try { + foreach ( $this->post_filters as $search => $replace ) { + $articleContent->setInnerHtml( preg_replace( $search, $replace, $articleContent->getInnerHTML() ) ); + } + unset( $search, $replace ); + } catch ( \Exception $e ) { + $this->logger->error( 'Cleaning output HTML failed. Ignoring: ' . $e->getMessage() ); + } + } + } + + /** + * Get the inner text of a node. + * This also strips out any excess whitespace to be found. + * + * @param \DOMElement $e + * @param bool $normalizeSpaces (default: true) + * @param bool $flattenLines (default: false) + * + * @return string + */ + public function getInnerText( $e, $normalizeSpaces = true, $flattenLines = false ) { + if ( null === $e || ! isset( $e->textContent ) || '' === $e->textContent ) { + return ''; + } + + $textContent = trim( $e->textContent ); + + if ( $flattenLines ) { + $textContent = mb_ereg_replace( '(?:[\r\n](?:\s| )*)+', '', $textContent ); + } elseif ( $normalizeSpaces ) { + $textContent = mb_ereg_replace( '\s\s+', ' ', $textContent ); + } + + return $textContent; + } + + /** + * Remove the style attribute on every $e and under. + * + * @param \DOMElement $e + */ + public function cleanStyles( $e ) { + if ( ! \is_object( $e ) ) { + return; + } + + $elems = $e->getElementsByTagName( '*' ); + + foreach ( $elems as $elem ) { + $elem->removeAttribute( 'style' ); + } + } + + /** + * Get comma number for a given text. + * + * @param string $text + * + * @return int + */ + public function getCommaCount( $text ) { + return substr_count( $text, ',' ); + } + + /** + * Get words number for a given text if words separated by a space. + * Input string should be normalized. + * + * @param string $text + * + * @return int + */ + public function getWordCount( $text ) { + return substr_count( $text, ' ' ); + } + + /** + * Get the density of links as a percentage of the content + * This is the amount of text that is inside a link divided by the total text in the node. + * Can exclude external references to differentiate between simple text and menus/infoblocks. + * + * @param bool $excludeExternal + * + * @return int + */ + public function getLinkDensity( \DOMElement $e, $excludeExternal = false ) { + $links = $e->getElementsByTagName( 'a' ); + $textLength = mb_strlen( $this->getInnerText( $e, true, true ) ); + $linkLength = 0; + + for ( $dRe = $this->domainRegExp, $i = 0, $il = $links->length; $i < $il; ++ $i ) { + if ( $excludeExternal && $dRe && ! preg_match( $dRe, $links->item( $i )->getAttribute( 'href' ) ) ) { + continue; + } + $linkLength += mb_strlen( $this->getInnerText( $links->item( $i ) ) ); + } + + if ( $textLength > 0 && $linkLength > 0 ) { + return $linkLength / $textLength; + } + + return 0; + } + + /** + * Get an element relative weight. + * + * @return int + */ + public function getWeight( \DOMElement $e ) { + if ( ! $this->flagIsActive( self::FLAG_WEIGHT_ATTRIBUTES ) ) { + return 0; + } + + $weight = 0; + // Look for a special classname + $weight += $this->weightAttribute( $e, 'class' ); + // Look for a special ID + $weight += $this->weightAttribute( $e, 'id' ); + + return $weight; + } + + /** + * Remove extraneous break tags from a node. + */ + public function killBreaks( \DOMElement $node ) { + $html = $node->getInnerHTML(); + $html = preg_replace( $this->regexps['killBreaks'], '
            ', $html ); + $node->setInnerHtml( $html ); + } + + /** + * Clean a node of all elements of type "tag". + * (Unless it's a youtube/vimeo video. People love movies.). + * + * Updated 2012-09-18 to preserve youtube/vimeo iframes + * + * @param string $tag + */ + public function clean( \DOMElement $e, $tag ) { + $currentItem = null; + $targetList = $e->getElementsByTagName( $tag ); + $isEmbed = ( 'audio' === $tag || 'video' === $tag || 'iframe' === $tag || 'object' === $tag || 'embed' === $tag ); + + for ( $y = $targetList->length - 1; $y >= 0; -- $y ) { + // Allow youtube and vimeo videos through as people usually want to see those. + $currentItem = $targetList->item( $y ); + + if ( $isEmbed ) { + $attributeValues = $currentItem->getAttribute( 'src' ) . ' ' . $currentItem->getAttribute( 'href' ); + + // First, check the elements attributes to see if any of them contain known media hosts + if ( preg_match( $this->regexps['media'], $attributeValues ) ) { + continue; + } + + // Then check the elements inside this element for the same. + if ( preg_match( $this->regexps['media'], $targetList->item( $y )->getInnerHTML() ) ) { + continue; + } + } + + $currentItem->parentNode->removeChild( $currentItem ); + } + } + + /** + * Clean an element of all tags of type "tag" if they look fishy. + * "Fishy" is an algorithm based on content length, classnames, + * link density, number of images & embeds, etc. + * + * @param string $tag + */ + public function cleanConditionally( \DOMElement $e, $tag ) { + if ( ! $this->flagIsActive( self::FLAG_CLEAN_CONDITIONALLY ) ) { + return; + } + + $tagsList = $e->getElementsByTagName( $tag ); + $curTagsLength = $tagsList->length; + $node = null; + + /* + * Gather counts for other typical elements embedded within. + * Traverse backwards so we can remove nodes at the same time without effecting the traversal. + * + * TODO: Consider taking into account original contentScore here. + */ + for ( $i = $curTagsLength - 1; $i >= 0; -- $i ) { + $node = $tagsList->item( $i ); + $weight = $this->getWeight( $node ); + $contentScore = ( $node->hasAttribute( 'readability' ) ) ? (int) $node->getAttribute( 'readability' ) : 0; +// error_log( 'Start conditional cleaning of ' . $node->getNodePath() . ' (class=' . $node->getAttribute( 'class' ) . '; id=' . $node->getAttribute( 'id' ) . ')' . ( ( $node->hasAttribute( 'readability' ) ) ? ( ' with score ' . $node->getAttribute( 'readability' ) ) : '' ) ); + + if ( $weight + $contentScore < 0 ) { +// error_log( 'Removing...' ); + $node->parentNode->removeChild( $node ); + } elseif ( $this->getCommaCount( $this->getInnerText( $node ) ) < self::MIN_COMMAS_IN_PARAGRAPH ) { + /* + * If there are not very many commas, and the number of + * non-paragraph elements is more than paragraphs or other ominous signs, remove the element. + */ + $p = $node->getElementsByTagName( 'p' )->length; + $img = $node->getElementsByTagName( 'img' )->length; + $li = $node->getElementsByTagName( 'li' )->length - 100; + $input = $node->getElementsByTagName( 'input' )->length; + $a = $node->getElementsByTagName( 'a' )->length; + $embedCount = 0; + $embeds = $node->getElementsByTagName( 'embed' ); + + for ( $ei = 0, $il = $embeds->length; $ei < $il; ++ $ei ) { + if ( preg_match( $this->regexps['media'], $embeds->item( $ei )->getAttribute( 'src' ) ) ) { + ++ $embedCount; + } + } + + $embeds = $node->getElementsByTagName( 'iframe' ); + for ( $ei = 0, $il = $embeds->length; $ei < $il; ++ $ei ) { + if ( preg_match( $this->regexps['media'], $embeds->item( $ei )->getAttribute( 'src' ) ) ) { + ++ $embedCount; + } + } + + $linkDensity = $this->getLinkDensity( $node, true ); + $contentLength = mb_strlen( $this->getInnerText( $node ) ); + $toRemove = false; + + if ( $this->lightClean ) { + if ( $li > $p && 'ul' !== $tag && 'ol' !== $tag ) { +// error_log( ' too many

          • elements, and parent is not