Version Description
Last Stable Tag 2.17.0
Download this release
Release Info
Developer | yithemes |
Plugin | YITH WooCommerce Catalog Mode |
Version | 2.17.0 |
Comparing to | |
See all releases |
Code changes from version 2.16.1 to 2.17.0
- assets/css/admin 2.css +22 -0
- assets/css/admin.min 2.css +1 -0
- assets/css/frontend 2.css +1 -0
- assets/images/get-premium-catalog-mode 2.jpg +0 -0
- includes/actions/update-2.0.0/ywctm-install 2.php +25 -0
- init.php +19 -4
- languages/yith-woocommerce-catalog-mode 2.pot +164 -0
- languages/yith-woocommerce-catalog-mode.pot +2 -2
- plugin-fw/Gruntfile 2.js +198 -0
- plugin-fw/Gruntfile.js +198 -0
- plugin-fw/assets/css/admin 2.css +345 -0
- plugin-fw/assets/css/codemirror/codemirror 2.css +260 -0
- plugin-fw/assets/css/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100 2.png +0 -0
- plugin-fw/assets/css/scss/welcome-modal 2.scss +77 -0
- plugin-fw/assets/css/scss/welcome-modal.scss +77 -0
- plugin-fw/assets/css/scss/yith-plugin-ui.scss +8 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/_animations 2.scss +92 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/_animations.scss +92 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/_components.scss +13 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/_head_comment.scss +6 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/_tables.scss +56 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/_taxonomy.scss +52 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/_variables.scss +121 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/_wp-pages.scss +88 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_action-button 2.scss +80 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_action-button.scss +80 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_boxed-row.scss +14 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_buttons.scss +224 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_confirm.scss +41 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_list-items.scss +78 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_list-table-blank-state.scss +25 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_modal.scss +128 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_tabs.scss +51 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/components/_tip-tip.scss +80 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/mixins/_buttons 2.scss +124 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/mixins/_buttons.scss +124 -0
- plugin-fw/assets/css/scss/yith-plugin-ui/mixins/_tables.scss +159 -0
- plugin-fw/assets/css/yith-icon.css +8 -4
- plugin-fw/assets/fonts/font-awesome/font-awesome.min 2.css +4 -0
- plugin-fw/assets/fonts/yith-icon.eot +0 -0
- plugin-fw/assets/fonts/yith-icon.ttf +0 -0
- plugin-fw/assets/fonts/yith-icon.woff2 +0 -0
- plugin-fw/assets/images/arrow 2.svg +11 -0
- plugin-fw/assets/images/bh-onboarding/check 2.svg +16 -0
- plugin-fw/assets/images/colorbox/border1 2.png +0 -0
- plugin-fw/assets/images/help-tab/documentation 2.svg +176 -0
- plugin-fw/assets/js/codemirror/codemirror 2.js +5806 -0
- plugin-fw/assets/js/jquery-tiptip/jquery.tipTip 2.js +191 -0
- plugin-fw/assets/js/select2/select2.min 2.js +13 -0
- plugin-fw/assets/js/yith-enhanced-select.js +224 -195
- plugin-fw/bin/clean-language-files 2.js +36 -0
- plugin-fw/bin/clean-language-files.js +36 -0
- plugin-fw/bin/download-translations-config.json +37 -0
- plugin-fw/bin/download-translations.js +57 -0
- plugin-fw/composer 2.json +24 -0
- plugin-fw/composer.json +29 -0
- plugin-fw/dist/gutenberg/index.asset 2.php +1 -0
- plugin-fw/dist/gutenberg/style-index 2.css +3 -0
- plugin-fw/docker-compose 2.yml +76 -0
- plugin-fw/docker-compose.yml +76 -0
- plugin-fw/includes/builders/elementor/class-yith-elementor 2.php +128 -0
- plugin-fw/includes/builders/elementor/class-yith-elementor-widget 2.php +480 -0
- plugin-fw/includes/builders/gutenberg/class-yith-gutenberg 2.php +360 -0
- plugin-fw/includes/builders/gutenberg/src/common/actions-to-jquery-events 2.js +32 -0
- plugin-fw/includes/builders/gutenberg/src/common/actions-to-jquery-events.js +32 -0
- plugin-fw/includes/builders/gutenberg/src/common/ajaxFetch 2.js +43 -0
- plugin-fw/includes/builders/gutenberg/src/common/ajaxFetch.js +43 -0
- plugin-fw/includes/builders/gutenberg/src/common/checkForDeps 2.js +46 -0
- plugin-fw/includes/builders/gutenberg/src/common/checkForDeps.js +46 -0
- plugin-fw/includes/builders/gutenberg/src/common/generateShortcode 2.js +42 -0
- plugin-fw/includes/builders/gutenberg/src/common/generateShortcode.js +42 -0
- plugin-fw/includes/builders/gutenberg/src/common/icons 2.js +12 -0
- plugin-fw/includes/builders/gutenberg/src/common/icons.js +12 -0
- plugin-fw/includes/builders/gutenberg/src/common/index 2.js +4 -0
- plugin-fw/includes/builders/gutenberg/src/common/index.js +4 -0
- plugin-fw/includes/builders/gutenberg/src/components/color-palette-control/index 2.js +96 -0
- plugin-fw/includes/builders/gutenberg/src/components/color-palette-control/index.js +96 -0
- plugin-fw/includes/builders/gutenberg/src/components/color-palette-control/style 2.scss +9 -0
- plugin-fw/includes/builders/gutenberg/src/components/color-palette-control/style.scss +9 -0
- plugin-fw/includes/builders/gutenberg/src/components/color-picker-control/index 2.js +53 -0
- plugin-fw/includes/builders/gutenberg/src/components/color-picker-control/index.js +53 -0
- plugin-fw/includes/builders/gutenberg/src/components/multiple-select-control/index 2.js +56 -0
- plugin-fw/includes/builders/gutenberg/src/components/multiple-select-control/index.js +56 -0
- plugin-fw/includes/builders/gutenberg/src/components/multiple-select-control/multiple-select.js +186 -0
- plugin-fw/includes/builders/gutenberg/src/components/multiple-select-control/style.scss +135 -0
- plugin-fw/includes/builders/gutenberg/src/components/shortcode/index 2.js +153 -0
- plugin-fw/includes/builders/gutenberg/src/components/shortcode/index.js +153 -0
- plugin-fw/includes/builders/gutenberg/src/components/shortcode/style 2.scss +64 -0
- plugin-fw/includes/builders/gutenberg/src/components/shortcode/style.scss +64 -0
- plugin-fw/includes/builders/gutenberg/src/edit 2.js +234 -0
- plugin-fw/includes/builders/gutenberg/src/edit.js +234 -0
- plugin-fw/includes/builders/gutenberg/src/index 2.js +56 -0
- plugin-fw/includes/builders/gutenberg/src/index.js +56 -0
- plugin-fw/includes/class-yit-assets.php +7 -0
- plugin-fw/includes/class-yit-cpt-unlimited 2.php +54 -0
- plugin-fw/includes/class-yit-icons 2.php +1237 -0
- plugin-fw/includes/class-yit-plugin-licence 2.php +94 -0
- plugin-fw/includes/class-yit-plugin-subpanel 2.php +153 -0
- plugin-fw/includes/class-yit-pointers 2.php +380 -0
- plugin-fw/includes/class-yit-theme-licence 2.php +74 -0
- plugin-fw/includes/class-yit-upgrade 2.php +70 -0
- plugin-fw/includes/class-yit-video 2.php +192 -0
- plugin-fw/includes/class-yith-bh-onboarding 2.php +110 -0
- plugin-fw/includes/class-yith-dashboard 2.php +149 -0
- plugin-fw/includes/class-yith-debug 2.php +154 -0
- plugin-fw/includes/class-yith-post-type-admin 2.php +474 -0
- plugin-fw/includes/class-yith-system-status 2.php +821 -0
- plugin-fw/includes/privacy/class-yith-privacy 2.php +114 -0
- plugin-fw/includes/privacy/class-yith-privacy-plugin-abstract 2.php +72 -0
- plugin-fw/init 2.php +108 -0
- plugin-fw/languages/yith-plugin-fw 2.pot +1119 -0
- plugin-fw/languages/yith-plugin-fw-el 2.mo +0 -0
- plugin-fw/languages/yith-plugin-fw-el 2.po +1143 -0
- plugin-fw/languages/yith-plugin-fw-es_ES 2.mo +0 -0
- plugin-fw/languages/yith-plugin-fw-es_ES 2.po +1162 -0
- plugin-fw/languages/yith-plugin-fw-it_IT 2.mo +0 -0
- plugin-fw/languages/yith-plugin-fw-it_IT 2.po +1163 -0
- plugin-fw/languages/yith-plugin-fw-nl_NL 2.mo +0 -0
- plugin-fw/languages/yith-plugin-fw-nl_NL 2.po +1151 -0
- plugin-fw/languages/yith-plugin-fw-ru_RU 2.mo +0 -0
- plugin-fw/languages/yith-plugin-fw-ru_RU 2.po +1157 -0
- plugin-fw/languages/yith-plugin-fw-zh_CN 2.mo +0 -0
- plugin-fw/languages/yith-plugin-fw-zh_CN 2.po +1129 -0
- plugin-fw/lib/privacy/yit-privacy 2.php +11 -0
- plugin-fw/lib/privacy/yit-privacy-plugin-abstract 2.php +11 -0
- plugin-fw/lib/yit-ajax 2.php +11 -0
- plugin-fw/lib/yit-assets 2.php +11 -0
- plugin-fw/lib/yit-cpt-unlimited 2.php +11 -0
- plugin-fw/lib/yit-debug 2.php +11 -0
- plugin-fw/lib/yit-icons 2.php +11 -0
- plugin-fw/lib/yit-metabox 2.php +11 -0
- plugin-fw/lib/yit-plugin-common 2.php +11 -0
- plugin-fw/lib/yit-plugin-gradients 2.php +11 -0
- plugin-fw/lib/yit-plugin-licence 2.php +11 -0
- plugin-fw/lib/yit-plugin-panel 2.php +11 -0
- plugin-fw/lib/yit-plugin-panel-wc 2.php +11 -0
- plugin-fw/lib/yit-plugin-subpanel 2.php +11 -0
- plugin-fw/lib/yit-pointers 2.php +11 -0
- plugin-fw/lib/yit-theme-licence 2.php +11 -0
- plugin-fw/lib/yit-upgrade 2.php +11 -0
- plugin-fw/lib/yit-video 2.php +11 -0
- plugin-fw/lib/yith-dashboard 2.php +11 -0
- plugin-fw/lib/yith-gutenberg 2.php +11 -0
- plugin-fw/lib/yith-system-status 2.php +11 -0
- plugin-fw/license 2.txt +280 -0
assets/css/admin 2.css
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.ywctm-inline-selects .option-element {
|
2 |
+
height: 100%;
|
3 |
+
display: inline-flex;
|
4 |
+
align-items: center;
|
5 |
+
padding: 0 10px 0 0;
|
6 |
+
vertical-align: top;
|
7 |
+
}
|
8 |
+
|
9 |
+
.ywctm-inline-selects .option-element.hidden {
|
10 |
+
padding: 0;
|
11 |
+
}
|
12 |
+
|
13 |
+
.ywctm-inline-selects .option-element > span {
|
14 |
+
display: flex;
|
15 |
+
min-height: 38px;
|
16 |
+
align-items: center;
|
17 |
+
}
|
18 |
+
|
19 |
+
.woocommerce table.form-table .ywctm-inline-selects .option-element > .yith-plugin-fw-select-field-wrapper > .select2 {
|
20 |
+
width: 220px !important;
|
21 |
+
min-width: 220px !important;
|
22 |
+
}
|
assets/css/admin.min 2.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.ywctm-inline-selects .option-element{height:100%;display:inline-flex;align-items:center;padding:0 10px 0 0;vertical-align:top}.ywctm-inline-selects .option-element.hidden{padding:0}.ywctm-inline-selects .option-element>span{display:flex;min-height:38px;align-items:center}.woocommerce table.form-table .ywctm-inline-selects .option-element>.yith-plugin-fw-select-field-wrapper>.select2{width:220px!important;min-width:220px!important}
|
assets/css/frontend 2.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
/* Silence is golden */
|
assets/images/get-premium-catalog-mode 2.jpg
ADDED
Binary file
|
includes/actions/update-2.0.0/ywctm-install 2.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Plugin installation functions
|
4 |
+
*
|
5 |
+
* @package YITH\CatalogMode
|
6 |
+
*/
|
7 |
+
|
8 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
9 |
+
exit; // Exit if accessed directly.
|
10 |
+
}
|
11 |
+
|
12 |
+
if ( defined( 'YWCTM_PREMIUM' ) && YWCTM_PREMIUM ) {
|
13 |
+
|
14 |
+
if ( '' !== (string) get_option( 'ywctm_enable_plugin' ) ) {
|
15 |
+
include_once YWCTM_DIR . 'includes/actions/update-2.0.0/ywctm-update-premium.php';
|
16 |
+
} else {
|
17 |
+
include_once YWCTM_DIR . 'includes/actions/update-2.0.0/ywctm-default-buttons.php';
|
18 |
+
}
|
19 |
+
} else {
|
20 |
+
if ( '' !== get_option( 'ywctm_enable_plugin' ) ) {
|
21 |
+
include_once YWCTM_DIR . 'includes/actions/update-2.0.0/ywctm-update.php';
|
22 |
+
} else {
|
23 |
+
update_option( 'ywctm_update_version', YWCTM_VERSION );
|
24 |
+
}
|
25 |
+
}
|
init.php
CHANGED
@@ -5,10 +5,10 @@
|
|
5 |
* Description: <code><strong>YITH WooCommerce Catalog Mode</strong></code> allows hiding product prices, cart and checkout from your store and turning it into a performing product catalogue. You will be able to adjust your catalogue settings as you prefer based on your requirements. <a href="https://yithemes.com/" target="_blank">Get more plugins for your e-commerce shop on <strong>YITH</strong></a>
|
6 |
* Author: YITH
|
7 |
* Text Domain: yith-woocommerce-catalog-mode
|
8 |
-
* Version: 2.
|
9 |
* Author URI: https://yithemes.com/
|
10 |
-
* WC requires at least:
|
11 |
-
* WC tested up to: 7.
|
12 |
*
|
13 |
* @package YITH WooCommerce Catalog Mode
|
14 |
*/
|
@@ -61,7 +61,7 @@ function ywctm_install_free_admin_notice() {
|
|
61 |
<?php
|
62 |
}
|
63 |
|
64 |
-
! defined( 'YWCTM_VERSION' ) && define( 'YWCTM_VERSION', '2.
|
65 |
! defined( 'YWCTM_FREE_INIT' ) && define( 'YWCTM_FREE_INIT', plugin_basename( __FILE__ ) );
|
66 |
! defined( 'YWCTM_SLUG' ) && define( 'YWCTM_SLUG', 'yith-woocommerce-catalog-mode' );
|
67 |
! defined( 'YWCTM_FILE' ) && define( 'YWCTM_FILE', __FILE__ );
|
@@ -142,3 +142,18 @@ if ( ! function_exists( 'YITH_WCTM' ) ) {
|
|
142 |
|
143 |
}
|
144 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
* Description: <code><strong>YITH WooCommerce Catalog Mode</strong></code> allows hiding product prices, cart and checkout from your store and turning it into a performing product catalogue. You will be able to adjust your catalogue settings as you prefer based on your requirements. <a href="https://yithemes.com/" target="_blank">Get more plugins for your e-commerce shop on <strong>YITH</strong></a>
|
6 |
* Author: YITH
|
7 |
* Text Domain: yith-woocommerce-catalog-mode
|
8 |
+
* Version: 2.17.0
|
9 |
* Author URI: https://yithemes.com/
|
10 |
+
* WC requires at least: 7.0.0
|
11 |
+
* WC tested up to: 7.2.x
|
12 |
*
|
13 |
* @package YITH WooCommerce Catalog Mode
|
14 |
*/
|
61 |
<?php
|
62 |
}
|
63 |
|
64 |
+
! defined( 'YWCTM_VERSION' ) && define( 'YWCTM_VERSION', '2.17.0' );
|
65 |
! defined( 'YWCTM_FREE_INIT' ) && define( 'YWCTM_FREE_INIT', plugin_basename( __FILE__ ) );
|
66 |
! defined( 'YWCTM_SLUG' ) && define( 'YWCTM_SLUG', 'yith-woocommerce-catalog-mode' );
|
67 |
! defined( 'YWCTM_FILE' ) && define( 'YWCTM_FILE', __FILE__ );
|
142 |
|
143 |
}
|
144 |
}
|
145 |
+
|
146 |
+
add_action( 'before_woocommerce_init', 'ywctm_free_declare_hpos_compatibility' );
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Declare HPOS compatibility
|
150 |
+
*
|
151 |
+
* @return void
|
152 |
+
* @since 2.17.0
|
153 |
+
* @author Alberto Ruggiero <alberto.ruggiero@yithemes.com>
|
154 |
+
*/
|
155 |
+
function ywctm_free_declare_hpos_compatibility() {
|
156 |
+
if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
|
157 |
+
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
|
158 |
+
}
|
159 |
+
}
|
languages/yith-woocommerce-catalog-mode 2.pot
ADDED
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2022 YITH
|
2 |
+
# This file is distributed under the same license as the YITH WooCommerce Catalog Mode package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: YITH WooCommerce Catalog Mode 2.16.1\n"
|
6 |
+
"Report-Msgid-Bugs-To: "
|
7 |
+
"https://wordpress.org/support/plugin/yith-woocommerce-catalog-mode\n"
|
8 |
+
"POT-Creation-Date: 2022-11-17 16:12:32+00:00\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"PO-Revision-Date: 2022-MO-DA HO:MI+ZONE\n"
|
13 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15 |
+
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
16 |
+
|
17 |
+
#: class-yith-woocommerce-catalog-mode.php:193
|
18 |
+
#: plugin-options/settings-options.php:15
|
19 |
+
msgid "Settings"
|
20 |
+
msgstr ""
|
21 |
+
|
22 |
+
#: class-yith-woocommerce-catalog-mode.php:218
|
23 |
+
#. translators: %1$s opening B tag, %2$s closing B tag
|
24 |
+
msgid ""
|
25 |
+
"Enable the catalog mode rules %1$s only for guest %2$s or for %1$s users "
|
26 |
+
"from specific countries %2$s (Example: hide prices or add to cart buttons "
|
27 |
+
"only to users from USA)"
|
28 |
+
msgstr ""
|
29 |
+
|
30 |
+
#: class-yith-woocommerce-catalog-mode.php:220
|
31 |
+
#. translators: %1$s opening B tag, %2$s closing B tag
|
32 |
+
msgid ""
|
33 |
+
"Enable the catalog mode on %1$s specific time ranges and/or dates only %2$s "
|
34 |
+
"(Example: prevent new orders on Sunday or in December during Christmas "
|
35 |
+
"holidays)"
|
36 |
+
msgstr ""
|
37 |
+
|
38 |
+
#: class-yith-woocommerce-catalog-mode.php:222
|
39 |
+
#. translators: %1$s opening B tag, %2$s closing B tag
|
40 |
+
msgid ""
|
41 |
+
"Use the %1$s Exclusion List %2$s to enable or disable the catalog mode %1$s "
|
42 |
+
"only on specific products, categories or tag of your shop %2$s"
|
43 |
+
msgstr ""
|
44 |
+
|
45 |
+
#: class-yith-woocommerce-catalog-mode.php:223
|
46 |
+
msgid ""
|
47 |
+
"Hide the Add to Cart button only on specific products and the product "
|
48 |
+
"prices to all users or to guest users only"
|
49 |
+
msgstr ""
|
50 |
+
|
51 |
+
#: class-yith-woocommerce-catalog-mode.php:225
|
52 |
+
#. translators: %1$s opening B tag, %2$s closing B tag
|
53 |
+
msgid ""
|
54 |
+
"Use the Advanced Builder to %1$s create and design custom buttons or labels "
|
55 |
+
"%2$s to replace add to cart and price in shop page and product page"
|
56 |
+
msgstr ""
|
57 |
+
|
58 |
+
#: class-yith-woocommerce-catalog-mode.php:227
|
59 |
+
#. translators: %1$s opening B tag, %2$s closing B tag
|
60 |
+
msgid ""
|
61 |
+
"%1$s Add a custom inquiry form on the product page %2$s using the default "
|
62 |
+
"form or choosing a plugin between Contact Form 7, Gravity Form, Ninja "
|
63 |
+
"Forms, Formidable Forms or WP Forms"
|
64 |
+
msgstr ""
|
65 |
+
|
66 |
+
#: class-yith-woocommerce-catalog-mode.php:228
|
67 |
+
msgid "Regular updates, Translations and Premium Support"
|
68 |
+
msgstr ""
|
69 |
+
|
70 |
+
#: init.php:37
|
71 |
+
#. translators: %s name of the plugin
|
72 |
+
msgid "%s is enabled but not effective. In order to work, it requires WooCommerce."
|
73 |
+
msgstr ""
|
74 |
+
|
75 |
+
#: init.php:57
|
76 |
+
#. translators: %s name of the plugin
|
77 |
+
msgid ""
|
78 |
+
"You can't activate the free version of %s while you are using the premium "
|
79 |
+
"one."
|
80 |
+
msgstr ""
|
81 |
+
|
82 |
+
#: plugin-options/settings-options.php:19
|
83 |
+
msgid "Catalog mode for administrators"
|
84 |
+
msgstr ""
|
85 |
+
|
86 |
+
#: plugin-options/settings-options.php:22
|
87 |
+
msgid "If enabled, the Catalog Mode rules will also work for admin users."
|
88 |
+
msgstr ""
|
89 |
+
|
90 |
+
#: plugin-options/settings-options.php:27
|
91 |
+
msgid "Disable shop"
|
92 |
+
msgstr ""
|
93 |
+
|
94 |
+
#: plugin-options/settings-options.php:30
|
95 |
+
msgid ""
|
96 |
+
"Use this option to hide the \"Cart\" page, \"Checkout\" page and all the "
|
97 |
+
"\"Add to Cart\" buttons in the shop."
|
98 |
+
msgstr ""
|
99 |
+
|
100 |
+
#: plugin-options/settings-options.php:37
|
101 |
+
msgid "\"Add to Cart\" settings in Catalog Mode"
|
102 |
+
msgstr ""
|
103 |
+
|
104 |
+
#: plugin-options/settings-options.php:38
|
105 |
+
msgid "Choose where to hide \"Add to Cart\"."
|
106 |
+
msgstr ""
|
107 |
+
|
108 |
+
#: plugin-options/settings-options.php:47
|
109 |
+
msgid "All pages"
|
110 |
+
msgstr ""
|
111 |
+
|
112 |
+
#: plugin-options/settings-options.php:48
|
113 |
+
msgid "Shop page"
|
114 |
+
msgstr ""
|
115 |
+
|
116 |
+
#: plugin-options/settings-options.php:49
|
117 |
+
msgid "Product page"
|
118 |
+
msgstr ""
|
119 |
+
|
120 |
+
#: plugin-options/settings-options.php:67
|
121 |
+
msgid "Hide product variations"
|
122 |
+
msgstr ""
|
123 |
+
|
124 |
+
#: plugin-options/settings-options.php:70
|
125 |
+
msgid "Use this option to hide product variations where \"Add to cart\" is hidden."
|
126 |
+
msgstr ""
|
127 |
+
|
128 |
+
#. Description of the plugin/theme
|
129 |
+
msgid ""
|
130 |
+
"<code><strong>YITH WooCommerce Catalog Mode</strong></code> allows hiding "
|
131 |
+
"product prices, cart and checkout from your store and turning it into a "
|
132 |
+
"performing product catalogue. You will be able to adjust your catalogue "
|
133 |
+
"settings as you prefer based on your requirements. <a "
|
134 |
+
"href=\"https://yithemes.com/\" target=\"_blank\">Get more plugins for your "
|
135 |
+
"e-commerce shop on <strong>YITH</strong></a>"
|
136 |
+
msgstr ""
|
137 |
+
|
138 |
+
#: class-yith-woocommerce-catalog-mode.php:169
|
139 |
+
msgctxt "general settings tab name"
|
140 |
+
msgid "Settings"
|
141 |
+
msgstr ""
|
142 |
+
|
143 |
+
#: class-yith-woocommerce-catalog-mode.php:170
|
144 |
+
msgctxt "exclusion settings tab name"
|
145 |
+
msgid "Exclusion List"
|
146 |
+
msgstr ""
|
147 |
+
|
148 |
+
#: class-yith-woocommerce-catalog-mode.php:171
|
149 |
+
msgctxt "inquiry form settings tab name"
|
150 |
+
msgid "Inquiry Form"
|
151 |
+
msgstr ""
|
152 |
+
|
153 |
+
#: class-yith-woocommerce-catalog-mode.php:172
|
154 |
+
msgctxt "buttons & labels settings tab name"
|
155 |
+
msgid "Buttons & Labels"
|
156 |
+
msgstr ""
|
157 |
+
|
158 |
+
#: class-yith-woocommerce-catalog-mode.php:177
|
159 |
+
#. translators: %1$s opening B tag - %2$s closing B tag
|
160 |
+
msgctxt "[HELP TAB] Video title"
|
161 |
+
msgid ""
|
162 |
+
"Check this video to learn how to %1$sconvert your shop into a product "
|
163 |
+
"catalog%2$s"
|
164 |
+
msgstr ""
|
languages/yith-woocommerce-catalog-mode.pot
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
# This file is distributed under the same license as the YITH WooCommerce Catalog Mode package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"Project-Id-Version: YITH WooCommerce Catalog Mode 2.
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://wordpress.org/support/plugin/yith-woocommerce-catalog-mode\n"
|
8 |
-
"POT-Creation-Date: 2022-
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
2 |
# This file is distributed under the same license as the YITH WooCommerce Catalog Mode package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
+
"Project-Id-Version: YITH WooCommerce Catalog Mode 2.17.0\n"
|
6 |
"Report-Msgid-Bugs-To: "
|
7 |
"https://wordpress.org/support/plugin/yith-woocommerce-catalog-mode\n"
|
8 |
+
"POT-Creation-Date: 2022-12-13 13:56:26+00:00\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=utf-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
plugin-fw/Gruntfile 2.js
ADDED
@@ -0,0 +1,198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const potInfo = {
|
2 |
+
languageFolderPath: './languages/',
|
3 |
+
filename : 'yith-plugin-fw.pot',
|
4 |
+
headers : {
|
5 |
+
poedit : true, // Includes common Poedit headers.
|
6 |
+
'x-poedit-keywordslist': true, // Include a list of all possible gettext functions.
|
7 |
+
'report-msgid-bugs-to' : 'YITH <plugins@yithemes.com>',
|
8 |
+
'language-team' : 'YITH <info@yithemes.com>'
|
9 |
+
}
|
10 |
+
};
|
11 |
+
|
12 |
+
module.exports = function ( grunt ) {
|
13 |
+
'use strict';
|
14 |
+
|
15 |
+
var sass = require( 'node-sass' );
|
16 |
+
|
17 |
+
grunt.initConfig( {
|
18 |
+
dirs: {
|
19 |
+
css : 'assets/css',
|
20 |
+
scss: 'assets/css/scss',
|
21 |
+
js : 'assets/js'
|
22 |
+
},
|
23 |
+
|
24 |
+
uglify: {
|
25 |
+
options: {
|
26 |
+
ie8 : true,
|
27 |
+
parse : {
|
28 |
+
strict: false
|
29 |
+
},
|
30 |
+
output: {
|
31 |
+
comments: /@license|@preserve|^!/
|
32 |
+
}
|
33 |
+
},
|
34 |
+
common : {
|
35 |
+
files: [{
|
36 |
+
expand: true,
|
37 |
+
cwd : '<%= dirs.js %>/',
|
38 |
+
src : ['*.js', '!*.min.js'],
|
39 |
+
dest : '<%= dirs.js %>/',
|
40 |
+
rename: function ( dst, src ) {
|
41 |
+
// To keep the source js files and make new files as `*.min.js`:
|
42 |
+
return dst + '/' + src.replace( '.js', '.min.js' );
|
43 |
+
}
|
44 |
+
}]
|
45 |
+
}
|
46 |
+
},
|
47 |
+
|
48 |
+
// Compile all .scss files.
|
49 |
+
sass: {
|
50 |
+
compile: {
|
51 |
+
options: {
|
52 |
+
implementation: sass,
|
53 |
+
outputStyle: 'expanded'
|
54 |
+
},
|
55 |
+
files : [{
|
56 |
+
expand: true,
|
57 |
+
cwd : '<%= dirs.scss %>/',
|
58 |
+
src : ['*.scss'],
|
59 |
+
dest : '<%= dirs.css %>/',
|
60 |
+
ext : '.css'
|
61 |
+
}]
|
62 |
+
}
|
63 |
+
},
|
64 |
+
|
65 |
+
jshint: {
|
66 |
+
options: {
|
67 |
+
jshintrc: '.jshintrc'
|
68 |
+
},
|
69 |
+
all : [
|
70 |
+
'<%= dirs.js %>/*.js',
|
71 |
+
'!<%= dirs.js %>/*.min.js'
|
72 |
+
]
|
73 |
+
},
|
74 |
+
|
75 |
+
|
76 |
+
// Watch changes for assets.
|
77 |
+
watch: {
|
78 |
+
css: {
|
79 |
+
files: ['<%= dirs.scss %>/**/*.scss'],
|
80 |
+
tasks: ['sass']
|
81 |
+
}
|
82 |
+
},
|
83 |
+
|
84 |
+
makepot : {
|
85 |
+
options: {
|
86 |
+
type : 'wp-plugin',
|
87 |
+
domainPath : 'languages',
|
88 |
+
domain : 'yith-plugin-fw',
|
89 |
+
potHeaders : potInfo.headers,
|
90 |
+
updatePoFiles: false
|
91 |
+
},
|
92 |
+
dist : {
|
93 |
+
options: {
|
94 |
+
potFilename: potInfo.filename,
|
95 |
+
exclude : [
|
96 |
+
'bin/.*',
|
97 |
+
'dist/.*',
|
98 |
+
'node_modules/.*',
|
99 |
+
'tests/.*',
|
100 |
+
'tmp/.*',
|
101 |
+
'vendor/.*'
|
102 |
+
]
|
103 |
+
}
|
104 |
+
}
|
105 |
+
},
|
106 |
+
update_po: {
|
107 |
+
options: {
|
108 |
+
template: potInfo.languageFolderPath + potInfo.filename
|
109 |
+
},
|
110 |
+
build : {
|
111 |
+
src: potInfo.languageFolderPath + '*.po'
|
112 |
+
}
|
113 |
+
},
|
114 |
+
|
115 |
+
// PHP Code Sniffer.
|
116 |
+
phpcs: {
|
117 |
+
options: {
|
118 |
+
bin: 'vendor/bin/phpcs'
|
119 |
+
},
|
120 |
+
dist : {
|
121 |
+
src: [
|
122 |
+
'**/*.php', // Include all php files.
|
123 |
+
'!bin/**',
|
124 |
+
'!dist/**',
|
125 |
+
'!node_modules/**',
|
126 |
+
'!tests/**',
|
127 |
+
'!tools/**',
|
128 |
+
'!tmp/**',
|
129 |
+
'!vendor/**'
|
130 |
+
]
|
131 |
+
}
|
132 |
+
}
|
133 |
+
|
134 |
+
} );
|
135 |
+
|
136 |
+
grunt.registerMultiTask( 'update_po', 'This task update .po strings by .pot', function () {
|
137 |
+
grunt.log.writeln( 'Updating .po files.' );
|
138 |
+
|
139 |
+
var done = this.async(),
|
140 |
+
options = this.options(),
|
141 |
+
template = options.template;
|
142 |
+
this.files.forEach( function ( file ) {
|
143 |
+
if ( file.src.length ) {
|
144 |
+
var counter = file.src.length;
|
145 |
+
|
146 |
+
grunt.log.writeln( 'Processing ' + file.src.length + ' files.' );
|
147 |
+
|
148 |
+
file.src.forEach( function ( fileSrc ) {
|
149 |
+
grunt.util.spawn( {
|
150 |
+
cmd : 'msgmerge',
|
151 |
+
args: ['-U', fileSrc, template]
|
152 |
+
}, function ( error, result, code ) {
|
153 |
+
const output = fileSrc.replace( '.po', '.mo' );
|
154 |
+
grunt.log.writeln( 'Updating: ' + fileSrc + ' ...' );
|
155 |
+
|
156 |
+
if ( error ) {
|
157 |
+
grunt.verbose.error();
|
158 |
+
} else {
|
159 |
+
grunt.verbose.ok();
|
160 |
+
}
|
161 |
+
|
162 |
+
// Updating also the .mo files
|
163 |
+
grunt.util.spawn( {
|
164 |
+
cmd : 'msgfmt',
|
165 |
+
args: [fileSrc, '-o', output]
|
166 |
+
}, function ( moError, moResult, moCode ) {
|
167 |
+
grunt.log.writeln( 'Updating MO for: ' + fileSrc + ' ...' );
|
168 |
+
counter--;
|
169 |
+
if ( moError || counter === 0 ) {
|
170 |
+
done( moError );
|
171 |
+
}
|
172 |
+
} );
|
173 |
+
if ( error ) {
|
174 |
+
done( error );
|
175 |
+
}
|
176 |
+
} );
|
177 |
+
} );
|
178 |
+
} else {
|
179 |
+
grunt.log.writeln( 'No file to process.' );
|
180 |
+
}
|
181 |
+
} );
|
182 |
+
} );
|
183 |
+
|
184 |
+
// Load NPM tasks to be used here.
|
185 |
+
grunt.loadNpmTasks( 'grunt-wp-i18n' );
|
186 |
+
grunt.loadNpmTasks( 'grunt-phpcs' );
|
187 |
+
grunt.loadNpmTasks( 'grunt-sass' );
|
188 |
+
grunt.loadNpmTasks( 'grunt-contrib-watch' );
|
189 |
+
|
190 |
+
// Use uglify-es (instead of uglify) to uglify also JS for ES6.
|
191 |
+
grunt.loadNpmTasks( 'grunt-contrib-uglify-es' );
|
192 |
+
|
193 |
+
// Register tasks.
|
194 |
+
grunt.registerTask( 'js', ['uglify'] );
|
195 |
+
|
196 |
+
grunt.registerTask( 'css', ['sass'] );
|
197 |
+
grunt.registerTask( 'assets', ['js', 'css'] );
|
198 |
+
};
|
plugin-fw/Gruntfile.js
ADDED
@@ -0,0 +1,198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
const potInfo = {
|
2 |
+
languageFolderPath: './languages/',
|
3 |
+
filename : 'yith-plugin-fw.pot',
|
4 |
+
headers : {
|
5 |
+
poedit : true, // Includes common Poedit headers.
|
6 |
+
'x-poedit-keywordslist': true, // Include a list of all possible gettext functions.
|
7 |
+
'report-msgid-bugs-to' : 'YITH <plugins@yithemes.com>',
|
8 |
+
'language-team' : 'YITH <info@yithemes.com>'
|
9 |
+
}
|
10 |
+
};
|
11 |
+
|
12 |
+
module.exports = function ( grunt ) {
|
13 |
+
'use strict';
|
14 |
+
|
15 |
+
var sass = require( 'node-sass' );
|
16 |
+
|
17 |
+
grunt.initConfig( {
|
18 |
+
dirs: {
|
19 |
+
css : 'assets/css',
|
20 |
+
scss: 'assets/css/scss',
|
21 |
+
js : 'assets/js'
|
22 |
+
},
|
23 |
+
|
24 |
+
uglify: {
|
25 |
+
options: {
|
26 |
+
ie8 : true,
|
27 |
+
parse : {
|
28 |
+
strict: false
|
29 |
+
},
|
30 |
+
output: {
|
31 |
+
comments: /@license|@preserve|^!/
|
32 |
+
}
|
33 |
+
},
|
34 |
+
common : {
|
35 |
+
files: [{
|
36 |
+
expand: true,
|
37 |
+
cwd : '<%= dirs.js %>/',
|
38 |
+
src : ['*.js', '!*.min.js'],
|
39 |
+
dest : '<%= dirs.js %>/',
|
40 |
+
rename: function ( dst, src ) {
|
41 |
+
// To keep the source js files and make new files as `*.min.js`:
|
42 |
+
return dst + '/' + src.replace( '.js', '.min.js' );
|
43 |
+
}
|
44 |
+
}]
|
45 |
+
}
|
46 |
+
},
|
47 |
+
|
48 |
+
// Compile all .scss files.
|
49 |
+
sass: {
|
50 |
+
compile: {
|
51 |
+
options: {
|
52 |
+
implementation: sass,
|
53 |
+
outputStyle: 'expanded'
|
54 |
+
},
|
55 |
+
files : [{
|
56 |
+
expand: true,
|
57 |
+
cwd : '<%= dirs.scss %>/',
|
58 |
+
src : ['*.scss'],
|
59 |
+
dest : '<%= dirs.css %>/',
|
60 |
+
ext : '.css'
|
61 |
+
}]
|
62 |
+
}
|
63 |
+
},
|
64 |
+
|
65 |
+
jshint: {
|
66 |
+
options: {
|
67 |
+
jshintrc: '.jshintrc'
|
68 |
+
},
|
69 |
+
all : [
|
70 |
+
'<%= dirs.js %>/*.js',
|
71 |
+
'!<%= dirs.js %>/*.min.js'
|
72 |
+
]
|
73 |
+
},
|
74 |
+
|
75 |
+
|
76 |
+
// Watch changes for assets.
|
77 |
+
watch: {
|
78 |
+
css: {
|
79 |
+
files: ['<%= dirs.scss %>/**/*.scss'],
|
80 |
+
tasks: ['sass']
|
81 |
+
}
|
82 |
+
},
|
83 |
+
|
84 |
+
makepot : {
|
85 |
+
options: {
|
86 |
+
type : 'wp-plugin',
|
87 |
+
domainPath : 'languages',
|
88 |
+
domain : 'yith-plugin-fw',
|
89 |
+
potHeaders : potInfo.headers,
|
90 |
+
updatePoFiles: false
|
91 |
+
},
|
92 |
+
dist : {
|
93 |
+
options: {
|
94 |
+
potFilename: potInfo.filename,
|
95 |
+
exclude : [
|
96 |
+
'bin/.*',
|
97 |
+
'dist/.*',
|
98 |
+
'node_modules/.*',
|
99 |
+
'tests/.*',
|
100 |
+
'tmp/.*',
|
101 |
+
'vendor/.*'
|
102 |
+
]
|
103 |
+
}
|
104 |
+
}
|
105 |
+
},
|
106 |
+
update_po: {
|
107 |
+
options: {
|
108 |
+
template: potInfo.languageFolderPath + potInfo.filename
|
109 |
+
},
|
110 |
+
build : {
|
111 |
+
src: potInfo.languageFolderPath + '*.po'
|
112 |
+
}
|
113 |
+
},
|
114 |
+
|
115 |
+
// PHP Code Sniffer.
|
116 |
+
phpcs: {
|
117 |
+
options: {
|
118 |
+
bin: 'vendor/bin/phpcs'
|
119 |
+
},
|
120 |
+
dist : {
|
121 |
+
src: [
|
122 |
+
'**/*.php', // Include all php files.
|
123 |
+
'!bin/**',
|
124 |
+
'!dist/**',
|
125 |
+
'!node_modules/**',
|
126 |
+
'!tests/**',
|
127 |
+
'!tools/**',
|
128 |
+
'!tmp/**',
|
129 |
+
'!vendor/**'
|
130 |
+
]
|
131 |
+
}
|
132 |
+
}
|
133 |
+
|
134 |
+
} );
|
135 |
+
|
136 |
+
grunt.registerMultiTask( 'update_po', 'This task update .po strings by .pot', function () {
|
137 |
+
grunt.log.writeln( 'Updating .po files.' );
|
138 |
+
|
139 |
+
var done = this.async(),
|
140 |
+
options = this.options(),
|
141 |
+
template = options.template;
|
142 |
+
this.files.forEach( function ( file ) {
|
143 |
+
if ( file.src.length ) {
|
144 |
+
var counter = file.src.length;
|
145 |
+
|
146 |
+
grunt.log.writeln( 'Processing ' + file.src.length + ' files.' );
|
147 |
+
|
148 |
+
file.src.forEach( function ( fileSrc ) {
|
149 |
+
grunt.util.spawn( {
|
150 |
+
cmd : 'msgmerge',
|
151 |
+
args: ['-U', fileSrc, template]
|
152 |
+
}, function ( error, result, code ) {
|
153 |
+
const output = fileSrc.replace( '.po', '.mo' );
|
154 |
+
grunt.log.writeln( 'Updating: ' + fileSrc + ' ...' );
|
155 |
+
|
156 |
+
if ( error ) {
|
157 |
+
grunt.verbose.error();
|
158 |
+
} else {
|
159 |
+
grunt.verbose.ok();
|
160 |
+
}
|
161 |
+
|
162 |
+
// Updating also the .mo files
|
163 |
+
grunt.util.spawn( {
|
164 |
+
cmd : 'msgfmt',
|
165 |
+
args: [fileSrc, '-o', output]
|
166 |
+
}, function ( moError, moResult, moCode ) {
|
167 |
+
grunt.log.writeln( 'Updating MO for: ' + fileSrc + ' ...' );
|
168 |
+
counter--;
|
169 |
+
if ( moError || counter === 0 ) {
|
170 |
+
done( moError );
|
171 |
+
}
|
172 |
+
} );
|
173 |
+
if ( error ) {
|
174 |
+
done( error );
|
175 |
+
}
|
176 |
+
} );
|
177 |
+
} );
|
178 |
+
} else {
|
179 |
+
grunt.log.writeln( 'No file to process.' );
|
180 |
+
}
|
181 |
+
} );
|
182 |
+
} );
|
183 |
+
|
184 |
+
// Load NPM tasks to be used here.
|
185 |
+
grunt.loadNpmTasks( 'grunt-wp-i18n' );
|
186 |
+
grunt.loadNpmTasks( 'grunt-phpcs' );
|
187 |
+
grunt.loadNpmTasks( 'grunt-sass' );
|
188 |
+
grunt.loadNpmTasks( 'grunt-contrib-watch' );
|
189 |
+
|
190 |
+
// Use uglify-es (instead of uglify) to uglify also JS for ES6.
|
191 |
+
grunt.loadNpmTasks( 'grunt-contrib-uglify-es' );
|
192 |
+
|
193 |
+
// Register tasks.
|
194 |
+
grunt.registerTask( 'js', ['uglify'] );
|
195 |
+
|
196 |
+
grunt.registerTask( 'css', ['sass'] );
|
197 |
+
grunt.registerTask( 'assets', ['js', 'css'] );
|
198 |
+
};
|
plugin-fw/assets/css/admin 2.css
ADDED
@@ -0,0 +1,345 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*-----------------------
|
2 |
+
YITH Debug
|
3 |
+
------------------------*/
|
4 |
+
#wpadminbar .yith-debug-admin-bar div,
|
5 |
+
#wpadminbar .yith-debug-admin-bar:hover div {
|
6 |
+
background: #05789c !important;
|
7 |
+
color: #fff !important;
|
8 |
+
}
|
9 |
+
|
10 |
+
#wpadminbar .yith-debug-admin-bar a,
|
11 |
+
#wpadminbar .yith-debug-admin-bar strong {
|
12 |
+
color: #fff !important;
|
13 |
+
}
|
14 |
+
|
15 |
+
#wpadminbar .yith-debug-admin-bar strong {
|
16 |
+
font-weight: 600;
|
17 |
+
}
|
18 |
+
|
19 |
+
#wpadminbar .yith-debug-admin-bar-post-meta .ab-empty-item,
|
20 |
+
#wpadminbar .yith-debug-admin-bar-option .ab-empty-item {
|
21 |
+
display: none;
|
22 |
+
}
|
23 |
+
|
24 |
+
#wpadminbar #wp-admin-bar-yith-debug-admin-bar-post-meta-default,
|
25 |
+
#wpadminbar #wp-admin-bar-yith-debug-admin-bar-option-default {
|
26 |
+
padding: 0;
|
27 |
+
max-height: 500px;
|
28 |
+
overflow-y: auto;
|
29 |
+
}
|
30 |
+
|
31 |
+
#wpadminbar .yith-debug-admin-bar pre {
|
32 |
+
padding: 10px;
|
33 |
+
line-height: 1.5em;
|
34 |
+
}
|
35 |
+
|
36 |
+
.notice-yith {
|
37 |
+
margin-left: 0;
|
38 |
+
border-left-color: #acc327;
|
39 |
+
}
|
40 |
+
|
41 |
+
.notice-yith.notice-alt {
|
42 |
+
background-color: #ecf7ed;
|
43 |
+
}
|
44 |
+
|
45 |
+
.yith-promo-banner-image-link {
|
46 |
+
display: block;
|
47 |
+
margin-bottom: 15px;
|
48 |
+
}
|
49 |
+
|
50 |
+
.yith-promo-banner-image {
|
51 |
+
max-width: 100%;
|
52 |
+
margin: 0 auto;
|
53 |
+
display: block;
|
54 |
+
}
|
55 |
+
|
56 |
+
/*-----------------------
|
57 |
+
YITH FEEDS
|
58 |
+
------------------------*/
|
59 |
+
.yith-feeds-wrapper{
|
60 |
+
display: none;
|
61 |
+
}
|
62 |
+
|
63 |
+
.yith-feeds-changelog-plugin-name{
|
64 |
+
display: table;
|
65 |
+
}
|
66 |
+
|
67 |
+
.yith-feeds-logo {
|
68 |
+
display: table-cell !important;
|
69 |
+
background: #005b7c;
|
70 |
+
padding: 5px;
|
71 |
+
border-radius: 50%;
|
72 |
+
margin-right: 10px;
|
73 |
+
vertical-align: text-bottom;
|
74 |
+
width: 18px;
|
75 |
+
height: auto;
|
76 |
+
vertical-align: middle;
|
77 |
+
}
|
78 |
+
|
79 |
+
.yith-feeds-plugin-name {
|
80 |
+
display: table-cell;
|
81 |
+
vertical-align: middle;
|
82 |
+
}
|
83 |
+
|
84 |
+
/*-----------------------
|
85 |
+
YITH Plugins Columns
|
86 |
+
------------------------*/
|
87 |
+
@media screen and (min-width: 783px) {
|
88 |
+
|
89 |
+
.auto-fold #adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu-head {
|
90 |
+
width: 100%;
|
91 |
+
}
|
92 |
+
|
93 |
+
#adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu {
|
94 |
+
min-width: 320px;
|
95 |
+
display: flex;
|
96 |
+
flex-flow: row wrap;
|
97 |
+
}
|
98 |
+
|
99 |
+
#adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head) {
|
100 |
+
width: 50%;
|
101 |
+
border-left: 1px solid #555;
|
102 |
+
box-sizing: border-box;
|
103 |
+
}
|
104 |
+
|
105 |
+
#adminmenu .yith-plugin-fw-menu-2-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head):nth-child(2n) {
|
106 |
+
border-left: none;
|
107 |
+
}
|
108 |
+
|
109 |
+
#adminmenu .yith-plugin-fw-menu-3-columns.wp-not-current-submenu .wp-submenu {
|
110 |
+
min-width: 480px;
|
111 |
+
display: flex;
|
112 |
+
flex-flow: row wrap;
|
113 |
+
}
|
114 |
+
|
115 |
+
#adminmenu .yith-plugin-fw-menu-3-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head) {
|
116 |
+
width: calc(100% / 3);
|
117 |
+
border-left: 1px solid #555;
|
118 |
+
box-sizing: border-box;
|
119 |
+
}
|
120 |
+
|
121 |
+
#adminmenu .yith-plugin-fw-menu-3-columns.wp-not-current-submenu .wp-submenu li:not(.wp-submenu-head):nth-child(3n + 2) {
|
122 |
+
border-left: none;
|
123 |
+
}
|
124 |
+
}
|
125 |
+
|
126 |
+
/*---------------------------
|
127 |
+
YITH System Information
|
128 |
+
----------------------------*/
|
129 |
+
|
130 |
+
.yith-system-info-wrap table.form-table {
|
131 |
+
margin: 0;
|
132 |
+
background: #fff;
|
133 |
+
}
|
134 |
+
|
135 |
+
.yith-system-info-wrap table.form-table th, .yith-system-info-wrap table.form-table td {
|
136 |
+
padding: 30px 20px !important;
|
137 |
+
}
|
138 |
+
|
139 |
+
.yith-system-info-wrap table.form-table th {
|
140 |
+
min-width: 200px;
|
141 |
+
width: auto !important;
|
142 |
+
}
|
143 |
+
|
144 |
+
.yith-system-info-wrap table.form-table textarea.yith-system-info-debug {
|
145 |
+
width: 100%;
|
146 |
+
height: 400px !important;
|
147 |
+
}
|
148 |
+
|
149 |
+
.yith-phpinfo-wrap div table.form-table {
|
150 |
+
border-bottom: none;
|
151 |
+
margin-bottom: 0;
|
152 |
+
}
|
153 |
+
|
154 |
+
.yith-phpinfo-wrap div h2 {
|
155 |
+
border-top: 1px solid #d8d8d8 !important;
|
156 |
+
}
|
157 |
+
|
158 |
+
.yith-phpinfo-wrap div {
|
159 |
+
margin-bottom: 40px;
|
160 |
+
border-bottom: 1px solid #d8d8d8;
|
161 |
+
}
|
162 |
+
|
163 |
+
.yith-phpinfo-wrap div:last-child {
|
164 |
+
margin-bottom: 0;
|
165 |
+
}
|
166 |
+
|
167 |
+
.yith-phpinfo-wrap table.form-table h1.p {
|
168 |
+
color: #2a8db0;
|
169 |
+
text-transform: uppercase;
|
170 |
+
padding: 0;
|
171 |
+
line-height: 64px;
|
172 |
+
}
|
173 |
+
|
174 |
+
|
175 |
+
.yith-phpinfo-wrap table.form-table img {
|
176 |
+
float: right;
|
177 |
+
border: 0;
|
178 |
+
}
|
179 |
+
|
180 |
+
.yith-system-info-wrap .yith-plugin-fw-field-wrapper.progress:after {
|
181 |
+
color: #336374;
|
182 |
+
display: inline-block;
|
183 |
+
font: 400 20px/1 dashicons;
|
184 |
+
speak: none;
|
185 |
+
-webkit-font-smoothing: antialiased;
|
186 |
+
-moz-osx-font-smoothing: grayscale;
|
187 |
+
vertical-align: top;
|
188 |
+
line-height: 28px;
|
189 |
+
content: '\f463';
|
190 |
+
-webkit-animation: rotation 2s infinite linear;
|
191 |
+
animation: rotation 2s infinite linear
|
192 |
+
}
|
193 |
+
|
194 |
+
.yith-system-info h2.yith-sysinfo-title {
|
195 |
+
color: #00729f;
|
196 |
+
font-size: 25px;
|
197 |
+
text-transform: uppercase;
|
198 |
+
font-weight: 800;
|
199 |
+
line-height: 25px;
|
200 |
+
padding: 20px 0;
|
201 |
+
background: none;
|
202 |
+
border: none;
|
203 |
+
}
|
204 |
+
|
205 |
+
#yith-system-alert span.yith-logo,
|
206 |
+
.yith-system-info h2 span.yith-logo {
|
207 |
+
border-radius: 50%;
|
208 |
+
background: #265b7a;
|
209 |
+
height: 30px;
|
210 |
+
width: 30px;
|
211 |
+
display: flex;
|
212 |
+
text-align: center;
|
213 |
+
margin: 0 10px 0 0;
|
214 |
+
float: left;
|
215 |
+
align-items: center;
|
216 |
+
justify-content: center;
|
217 |
+
}
|
218 |
+
|
219 |
+
|
220 |
+
.yith-system-info table td {
|
221 |
+
word-break: break-all;
|
222 |
+
padding: 20px 12px;
|
223 |
+
}
|
224 |
+
|
225 |
+
.yith-system-info table td.requirement-value,
|
226 |
+
.yith-system-info table td.info-value {
|
227 |
+
font-size: 14px;
|
228 |
+
vertical-align: middle;
|
229 |
+
text-align: left;
|
230 |
+
color: #5da726;
|
231 |
+
line-height: 19px;
|
232 |
+
}
|
233 |
+
|
234 |
+
.yith-system-info table td.requirement-value {
|
235 |
+
width: 120px;
|
236 |
+
}
|
237 |
+
|
238 |
+
.yith-system-info table td.requirement-value.has-errors {
|
239 |
+
color: #a00;
|
240 |
+
}
|
241 |
+
|
242 |
+
.yith-system-info table td.requirement-value.has-warnings {
|
243 |
+
color: #ffa200;
|
244 |
+
}
|
245 |
+
|
246 |
+
.yith-system-info table td.requirement-messages ul {
|
247 |
+
margin: 0;
|
248 |
+
padding: 0 0 10px 0;
|
249 |
+
list-style: none !important;
|
250 |
+
}
|
251 |
+
|
252 |
+
.yith-system-info table td.requirement-messages ul li {
|
253 |
+
margin-bottom: 3px;
|
254 |
+
}
|
255 |
+
|
256 |
+
.yith-system-info table td.requirement-messages span.error {
|
257 |
+
color: #a00;
|
258 |
+
font-weight: bold;
|
259 |
+
}
|
260 |
+
|
261 |
+
.yith-system-info table td.requirement-messages span.warning {
|
262 |
+
color: #a00;
|
263 |
+
font-weight: bold;
|
264 |
+
}
|
265 |
+
|
266 |
+
.yith-system-info .debug-code {
|
267 |
+
font-family: monospace;
|
268 |
+
padding: 15px;
|
269 |
+
display: inline-block;
|
270 |
+
background: #f2f3f4;
|
271 |
+
line-height: 22px;
|
272 |
+
border: 2px solid #dfe3e6;
|
273 |
+
border-radius: 5px;
|
274 |
+
margin-right: 20px;
|
275 |
+
}
|
276 |
+
|
277 |
+
.yith-system-info .copy-link {
|
278 |
+
font-size: 11px;
|
279 |
+
font-weight: 600;
|
280 |
+
padding-left: 1.7em;
|
281 |
+
position: relative;
|
282 |
+
text-decoration: none;
|
283 |
+
color: #3889d3;
|
284 |
+
}
|
285 |
+
|
286 |
+
.yith-system-info .copy-link:hover {
|
287 |
+
color: #004b91;
|
288 |
+
}
|
289 |
+
|
290 |
+
.yith-system-info .copy-link:before {
|
291 |
+
background-color: #ffffff;
|
292 |
+
border: 1px solid;
|
293 |
+
bottom: 2px;
|
294 |
+
content: '';
|
295 |
+
display: inline-block;
|
296 |
+
height: 0.9em;
|
297 |
+
left: 0;
|
298 |
+
position: absolute;
|
299 |
+
width: 0.9em;
|
300 |
+
z-index: 2;
|
301 |
+
}
|
302 |
+
|
303 |
+
.yith-system-info .copy-link:after {
|
304 |
+
background-color: #ffffff;
|
305 |
+
border: 1px solid;
|
306 |
+
bottom: 5px;
|
307 |
+
content: '';
|
308 |
+
display: inline-block;
|
309 |
+
height: 0.9em;
|
310 |
+
left: 3px;
|
311 |
+
position: absolute;
|
312 |
+
width: 0.9em;
|
313 |
+
z-index: 1;
|
314 |
+
}
|
315 |
+
|
316 |
+
.yith-system-info .copy-link .copied-tooltip {
|
317 |
+
width: 140px;
|
318 |
+
background-color: #555;
|
319 |
+
color: #fff;
|
320 |
+
text-align: center;
|
321 |
+
border-radius: 6px;
|
322 |
+
padding: 5px;
|
323 |
+
position: absolute;
|
324 |
+
z-index: 1;
|
325 |
+
bottom: 150%;
|
326 |
+
left: 50%;
|
327 |
+
margin-left: -75px;
|
328 |
+
transition: all ease .3s;
|
329 |
+
}
|
330 |
+
|
331 |
+
.yith-system-info .copy-link .copied-tooltip:after {
|
332 |
+
content: "";
|
333 |
+
position: absolute;
|
334 |
+
top: 100%;
|
335 |
+
left: 50%;
|
336 |
+
margin-left: -5px;
|
337 |
+
border-width: 5px;
|
338 |
+
border-style: solid;
|
339 |
+
border-color: #555 transparent transparent transparent;
|
340 |
+
}
|
341 |
+
|
342 |
+
.yith-system-info-menu {
|
343 |
+
font-weight: bold;
|
344 |
+
font-size: 11px !important;
|
345 |
+
}
|
plugin-fw/assets/css/codemirror/codemirror 2.css
ADDED
@@ -0,0 +1,260 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* BASICS */
|
2 |
+
|
3 |
+
.CodeMirror {
|
4 |
+
/* Set height, width, borders, and global font properties here */
|
5 |
+
font-family: monospace;
|
6 |
+
height: 400px;
|
7 |
+
clear: both;
|
8 |
+
padding: 0;
|
9 |
+
}
|
10 |
+
.CodeMirror-scroll {
|
11 |
+
/* Set scrolling behaviour here */
|
12 |
+
overflow: auto;
|
13 |
+
}
|
14 |
+
|
15 |
+
/* PADDING */
|
16 |
+
|
17 |
+
.CodeMirror-lines {
|
18 |
+
padding: 4px 0; /* Vertical padding around content */
|
19 |
+
}
|
20 |
+
.CodeMirror pre {
|
21 |
+
padding: 0 4px; /* Horizontal padding of content */
|
22 |
+
}
|
23 |
+
|
24 |
+
.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
25 |
+
background-color: white; /* The little square between H and V scrollbars */
|
26 |
+
}
|
27 |
+
|
28 |
+
/* GUTTER */
|
29 |
+
|
30 |
+
.CodeMirror-gutters {
|
31 |
+
border-right: 1px solid #ddd;
|
32 |
+
background-color: #f7f7f7;
|
33 |
+
white-space: nowrap;
|
34 |
+
}
|
35 |
+
.CodeMirror-linenumbers {}
|
36 |
+
.CodeMirror-linenumber {
|
37 |
+
padding: 0 3px 0 5px;
|
38 |
+
min-width: 20px;
|
39 |
+
text-align: right;
|
40 |
+
color: #999;
|
41 |
+
}
|
42 |
+
|
43 |
+
/* CURSOR */
|
44 |
+
|
45 |
+
.CodeMirror div.CodeMirror-cursor {
|
46 |
+
border-left: 1px solid black;
|
47 |
+
z-index: 3;
|
48 |
+
}
|
49 |
+
/* Shown when moving in bi-directional text */
|
50 |
+
.CodeMirror div.CodeMirror-secondarycursor {
|
51 |
+
border-left: 1px solid silver;
|
52 |
+
}
|
53 |
+
.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor {
|
54 |
+
width: auto;
|
55 |
+
border: 0;
|
56 |
+
background: #7e7;
|
57 |
+
z-index: 1;
|
58 |
+
}
|
59 |
+
/* Can style cursor different in overwrite (non-insert) mode */
|
60 |
+
.CodeMirror div.CodeMirror-cursor.CodeMirror-overwrite {}
|
61 |
+
|
62 |
+
.cm-tab { display: inline-block; }
|
63 |
+
|
64 |
+
/* DEFAULT THEME */
|
65 |
+
|
66 |
+
.cm-s-default .cm-keyword {color: #708;}
|
67 |
+
.cm-s-default .cm-atom {color: #219;}
|
68 |
+
.cm-s-default .cm-number {color: #164;}
|
69 |
+
.cm-s-default .cm-def {color: #00f;}
|
70 |
+
.cm-s-default .cm-variable {color: black;}
|
71 |
+
.cm-s-default .cm-variable-2 {color: #05a;}
|
72 |
+
.cm-s-default .cm-variable-3 {color: #085;}
|
73 |
+
.cm-s-default .cm-property {color: black;}
|
74 |
+
.cm-s-default .cm-operator {color: black;}
|
75 |
+
.cm-s-default .cm-comment {color: #a50;}
|
76 |
+
.cm-s-default .cm-string {color: #a11;}
|
77 |
+
.cm-s-default .cm-string-2 {color: #f50;}
|
78 |
+
.cm-s-default .cm-meta {color: #555;}
|
79 |
+
.cm-s-default .cm-error {color: #f00;}
|
80 |
+
.cm-s-default .cm-qualifier {color: #555;}
|
81 |
+
.cm-s-default .cm-builtin {color: #30a;}
|
82 |
+
.cm-s-default .cm-bracket {color: #997;}
|
83 |
+
.cm-s-default .cm-tag {color: #170;}
|
84 |
+
.cm-s-default .cm-attribute {color: #00c;}
|
85 |
+
.cm-s-default .cm-header {color: blue;}
|
86 |
+
.cm-s-default .cm-quote {color: #090;}
|
87 |
+
.cm-s-default .cm-hr {color: #999;}
|
88 |
+
.cm-s-default .cm-link {color: #00c;}
|
89 |
+
|
90 |
+
.cm-negative {color: #d44;}
|
91 |
+
.cm-positive {color: #292;}
|
92 |
+
.cm-header, .cm-strong {font-weight: bold;}
|
93 |
+
.cm-em {font-style: italic;}
|
94 |
+
.cm-link {text-decoration: underline;}
|
95 |
+
|
96 |
+
.cm-invalidchar {color: #f00;}
|
97 |
+
|
98 |
+
div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
|
99 |
+
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
|
100 |
+
|
101 |
+
/* STOP */
|
102 |
+
|
103 |
+
/* The rest of this file contains styles related to the mechanics of
|
104 |
+
the editor. You probably shouldn't touch them. */
|
105 |
+
|
106 |
+
.CodeMirror {
|
107 |
+
line-height: 1;
|
108 |
+
position: relative;
|
109 |
+
overflow: hidden;
|
110 |
+
background: #fafafa;
|
111 |
+
color: black;
|
112 |
+
}
|
113 |
+
|
114 |
+
.CodeMirror-scroll {
|
115 |
+
/* 30px is the magic margin used to hide the element's real scrollbars */
|
116 |
+
/* See overflow: hidden in .CodeMirror */
|
117 |
+
margin-bottom: -30px; margin-right: -30px;
|
118 |
+
padding-bottom: 30px; padding-right: 30px;
|
119 |
+
height: 100%;
|
120 |
+
outline: none; /* Prevent dragging from highlighting the element */
|
121 |
+
position: relative;
|
122 |
+
}
|
123 |
+
.CodeMirror-sizer {
|
124 |
+
position: relative;
|
125 |
+
}
|
126 |
+
|
127 |
+
/* The fake, visible scrollbars. Used to force redraw during scrolling
|
128 |
+
before actuall scrolling happens, thus preventing shaking and
|
129 |
+
flickering artifacts. */
|
130 |
+
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
|
131 |
+
position: absolute;
|
132 |
+
z-index: 6;
|
133 |
+
display: none;
|
134 |
+
}
|
135 |
+
.CodeMirror-vscrollbar {
|
136 |
+
right: 0; top: 0;
|
137 |
+
overflow-x: hidden;
|
138 |
+
overflow-y: scroll;
|
139 |
+
}
|
140 |
+
.CodeMirror-hscrollbar {
|
141 |
+
bottom: 0; left: 0;
|
142 |
+
overflow-y: hidden;
|
143 |
+
overflow-x: scroll;
|
144 |
+
}
|
145 |
+
.CodeMirror-scrollbar-filler {
|
146 |
+
right: 0; bottom: 0;
|
147 |
+
}
|
148 |
+
.CodeMirror-gutter-filler {
|
149 |
+
left: 0; bottom: 0;
|
150 |
+
}
|
151 |
+
|
152 |
+
.CodeMirror-gutters {
|
153 |
+
position: absolute; left: 0; top: 0;
|
154 |
+
padding-bottom: 30px;
|
155 |
+
z-index: 3;
|
156 |
+
}
|
157 |
+
.CodeMirror-gutter {
|
158 |
+
white-space: normal;
|
159 |
+
height: 100%;
|
160 |
+
padding-bottom: 30px;
|
161 |
+
margin-bottom: -32px;
|
162 |
+
display: inline-block;
|
163 |
+
/* Hack to make IE7 behave */
|
164 |
+
*zoom:1;
|
165 |
+
*display:inline;
|
166 |
+
}
|
167 |
+
.CodeMirror-gutter-elt {
|
168 |
+
position: absolute;
|
169 |
+
cursor: default;
|
170 |
+
z-index: 4;
|
171 |
+
}
|
172 |
+
|
173 |
+
.CodeMirror-lines {
|
174 |
+
cursor: text;
|
175 |
+
}
|
176 |
+
.CodeMirror pre {
|
177 |
+
/* Reset some styles that the rest of the page might have set */
|
178 |
+
-moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
|
179 |
+
border-width: 0;
|
180 |
+
background: transparent;
|
181 |
+
font-family: inherit;
|
182 |
+
font-size: inherit;
|
183 |
+
margin: 0;
|
184 |
+
white-space: pre;
|
185 |
+
word-wrap: normal;
|
186 |
+
line-height: inherit;
|
187 |
+
color: inherit;
|
188 |
+
z-index: 2;
|
189 |
+
position: relative;
|
190 |
+
overflow: visible;
|
191 |
+
}
|
192 |
+
.CodeMirror-wrap pre {
|
193 |
+
word-wrap: break-word;
|
194 |
+
white-space: pre-wrap;
|
195 |
+
word-break: normal;
|
196 |
+
}
|
197 |
+
.CodeMirror-code pre {
|
198 |
+
border-right: 30px solid transparent;
|
199 |
+
width: -webkit-fit-content;
|
200 |
+
width: -moz-fit-content;
|
201 |
+
width: fit-content;
|
202 |
+
}
|
203 |
+
.CodeMirror-wrap .CodeMirror-code pre {
|
204 |
+
border-right: none;
|
205 |
+
width: auto;
|
206 |
+
}
|
207 |
+
.CodeMirror-linebackground {
|
208 |
+
position: absolute;
|
209 |
+
left: 0; right: 0; top: 0; bottom: 0;
|
210 |
+
z-index: 0;
|
211 |
+
}
|
212 |
+
|
213 |
+
.CodeMirror-linewidget {
|
214 |
+
position: relative;
|
215 |
+
z-index: 2;
|
216 |
+
overflow: auto;
|
217 |
+
}
|
218 |
+
|
219 |
+
.CodeMirror-widget {
|
220 |
+
}
|
221 |
+
|
222 |
+
.CodeMirror-wrap .CodeMirror-scroll {
|
223 |
+
overflow-x: hidden;
|
224 |
+
}
|
225 |
+
|
226 |
+
.CodeMirror-measure {
|
227 |
+
position: absolute;
|
228 |
+
width: 100%; height: 0px;
|
229 |
+
overflow: hidden;
|
230 |
+
visibility: hidden;
|
231 |
+
}
|
232 |
+
.CodeMirror-measure pre { position: static; }
|
233 |
+
|
234 |
+
.CodeMirror div.CodeMirror-cursor {
|
235 |
+
position: absolute;
|
236 |
+
visibility: hidden;
|
237 |
+
border-right: none;
|
238 |
+
width: 0;
|
239 |
+
}
|
240 |
+
.CodeMirror-focused div.CodeMirror-cursor {
|
241 |
+
visibility: visible;
|
242 |
+
}
|
243 |
+
|
244 |
+
.CodeMirror-selected { background: #d9d9d9; }
|
245 |
+
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
|
246 |
+
|
247 |
+
.cm-searching {
|
248 |
+
background: #ffa;
|
249 |
+
background: rgba(255, 255, 0, .4);
|
250 |
+
}
|
251 |
+
|
252 |
+
/* IE7 hack to prevent it from returning funny offsetTops on the spans */
|
253 |
+
.CodeMirror span { *vertical-align: text-bottom; }
|
254 |
+
|
255 |
+
@media print {
|
256 |
+
/* Hide the cursor when printing */
|
257 |
+
.CodeMirror div.CodeMirror-cursor {
|
258 |
+
visibility: hidden;
|
259 |
+
}
|
260 |
+
}
|
plugin-fw/assets/css/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100 2.png
ADDED
Binary file
|
plugin-fw/assets/css/scss/welcome-modal 2.scss
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Welcome Modal.
|
3 |
+
*/
|
4 |
+
.yith-plugin-fw-welcome-modal {
|
5 |
+
.yith-plugin-fw__modal__content {
|
6 |
+
padding-bottom : 0;
|
7 |
+
}
|
8 |
+
|
9 |
+
.yith-plugin-fw__modal__footer {
|
10 |
+
background : transparent;
|
11 |
+
text-align : center;
|
12 |
+
}
|
13 |
+
|
14 |
+
}
|
15 |
+
|
16 |
+
.yith-plugin-fw-welcome {
|
17 |
+
line-height : 1.5em;
|
18 |
+
|
19 |
+
a {
|
20 |
+
color : var(--yith-link);
|
21 |
+
}
|
22 |
+
|
23 |
+
.yith-plugin-fw-welcome__head {
|
24 |
+
text-align : center;
|
25 |
+
}
|
26 |
+
|
27 |
+
.yith-plugin-fw-welcome__icon {
|
28 |
+
width : 60px;
|
29 |
+
}
|
30 |
+
|
31 |
+
.yith-plugin-fw-welcome__title {
|
32 |
+
color : #03689f;
|
33 |
+
font-size : 18px;
|
34 |
+
line-height : 2em;
|
35 |
+
}
|
36 |
+
|
37 |
+
.yith-plugin-fw-welcome__description {
|
38 |
+
margin : 15px 0 25px;
|
39 |
+
}
|
40 |
+
|
41 |
+
.yith-plugin-fw-welcome__title__plugin-name {
|
42 |
+
font-weight : 700;
|
43 |
+
}
|
44 |
+
|
45 |
+
.yith-plugin-fw-welcome__list-head {
|
46 |
+
display : flex;
|
47 |
+
align-items : center;
|
48 |
+
}
|
49 |
+
|
50 |
+
.yith-plugin-fw-welcome__list-head__title {
|
51 |
+
font-size : 1.2em;
|
52 |
+
font-weight : 700;
|
53 |
+
flex : 1;
|
54 |
+
}
|
55 |
+
|
56 |
+
.yith-plugin-fw-welcome__list-head__changelog {
|
57 |
+
font-size : .85em;
|
58 |
+
text-decoration : none;
|
59 |
+
font-weight : 500;
|
60 |
+
}
|
61 |
+
|
62 |
+
&.yith-plugin-fw-welcome--update {
|
63 |
+
.yith-plugin-fw-welcome__list-head {
|
64 |
+
margin-top : 30px;
|
65 |
+
}
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
.yith-plugin-fw-welcome__close {
|
70 |
+
color : var(--yith-link);
|
71 |
+
cursor : pointer;
|
72 |
+
font-size : .9em;
|
73 |
+
display : inline-block;
|
74 |
+
padding : 5px 10px;
|
75 |
+
text-decoration : none;
|
76 |
+
font-weight : 500;
|
77 |
+
}
|
plugin-fw/assets/css/scss/welcome-modal.scss
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Welcome Modal.
|
3 |
+
*/
|
4 |
+
.yith-plugin-fw-welcome-modal {
|
5 |
+
.yith-plugin-fw__modal__content {
|
6 |
+
padding-bottom : 0;
|
7 |
+
}
|
8 |
+
|
9 |
+
.yith-plugin-fw__modal__footer {
|
10 |
+
background : transparent;
|
11 |
+
text-align : center;
|
12 |
+
}
|
13 |
+
|
14 |
+
}
|
15 |
+
|
16 |
+
.yith-plugin-fw-welcome {
|
17 |
+
line-height : 1.5em;
|
18 |
+
|
19 |
+
a {
|
20 |
+
color : var(--yith-link);
|
21 |
+
}
|
22 |
+
|
23 |
+
.yith-plugin-fw-welcome__head {
|
24 |
+
text-align : center;
|
25 |
+
}
|
26 |
+
|
27 |
+
.yith-plugin-fw-welcome__icon {
|
28 |
+
width : 60px;
|
29 |
+
}
|
30 |
+
|
31 |
+
.yith-plugin-fw-welcome__title {
|
32 |
+
color : #03689f;
|
33 |
+
font-size : 18px;
|
34 |
+
line-height : 2em;
|
35 |
+
}
|
36 |
+
|
37 |
+
.yith-plugin-fw-welcome__description {
|
38 |
+
margin : 15px 0 25px;
|
39 |
+
}
|
40 |
+
|
41 |
+
.yith-plugin-fw-welcome__title__plugin-name {
|
42 |
+
font-weight : 700;
|
43 |
+
}
|
44 |
+
|
45 |
+
.yith-plugin-fw-welcome__list-head {
|
46 |
+
display : flex;
|
47 |
+
align-items : center;
|
48 |
+
}
|
49 |
+
|
50 |
+
.yith-plugin-fw-welcome__list-head__title {
|
51 |
+
font-size : 1.2em;
|
52 |
+
font-weight : 700;
|
53 |
+
flex : 1;
|
54 |
+
}
|
55 |
+
|
56 |
+
.yith-plugin-fw-welcome__list-head__changelog {
|
57 |
+
font-size : .85em;
|
58 |
+
text-decoration : none;
|
59 |
+
font-weight : 500;
|
60 |
+
}
|
61 |
+
|
62 |
+
&.yith-plugin-fw-welcome--update {
|
63 |
+
.yith-plugin-fw-welcome__list-head {
|
64 |
+
margin-top : 30px;
|
65 |
+
}
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
.yith-plugin-fw-welcome__close {
|
70 |
+
color : var(--yith-link);
|
71 |
+
cursor : pointer;
|
72 |
+
font-size : .9em;
|
73 |
+
display : inline-block;
|
74 |
+
padding : 5px 10px;
|
75 |
+
text-decoration : none;
|
76 |
+
font-weight : 500;
|
77 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui.scss
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import "yith-plugin-ui/head_comment";
|
2 |
+
|
3 |
+
@import "yith-plugin-ui/variables";
|
4 |
+
@import "yith-plugin-ui/wp-pages";
|
5 |
+
@import "yith-plugin-ui/taxonomy";
|
6 |
+
@import "yith-plugin-ui/components";
|
7 |
+
@import "yith-plugin-ui/tables";
|
8 |
+
@import "yith-plugin-ui/animations";
|
plugin-fw/assets/css/scss/yith-plugin-ui/_animations 2.scss
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* YITH Animations
|
3 |
+
*/
|
4 |
+
|
5 |
+
.yith-plugin-fw-animate__appear-from-bottom{
|
6 |
+
animation: yith-plugin-fw-appear-from-bottom .3s forwards;
|
7 |
+
}
|
8 |
+
|
9 |
+
.yith-plugin-fw-animate__appear-from-top{
|
10 |
+
animation: yith-plugin-fw-appear-from-top .3s forwards;
|
11 |
+
}
|
12 |
+
|
13 |
+
.yith-plugin-fw-animate__fade-in{
|
14 |
+
animation: yith-plugin-fw-fade-in .3s forwards;
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
@-webkit-keyframes yith-plugin-fw-appear-from-top {
|
19 |
+
from {
|
20 |
+
opacity: 0;
|
21 |
+
transform: translateY(-30%);
|
22 |
+
-webkit-transform: translateY(-30%);
|
23 |
+
}
|
24 |
+
|
25 |
+
to {
|
26 |
+
opacity: 1;
|
27 |
+
transform: translateY(0);
|
28 |
+
-webkit-transform: translateY(0);
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
@keyframes yith-plugin-fw-appear-from-top {
|
33 |
+
from {
|
34 |
+
opacity: 0;
|
35 |
+
transform: translateY(-30%);
|
36 |
+
-webkit-transform: translateY(-30%);
|
37 |
+
}
|
38 |
+
|
39 |
+
to {
|
40 |
+
opacity: 1;
|
41 |
+
transform: translateY(0);
|
42 |
+
-webkit-transform: translateY(0);
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
@-webkit-keyframes yith-plugin-fw-appear-from-bottom {
|
47 |
+
from {
|
48 |
+
opacity: 0;
|
49 |
+
transform: translateY(+30%);
|
50 |
+
-webkit-transform: translateY(+30%);
|
51 |
+
}
|
52 |
+
|
53 |
+
to {
|
54 |
+
opacity: 1;
|
55 |
+
transform: translateY(0);
|
56 |
+
-webkit-transform: translateY(0);
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
@keyframes yith-plugin-fw-appear-from-bottom {
|
61 |
+
from {
|
62 |
+
opacity: 0;
|
63 |
+
transform: translateY(+30%);
|
64 |
+
-webkit-transform: translateY(+30%);
|
65 |
+
}
|
66 |
+
|
67 |
+
to {
|
68 |
+
opacity: 1;
|
69 |
+
transform: translateY(0);
|
70 |
+
-webkit-transform: translateY(0);
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
@-webkit-keyframes yith-plugin-fw-fade-in {
|
75 |
+
from {
|
76 |
+
opacity: 0;
|
77 |
+
}
|
78 |
+
|
79 |
+
to {
|
80 |
+
opacity: 1;
|
81 |
+
}
|
82 |
+
}
|
83 |
+
|
84 |
+
@keyframes yith-plugin-fw-fade-in {
|
85 |
+
from {
|
86 |
+
opacity: 0;
|
87 |
+
}
|
88 |
+
|
89 |
+
to {
|
90 |
+
opacity: 1;
|
91 |
+
}
|
92 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/_animations.scss
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* YITH Animations
|
3 |
+
*/
|
4 |
+
|
5 |
+
.yith-plugin-fw-animate__appear-from-bottom{
|
6 |
+
animation: yith-plugin-fw-appear-from-bottom .3s forwards;
|
7 |
+
}
|
8 |
+
|
9 |
+
.yith-plugin-fw-animate__appear-from-top{
|
10 |
+
animation: yith-plugin-fw-appear-from-top .3s forwards;
|
11 |
+
}
|
12 |
+
|
13 |
+
.yith-plugin-fw-animate__fade-in{
|
14 |
+
animation: yith-plugin-fw-fade-in .3s forwards;
|
15 |
+
}
|
16 |
+
|
17 |
+
|
18 |
+
@-webkit-keyframes yith-plugin-fw-appear-from-top {
|
19 |
+
from {
|
20 |
+
opacity: 0;
|
21 |
+
transform: translateY(-30%);
|
22 |
+
-webkit-transform: translateY(-30%);
|
23 |
+
}
|
24 |
+
|
25 |
+
to {
|
26 |
+
opacity: 1;
|
27 |
+
transform: translateY(0);
|
28 |
+
-webkit-transform: translateY(0);
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
@keyframes yith-plugin-fw-appear-from-top {
|
33 |
+
from {
|
34 |
+
opacity: 0;
|
35 |
+
transform: translateY(-30%);
|
36 |
+
-webkit-transform: translateY(-30%);
|
37 |
+
}
|
38 |
+
|
39 |
+
to {
|
40 |
+
opacity: 1;
|
41 |
+
transform: translateY(0);
|
42 |
+
-webkit-transform: translateY(0);
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
@-webkit-keyframes yith-plugin-fw-appear-from-bottom {
|
47 |
+
from {
|
48 |
+
opacity: 0;
|
49 |
+
transform: translateY(+30%);
|
50 |
+
-webkit-transform: translateY(+30%);
|
51 |
+
}
|
52 |
+
|
53 |
+
to {
|
54 |
+
opacity: 1;
|
55 |
+
transform: translateY(0);
|
56 |
+
-webkit-transform: translateY(0);
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
@keyframes yith-plugin-fw-appear-from-bottom {
|
61 |
+
from {
|
62 |
+
opacity: 0;
|
63 |
+
transform: translateY(+30%);
|
64 |
+
-webkit-transform: translateY(+30%);
|
65 |
+
}
|
66 |
+
|
67 |
+
to {
|
68 |
+
opacity: 1;
|
69 |
+
transform: translateY(0);
|
70 |
+
-webkit-transform: translateY(0);
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
@-webkit-keyframes yith-plugin-fw-fade-in {
|
75 |
+
from {
|
76 |
+
opacity: 0;
|
77 |
+
}
|
78 |
+
|
79 |
+
to {
|
80 |
+
opacity: 1;
|
81 |
+
}
|
82 |
+
}
|
83 |
+
|
84 |
+
@keyframes yith-plugin-fw-fade-in {
|
85 |
+
from {
|
86 |
+
opacity: 0;
|
87 |
+
}
|
88 |
+
|
89 |
+
to {
|
90 |
+
opacity: 1;
|
91 |
+
}
|
92 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/_components.scss
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* YITH Plugin UI - Components
|
3 |
+
*/
|
4 |
+
|
5 |
+
@import "components/action-button";
|
6 |
+
@import "components/buttons";
|
7 |
+
@import "components/boxed-row";
|
8 |
+
@import "components/confirm";
|
9 |
+
@import "components/list-items";
|
10 |
+
@import "components/list-table-blank-state";
|
11 |
+
@import "components/modal";
|
12 |
+
@import "components/tip-tip";
|
13 |
+
@import "components/tabs";
|
plugin-fw/assets/css/scss/yith-plugin-ui/_head_comment.scss
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* YITH Plugin UI style
|
3 |
+
*
|
4 |
+
* IMPORTANT: This file is automatically generated through SCSS files.
|
5 |
+
* Please don't edit it manually!
|
6 |
+
*/
|
plugin-fw/assets/css/scss/yith-plugin-ui/_tables.scss
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* YITH Plugin UI - Post Type Style
|
3 |
+
*/
|
4 |
+
|
5 |
+
@import "mixins/tables";
|
6 |
+
|
7 |
+
table.yith-plugin-fw__classic-table {
|
8 |
+
@include classic-table;
|
9 |
+
|
10 |
+
&.wp-list-table{
|
11 |
+
@include wp-table-commons;
|
12 |
+
}
|
13 |
+
}
|
14 |
+
|
15 |
+
table.yith-plugin-fw__boxed-table {
|
16 |
+
@include boxed-table;
|
17 |
+
|
18 |
+
&.wp-list-table{
|
19 |
+
@include wp-table-commons;
|
20 |
+
}
|
21 |
+
}
|
22 |
+
|
23 |
+
// WP List Tables
|
24 |
+
.yith-plugin-ui--classic-wp-list-style, .yith-plugin-ui #plugin-fw-wc .yith-plugin-ui--classic-wp-list-style {
|
25 |
+
|
26 |
+
table.wp-list-table {
|
27 |
+
@include classic-table;
|
28 |
+
|
29 |
+
@include wp-table-commons;
|
30 |
+
}
|
31 |
+
|
32 |
+
.tablenav.bottom {
|
33 |
+
display: none;
|
34 |
+
|
35 |
+
.yith-plugin-fw__list-table-blank-state {
|
36 |
+
display: flex;
|
37 |
+
}
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
.yith-plugin-ui--boxed-wp-list-style, .yith-plugin-ui #plugin-fw-wc .yith-plugin-ui--boxed-wp-list-style {
|
42 |
+
|
43 |
+
table.wp-list-table {
|
44 |
+
@include boxed-table;
|
45 |
+
|
46 |
+
@include wp-table-commons;
|
47 |
+
}
|
48 |
+
|
49 |
+
.tablenav.bottom {
|
50 |
+
display: none;
|
51 |
+
|
52 |
+
.yith-plugin-fw__list-table-blank-state {
|
53 |
+
display: flex;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/_taxonomy.scss
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* YITH Plugin UI - Taxonomy Style
|
3 |
+
*/
|
4 |
+
|
5 |
+
.yith-plugin-ui.yith-plugin-ui--taxonomy-type, .yith-plugin-ui--taxonomy-type {
|
6 |
+
|
7 |
+
// List
|
8 |
+
|
9 |
+
#col-container {
|
10 |
+
display: flex;
|
11 |
+
}
|
12 |
+
|
13 |
+
#col-left {
|
14 |
+
padding: 20px;
|
15 |
+
background: #f1f1f1;
|
16 |
+
border-radius: 8px;
|
17 |
+
box-sizing: border-box;
|
18 |
+
margin-right: 15px;
|
19 |
+
}
|
20 |
+
|
21 |
+
#col-right {
|
22 |
+
flex: 1;
|
23 |
+
}
|
24 |
+
|
25 |
+
h2 {
|
26 |
+
border: none;
|
27 |
+
padding: 0;
|
28 |
+
font-size: 14px;
|
29 |
+
background: transparent;
|
30 |
+
}
|
31 |
+
|
32 |
+
// Edit Tax
|
33 |
+
.wrap h1 {
|
34 |
+
color: #2a8db0;
|
35 |
+
font-size: 16px;
|
36 |
+
font-weight: 600;
|
37 |
+
}
|
38 |
+
}
|
39 |
+
|
40 |
+
@media screen and (max-width: 782px) {
|
41 |
+
.yith-plugin-ui.yith-plugin-ui--taxonomy-type {
|
42 |
+
#col-container {
|
43 |
+
display: block;
|
44 |
+
}
|
45 |
+
|
46 |
+
#col-left, #col-right {
|
47 |
+
float: none;
|
48 |
+
width: 100%;
|
49 |
+
}
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
plugin-fw/assets/css/scss/yith-plugin-ui/_variables.scss
ADDED
@@ -0,0 +1,121 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* YITH CSS Variables
|
3 |
+
*/
|
4 |
+
|
5 |
+
$content_bg: #ffffff; // Content Background.
|
6 |
+
$content_text: #3c434a; // Content Text.
|
7 |
+
|
8 |
+
$primary: #00799f; // Primary color, for buttons
|
9 |
+
$primary_hover: #0094c4; // Primary hover color, for buttons
|
10 |
+
$primary_focus: #bddce6; // Primary focus color, for buttons
|
11 |
+
$primary_text: #ffffff; // Text on primary color bg
|
12 |
+
|
13 |
+
$delete: #c41d04; // color for delete buttons
|
14 |
+
$delete_hover: lighten($delete, 5%); // color for delete buttons - hover
|
15 |
+
$delete_text: #ffffff; // Text on delete buttons
|
16 |
+
$delete_focus: #f0d2cd; // Delete focus color, for buttons
|
17 |
+
|
18 |
+
// Outline is used to stylize Secondary buttons.
|
19 |
+
$outline_text: #0087b3; // outline button - text color
|
20 |
+
$outline_border: #0094c4; // outline button - border color
|
21 |
+
$outline_bg: rgba(255, 255, 255, 0); // outline button - background color
|
22 |
+
$outline_bg_hover: rgba(157, 198, 205, .2); // outline button - background color on hover
|
23 |
+
$outline_border_hover: #007ba3; // outline button - border color on hover
|
24 |
+
$outline_focus: #dfeef2; // Outline focus color, for buttons
|
25 |
+
|
26 |
+
$delete_outline_text: $delete; // Delete-outline button - text color
|
27 |
+
$delete_outline_border: $delete; // Delete-outline button - border color
|
28 |
+
$delete_outline_bg: rgba(205, 157, 157, 0); // Delete-outline button - background color
|
29 |
+
$delete_outline_bg_hover: rgba(232, 184, 184, 0.15); // Delete-outline button - background color on hover
|
30 |
+
$delete_outline_border_hover: #db2b11; // Delete-outline button - border color on hover
|
31 |
+
$delete_outline_focus: #ffe9e7; // Delete-outline focus color, for buttons
|
32 |
+
|
33 |
+
$update: #94aa09; // Update button - background
|
34 |
+
$update_hover: darken($update, 5%); // Update button - hover
|
35 |
+
$update_text: #ffffff; // Text on update button background
|
36 |
+
$update_focus: #e7eccc; // Text on update button background
|
37 |
+
|
38 |
+
$accent: #98aa36;
|
39 |
+
|
40 |
+
$light_bg: #f5fafc;
|
41 |
+
$light_border_color: #d7e3e7;
|
42 |
+
$light_shadow: rgba(145, 191, 227, 0.11);
|
43 |
+
$light_accent: #0073aa;
|
44 |
+
|
45 |
+
$success: #98aa36;
|
46 |
+
$success_light: lighten($success, 30%);
|
47 |
+
$success_lighter: lighten($success, 43%);
|
48 |
+
$success_lightest: lighten($success, 50%);
|
49 |
+
|
50 |
+
|
51 |
+
$table_row_highlight: #f0f6fb;
|
52 |
+
$table_row_striped: #f6f7f7;
|
53 |
+
$table_border_light: #eff0f0;
|
54 |
+
|
55 |
+
$field_border_color: #d8d8d8;
|
56 |
+
$field_border_weight: 1px;
|
57 |
+
$field_border: $field_border_weight solid $field_border_color;
|
58 |
+
|
59 |
+
$link: #0079b0; // Link Color.
|
60 |
+
|
61 |
+
// Extra variables: these will be not converted to CSS Variables
|
62 |
+
$wp_menu_size: 160px;
|
63 |
+
$wp_menu_folded_size: 36px;
|
64 |
+
$wp_menu_mobile_size: 190px;
|
65 |
+
$wp_top_bar_size: 32px;
|
66 |
+
$wp_top_bar_mobile_size: 46px;
|
67 |
+
|
68 |
+
// export vars as CSS vars
|
69 |
+
:root {
|
70 |
+
--yith-content-bg: #{$content_bg};
|
71 |
+
--yith-content-text: #{$content_text};
|
72 |
+
--yith-primary: #{$primary};
|
73 |
+
--yith-primary-hover: #{$primary_hover};
|
74 |
+
--yith-primary-focus: #{$primary_focus};
|
75 |
+
--yith-primary-text: #{$primary_text};
|
76 |
+
|
77 |
+
--yith-delete: #{$delete};
|
78 |
+
--yith-delete-hover: #{$delete_hover};
|
79 |
+
--yith-delete-text: #{$delete_text};
|
80 |
+
--yith-delete-focus: #{$delete_focus};
|
81 |
+
|
82 |
+
--yith-update: #{$update};
|
83 |
+
--yith-update-hover: #{$update_hover};
|
84 |
+
--yith-update-text: #{$update_text};
|
85 |
+
--yith-update-focus: #{$update_focus};
|
86 |
+
|
87 |
+
--yith-outline-text: #{$outline_text};
|
88 |
+
--yith-outline-border: #{$outline_border};
|
89 |
+
--yith-outline-bg: #{$outline_bg};
|
90 |
+
--yith-outline-bg-hover: #{$outline_bg_hover};
|
91 |
+
--yith-outline-border-hover: #{$outline_border_hover};
|
92 |
+
--yith-outline-focus: #{$outline_focus};
|
93 |
+
|
94 |
+
--yith-delete-outline-text: #{$delete_outline_text};
|
95 |
+
--yith-delete-outline-border: #{$delete_outline_border};
|
96 |
+
--yith-delete-outline-bg: #{$delete_outline_bg};
|
97 |
+
--yith-delete-outline-bg-hover: #{$delete_outline_bg_hover};
|
98 |
+
--yith-delete-outline-border-hover: #{$delete_outline_border_hover};
|
99 |
+
--yith-delete-outline-focus: #{$delete_outline_focus};
|
100 |
+
|
101 |
+
--yith-accent: #{$accent};
|
102 |
+
|
103 |
+
--yith-light-bg: #{$light_bg};
|
104 |
+
--yith-light-border-color: #{$light_border_color};
|
105 |
+
--yith-light-shadow: #{$light_shadow};
|
106 |
+
--yith-light-accent: #{$light_accent};
|
107 |
+
|
108 |
+
--yith-success: #{$success};
|
109 |
+
--yith-success-light: #{$success_light};
|
110 |
+
--yith-success-lighter: #{$success_lighter};
|
111 |
+
--yith-success-lightest: #{$success_lightest};
|
112 |
+
|
113 |
+
--yith-table-row-highlight: #{$table_row_highlight};
|
114 |
+
--yith-table-row-striped: #{$table_row_striped};
|
115 |
+
--yith-table-border-light: #{$table_border_light};
|
116 |
+
|
117 |
+
--yith-field-border-color: #{$field_border_color};
|
118 |
+
--yith-field-border-weight: #{$field_border_color};
|
119 |
+
--yith-field-border: #{$field_border};
|
120 |
+
--yith-link: #{$link};
|
121 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/_wp-pages.scss
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* YITH Plugin UI - WP Pages
|
3 |
+
*/
|
4 |
+
|
5 |
+
.yith-plugin-fw-wp-page-wrapper {
|
6 |
+
|
7 |
+
.yith-plugin-fw__back-to-wp-list__wrapper {
|
8 |
+
margin: -5px 0 15px;
|
9 |
+
|
10 |
+
.yith-plugin-fw__back-to-wp-list {
|
11 |
+
text-decoration: none;
|
12 |
+
font-weight: 600;
|
13 |
+
text-transform: uppercase;
|
14 |
+
color: var(--yith-link);
|
15 |
+
vertical-align: middle;
|
16 |
+
|
17 |
+
&:before {
|
18 |
+
content: "\e901";
|
19 |
+
font-family: yith-icon;
|
20 |
+
margin-right: 5px;
|
21 |
+
font-size: .8em;
|
22 |
+
vertical-align: middle;
|
23 |
+
}
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
.wrap div#message.updated {
|
28 |
+
display: none;
|
29 |
+
padding: 15px 40px 15px 45px;
|
30 |
+
margin: 15px 0 20px;
|
31 |
+
border-radius: 5px;
|
32 |
+
background: var(--yith-success-lightest);
|
33 |
+
border: 1px solid var(--yith-success-light);
|
34 |
+
font-weight: 600;
|
35 |
+
font-size: 14px;
|
36 |
+
text-align: left;
|
37 |
+
color: var(--yith-content-text);
|
38 |
+
box-shadow: 1px 1px 2px var(--yith-success-lighter);
|
39 |
+
|
40 |
+
|
41 |
+
&:before {
|
42 |
+
font-family: yith-icon;
|
43 |
+
content: "\e921";
|
44 |
+
position: absolute;
|
45 |
+
top: 50%;
|
46 |
+
left: 13px;
|
47 |
+
font-size: 21px;
|
48 |
+
font-weight: 400;
|
49 |
+
transform: translateY(-50%);
|
50 |
+
color: var(--yith-success);
|
51 |
+
}
|
52 |
+
|
53 |
+
p {
|
54 |
+
padding: 0;
|
55 |
+
margin: 0;
|
56 |
+
}
|
57 |
+
|
58 |
+
.notice-dismiss {
|
59 |
+
position: absolute;
|
60 |
+
top: 50%;
|
61 |
+
right: 10px;
|
62 |
+
transform: translateY(-50%);
|
63 |
+
border-radius: 50%;
|
64 |
+
color: var(--yith-success);
|
65 |
+
padding: 7px;
|
66 |
+
background: transparent;
|
67 |
+
box-shadow: 0 0 0 5px rgba(0, 0, 0, 0);
|
68 |
+
transition: all .3s ease-in-out;
|
69 |
+
|
70 |
+
&:before {
|
71 |
+
font-family: yith-icon;
|
72 |
+
content: "\e906";
|
73 |
+
font-weight: 600;
|
74 |
+
font-size: 12px;
|
75 |
+
color: inherit;
|
76 |
+
}
|
77 |
+
|
78 |
+
&:hover {
|
79 |
+
box-shadow: 0 0 0 0 var(--yith-success-lighter);
|
80 |
+
background: var(--yith-success-lighter);
|
81 |
+
}
|
82 |
+
|
83 |
+
&:hover:before, &:active:before, &:focus:before {
|
84 |
+
color: inherit;
|
85 |
+
}
|
86 |
+
}
|
87 |
+
}
|
88 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_action-button 2.scss
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.yith-plugin-ui .yith-plugin-fw__action-button, .yith-plugin-fw__action-button {
|
2 |
+
height: 35px;
|
3 |
+
width: 35px;
|
4 |
+
background-color: var(--yith-content-bg);
|
5 |
+
display: inline-block;
|
6 |
+
border: 0;
|
7 |
+
border-radius: 50%;
|
8 |
+
transition: .3s;
|
9 |
+
cursor: pointer;
|
10 |
+
box-shadow: 0 2px 7px rgba(170, 198, 222, .5);
|
11 |
+
outline: none;
|
12 |
+
position: relative;
|
13 |
+
margin: 0 5px 5px 0;
|
14 |
+
vertical-align: middle;
|
15 |
+
|
16 |
+
.yith-plugin-fw__action-button__link {
|
17 |
+
height: 100%;
|
18 |
+
width: 100%;
|
19 |
+
display: inline-block;
|
20 |
+
}
|
21 |
+
|
22 |
+
.yith-plugin-fw__action-button__icon {
|
23 |
+
position: absolute;
|
24 |
+
color: var(--yith-link);
|
25 |
+
font-size: 17px;
|
26 |
+
top: 50%;
|
27 |
+
left: 50%;
|
28 |
+
transform: translateX(-50%) translateY(-50%);
|
29 |
+
}
|
30 |
+
|
31 |
+
&.yith-plugin-fw__action-button--trash-action .yith-plugin-fw__action-button__icon,
|
32 |
+
&.yith-plugin-fw__action-button--delete-action .yith-plugin-fw__action-button__icon {
|
33 |
+
color: #a10000;
|
34 |
+
}
|
35 |
+
|
36 |
+
.yith-plugin-fw__action-button__menu {
|
37 |
+
position: absolute;
|
38 |
+
display: none;
|
39 |
+
flex-direction: column;
|
40 |
+
width: max-content;
|
41 |
+
right: 0;
|
42 |
+
margin: 5px 0 0 0;
|
43 |
+
padding: 8px 0;
|
44 |
+
background: var(--yith-content-bg);
|
45 |
+
border-radius: 5px;
|
46 |
+
box-shadow: 0 2px 7px rgba(170, 198, 222, .5);
|
47 |
+
z-index: 10;
|
48 |
+
animation: yith-plugin-fw-appear-from-top .3s forwards;
|
49 |
+
}
|
50 |
+
|
51 |
+
.yith-plugin-fw__action-button__menu__item {
|
52 |
+
margin: 0;
|
53 |
+
display: block;
|
54 |
+
padding: 7px 25px;
|
55 |
+
color: var(--yith-content-text);
|
56 |
+
cursor: pointer;
|
57 |
+
text-decoration: none;
|
58 |
+
text-align: right;
|
59 |
+
|
60 |
+
&:hover {
|
61 |
+
color: var(--yith-link);
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
&.yith-plugin-fw__action-button--has-menu {
|
66 |
+
.yith-plugin-fw__action-button__icon {
|
67 |
+
color: var(--yith-content-text);
|
68 |
+
}
|
69 |
+
|
70 |
+
&.yith-plugin-fw__action-button--opened {
|
71 |
+
.yith-plugin-fw__action-button__icon {
|
72 |
+
color: var(--yith-link);
|
73 |
+
}
|
74 |
+
|
75 |
+
.yith-plugin-fw__action-button__menu {
|
76 |
+
display: flex;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
}
|
80 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_action-button.scss
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.yith-plugin-ui .yith-plugin-fw__action-button, .yith-plugin-fw__action-button {
|
2 |
+
height: 35px;
|
3 |
+
width: 35px;
|
4 |
+
background-color: var(--yith-content-bg);
|
5 |
+
display: inline-block;
|
6 |
+
border: 0;
|
7 |
+
border-radius: 50%;
|
8 |
+
transition: .3s;
|
9 |
+
cursor: pointer;
|
10 |
+
box-shadow: 0 2px 7px rgba(170, 198, 222, .5);
|
11 |
+
outline: none;
|
12 |
+
position: relative;
|
13 |
+
margin: 0 5px 5px 0;
|
14 |
+
vertical-align: middle;
|
15 |
+
|
16 |
+
.yith-plugin-fw__action-button__link {
|
17 |
+
height: 100%;
|
18 |
+
width: 100%;
|
19 |
+
display: inline-block;
|
20 |
+
}
|
21 |
+
|
22 |
+
.yith-plugin-fw__action-button__icon {
|
23 |
+
position: absolute;
|
24 |
+
color: var(--yith-link);
|
25 |
+
font-size: 17px;
|
26 |
+
top: 50%;
|
27 |
+
left: 50%;
|
28 |
+
transform: translateX(-50%) translateY(-50%);
|
29 |
+
}
|
30 |
+
|
31 |
+
&.yith-plugin-fw__action-button--trash-action .yith-plugin-fw__action-button__icon,
|
32 |
+
&.yith-plugin-fw__action-button--delete-action .yith-plugin-fw__action-button__icon {
|
33 |
+
color: #a10000;
|
34 |
+
}
|
35 |
+
|
36 |
+
.yith-plugin-fw__action-button__menu {
|
37 |
+
position: absolute;
|
38 |
+
display: none;
|
39 |
+
flex-direction: column;
|
40 |
+
width: max-content;
|
41 |
+
right: 0;
|
42 |
+
margin: 5px 0 0 0;
|
43 |
+
padding: 8px 0;
|
44 |
+
background: var(--yith-content-bg);
|
45 |
+
border-radius: 5px;
|
46 |
+
box-shadow: 0 2px 7px rgba(170, 198, 222, .5);
|
47 |
+
z-index: 10;
|
48 |
+
animation: yith-plugin-fw-appear-from-top .3s forwards;
|
49 |
+
}
|
50 |
+
|
51 |
+
.yith-plugin-fw__action-button__menu__item {
|
52 |
+
margin: 0;
|
53 |
+
display: block;
|
54 |
+
padding: 7px 25px;
|
55 |
+
color: var(--yith-content-text);
|
56 |
+
cursor: pointer;
|
57 |
+
text-decoration: none;
|
58 |
+
text-align: right;
|
59 |
+
|
60 |
+
&:hover {
|
61 |
+
color: var(--yith-link);
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
&.yith-plugin-fw__action-button--has-menu {
|
66 |
+
.yith-plugin-fw__action-button__icon {
|
67 |
+
color: var(--yith-content-text);
|
68 |
+
}
|
69 |
+
|
70 |
+
&.yith-plugin-fw__action-button--opened {
|
71 |
+
.yith-plugin-fw__action-button__icon {
|
72 |
+
color: var(--yith-link);
|
73 |
+
}
|
74 |
+
|
75 |
+
.yith-plugin-fw__action-button__menu {
|
76 |
+
display: flex;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
}
|
80 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_boxed-row.scss
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
.yith-plugin-fw__boxed-row, .yith-plugin-fw__boxed-row--hover-highlight {
|
3 |
+
background: var(--yith-content-bg);
|
4 |
+
border-radius: 5px;
|
5 |
+
box-shadow: 0 0 0 1px var(--yith-light-border-color), 0 3px 11px 6px var(--yith-light-shadow);
|
6 |
+
transition: background-color .2s ease-in-out;
|
7 |
+
padding: 25px;
|
8 |
+
margin-bottom: 25px;
|
9 |
+
margin-top: 25px;
|
10 |
+
}
|
11 |
+
|
12 |
+
.yith-plugin-fw__boxed-row--hover-highlight:hover {
|
13 |
+
background: var(--yith-table-row-highlight);
|
14 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_buttons.scss
ADDED
@@ -0,0 +1,224 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import "../mixins/buttons";
|
2 |
+
|
3 |
+
.yith-plugin-ui, .wp-core-ui .yith-plugin-ui {
|
4 |
+
|
5 |
+
// WordPress Buttons.
|
6 |
+
.button-primary, .button-secondary {
|
7 |
+
border-radius : 3px;
|
8 |
+
text-transform : none;
|
9 |
+
box-shadow : none;
|
10 |
+
border : 1px solid;
|
11 |
+
font-weight : 600;
|
12 |
+
padding : 0 12px;
|
13 |
+
outline : none;
|
14 |
+
height : auto;
|
15 |
+
transition : all ease 0.3s;
|
16 |
+
text-shadow : none;
|
17 |
+
display : inline-block;
|
18 |
+
text-decoration : none;
|
19 |
+
cursor : pointer;
|
20 |
+
white-space : nowrap;
|
21 |
+
|
22 |
+
&:focus {
|
23 |
+
outline : none;
|
24 |
+
box-shadow : none;
|
25 |
+
}
|
26 |
+
|
27 |
+
&.button-small {
|
28 |
+
padding : 0 8px;
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
.button-secondary {
|
33 |
+
@include button-secondary;
|
34 |
+
}
|
35 |
+
|
36 |
+
.button-primary {
|
37 |
+
@include button-primary;
|
38 |
+
}
|
39 |
+
|
40 |
+
.button.action,
|
41 |
+
#doaction,
|
42 |
+
#doaction2,
|
43 |
+
#post-query-submit,
|
44 |
+
#posts-filter #delete_all,
|
45 |
+
#search-submit,
|
46 |
+
.button.filter-button {
|
47 |
+
@include button;
|
48 |
+
@include button-secondary;
|
49 |
+
height : auto;
|
50 |
+
line-height : 33px;
|
51 |
+
border-radius : 8px;
|
52 |
+
padding : 0 15px;
|
53 |
+
font-weight : 600;
|
54 |
+
}
|
55 |
+
|
56 |
+
#posts-filter #delete_all {
|
57 |
+
@include button-delete-outline;
|
58 |
+
}
|
59 |
+
|
60 |
+
.tablenav .tablenav-pages .button,
|
61 |
+
.tablenav .tablenav-pages .tablenav-pages-navspan {
|
62 |
+
@include button-secondary;
|
63 |
+
}
|
64 |
+
|
65 |
+
@media screen and (max-width : 782px) {
|
66 |
+
.tablenav .tablenav-pages .button, .tablenav .tablenav-pages .tablenav-pages-navspan {
|
67 |
+
min-width : 44px;
|
68 |
+
padding : 12px 8px;
|
69 |
+
font-size : 18px;
|
70 |
+
line-height : 1;
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
// YITH Buttons.
|
75 |
+
.yith-plugin-fw__button, [class^="yith-plugin-fw__button--"], [class*=" yith-plugin-fw__button--"],
|
76 |
+
.yith-add-button, .yith-edit-button, .yith-update-button, .yith-remove-button, .yith-plugin-fw-upload-button, .yith-save-button, .yith-plugin-fw-select-all, .yith-plugin-fw-deselect-all, .yith-plugin-fw-upload-button-reset // Old buttons.
|
77 |
+
{
|
78 |
+
@include button;
|
79 |
+
}
|
80 |
+
|
81 |
+
.yith-plugin-fw__button--primary {
|
82 |
+
@include button-primary;
|
83 |
+
}
|
84 |
+
|
85 |
+
.yith-plugin-fw__button--secondary {
|
86 |
+
@include button-secondary;
|
87 |
+
}
|
88 |
+
|
89 |
+
.yith-plugin-fw__button--delete {
|
90 |
+
@include button-delete;
|
91 |
+
}
|
92 |
+
|
93 |
+
.yith-plugin-fw__button--add, .yith-add-button {
|
94 |
+
@include button-primary;
|
95 |
+
|
96 |
+
@include button-with-icon("\f115");
|
97 |
+
|
98 |
+
&:before {
|
99 |
+
display : inline-block;
|
100 |
+
margin : 0 10px 0 -5px;
|
101 |
+
font-size : .95em;
|
102 |
+
transition : transform .2s, margin .2s, font-size .2s;
|
103 |
+
transition-timing-function : ease-in-out;
|
104 |
+
}
|
105 |
+
|
106 |
+
&.closed {
|
107 |
+
@include button-secondary;
|
108 |
+
|
109 |
+
&:before {
|
110 |
+
font-size : 1.15em;
|
111 |
+
margin : 0 8px 0 -5px;
|
112 |
+
transform : rotate(-45deg);
|
113 |
+
}
|
114 |
+
}
|
115 |
+
}
|
116 |
+
|
117 |
+
.yith-plugin-fw__button--close {
|
118 |
+
@include button-secondary;
|
119 |
+
|
120 |
+
@include button-with-icon("\f117");
|
121 |
+
}
|
122 |
+
|
123 |
+
.yith-plugin-fw__button--edit, .yith-edit-button {
|
124 |
+
@include button-secondary;
|
125 |
+
|
126 |
+
@include button-with-icon("\e907");
|
127 |
+
}
|
128 |
+
|
129 |
+
.yith-plugin-fw__button--update, .yith-update-button {
|
130 |
+
@include button-update;
|
131 |
+
|
132 |
+
@include button-with-icon("\e90b");
|
133 |
+
}
|
134 |
+
|
135 |
+
.yith-plugin-fw__button--trash, .yith-remove-button {
|
136 |
+
@include button-delete;
|
137 |
+
|
138 |
+
@include button-with-icon("\e90d");
|
139 |
+
}
|
140 |
+
|
141 |
+
.yith-plugin-fw__button--upload, .yith-plugin-fw-upload-button {
|
142 |
+
@include button-primary;
|
143 |
+
|
144 |
+
@include button-with-icon("\e90c");
|
145 |
+
}
|
146 |
+
|
147 |
+
// Old buttons.
|
148 |
+
.yith-save-button {
|
149 |
+
@include button-primary;
|
150 |
+
}
|
151 |
+
|
152 |
+
.yith-plugin-fw-select-all,
|
153 |
+
.yith-plugin-fw-deselect-all,
|
154 |
+
.yith-plugin-fw-upload-button-reset {
|
155 |
+
@include button-secondary;
|
156 |
+
}
|
157 |
+
|
158 |
+
// with icons.
|
159 |
+
.button-secondary span.yith-icon {
|
160 |
+
margin-left : 0;
|
161 |
+
margin-right : 10px;
|
162 |
+
line-height : normal;
|
163 |
+
|
164 |
+
&:before {
|
165 |
+
color : inherit;
|
166 |
+
font-size : 15px;
|
167 |
+
font-weight : 400;
|
168 |
+
}
|
169 |
+
}
|
170 |
+
|
171 |
+
// With icon
|
172 |
+
.yith-plugin-fw__button--with-icon {
|
173 |
+
position : relative;
|
174 |
+
padding-left : 30px;
|
175 |
+
|
176 |
+
i {
|
177 |
+
position : absolute;
|
178 |
+
top : 50%;
|
179 |
+
left : 10px;
|
180 |
+
transform : translateY(-50%);
|
181 |
+
font-size : 1em;
|
182 |
+
font-weight : 400;
|
183 |
+
}
|
184 |
+
}
|
185 |
+
|
186 |
+
|
187 |
+
// Button Sizes
|
188 |
+
.yith-plugin-fw__button--xl, .button-xl {
|
189 |
+
padding : 0 20px;
|
190 |
+
font-size : 14px;
|
191 |
+
line-height : 38px;
|
192 |
+
|
193 |
+
&::before {
|
194 |
+
margin : 0 10px 0 -5px;
|
195 |
+
}
|
196 |
+
|
197 |
+
&.yith-plugin-fw__button--with-icon {
|
198 |
+
padding-left : 40px;
|
199 |
+
|
200 |
+
i {
|
201 |
+
left : 14px;
|
202 |
+
}
|
203 |
+
}
|
204 |
+
}
|
205 |
+
|
206 |
+
.yith-plugin-fw__button--xxl {
|
207 |
+
padding : 0 28px;
|
208 |
+
font-size : 16px;
|
209 |
+
line-height : 45px;
|
210 |
+
|
211 |
+
&::before {
|
212 |
+
margin : 0 15px 0 -10px;
|
213 |
+
}
|
214 |
+
|
215 |
+
&.yith-plugin-fw__button--with-icon {
|
216 |
+
padding-left : 45px;
|
217 |
+
|
218 |
+
i {
|
219 |
+
left : 15px;
|
220 |
+
}
|
221 |
+
}
|
222 |
+
}
|
223 |
+
}
|
224 |
+
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_confirm.scss
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import "../mixins/buttons";
|
2 |
+
|
3 |
+
.yith-plugin-fw__confirm__wrap {
|
4 |
+
|
5 |
+
.yith-plugin-fw__confirm__message {
|
6 |
+
margin-bottom: 20px;
|
7 |
+
}
|
8 |
+
|
9 |
+
.yith-plugin-fw__confirm__footer {
|
10 |
+
text-align: right;
|
11 |
+
}
|
12 |
+
|
13 |
+
|
14 |
+
.yith-plugin-fw__confirm__button {
|
15 |
+
height: auto;
|
16 |
+
line-height: 33px;
|
17 |
+
border-radius: 4px;
|
18 |
+
padding: 0 20px;
|
19 |
+
font-weight: 600;
|
20 |
+
cursor: pointer;
|
21 |
+
display: inline-block;
|
22 |
+
margin-right: 10px;
|
23 |
+
white-space: nowrap;
|
24 |
+
|
25 |
+
&:last-child {
|
26 |
+
margin-right: 0;
|
27 |
+
}
|
28 |
+
|
29 |
+
&.yith-plugin-fw__confirm__button--cancel {
|
30 |
+
@include button-secondary;
|
31 |
+
}
|
32 |
+
|
33 |
+
&.yith-plugin-fw__confirm__button--confirm {
|
34 |
+
@include button-primary;
|
35 |
+
}
|
36 |
+
|
37 |
+
&.yith-plugin-fw__confirm__button--delete {
|
38 |
+
@include button-delete;
|
39 |
+
}
|
40 |
+
}
|
41 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_list-items.scss
ADDED
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.yith-plugin-fw__list-items {
|
2 |
+
display : grid;
|
3 |
+
grid-gap : 13px;
|
4 |
+
margin : 15px 0 0;
|
5 |
+
}
|
6 |
+
|
7 |
+
.yith-plugin-fw__list-item {
|
8 |
+
.yith-plugin-fw__list-item__wrap {
|
9 |
+
padding : 12px 18px;
|
10 |
+
border : 1px solid #e6e6e6;
|
11 |
+
background : #f5f5f5;
|
12 |
+
display : flex;
|
13 |
+
align-items : center;
|
14 |
+
text-decoration : none;
|
15 |
+
color : inherit;
|
16 |
+
}
|
17 |
+
|
18 |
+
&:not(.yith-plugin-fw__list-item--no-link) {
|
19 |
+
.yith-plugin-fw__list-item__wrap:hover {
|
20 |
+
border-color : #bcd9f6;
|
21 |
+
background : #e5eef7;
|
22 |
+
|
23 |
+
.yith-plugin-fw__list-item__step,
|
24 |
+
.yith-plugin-fw__list-item__arrow {
|
25 |
+
color : var(--yith-link);
|
26 |
+
}
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
mark {
|
31 |
+
background : transparent;
|
32 |
+
color : var(--yith-link);
|
33 |
+
}
|
34 |
+
|
35 |
+
.yith-plugin-fw__list-item__step {
|
36 |
+
font-size : 30px;
|
37 |
+
font-weight : 700;
|
38 |
+
text-align : center;
|
39 |
+
width : 60px;
|
40 |
+
margin-left : -14px;
|
41 |
+
color : #717171;
|
42 |
+
opacity : .36;
|
43 |
+
}
|
44 |
+
|
45 |
+
.yith-plugin-fw__list-item__content {
|
46 |
+
font-weight : 500;
|
47 |
+
flex : 1;
|
48 |
+
}
|
49 |
+
|
50 |
+
.yith-plugin-fw__list-item__title {
|
51 |
+
font-size : 1.1em;
|
52 |
+
}
|
53 |
+
|
54 |
+
.yith-plugin-fw__list-item__description {
|
55 |
+
font-size : .85em;
|
56 |
+
margin-top : .5em;
|
57 |
+
}
|
58 |
+
|
59 |
+
.yith-plugin-fw__list-item__cta {
|
60 |
+
margin-top : .7em;
|
61 |
+
color : var(--yith-link);
|
62 |
+
font-size : .85em;
|
63 |
+
font-weight : 500;
|
64 |
+
}
|
65 |
+
|
66 |
+
.yith-plugin-fw__list-item__arrow {
|
67 |
+
color : #717171;
|
68 |
+
margin-left : 10px;
|
69 |
+
font-size : 12px;
|
70 |
+
font-weight : 800;
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
.yith-plugin-fw__list-items--list {
|
75 |
+
.yith-plugin-fw__list-item__title {
|
76 |
+
font-style : italic;
|
77 |
+
}
|
78 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_list-table-blank-state.scss
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.yith-plugin-fw__list-table-blank-state {
|
2 |
+
padding: 30px 30px 0;
|
3 |
+
text-align: center;
|
4 |
+
display: flex;
|
5 |
+
flex-direction: column;
|
6 |
+
|
7 |
+
& > * {
|
8 |
+
margin-bottom: 30px;
|
9 |
+
}
|
10 |
+
|
11 |
+
img.yith-plugin-fw__list-table-blank-state__icon {
|
12 |
+
width: 100px;
|
13 |
+
margin: 0 auto 30px;
|
14 |
+
}
|
15 |
+
|
16 |
+
i.yith-plugin-fw__list-table-blank-state__icon {
|
17 |
+
font-size: 65px;
|
18 |
+
margin: 0 auto 30px;
|
19 |
+
}
|
20 |
+
|
21 |
+
.yith-plugin-fw__list-table-blank-state__message {
|
22 |
+
font-size: 1.4em;
|
23 |
+
line-height: 1.5;
|
24 |
+
}
|
25 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_modal.scss
ADDED
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.yith-plugin-fw__modal__wrap {
|
2 |
+
display: flex;
|
3 |
+
align-items: center;
|
4 |
+
justify-content: center;
|
5 |
+
position: fixed;
|
6 |
+
top: 0;
|
7 |
+
left: 0;
|
8 |
+
width: 100%;
|
9 |
+
height: 100%;
|
10 |
+
z-index: 999999;
|
11 |
+
background: rgba(34, 59, 80, 0.7);
|
12 |
+
animation: yith-plugin-fw-fade-in .3s forwards;
|
13 |
+
box-sizing: border-box;
|
14 |
+
|
15 |
+
.yith-plugin-fw__modal__main {
|
16 |
+
position: relative;
|
17 |
+
background: #fff;
|
18 |
+
border-radius: 10px;
|
19 |
+
box-shadow: 1px 3px 16px rgba(0, 22, 59, .4);
|
20 |
+
animation: yith-plugin-fw-appear-from-top .3s forwards;
|
21 |
+
overflow: hidden;
|
22 |
+
max-width: calc(100% - 20px);
|
23 |
+
max-height: calc(100% - 20px);
|
24 |
+
display: flex;
|
25 |
+
flex-direction: column;
|
26 |
+
}
|
27 |
+
|
28 |
+
.yith-plugin-fw__modal__close {
|
29 |
+
position: absolute;
|
30 |
+
top: 0;
|
31 |
+
right: 0;
|
32 |
+
padding: 8px;
|
33 |
+
font-size: 14px;
|
34 |
+
font-weight: 600;
|
35 |
+
color: #aaa;
|
36 |
+
cursor: pointer;
|
37 |
+
|
38 |
+
&:hover {
|
39 |
+
color: #444;
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
.yith-plugin-fw__modal__title {
|
44 |
+
padding: 20px 25px;
|
45 |
+
font-size: 1.5em;
|
46 |
+
font-weight: 600;
|
47 |
+
line-height: 1.5em;
|
48 |
+
color: var(--yith-primary);
|
49 |
+
}
|
50 |
+
|
51 |
+
.yith-plugin-fw__modal__content {
|
52 |
+
padding: 0 25px 25px;
|
53 |
+
}
|
54 |
+
|
55 |
+
.yith-plugin-fw__modal__footer {
|
56 |
+
padding: 25px;
|
57 |
+
background: #f7f7f7;
|
58 |
+
}
|
59 |
+
|
60 |
+
&.yith-plugin-fw__modal__wrap--scroll-content {
|
61 |
+
.yith-plugin-fw__modal__content {
|
62 |
+
overflow-y: auto;
|
63 |
+
}
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
.yith-plugin-fw__modal--opened {
|
68 |
+
overflow: hidden;
|
69 |
+
}
|
70 |
+
|
71 |
+
// Allow seeing WP Menu.
|
72 |
+
|
73 |
+
.yith-plugin-fw__modal--allow-wp-menu {
|
74 |
+
.yith-plugin-fw__modal__wrap {
|
75 |
+
z-index: 99;
|
76 |
+
padding-left: $wp_menu_size;
|
77 |
+
padding-top: $wp_top_bar_size;
|
78 |
+
}
|
79 |
+
|
80 |
+
#adminmenuback {
|
81 |
+
z-index: 100;
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
@media only screen and (max-width: 960px) {
|
86 |
+
.folded {
|
87 |
+
.yith-plugin-fw__modal__wrap {
|
88 |
+
padding-left: $wp_menu_folded_size;
|
89 |
+
}
|
90 |
+
}
|
91 |
+
|
92 |
+
.auto-fold {
|
93 |
+
.yith-plugin-fw__modal--allow-wp-menu {
|
94 |
+
.yith-plugin-fw__modal__wrap {
|
95 |
+
padding-left: $wp_menu_folded_size;
|
96 |
+
}
|
97 |
+
}
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
@media screen and (max-width: 782px) {
|
102 |
+
.auto-fold {
|
103 |
+
.yith-plugin-fw__modal--allow-wp-menu {
|
104 |
+
.yith-plugin-fw__modal__wrap {
|
105 |
+
z-index: 999999;
|
106 |
+
width: 100%;
|
107 |
+
height: 100%;
|
108 |
+
padding-left: 0;
|
109 |
+
padding-top: 0;
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
.yith-plugin-fw__modal--allow-wp-menu-in-mobile {
|
114 |
+
.yith-plugin-fw__modal__wrap {
|
115 |
+
z-index: 99;
|
116 |
+
padding-top: $wp_top_bar_mobile_size;
|
117 |
+
}
|
118 |
+
|
119 |
+
&.wp-responsive-open {
|
120 |
+
.yith-plugin-fw__modal__wrap {
|
121 |
+
padding-left: $wp_menu_mobile_size;
|
122 |
+
}
|
123 |
+
}
|
124 |
+
}
|
125 |
+
|
126 |
+
|
127 |
+
}
|
128 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_tabs.scss
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.yith-plugin-ui .yith-plugin-fw__tabs {
|
2 |
+
background : transparent;
|
3 |
+
padding : 0;
|
4 |
+
margin : 0;
|
5 |
+
display : flex;
|
6 |
+
align-items : center;
|
7 |
+
border-bottom : 1px solid var(--yith-light-border-color);
|
8 |
+
flex-wrap : wrap;
|
9 |
+
|
10 |
+
.yith-plugin-fw__tab {
|
11 |
+
border : 0;
|
12 |
+
margin : 0;
|
13 |
+
display : block;
|
14 |
+
}
|
15 |
+
|
16 |
+
.yith-plugin-fw__tab__handler, a.yith-plugin-fw__tab__handler {
|
17 |
+
background : var(--yith-content-bg);
|
18 |
+
border : 0;
|
19 |
+
border-bottom : 3px solid transparent;
|
20 |
+
padding : 17px 20px 15px;
|
21 |
+
font-weight : 600;
|
22 |
+
color : inherit;
|
23 |
+
text-decoration : none;
|
24 |
+
display : block;
|
25 |
+
transition : all .2s ease-in-out;
|
26 |
+
opacity : .55;
|
27 |
+
|
28 |
+
&:hover {
|
29 |
+
opacity : 1;
|
30 |
+
background : var(--yith-light-bg);
|
31 |
+
color : var(--yith-light-accent);
|
32 |
+
}
|
33 |
+
}
|
34 |
+
|
35 |
+
.yith-plugin-fw__tab.yith-plugin-fw__tab--active .yith-plugin-fw__tab__handler,
|
36 |
+
.yith-plugin-fw__tab__handler.yith-plugin-fw__tab__handler--enabled {
|
37 |
+
opacity : 1;
|
38 |
+
color : var(--yith-light-accent);
|
39 |
+
border-color : var(--yith-light-accent);
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
.yith-plugin-ui .yith-plugin-fw__tab-panel {
|
44 |
+
padding : 20px;
|
45 |
+
|
46 |
+
&.yith-plugin-fw__tab-panel--outlined {
|
47 |
+
border-width : 0 1px 1px 1px;
|
48 |
+
border-style : solid;
|
49 |
+
border-color : var(--yith-light-border-color);
|
50 |
+
}
|
51 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/components/_tip-tip.scss
ADDED
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@import "../mixins/buttons";
|
2 |
+
|
3 |
+
#tiptip_holder {
|
4 |
+
display: none;
|
5 |
+
pointer-events: none; /* Fix tip flashing when hover the edge */
|
6 |
+
z-index: 8675309;
|
7 |
+
position: absolute;
|
8 |
+
top: 0;
|
9 |
+
|
10 |
+
/*rtl:ignore*/
|
11 |
+
left: 0;
|
12 |
+
|
13 |
+
|
14 |
+
&.tip_top {
|
15 |
+
padding-bottom: 5px;
|
16 |
+
|
17 |
+
#tiptip_arrow_inner {
|
18 |
+
margin-top: -7px;
|
19 |
+
margin-left: -6px;
|
20 |
+
border-top-color: #333;
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
24 |
+
&.tip_bottom {
|
25 |
+
padding-top: 5px;
|
26 |
+
|
27 |
+
#tiptip_arrow_inner {
|
28 |
+
margin-top: -5px;
|
29 |
+
margin-left: -6px;
|
30 |
+
border-bottom-color: #333;
|
31 |
+
}
|
32 |
+
}
|
33 |
+
|
34 |
+
&.tip_right {
|
35 |
+
padding-left: 5px;
|
36 |
+
|
37 |
+
#tiptip_arrow_inner {
|
38 |
+
margin-top: -6px;
|
39 |
+
margin-left: -5px;
|
40 |
+
border-right-color: #333;
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
&.tip_left {
|
45 |
+
padding-right: 5px;
|
46 |
+
|
47 |
+
#tiptip_arrow_inner {
|
48 |
+
margin-top: -6px;
|
49 |
+
margin-left: -7px;
|
50 |
+
border-left-color: #333;
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
|
55 |
+
#tiptip_content {
|
56 |
+
color: #fff;
|
57 |
+
font-size: 0.8em;
|
58 |
+
max-width: 150px;
|
59 |
+
background: #333;
|
60 |
+
text-align: center;
|
61 |
+
border-radius: 3px;
|
62 |
+
padding: 0.618em 1em;
|
63 |
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
|
64 |
+
|
65 |
+
code {
|
66 |
+
padding: 1px;
|
67 |
+
background: #888;
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
#tiptip_arrow,
|
72 |
+
#tiptip_arrow_inner {
|
73 |
+
position: absolute;
|
74 |
+
border-color: transparent;
|
75 |
+
border-style: solid;
|
76 |
+
border-width: 6px;
|
77 |
+
height: 0;
|
78 |
+
width: 0;
|
79 |
+
}
|
80 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/mixins/_buttons 2.scss
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@mixin button {
|
2 |
+
display: inline-block;
|
3 |
+
height: auto;
|
4 |
+
line-height: 30px;
|
5 |
+
border-radius: 4px;
|
6 |
+
padding: 0 17px;
|
7 |
+
font-weight: 600;
|
8 |
+
cursor: pointer;
|
9 |
+
transition: all .3s ease-in-out;
|
10 |
+
text-decoration: none;
|
11 |
+
white-space: nowrap;
|
12 |
+
|
13 |
+
&:focus {
|
14 |
+
outline: none;
|
15 |
+
box-shadow: none;
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
@mixin button-primary {
|
20 |
+
background: var(--yith-primary);
|
21 |
+
color: var(--yith-primary-text);
|
22 |
+
border: 1px solid var(--yith-primary);
|
23 |
+
|
24 |
+
&:focus {
|
25 |
+
background: var(--yith-primary);
|
26 |
+
color: var(--yith-primary-text);
|
27 |
+
border: 1px solid var(--yith-primary);
|
28 |
+
box-shadow: 0 0 0 3px var(--yith-primary-focus);
|
29 |
+
}
|
30 |
+
|
31 |
+
&:hover, &:active {
|
32 |
+
background: var(--yith-primary-hover);
|
33 |
+
color: var(--yith-primary-text);
|
34 |
+
border: 1px solid var(--yith-primary-hover);
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
@mixin button-secondary {
|
39 |
+
background: var(--yith-outline-bg);
|
40 |
+
border: 1px solid var(--yith-outline-border);
|
41 |
+
color: var(--yith-outline-text);
|
42 |
+
|
43 |
+
&:focus {
|
44 |
+
background: var(--yith-outline-bg);
|
45 |
+
border: 1px solid var(--yith-outline-border);
|
46 |
+
color: var(--yith-outline-text);
|
47 |
+
box-shadow: 0 0 0 3px var(--yith-outline-focus);
|
48 |
+
}
|
49 |
+
|
50 |
+
&:hover, &:active {
|
51 |
+
background: var(--yith-outline-bg-hover);
|
52 |
+
border-color: var(--yith-outline-border-hover);
|
53 |
+
color: var(--yith-outline-text);
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
@mixin button-update {
|
58 |
+
background: var(--yith-update);
|
59 |
+
color: var(--yith-update-text);
|
60 |
+
border: 1px solid var(--yith-update);
|
61 |
+
|
62 |
+
&:focus {
|
63 |
+
background: var(--yith-update);
|
64 |
+
color: var(--yith-update-text);
|
65 |
+
border: 1px solid var(--yith-update);
|
66 |
+
box-shadow: 0 0 0 3px var(--yith-update-focus);
|
67 |
+
}
|
68 |
+
|
69 |
+
&:hover, &:active {
|
70 |
+
background: var(--yith-update-hover);
|
71 |
+
color: var(--yith-update-text);
|
72 |
+
border: 1px solid var(--yith-update-hover);
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
@mixin button-delete {
|
77 |
+
background: var(--yith-delete);
|
78 |
+
color: var(--yith-delete-text);
|
79 |
+
border: 1px solid var(--yith-delete);
|
80 |
+
|
81 |
+
&:focus {
|
82 |
+
background: var(--yith-delete);
|
83 |
+
color: var(--yith-delete-text);
|
84 |
+
border: 1px solid var(--yith-delete);
|
85 |
+
box-shadow: 0 0 0 3px var(--yith-delete-focus);
|
86 |
+
}
|
87 |
+
|
88 |
+
&:hover, &:active {
|
89 |
+
background: var(--yith-delete-hover);
|
90 |
+
color: var(--yith-delete-text);
|
91 |
+
border: 1px solid var(--yith-delete-hover);
|
92 |
+
}
|
93 |
+
}
|
94 |
+
|
95 |
+
@mixin button-delete-outline {
|
96 |
+
background: var(--yith-delete-outline-bg);
|
97 |
+
border: 1px solid var(--yith-delete-outline-border);
|
98 |
+
color: var(--yith-delete-outline-text);
|
99 |
+
|
100 |
+
&:focus {
|
101 |
+
background: var(--yith-delete-outline-bg);
|
102 |
+
border: 1px solid var(--yith-delete-outline-border);
|
103 |
+
color: var(--yith-delete-outline-text);
|
104 |
+
box-shadow: 0 0 0 3px var(--yith-delete-outline-focus);
|
105 |
+
}
|
106 |
+
|
107 |
+
&:hover, &:active {
|
108 |
+
background: var(--yith-delete-outline-bg-hover);
|
109 |
+
border-color: var(--yith-delete-outline-border-hover);
|
110 |
+
color: var(--yith-delete-outline-text);
|
111 |
+
}
|
112 |
+
}
|
113 |
+
|
114 |
+
@mixin button-with-icon($icon) {
|
115 |
+
|
116 |
+
&:before {
|
117 |
+
font-family: yith-icon;
|
118 |
+
content: $icon;
|
119 |
+
margin: 0 8px 0 -5px;
|
120 |
+
font-size: 1.15em;
|
121 |
+
font-weight: 400;
|
122 |
+
vertical-align: top;
|
123 |
+
}
|
124 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/mixins/_buttons.scss
ADDED
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@mixin button {
|
2 |
+
display: inline-block;
|
3 |
+
height: auto;
|
4 |
+
line-height: 30px;
|
5 |
+
border-radius: 4px;
|
6 |
+
padding: 0 17px;
|
7 |
+
font-weight: 600;
|
8 |
+
cursor: pointer;
|
9 |
+
transition: all .3s ease-in-out;
|
10 |
+
text-decoration: none;
|
11 |
+
white-space: nowrap;
|
12 |
+
|
13 |
+
&:focus {
|
14 |
+
outline: none;
|
15 |
+
box-shadow: none;
|
16 |
+
}
|
17 |
+
}
|
18 |
+
|
19 |
+
@mixin button-primary {
|
20 |
+
background: var(--yith-primary);
|
21 |
+
color: var(--yith-primary-text);
|
22 |
+
border: 1px solid var(--yith-primary);
|
23 |
+
|
24 |
+
&:focus {
|
25 |
+
background: var(--yith-primary);
|
26 |
+
color: var(--yith-primary-text);
|
27 |
+
border: 1px solid var(--yith-primary);
|
28 |
+
box-shadow: 0 0 0 3px var(--yith-primary-focus);
|
29 |
+
}
|
30 |
+
|
31 |
+
&:hover, &:active {
|
32 |
+
background: var(--yith-primary-hover);
|
33 |
+
color: var(--yith-primary-text);
|
34 |
+
border: 1px solid var(--yith-primary-hover);
|
35 |
+
}
|
36 |
+
}
|
37 |
+
|
38 |
+
@mixin button-secondary {
|
39 |
+
background: var(--yith-outline-bg);
|
40 |
+
border: 1px solid var(--yith-outline-border);
|
41 |
+
color: var(--yith-outline-text);
|
42 |
+
|
43 |
+
&:focus {
|
44 |
+
background: var(--yith-outline-bg);
|
45 |
+
border: 1px solid var(--yith-outline-border);
|
46 |
+
color: var(--yith-outline-text);
|
47 |
+
box-shadow: 0 0 0 3px var(--yith-outline-focus);
|
48 |
+
}
|
49 |
+
|
50 |
+
&:hover, &:active {
|
51 |
+
background: var(--yith-outline-bg-hover);
|
52 |
+
border-color: var(--yith-outline-border-hover);
|
53 |
+
color: var(--yith-outline-text);
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
@mixin button-update {
|
58 |
+
background: var(--yith-update);
|
59 |
+
color: var(--yith-update-text);
|
60 |
+
border: 1px solid var(--yith-update);
|
61 |
+
|
62 |
+
&:focus {
|
63 |
+
background: var(--yith-update);
|
64 |
+
color: var(--yith-update-text);
|
65 |
+
border: 1px solid var(--yith-update);
|
66 |
+
box-shadow: 0 0 0 3px var(--yith-update-focus);
|
67 |
+
}
|
68 |
+
|
69 |
+
&:hover, &:active {
|
70 |
+
background: var(--yith-update-hover);
|
71 |
+
color: var(--yith-update-text);
|
72 |
+
border: 1px solid var(--yith-update-hover);
|
73 |
+
}
|
74 |
+
}
|
75 |
+
|
76 |
+
@mixin button-delete {
|
77 |
+
background: var(--yith-delete);
|
78 |
+
color: var(--yith-delete-text);
|
79 |
+
border: 1px solid var(--yith-delete);
|
80 |
+
|
81 |
+
&:focus {
|
82 |
+
background: var(--yith-delete);
|
83 |
+
color: var(--yith-delete-text);
|
84 |
+
border: 1px solid var(--yith-delete);
|
85 |
+
box-shadow: 0 0 0 3px var(--yith-delete-focus);
|
86 |
+
}
|
87 |
+
|
88 |
+
&:hover, &:active {
|
89 |
+
background: var(--yith-delete-hover);
|
90 |
+
color: var(--yith-delete-text);
|
91 |
+
border: 1px solid var(--yith-delete-hover);
|
92 |
+
}
|
93 |
+
}
|
94 |
+
|
95 |
+
@mixin button-delete-outline {
|
96 |
+
background: var(--yith-delete-outline-bg);
|
97 |
+
border: 1px solid var(--yith-delete-outline-border);
|
98 |
+
color: var(--yith-delete-outline-text);
|
99 |
+
|
100 |
+
&:focus {
|
101 |
+
background: var(--yith-delete-outline-bg);
|
102 |
+
border: 1px solid var(--yith-delete-outline-border);
|
103 |
+
color: var(--yith-delete-outline-text);
|
104 |
+
box-shadow: 0 0 0 3px var(--yith-delete-outline-focus);
|
105 |
+
}
|
106 |
+
|
107 |
+
&:hover, &:active {
|
108 |
+
background: var(--yith-delete-outline-bg-hover);
|
109 |
+
border-color: var(--yith-delete-outline-border-hover);
|
110 |
+
color: var(--yith-delete-outline-text);
|
111 |
+
}
|
112 |
+
}
|
113 |
+
|
114 |
+
@mixin button-with-icon($icon) {
|
115 |
+
|
116 |
+
&:before {
|
117 |
+
font-family: yith-icon;
|
118 |
+
content: $icon;
|
119 |
+
margin: 0 8px 0 -5px;
|
120 |
+
font-size: 1.15em;
|
121 |
+
font-weight: 400;
|
122 |
+
vertical-align: top;
|
123 |
+
}
|
124 |
+
}
|
plugin-fw/assets/css/scss/yith-plugin-ui/mixins/_tables.scss
ADDED
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
@mixin table-action-buttons {
|
2 |
+
|
3 |
+
thead th.column-actions, tfoot th.column-actions {
|
4 |
+
visibility: hidden;
|
5 |
+
}
|
6 |
+
|
7 |
+
th.column-actions, td.column-actions {
|
8 |
+
text-align: right;
|
9 |
+
}
|
10 |
+
|
11 |
+
.yith-plugin-fw__action-button:not(.yith-plugin-fw__action-button--visible) {
|
12 |
+
opacity: 0;
|
13 |
+
transition: .3s;
|
14 |
+
}
|
15 |
+
|
16 |
+
tbody tr:hover .yith-plugin-fw__action-button:not(.yith-plugin-fw__action-button--visible) {
|
17 |
+
opacity: 1;
|
18 |
+
}
|
19 |
+
}
|
20 |
+
|
21 |
+
@mixin wp-table-commons {
|
22 |
+
|
23 |
+
tfoot {
|
24 |
+
display: none;
|
25 |
+
}
|
26 |
+
|
27 |
+
.check-column {
|
28 |
+
width: 2em;
|
29 |
+
}
|
30 |
+
|
31 |
+
th.sortable a, th.sorted a {
|
32 |
+
padding: 0 8px 0 0;
|
33 |
+
color: inherit;
|
34 |
+
|
35 |
+
&:hover {
|
36 |
+
color: var(--yith-link);
|
37 |
+
}
|
38 |
+
}
|
39 |
+
|
40 |
+
.sorting-indicator {
|
41 |
+
visibility: visible;
|
42 |
+
|
43 |
+
&:before {
|
44 |
+
font-family: yith-icon;
|
45 |
+
content: "\f116";
|
46 |
+
color: inherit;
|
47 |
+
font-size: 10px;
|
48 |
+
top: 0;
|
49 |
+
left: 0;
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
th.sorted.asc .sorting-indicator:before,
|
54 |
+
th.desc:hover span.sorting-indicator:before,
|
55 |
+
th.desc a:focus span.sorting-indicator:before {
|
56 |
+
content: "\f113";
|
57 |
+
font-weight: 600;
|
58 |
+
}
|
59 |
+
|
60 |
+
th.sorted.desc .sorting-indicator:before,
|
61 |
+
th.asc:hover span.sorting-indicator:before,
|
62 |
+
th.asc a:focus span.sorting-indicator:before {
|
63 |
+
content: "\f110";
|
64 |
+
font-weight: 600;
|
65 |
+
}
|
66 |
+
@include table-action-buttons;
|
67 |
+
}
|
68 |
+
|
69 |
+
@mixin classic-table {
|
70 |
+
border: 2px solid var(--yith-table-border-light);
|
71 |
+
background: var(--yith-content-bg);
|
72 |
+
box-shadow: none;
|
73 |
+
border-spacing: 0;
|
74 |
+
|
75 |
+
th, thead td, tfoot td {
|
76 |
+
text-align: left;
|
77 |
+
line-height: 1.3em;
|
78 |
+
font-size: 14px;
|
79 |
+
}
|
80 |
+
|
81 |
+
thead th, thead td {
|
82 |
+
border-bottom: 0;
|
83 |
+
}
|
84 |
+
|
85 |
+
tfoot th, tfoot td {
|
86 |
+
border-top: 0;
|
87 |
+
}
|
88 |
+
|
89 |
+
tbody tr th, tbody tr td {
|
90 |
+
vertical-align: middle;
|
91 |
+
padding: 15px;
|
92 |
+
}
|
93 |
+
|
94 |
+
tbody tr:hover {
|
95 |
+
background: var(--yith-table-row-highlight);
|
96 |
+
}
|
97 |
+
|
98 |
+
thead td, thead th, tfoot td, tfoot th {
|
99 |
+
padding: 15px;
|
100 |
+
font-weight: 600;
|
101 |
+
}
|
102 |
+
|
103 |
+
tbody > :nth-child(odd) {
|
104 |
+
background-color: var(--yith-table-row-striped);
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
|
109 |
+
@mixin boxed-table {
|
110 |
+
border: 0;
|
111 |
+
border-spacing: 0 20px;
|
112 |
+
box-shadow: none;
|
113 |
+
background: transparent;
|
114 |
+
|
115 |
+
th, thead td, tfoot td {
|
116 |
+
text-align: left;
|
117 |
+
line-height: 1.3em;
|
118 |
+
font-size: 14px;
|
119 |
+
}
|
120 |
+
|
121 |
+
thead th, thead td {
|
122 |
+
border-bottom: 0;
|
123 |
+
padding: 0 0 0 25px;
|
124 |
+
font-weight: 600;
|
125 |
+
}
|
126 |
+
|
127 |
+
tbody tr {
|
128 |
+
background: var(--yith-content-bg);
|
129 |
+
border-radius: 5px;
|
130 |
+
box-shadow: 0 0 0 1px var(--yith-light-border-color), 0 3px 11px 6px var(--yith-light-shadow);
|
131 |
+
transition: background-color .2s ease-in-out;
|
132 |
+
}
|
133 |
+
|
134 |
+
tbody tr th, tbody tr td {
|
135 |
+
background: transparent;
|
136 |
+
vertical-align: middle;
|
137 |
+
padding: 25px 0 25px 25px;
|
138 |
+
}
|
139 |
+
|
140 |
+
tbody tr td:last-child {
|
141 |
+
padding-right: 25px;
|
142 |
+
}
|
143 |
+
|
144 |
+
tbody tr th:first-child,
|
145 |
+
tbody tr td:first-child {
|
146 |
+
border-radius: 5px 0 0 5px;
|
147 |
+
}
|
148 |
+
|
149 |
+
tbody tr th:last-child,
|
150 |
+
tbody tr td:last-child {
|
151 |
+
padding-right: 25px;
|
152 |
+
border-radius: 0 5px 5px 0;
|
153 |
+
}
|
154 |
+
|
155 |
+
|
156 |
+
tbody tr:hover {
|
157 |
+
background: var(--yith-table-row-highlight);
|
158 |
+
}
|
159 |
+
}
|
plugin-fw/assets/css/yith-icon.css
CHANGED
@@ -6,10 +6,10 @@
|
|
6 |
/* stylelint-disable function-url-quotes, declaration-colon-newline-after */
|
7 |
@font-face {
|
8 |
font-family: yith-icon;
|
9 |
-
src: url("../fonts/yith-icon.eot?
|
10 |
-
src: url("../fonts/yith-icon.eot?
|
11 |
-
url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAACcsAAsAAAAARSAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAAQAAAAFY4xkshY21hcAAAAXwAAAIiAAAF6M2rEU5nbHlmAAADoAAAHvQAADWMtjZQA2hlYWQAACKUAAAAMAAAADYes3AcaGhlYQAAIsQAAAAeAAAAJAQ1AkVobXR4AAAi5AAAADAAAAE8m+b/52xvY2EAACMUAAAAoAAAAKDOIdsKbWF4cAAAI7QAAAAfAAAAIAFtAVZuYW1lAAAj1AAAATAAAAIiyMcJZnBvc3QAACUEAAACJgAAA9UaoPw+eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/Mk4gYGVgYNBjDGNgYHBHUp/ZZBkaGFgYGJgZWbACgLSXFMYHF4yfNRnAnH1mNgYeIE0I4gDAJG7CGV4nO3Ud25aURDF4R/VGIONjbtxwWDHnfTee5cSZVlZYZQNzJ+zAudcDssI0oceV3DffcycARpATS6kDtUOFV1RaWq1Ml2v0Z6u1/mjz21aVKnGOKs5zMn1NQRZyUaOyvXsVdH3fvKL35Q7zNNlmQ12OeCYm/KEF3ziPZcc6eqUE1ZZ0zce8pp3fOM59+lrlxW2OGRHp/jKd4bcY4+3POAztzjnJWdc8YU7OlFTd1xkm8e8YZ/bTLjLiHUGPOMjH3jKKzYZc4NHeqI6c3qOBTos0Zs+7f9Xp7zV/s4+/Sh1tdIjUTHVkqiaqkrUTPUl6qY6Eg1TzYmmqfrEnKkHiJapI4h5m663TV1CLJi6hOiYOofomnqIWDR1E7Fk6iuiZ9PfLpt6jVgxdR3RN/UfMaNOJGamz7Ju6k5iw9SnxKapY4ktU+8S26YuJnZM/UwMjHLPXSsZiz2jnGvfKPsdmBJADI2y36GVzMbIlA9ibEqKEmnKDFk1pYdsmHJENk2JIudM2SJbppSR86a8kW1T8sgFUwbJjimNZNeUS3LRlFByyZRVsmeUcy0b5SwrVuZN9o2yx6op3eSaKefkuinx5IYp++SmaQqQW6Z5QG6bJgO5Y5oR5MAo++0aZW3PNEHIfdMsIQ9MU4UcmuYLOTJNGnJslLMcGWXt2DSHyBlNJPLEyizOUyvzOM+MUp9zo9Tnwih1uLSS4Lwyyv89MXr/ACJFzQ8AAHic7Xp7mBzVdWedet16d1V3Vdd0d1U/p7vmoel5dPe0hpnRSAMjISEkJDRCPAXSgMFrYpDBGIFtgXexMWBix4kMkjHxE2ycXX9ObIjzgTYfTyefH2EhNv5wEiNnncTBRLC2E4uaPbeqex4CY/v79q/dlWpO3Xfde+655/zOuc3YDP6D51mGSTEuk2MGmWFmhjmdOZc5j3kb85+Ym5j3M3czf8B8inmIeZh5nPkOtq60Sk6lLDqWnW6UxsZbVrNWbTgVzipZHJb7YKcnYWx8Gpo10mo45E3KWm9S1v4ty4I3KaPfjUuatcaKdGVlZhDevBE8MhgeH9RMU4MDSMNnjh/fBAc2HacllLxy/Cmfpn3Vsvr8Fcn9nmZZGiV93gItUmllv7+wovwiwvE8R0mg0pTCCQK3K6IK5oeUuJDnz15qCEcXFkwtPEoHhAXNPPPM8BAshEdhIv4w/cqE7x+11ATNIRlMJA6ZmkG/amjmgGEMnJpboC1xrEMLC4Or+sGNvMi/xUPFYzFkGBbgA4zAMFVou20XmHAx/9KPCgsA+ZdeymObSI7+M7zGSNgmaLtWw8Jm/K35bYNbC8othW1wOHz7tnzULCIH4We0bbvbdvG99oXeHse8ybkAHgj3XGh32p3sfDeIv3vS/slP7HdFtDPW4iJ8iAXaRpDBJS68PVyMpgX0H76Xv/lLOES/OYPNSk7JJcYt+bPjeYW35rcPbC102r0MN61ud7N9Pp3UBanX34ezPL87tw/Aye7c8LvvPEmnxUd0eW6fiOfmBrhS+CPKrXhW+XDx1HkBCdqlVgnb/eKW/LbwSji8LQ9MZ2bM6rktt/3Xm+0LwvPggQtsYGIeLrW9K55fm37b/Sjl2Uk+orini9GefiKePwlkgJfiucF7onc0vdX7iuwIrIpFApSF/PbBrXl49VChM89T9zXVbXsSOebvseHlpWkuj3sS7up+H/f2J3RmJ98bUVqtUcIy8AtGRd1UQc00yWxCzbSXWWCuZK5m7sKV/ZpzvzLtrlQHK7QB+5u7QkAcKgQBaeEOtyukMYZar1Iqo86bhPYpSvA6g55qA0/weIIVBDYRpeippiSgiajFYJxC8tJb9gBt68e37vBM79p93mUfrxlNlg2nWPaftZ9ryaQGjyN9/I0H9uy3Ps9wzvDLu3p/YeWS/6PwyeTRHT4bhiwLLOsn9TCMBmb1JKPH8oF2ocIEzBpmlGkxU8x6ZmOH9+9Gu8BAI9LAw1BLQEclOx3lTHlClfMgUG1PaRVZ6BCn1CLlCcz6bKUljFRKbaFK0q7TaK2DZlALWmm3jbTiGGC7WF5rp20SNNuYoNtCN4WUa83xsbQtwnFDlKR/I+TfJEk0geo7eBKpOl0sQDGcP378/PCnk1AswoMQTgA8Fb6qmJ5lO7qcMnTZSNOkZNtVXc/rup3MZnuz2SSRZUOWYY0kjkv8IY67hZebovSspRXoB5AUi1OHvfyN7yl4zz57+PBhr1i8qAiXOxqbslm7IIt8niWOzKZSrIM5wWddwWJnFS7D/ziHH+jNTdMPGDKV/BU8HmTmmB2RdY0tlb8ytVrQArS29A/sSjXVcLqm0F1KNUjFqTgN5GqjVYGX5iO7cSAyHPNLbLrX95/yfdhNebOyxe4feBMT+MATBWomCjG1tPCGqOvtmlVYWFgIP4Wa4sP91Bj2Qx999d1Le3kMoy+ti2MsphCtroWYYhNzFnM5cxtzB/P7uE7cYxLJD04V03a6TefbXfEkGy9xVWHDjVvGi+zWV9q4VCtiResURnE4dB2Cdtpt1YJaqzneRmlMu6QWIE07thi0RMd2m4EzDhMHJpAFnu8hK7yIEZj2JjzvpaiIVnXLJ6Lya+dj1i1z9G/TpidrVo+rmtmedNZSTdNVzEzdbKGdfcD35pBX+A+tcIepnudNdpJzfTET/ehfeAPlrreS6eGDPT0gk6zOVkSi2skM1+Oyak5me4Uoe1Ge1+QJWcxTk82Ise7EPZhiNuCpPZe5lDmA+tJaFpeVKWRQdFZ/rehNQi1ItajcUeKW8XjmYQzPbB24ch2a62AsD7YBbbFSRn3QatMj6oObB39dQnGVxK6EmlYT06ZuKuuj5K6oeL2aSKhf4tl507zPsk70b+zr27hzrr9/rr80USpNzFJS4WWObxOQNGlE4D4AYz7t5Mf0eo5/n2o6SiKhODE11fCbqmkkYGx4c3Z489WdAXdu7Atf7oyIZBdhi7w0jApEDDxOpewyV8gtQZuT6GDiQud8Dkeo+ELmerRuXdHr/Am/IZ/6P3KqD3jevO/js9vzFplfl7n2dzzu4HX+DZ7yhnN/RwWA7FMiu/4r+DnTy9RR9rYye9BiXMPczHyI+Tha+lrHKHR5YIAPIqF02WagWUlHfBon+IelmLPd0jjYIppeOkJU6FQby6jeXWG1gxXlKwGC2zjVC4jT8IKTTX44Y+22MkaSyxmpTBLuS2aS4Rd2i9IBuV8m0CfKdni7B++VxXCfKMsi3CfK4VcWqPgsCLL8QJxC8nVCqwmm9mm0jJJZHZsIlFxAK6LaY9dJlUT69FQul5rjUnpZv4ZzE/usTMbaZ7jgq+T004n6yQrFBxVy3bvDkHbcR8c5LKsyPo/gccDngKTJsib5Ms3JfpyLKd0K0sFQz6E053BPhlAPn8/swz0qnaIqO7AG8w55g6ntstFZYmfkeVVaSyztemS4fW4jqAMRGvCjcGoJqSgRdoHH2eM95fJIudyDspSxrBsLlF2WTVdXxuQrtkWTUWkZU8Bn8z6XVsMvXQxbkloY6smkDqyWDP8+Qi3sFjrYSHlPsieJzwIu+0zKAPFyUb78TMoHTFF+wNDOC1SVuzryZyi24eBvqAWWgUJPlgu/86z/X8GBR8J9x4r3ww0M1QJdHaoxGdQCTGmlpuNW6cCOdzL37rm5d3+Ykrl1V65bd+XNlOzYbc+8Pd0pRwLHOxVIwmPbnIlbk12sG/kKDpNn2qizt+PZ2c/8HnOQuRU98MhTaruBk2fx6xUn/jAJRMRexB2fgWC0Mkr/KqME/yOlxY0xLl2AUXfUHRmlyIoETgEijNUOyETUs1obhtHACRCGReOMtsfbgUjKWEAxLqbbWMwGYgobOgF+I8BEA5v/a7Swq6bpWqbnrp+bu/4Zk5BkQnfTzwhJWSEKcTghlVJ6a/bDiuZwXI/S66d2ypKkuI4i5ngFPIC/YwVeEzJJkswSAViR9fkfKgory3oeMiQ3bxi64jvZMseLiIp1IwV62ftsxLe/9GAa2TjtR4zd2COIZiJpFaY8DoAFXszp4R5Z0llQskYmfSubSyUSZrF6u6JVqhBwhqHlQTXK1Q9pRoKXbIerfQFnxAk5UshIiuyl8vA2jiPAcZwiqVkrt+y7hPC9jm/lgvvdv079GWTckW84n4f3WUuyQ20JjalMYrtYceERQW22DGnooWkJlZWVtsitDnBUNiTS6cRfJdJeLfdXuVotNw/90ZuSf+zUpRPf7rzn5zt13rc77ZHAaKcWyfIavgHfQDsX+XUkiOUL8kfzR7sPMCsy9CBg26/B1yL7iL0gSAEB+GM7/KJtw258wZ/RNOyOyLL+oXyg9jQTWdIZlGwmRZcbh4EaBK1eNcJ5AcmDgH9RVY1aWYFCvqgZBbTLTEnZInJwiW2Ol05IEq6Z2q1RL98j6Mnwpx7f29PTY9iX7t0L6w9407lab2/ME2WZHfBYxFnS3vtJbNzLe6zzQ8EteEkoeIdp+2nvQIeL4WtL3MZlSR3dej+uzI1QQtdDfYN2FUpjPpRaTSyfhpJjR7b+twhNrXJGV6rTcARVabgWnkStCk9fUSw+bXS9yqml1DuXUuNLjiZ8imrR2M/Tkh7bbrPhf7D33svuL7pvEQNiO/GCI4gsEd9XSwHKSlsotankwMPhrad94rJLHgx3wI6hW+b3XHfFa1d/+Uu3/uxz+48cObcjN6/Bq8ix7HJ0qAAOtTnUAejafmA+Zr3Le5e1iQ13AqJf+BPNuuNqdzdMhE/tdkePsOyRI3TqR1CH/8fiq6gqGKqXgaBj4KJCc9sIt+gL+Ru9SKuBL/hzu/+/D9pnbbcH/3LI3r51VQ7w/Uhc+vCAsxVz34xzz2Cuc44JKzI8zl6n9oK0oYKnhb5dOBK+3zgIt/Svn50Jf7hVgtQsK4bvv9GAQ+vPWB+eJ50FyTNiMaE8eBVew/kiTgKri2VQpnHtKCOYjUEPxTYQrabklOAEbtd1dKPgTnT/rwcfN+4ONH+L7tXImPApmIC/DXdSYHbxxQjI/oRl9+7FXHhP8mMfsw749LPC4q9wAgL8GKU0YE5DL2wbzgAdIqryEYxUqKpvjKHaR+0vlAeB5sZbzYCgh5QitUoZTQmaGfTHqYkAARs2xlxaQb0nUmuTcTipO/1rnMlmcXDjtlLRHRzatKEeOCoJT+KsXF3PVkXXfvCqvtr0+voa15CIYveuudqGr4a7a0ObT8/6Afo2VW7d5AMpEVVysuKm/bHe3IDUoxfdasqUK67Qm9V1lzNsEK/SCulqKiHLiWSv+w4c5TvV3KAUcNUskaf9c1KRC8p31n07k46QzzjKXhlXjdaLrnXMRctIV0bEKq6Mrh/rcK1uF/UEXRwETGc1UmHogocuqOclojpBfUP4QnHN3NGNg0Vcwm2bhx7JVqvNajVr2LZn2wdx3rYpy6XC1HShJMtmquoWP1jNDg7kequ5NYO5/b3YuNl7KW3s2R2/Gb4Mv4yiLeeh7X8n4ubbmcPMZ5mvME8y32F+TBF0NOVRhAC4BurWEvRiV2OwaehsZ3sdtGqoQRuuGMVW2uOuAYi23VEx3cBce5Q2ajg4IkfXjNDAgHKAL1ukbhwWkTQFGMiRGRgfa8evuChAH68xiqqX2JXRMsFMewy7V4JyDZF5J4WlxBFRbuIJBS2Uqxqy1aXam/qSdoAj2HRNkfQHsZ8On1NShqkkbUWzCQ9Kz0W5SUM1VSMi81Mlu9qfTnAshA8axve800eGZ/JzaXnAFdAeEWHWU3oSkiGTpFP6AS+pfB8PROUfCmiakrt4wDJV4vt59SBPqRQV7ARJEAno+r2SMCFKQCkBey0miTghSJJwNyhqmk2pIiKMntp4bRsngQmFhOlKgsQVOFGU3Ls1lpV4TQNJEYgmJV3CCYphKDdTkrBEzUvonCSq+95zkUx4ZYwllihoPP22rPBsQuZxFQnDgct4ldDJEf6G/m5S4+MlIPnAcnJwrUhkcVy9UhBZ9Ao4kpdUiSUqma3oig4aVnI1rwftWGsTp7Ac/1/SpqQrEifmegSeKAnFTK+OGyQYjymirhpFjfEGe0YsPCkJiEgG2tAPzVE8Va7D0eMSOV70ANH9h+Ph2ugm42lKN/Eav+cIrwpXXAtieDvcx75r246/6OntHa1UMojts6kUy1jqchcv/JuNgrDnMM9fAYnwmWvCRWCv3XbOAUjRLqO9F6WytFd03pfmTvEJ9dwjP92h/vcp8werZJ2gWOHEismFQ/A0HBoc+ALcvHIGoQdPh2tXjU/9AZ8pvZVHQDpf/jU+wVb68Td3CRZwBhRbLJ5EbPE6YkyVsZgq7sQss5u5EJGkS6PlLWrfhllq5FA08bCSklVyETrhYXLTNtcIUmKAJ79GSXO8jdQZd1uIpqzSDEtVB06SKnA3j4p93EXE795hD1cQIKcqw7YXUbhakVzpTAhvhd6LoScnb5Oeq9fbQXBh3ZUSmmONLfRW5k/AnEREQ5LdgUytBVyhJ9V/xyaOn/tvdj2f1i/RncKwPWuk83U7/C5i/zNvYZnL91gNP+1sk1w4dzT8rGH4PSUvs8b0QdbqC+HEDYKgmSmnpz/TqqqZQJb45iZB2BjvATwJYYQlG8z6OGJahzKNIZwSfK7GW4PlwimhA2KLxKm0qKpBY3sE+s4454w+SGbQ8x9AGv5Dsb2hXXoFcpIYPh/5+wOi9CGJZHUzbUIw23dGHz6zmeS3aB8ks8V2qdQuzv47bfwt6sJulnRuZkYyVdOMZWdxMZKdNM57LbOF4iDUzvHMUWrQ4rZdamyW5Qllq0r3CBV2HqjJRSvVQOlyo8XRrUO9STUrWt+DWX/q8huumJy8YrL/rPxBXpNCr7nnqj2NBpImTDkbavWagApBKFQLLVMggsTaLHrK6CYRkRWlnoP5s/on6QA3XD7lZw/ykgZmc0+zM8gHC5Usr6LiSHtZUVQXNFWmCofgahUgS74ynEDJDXBfmBS9EwuQx0IH6uCxG48CCD6Cm/F2q0kvBcbSXCuS3ggFHbN373SGPdAQ80RQ9/OfZ//leY5nP/MZREDP8TL3Eo0gwB3Ozt2pkSee+ehyOMBjc/fdy4LHesnwxBP3cOy9T7DLfs4JSNMZglNqwQk8z87AwIq6BK1LIdgyUFd5YHhLZ536LeuZS5mr0Adn2i0EDtQ8NZwGhQV074ahzjXXsXFYOU0BxSAE8bnCPS1AnrMNljguYqyuosDzmXbHV258e/luw42YUQdqihGh5OFnss6aApdHhZUSFSGQE6pItJRaUHVFFDiWOrpJw0qKklhVTU0kRkobL1W6ikbVZaurfIbWaNurzeaWZlMd5iUuz4Eoc+k+DoX7Th/9OCklS6yua6ooCazCSmrCTmiELRZZUVAlWeYV3HQi8azKSYphm7rM+perHb21rlKWtTX1rq4zlU83NzfxObPBc1lOJlxqkBfljpzAIzCIcmJRbyAVL7yM6PDUxKZMJYPPRzK9GXzujnPAJGkuk1z16oyLGhNx3jnMOzDdQRUBRa8JNgKwge3SkAbFuVQDTkI6wiQ1QFCzIhsgmIpAFoc7tbIDwqdol8lohBqD0VrQbI/CC4aUe8fE2byOxpxzcLGytJETjA2SIipsmuNFRefPnnhHTuG48E6H44kc51VerNYv/qgsE4XbC8CL6qyEnSdslqdt0pZakXgOUW9gG4go4AvZUjZzftFCgCORSxKSiP6YhMcPT6+xl0gIfazi+cXCQHhsKddbGs5Vogbh5bh1hCbDc0WCtQieWDGf0KtJnWNZXiPRdVTk08Lz8CKTQk1VYAbwLE8xc9RjR7GsnGJGA1JpoWRGbrkVpKlL7tCYIIlcWgdFOypbVRKbRWwGR4clEv5T93cXgta7JnwWTEnc9bripPV0JS3wqqol1JuMnF8q51jJtDQj8d76mjVp+NywZGrhoahzjUdQtCY8AofmRTk8/oJUtbz9I4JFSoFez+0/U/LNqe2pdCrYH8WnUQ8DHO/IX4VZg1h7O/rse5hLUBrfAF/abyhx31iyKqa/0gIJlXYDV5xyUyOUDbtTvh/4vi2pqqWqX/WCYG0QeKbrFl33z23f7/M8W47qNtxoafdo1o1RxP0J6vA/cBBu/PoRuPeP4MaDINOmff6cZmr4JOgwa4O302GK7qOr6i6e1i1Ln7b0r9OhHtas5x72n4MUhC8/vLTfUdzRR709yZyNGGMvcyVzHfXxY/SwHKrvbv00iKS6FKSvoh5DCXBjGxbbtBSi/3INNWGrY81EoXuql7nWdbNSsTyg4LQacHv4Bw+JXJBOtBOOYiAC+z3VMhLhV9ucsEmAkf6NfaKYPKtuFoy+sf45Wy+a5QmTyNGdTjm8e2hDvb5haJudz/f7/mdkDU2JtmH9eg+femgkTGquTVaXwl8ouq58WuQ/L4mmKUr39M/1R2MSMbmljplwUZLLnlEwo3uo09fuK+LA9brl47j9/nt0S8cHTDrw+hW25ASNp1WXluM04MSLAy/i8y+UvNiJA9B2UQyNWp1Uw6pElue4R40PMKHXHe+v4XmGZtDy02u3VoOalshqRJY0MimgDG7zB9852LOht76tjg8hp+2bmNgHzxX9vhsGs359+0Xb6wMT+67bN9Ed93H49m8xbn1n3rtyMrNlYGTn8PDOEULWXrJ27SXwrVpl8hq/WB3ZeenOEa+995q97c64rArfjcYtxUGYUgS+aLQal4nAZZoCY7g5fLKeQkPfhA3FZqHQLIb3wf7abBDMwt1DaNnt8UKrsB6r/GA2WB/M1pawPbwO34ri4zSm2omHkwrOlUIjEq9BiH5LQlD42lQgURwbOIGzNjmNlj3rjV/cnlrIZJ3zGsPnDMMfNlv2lk2vRyW7m1iC9f+82UaWDLUvRgCo1tcOn3MTDrBpy70bxrXhtcM7hrGiM5/FX0Z4jo/0ZIXGQ9GpqC5rSIrYHCtYukxp03DOR3aHa+F94a2xcyGgDidvu6c0PDw7PDwT/ghx3vHd4UfgaS92QFjk6P1v+5+0dnb40+cu4UiIfBCHuQ3yKEOr3I6lG5typUZqwTiaNvoDjTK9JcDscqhAdLGgU2MXAM1jN4CAvKQl6TFqFtOuuHwDOR5gQaeGjkqz7UbnMohqejS3caSIhhBokAAboWuCRU4U2Y5DtrV2K+gUx2EGHG4G4qIVQV230e4Ux2EHHJOiohlorYiWpxFddYqjFvSr8QQacWA4rExWKpNzlJQHTjvt3MnJL7G8gc66KPOGYeiBLsiCmQTIpexUDiBl8rKApVhnyqJLL+hcUTY7TSXBTC01TZpCtykvI2qSdILNQSWSKSURAQga4m0B3wlBVAVNSWdUrLSJCqyaS6uyoAlYZWATlShiQuR0IptEjfrrHBYoy/01XlHSueX+mbSireyv4ZtLigr2h0PlyY2T5Ygcn9w5ic9RAMsUFEGv4TJ0nCxCd41ONiVqBGdOBB1XUUNTkYwXl0KjEbelnBLjttgFO8p83BaHM60OL2Y7c5L1VXMSDZEzJYt01pTgRP3UNblZne0sCnmiKKt5ootcYrm/yeGAK3iKDJBjnsa/pYEX4d8j3bCV2YF2DD2s2nK4bwZigB5H/AhHkdx4HPND3xeF/Lf/qQgjOl6rNp5ktWBoj6vr9uZGQ2OT47WW5xxzNw+MjAxsdocHTs/nTx/4RNrKK3oym1GTXjbtJVUrmVGt3IjVRrPDye7gzPnX67zqBP2u29ubSfD69efPDKYVOOe2C1u5XOvC2xJOsbe3aD+Z6QGFeAZbw61zUjkuk2FVT2EDQVLTydxlRV5XJmWxwHdszDH0kYXIGkV6MooXuACP5f/4/vyjlLKP5u+/P//+xx7DV6fPY/iK+sTemxVp8fPsRx+1v/hFSmHQPnbMfijc8WXn2DFnKa4d6UGVmaeWj+ofeu6QYQTZZgDpeKv0Dr/OBssXHiRAzd2OdE6kQYJ8dA/lpgKyZI6o/m7CD3167+3Te1yndNrCFPqmEr9275TA87RQ9AUeTts3SX8gAsFG73C/s+5X9lTlvJGuO/KP8V35Z+zxmakr1nG80O3GtS9sc3Q0dvKKdTzHxh9iOTafOTKUOgM4e12x3HWgttBYesSnF6L4WBwD6qf2jv4AiboKqPRbVoOLFV3LKpHObzo4+jMmBL7wQri1YluZExnLrszYxgnDhvEbff8y3yd3+k/68EEv/OlAj+P0DIAd/jRXLObAnvz+978Pd02edx5zCi5IlUVCR21VqAmMYgYRxo4swc9/F1iwGhe89bgrYMHIyG+ABR1cQOUjvxxFRGehe1uDJhM/1AnKdSKF/6tOUUDze/D0kSOY78YDwRm153c6YydpOM6LY3Pd3zdE9rAXvZURpsnM0LMPK60iRBiBQoQOVkVKc1UbbUWb0BBYJViHbmCEWKNIC0cRRGkGRTcK01A0QaUZmI30nvtOSsLn0e89a3ogMTbZzNvJ6hBofhHaGcfbsq1UG+H+zhcHi47hZEbLPX3Klv6t+SyIBqypJW2hUaquu5JlOiMhWWRwsHo9nfVGPLc/kZzrM4zC9pvTVUXbuVtR271KYURFQ1RNF4bcVPhFP+tBsm8umeh3DaNdmB/G7kvxWwW+F3k3Y8x0fNvTLkWS2ax1PDg3nWq2SmgvnZJQQq6IpHPRiBwbx8Z4QgUK0qNbErtNDf46QDtMTytqhhr8qS0Jth5u1SxBMuFPgYNwEzwXPi54vT6/gQbBZoVcxRNgGk9a+EmS1nmSJXyTk7izCYjbSMKrVu9TRBk49Ev08HW0K5Cjvz4OFyzXtfBMWrZNX55sJkRVFRN/wbJDnMmvFSR5v7wj5zD84utLWCj+rRZT5WplwomRl9Ks5iCI0K1Tgddf4ZP8CU6S4Dh6wNUf/OCfaADWhX8gJPQlXVJl+Fq45bzBv/8wPdkxxgIcN4mjZlB2e5la9CvYBrOWWcesZ74Cm09FXhQrVaYRPVEQRKER/V1rZRzxCb1gqbkOliGkoVdu9CeuDbHd+v8g7Y0gzS7lbGHetqwSa9hWMjXlFXfxAuwqevY5qaRVBiy17KlcaRcvXvP/EJLbxdlu/rQcp6gZj1MVrmhz+fwgq+ex3HtDcfv/dsC3dKf+TZZjpphZTIkkCt8Rqr8JDUC0o2uOWiTsWEiD/qIbBfnaMQgUO9ek9rhAG4vwdG/b47jpLWnNUBMA0z24XlnOZaxyI5kWEvTXSroVDNVTSVGer43zZH5ta6h0WiCHr+jAzvXChkz2kh0bWHaXkNTym/xEfTCRLbJsfihtOXBpTzHpcFxBNwvpwKutOXtucr+fE8ZeUO3yBuZ/AxT64pV4nGNgZGBgAOL5Ga+54vltvjJwMzGAwL3j0yfD6P+//n9m4mZiA3I5GMDSAGjSDVN4nGNgZGBgYgACPSaG/7/+f2XiZmBkQAX+AF9PBH4AAHicY2BgYGAC4///mOBsYvD//8SJESOHrub/LySx3yDMeI8Ut9ES//8LYwMAxf4TWAAAAAABEgEkAToBTgFgAXQBiAGcAa4BwAHWAewB/AIQAiYCPAJOAwwDvgQqBOwFhgYoBvAHegeOB8QImgisCPwJFgkwCZ4KFAoyClwKkAq0CvILbgvGDQgNZg2WDcwOWA60DyQPcA9+D4wQOBBkEQgReBIAEqQSuBLMEvgTJBNUE5wT2BVkFeoWBBYgFpgW2BcEFzAXYBfoGF4YihpeGsZ4nGNgZGBg8Gf0YhBhAAEmIOYCQgaG/2A+AwAZvwHFAHicbY89bsJAEIWf+YsCUoQSKVK6VYo0EeanoOAA0FPQG7P+QbbXWhYkLpAT5Aw5Q06QMmfIUfJsRi4SdqXV99682dEAGOILHqrj4bZ+q9PCDdWF26ShcIf8JNzFAM/CPfoj4T5eMRce4AEBf/A61W/3cMIt3OFNuE3/XbhD/hDu4hGfwj3638J9bPAjPMCLNz+nLhmloSnWOj5mgW10AxttD6kp1NSfNN5KF9oGTu/U9qwOp3jmXKQia3K1NIXTWWZUac1eh85PnCsX43Ekvh+aHGek3Cbh1ilCGBRYQyPGERk3tlfq/50NOywO1JVSmMLH5EpuxVxRZwNWNHbMbplT7D1x5oyuQ0QdMWOQk5Z1Z5XOeA2dsq7t6YT0fU6oukosMOaN/uT9enb+C6sEYKp4nG1S13LbMBDU2qRCUbRsx3Z6743pvfeeOL+AgCcSYwhgANIa/X0AUpIVT/CA2V1g724W6Cx12hV2/r+2sYRlBAjRxQFE6CFGHwlWMMAq1rCOg9jAJrZwCIdxBEdxDMdxAidxCqdxBmdxDudxARdxCZdxBVdxDddxAylu4hZu4w7u4h7u4wEe4hEe4wme4hme4wVe4hVe4w3e4h3e4wM+4hM+4wu+4hu+4wd+Yhu/OjHjXNeqEiofMGP0OM30WKVMVhsLVGqVe211nxbv8alb0rBacDd0n3uuxXt8emREXjT2zUU+86/tF/sLQtLiuvQ31+dk5l35R4lmLP7N1E7KC+I7gYcJZ5JUxkzKsmwwJyOtaLI+p9YZslpSNFNWOLNFaigXtiITeNZrivrWSYu4MFzSVktKo3ND1k7VsFFD7majntsteWPYoIDrctLnhjJRpZyZLORudhX50KVmWZAZlgf+NCTlusc0obRxZssOJgXJ0r1uWjCVhWLEckqEGurU/qmZKxp40pdu8NQSM7wIpOY7PXdPiaEgE42YkKmuq95IqNo2czWo34QyzW6kDXVLNimZXC6zYbckXUrqlYWutI8yKmXrDTyIXF/dMA9CQ6WcuN1SFVi2S5ED/kPaxBaCZNbGH1ltmr8ReBBXYkRt87AyLu+oVtOaHnTr0mcT1ZZMqofDcFdkpNfGzCifRWUEU7mkwVgbV3/WL5iIquh0/gJ5RisiAAA=") format("woff"),
|
12 |
-
url("../fonts/yith-icon.ttf?
|
13 |
font-weight: 400;
|
14 |
font-style: normal;
|
15 |
}
|
@@ -139,6 +139,10 @@
|
|
139 |
content: "\e91f";
|
140 |
}
|
141 |
|
|
|
|
|
|
|
|
|
142 |
.yith-icon-check-alt:before {
|
143 |
content: "\f114";
|
144 |
}
|
6 |
/* stylelint-disable function-url-quotes, declaration-colon-newline-after */
|
7 |
@font-face {
|
8 |
font-family: yith-icon;
|
9 |
+
src: url("../fonts/yith-icon.eot?6c9fac5a69711520a55f03f0159e3932");
|
10 |
+
src: url("../fonts/yith-icon.eot?6c9fac5a69711520a55f03f0159e3932#iefix") format("embedded-opentype"),
|
11 |
+
url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAACgEAAsAAAAARnAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAAQAAAAFY4xksiY21hcAAAAXwAAAInAAAF9v9BwjlnbHlmAAADpAAAH7wAADa8WxqYn2hlYWQAACNgAAAAMAAAADYgbllqaGhlYQAAI5AAAAAeAAAAJAQ1AkZobXR4AAAjsAAAADAAAAFAneb/52xvY2EAACPgAAAAogAAAKLvYeFUbWF4cAAAJIQAAAAfAAAAIAFuAVZuYW1lAAAkpAAAATAAAAIiyMcJZnBvc3QAACXUAAACLQAAA96XfaIgeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/Mk4gYGVgYNBjDGNgYHBHUp/ZZBkaGFgYGJgZWbACgLSXFMYHF4yfDRgAnH1mNgYeIE0I4gDAJHOCGZ4nO3UZ3IaURCF0Y+MEEI5oYhAOTpnyzmHKpWX5SV6Ae6fvQL5Pi7LMFUHhqnhzRu6bwMNoCZnUodqj4qOqLR1tjI+X6MzPl/nj753aFOlGqOs5iCvbm8hyEo2cliOJ6+KrrvhF78pd5hihnlW2WbAIXfkOa/4wkcuONDRCccssawrnvCWD/zgmkcsapUF1hmyyTnf+ckeD9nhPY/5yl3t7DWnXPKN+9pRU3fsscEz3rHLPa54wIgVtnjJZz7xgjessc8RT/VEdVp6jmm6zDJHXxtu8v/VLW+1v5NvN6WyVrokKqZqElVTXYmaqcJE3VRJomGqOtE01Z9ombqAaJt6gpiy8fmOqU+IaVOfEF1T7xAzpi4ieqZ+ImZNnUXM2fi386ZuIxZMfUcsmjqQmFAvEhPjZ1kx9SexaupUYs3Us8S6qXuJvqmPiQ1TRxObRrnnlpWUxbZR9rVjlPV2TRkgBkZZY8+UC2JoSggxMmVFmTSlhqya8kM2TEkim6ZMkS1Tusi2KWfklClxZMfKtMhpUwrJrimP5IwpmWTPlFFy1pRWcs4o+5o3yl4WrEycXDTKGkumfJPLpqSTK6bMk6um9JNrpjlArpsmAtk3zQZywzQlyE2jrLdllM9t0wwhd0zThNw1zRVyYJow5NA0a8iRUfayb5TPA9MkIg9NM4k8sjKN89jKRM4To9Tn1Cj1OTNKHc6tJDgvjPJ/Xxrl/74y+v8Af23QCQB4nO16eZgcV3Vvndpu7V3VXct0d1Wv012zaHqW7p7WeGY00tgjWbIsWbIkS95kpLExPAxG2BgLA7LJMxgDDsuLsGWMw2IbMOHxkYAd8oEenzE2yccSnh0wHyRgkUcCASJ4LEGueedWdc8ig4Hve3+9F6nn1N3r3nPPPed3zi3GZvAfPM0yTIbxmDwzzIwyc8y5zMXMJcyLmf/CvJZ5A3MX8y7mfczDzCPMY8xXsXW1XXaqFdGxbLdZnphsW616relUOatscVgegO1Ow8TkLLTqpN10yG8pa/+Wss4fWBb+ljL63qSkVW+uSldXZ4bhtzeCR4ejU8OaaWpwBGn05KlTW+DIllO0hJKfnvpiQNOBalkDwarkYV+zLI2SAX+RFqm0cjBYXFV+OeF4nqMkVGlK4QSB2xNTBfMjSlLI8xcuN4R7FxdNLbqXDgiLmnn++dExWIzuhankxfQtU0Fwr6WmaA7JcCp1zNQM+lZDM4cMY+js3CJtiWMdW1wcXtMPbuZF/gV+VDyWIoZhAd7ICAxTg47X8YCJlgrPfq+4CFB49tkCtonl6E/g54yEbcKOZzUtbMbfVtgxvL2o3FrcAcejl+4oxM1ichR+Qtt2em2XXmdf5u93zNc6l8JD0f7L7G67M933hsl7z9g/+IH9qph2x1pagjezQNsIMnjEg5dGS/G0gP7D58o7fwXH6DvnsFnZKXvEuLVwYTKv6LbCzqHtxW67H8Nr17a7xT5AJ3Vp5rnX4ywP9Ob2RjjTmxu+9xVn6LT4mK7M7T3J3LwQVwp/RrmVzKoQLZ09LyBhp9wuY7tf3lrYEV0Lx3cUgOnOjFk7t5W2/3aLfWl0CTx0qQ1MwsPltm9L5teh7/beQXl2ho8p7ulSvKfvSeZPQhng2WRu8Jr4GU9v7b4iO0KrapEQZaGwc3h7AX52rNid59n7mum1PYMcC/bb8OPlaa6Mewbe1ns/7u0P6MzOvC6mtFqjhGXgl4yKuqmKmmma2YKa6SCzyFzLXMe8DVf2O8796rS3Wh2s0gbs7+8KIXGoEISkjTvcqZLmBGq9armCOm8aOmcpwRsMeqoNPMGTKVYQ2FScoqeakpAm4hbDSQrJsy/YA7Tt796+yzf9Vx7yX/TuutFi2WiGZf9V+4WWTmvwGNLHnn9gL3zh8wwXjf54T/8vrXz6fxbfm753V8BGEcsCywZpPYrigVk9zeiJfKBdqDIhs44ZZ9rMDLOR2dzl/avRLjDQjDXwKNRT0FXJTlc5U55Q5TwMVNtTWkMWOsQpt0llCrMBW20LY9VyR6gR13Oa7Q3QCuth2/U6SKuOAbaH5fWOa5Ow1cEE3Ra6KaRSb01OuLYIpwxRkv6dkH+XJNEEqu/gcaTqbKkIpWjvqVMHoh9NQ6kEH4ZoCuCL0c8U07dsR5czhi4bLk1Ktl3T9YKu2+lcrj+XSxNZNmQZ1knipMQf47hbebklSl+3tCJ9AZJSaea4X7j5NUX/618/fvy4XypdXoKrHY3N2KxdlEW+wBJHZjMZ1sGcELCeYLHzCpflv5/HF/TnZ+kLDJlK/ioeDzMLzK7YuiaWKlidWitoIVpb+gd2tZZpOj1T6C2nmqTqVJ0mcrXZrsKze2O7cSQ2HHuX2XRPEHwxCGAf5c3qFvu+5U9N4Q++UKRmophQS4tuirveoVnFxcXF6H2oKd4ySI3hIAzQx8A9tJfPMPryujjGYorx6tqIKbYwFzBXM7czdzJ/iuvEPSax/OBUMW27HTrf3oqn2WSJawqbXtIyWWSvvtrBpVoxK9pnMYrDoRsQdlyvXQ/r7dZkB6XR9Ug9ROo6thi2Rcf2WqEzCVNHppAFfuAjK/yYEZj2p3z/2biIVvXKp+LyV+5NWLfC0X9wTV/WrD5PNXN9bs5STdNTzGzDbKOdfSjwF5BX+A+tcJepvu9Pd5MLAwkTg/hfdBPlrr+a6dGH+/pAJjmdrYpEtdNZrs9j1bzM9gtx9vICr8lTsligJpsRE92JezDDbMJTezFzFXME9aW1Ii6rU8ig+Kz+TtGbhnqYaVO5o8Sr4PEswASe2QZwlQa0NsBEAWwDOmK1gvqg3aFHNACvAMGGlOIpqT0p1VVTs6ZuKhvj5J64eKOaSqkf5dm9pnmfZZ0e3DwwsHn3wuDgwmB5qlyemqekyssc3yEgadKYwL0RJgLaKUjojRz/etV0lFRKcRJqqtGXVNNIwcTo1tzo1uu6A+7ePBD9uDsikj2ELfHSKCoQMfQ5lbLLXCW3BG1OqouJi93zORqj4suYG9G69USv+yf8nnzm/8qpPuL7e4MAf/t8f4n5XZlX/pHHHfzuv+GznnDxH6kAkH1KbNd/A79g+pkGyt52Zj9ajOuZW5g3M+9GS1/vGoUeDwwIQCSUrtgMNCtuzKdJgn9YijnbK0+CLaLppSPEhU6tuYLqvVVWO1xVvhogeM2zvYAkDc84ufRbstY+K2ukubyRyabhvnQ2HT24T5SOyIMygQFRtqM7fHidLEaHRFkW4T5Rjj6xSMVnUZDlh5IUkk8TWk0wdUijZZTM69hEoORSWhHXnrxBqqbcczP5fGaBy+gV/XrOSx2yslnrkOFBoJJzzyXqe6sUH1TJDa+OItrxEB3nuKzK+HsUjwP+jkiaLGtSINOcHCS5hNKtIF0M9RRKcx73ZAT18AHmEO5R+SxV2YU1mHfI80xtj43OMjtjz6vaXmZpzyPD7fOaYQOI0ITvRTPLSEWJsQs8xp7qq1TGKpU+lKWsZd1cpOyybLq6CiZ/als0GZdWMAV8rhBwrhp99ArYltaiSE+ndWC1dPRPMWpht9HBxir7031p/C3iss+nDBCvFuWrz6d8wBTlB4zsvlRVuet6Moo8WWJqKKMdRDXbmB0op5cz1zAvxbM9MdlBvYVsaaHliBdYoVaC1HHxCFRp1nZrlC2UPaSXCHsJIT7YTcpUZJAQIyJqxCi7vDW57bon7YTiuiJ3rW66pdJIUbzazKSy5AIojSBueT0qNCeV+pgaPx5IHvDwdZL6TtU6cCA6cR3BVPrAgc+/PE7s3w/TmpJzCyVXli+S6Riurl2opfQ+MR7+QTqAk7or5ZgpN9VJcgdUEn0XikSNfvhropIzZ4h6+qlRVfr4xyX1gTuYrq/Awd9TxCIDheosF33168HHwYFHo0MnS/fDTQzVmj2bozFZ1JpMebVl4NbYjK43t/DqhYVXv4WShQ3Xbthw7S2U7Npnz73U7ZYjgVPdCiTRyR3O1G3pnm8Q+1YOU8Bd3MzsxD08zLycOcrcxrwr8Sw7XugUWHx71UleTEIRsSrxJucgHK+O07/qOMH/SGlxc4JzizDujXtj4xSJktApQoxJOyGZinvW6qMwHjohwtZ4nPHOZCcUSQULqE+A6Q4Ws6GYwYZOiO8IMdHE5v8WL+wls3Qtsws3Lizc+KRJSDqle+6TQlpWiEIcTshklP66/YiiORzXp/QHmd2yJCmeo4h5XgEf4B9ZgdeEbJqkc0QAVmQD/juKwsqyXoAsye81DF0JnFyF40X0InQjA3rF/2DMt8/7MItsnA1ixm7uE0QzlbaKMz4HwAIv5vVovyzpLCg5I+vexuYzqZRZqt2haNUahJxhaAVQjUrtzZqR4iXb4eoP4ow4IU+KWUmR/UwBXsxxBDiOUyQ1Z+VXfL0IvtH1RT3wvvZ3mb+CrDf2GecBeL21LDvU9tIY1DS2SxQ9qhQ3OS8rSqaNR2pVpS1yawNC1U0p1039bcr16/m/zdfr+b0wGD8p+edunZv6Sve5d2+3zv9Ktz0SGO/WIllZw2fgM4gLYj+YhIl8QeHewr29HzCrMvQgYNtPwadiPIG9IMwAAfhzO/qIbcM+fMBf0TTsi8mKvqZ8oPgjGyOPOZRsJkOXm4TNmgRRQi3GxSEpgIB/cVWdohKBQuS4GXUAVpiSsUXk4DLbHN9NSRKumdr5cb/QJ+jp6Ec+39/X12fYVx08CBuP+LP5en9/whNlhR3wuZizpHPwvdi4n/dZ5zuCV/TTUPSP0/az/pEuF6OfL3MblyV19e79uDIvRlU9j/551kgoTwRQbrewfBbKjh1joz8glLfGeV9tfqIxND3RengcrRA8cU2p9ITR88JnllOvWE5NLjvm8D5qdRK/WEv7bKfDRv/B3nMPe7jkvUDMjO3GV04gEkd/qFYOUVY6QrlDJQceiW475z0vuvLD0S7YNXLr3v03XPPz6z720dt+8qHDJ05c3JWbn8PPkGO5lWhaERxqo6nD1MNKwLzTepX/KmsLG+0G9BbgLzTrzuu8fTAVfXGfN36CZU+coFM/gTr8P5Z+hqqCoXoZCDpSHio0r4PwlD6Qv/GDtJv4gL+2B//HsH3BTnv48yP2zu1rcoDPR5PSR4ac7Zj7UpJ7EnPdc0xYkeFx9jq1F6QDVTwt9OnBiegNxlG4dXDj/Fz0ne0SZOZZMXrDzQYc23jexugS6QJIn5eICeXBz+DnOF/ElWD1sB/KNK4dZQSzCUikWBDi1ZSdMpzG7bqBbhS8lWWjGyHAjbsT4cKSdx0yJvoiTME/RLspkL3iCgSwf8GyBw9iLro7/c53WkcC+lph6Tc4AQG+j1IaMueg17oDZ4AOJFX5CN6qVNU3J1Dto/YXKsNAcxQtEPQoMxQmoClBM+Ohj0njggI2bE4k+CHGER0yCWd0Z3CdM90qDW/eUS55wyNbNjVCBy3xGZyVp+u5mujZH37JQH12Y2OdZ0hEsfvXXWfDJ6N99ZGt5+aCEH3BGrdh+qGMiCo5XfXcYKI/PyT16SWvljHlqif053Td4wwbxJdoRbeWSclyKt3vvQxH+WotPyyFXC1H5NngokzssvPddd/BuDFSnETZq+Cq0XrRtU54aBnpyohYw5XR9WMdrtXrocSwhxuB6a5GKo5c+vCljYJEVCdsbIqeKa1buHfzcAmXcPvWkUdztVqrVssZtu3b9lGct23Kcrk4M1ssy7KZqXmlN9Vyw0P5/lp+3XD+cD82bvVfRRv7djfOAB+DX8XRqUvQ9r8C/Yw7mOPMB5lPMI8zX2W+Tz2OeMrjCAFwDTQMQNDrX4tZZ6G7nZ0N0K4LFKaJcSyqM+kZgN6JNy66Tcx1xmmjpoMjcnTNCA0MqIT4QOSHbi8WEZcCDOTIHExOdJJHUoTIcbI5jqqX2NXxCsFMZwK7V8NKHT2ZbgpLiSOi3CQTCtsoVxRvelR7U9/bRpjp2HRNsfSHSVwDPqRkDFNJ24pmEx6Uvsvz04ZqqkZM9s6U7dqgm+JYiD5sGN/wzx0bnSssuPKQJ6A9IsK8r/SlJEMmaaf8LV5S+QEeiMo/HNI0JW/jActUiR/k1aM8pVJcsBskQSSg6/dIwpQoAaUE7PWYJOKUIEnCXaCoLptRRUQYffXJ+g5OAhOKKdOTBIkrcqIoeXdpLCvxmgaSIhBNSnuEExTDUG6hJGWJmp/SOUlUD73mcpnwygRLLFHQePpuWeHZlMzjKlKGAy/iVUInR/ibBntJjU+WgOSNK8nh9SKRxUn1WkFk0YviSEFSJRbR73xVV3TQsJKr+31ox9pbOIXl+P/qmpKuSJyY7xN4oqQU010bZ0kxPlNCXTWOGuN59oxYeFJSEJMsdGAQWuN4qjyHS9wLdFR73gOcitbHNz9PULqF1/j9J3hVuOaVIEZ3wH3sq3bs+pu+/v7xajWLvlAuk2EZS13p4kd/v1kQ9h/n+WsgFT15fbQE7Ct3XHQEMrTLeP/lmRztFZ/35blTfEIjHXFcw6HxirPmD1bZOk2xwulVk4tG4Ak4Njz0INyyegaRD09E69eMT/2BgCm/kEdAum/+HT7Bdvry3+4SLOIMKLZYOoPY4jnEmCpjoWc3wMwz+5jLEEl69HahTe3bKEuNHIomHlZStsoeQic8TJ5rc80wI4Z48uuUtCY7SJ1Jr41oyirPsVR14CSpAkfX0HMnPUT83p32aBUBcqY6avsxhesUyZPOh+g26L8C+vLyDumpRqMThpc1PCmlOdbEYn9172lYkIhoSLI3lK23gSv2ZQbv3MLxC//dbhRc/UrdKY7a84ZbaNjR1xD7n38ry1y932oGrrND8uDi8eiDhhH0lf3sOjMAWWssRlM3CYJmZpy+wWy7pmZDWeJbWwRhc7IH8DhEMZZsoq8bR5gbUKExl7OC9bVka7BcOCvUQmyRONU2VTVobE/AwHkXnTcA6Ww2DUNIo++WOps65Z9CXhKjp+P4yJAovVkiOXRrTQjnB84bwN98Nv1l2gfJfKlTLndK87+mjb9MXf6tks7NzUmmapqJ7CwtxbLj4rzXo4eOOAi1czJzlJom9dKpsVmRJ5StGt0jVNgFoCYXrVQTpcuLF0e3DvUm1axofY/mgpmrb7pmevqa6cELCkd5TYr81v6X7G82kbRgxtlUb9QFVAhCsVZsmwIRJNZmZU1CN4mIrCj1HS1cMDhNB7jp6pkgd5SXNDBb+1vdQd5UrOZ4FRWH6+dEUV3UVJkqHIKrVYAs+8pwGiU3xH1hMvQOMUQeC12og8duMg64BAhuJjvtFr1EmXC5diy9MQo6ae/b7Yz6oCHmiaHuAw+wP3ya49kPfAAR0FO8zD1LIy5wp7N7X2bsC0++YyV84rP5++5hwWf9dHT6C3dz7D1fYFf8nNPg0hmCU27DaTzPztDQqroUrcsg2DJQV/lg+MtnnfotG5mrmJegD8502ggcqHlqOk0KC+jejUKDa21gkzC8SwHFMITJucI9LUKBsw2WOB5irJ6iwPPpepOrN76zchfkxcxoADXFiFAK8BNZZ02BK6DCyoiKEMopVSRaRi2quiIKHEsd3bRhpUVJrKmmJhIjo02Wqz1Fo+qy1VM+I+u0nbVWa1urpY7yElfgQJQ5d4BD4X5rgH6clJElVtc1VZQEVmElNWWnNMKWSqwoqJIs8wpuOpF4VuUkxbBNXWaDq9Wu3tpQrcjaukZP15nK+1tbW/g7v8lzOU4mXGaYF+WunMCjMIxyYlFvIJMsvILo8OzElmw1i7+3Z/uz+LsryQGTprlses2jOy5qTMR5FzEvw3QXVYQUvabYGMCGtkdDGhTnUg04DW6MSeqAoGZVNkQwFYMsDndqdQeET/Euk/EYNYbj9bDVGYdnDCn/sqkLeR2NOefgYmVpMycYmyRFVFiX40VF5y+celle4bjorQ7HEznJq7xYa1zxDlkmCncQgBfVeQk7T9ksT9u4llqVeA5Rb2gbiCjgwVw5lz1QshDgSOTKlCSiPybh8cPTaxwkEkIfq3SgVByKTi7n+suj+WrcILoat47QZHSxSLAWwRMrFlJ6La1zLMtrJL6+i31aeBq+zWRQUxWZITzLM8wC9dhRLKtnmdGQVNsombFbboUudckdGkMlsUvroGjHZWtKErOIzeDeUYlE/9L7TkXQ+tdFXwdTEvc8pziu7lZdgVdVLaW+1sgH5UqelUxLM1Kva6xb58KHRiVTi47Fnes8gqJ10Qk4tleUo1PPSDXLPzwmWKQc6o384fOlwJzZmXEz4eE4Vop6GOBUV/6qzDrE2jvRZ9/PXBnHSs+CL53nlXjPL1lzB7LaAgnVThNXnPEyY5QN+zJBEAaBLamqpaqf9MNwfRj6pueVPO+v7SAY8H1bjus23Wxpd2vWzfENxReow//QUbj50yfgnj+Dm4+CTJsOBAuaqeEvRYdZH76UDlPyPrum7opZ3bL0WUv/NB3qEc166pHgKchA9ONHlvc7jjsGqLenmQsRYxxkrmVuoD5+gh5WrjZ6Wz8LIqktX2rUUI+hBHiJDUtsWgbRf6WOmrDdtWai0DvVK1zruVmZRB5QcNpNuCN618MiF8bBXMVABPZy1TJS0Sc7nLBFgLHBzQOimL6gYRaNgYnBBVsvmZUpk8jxHVglumtkU6OxaWSHXSgMBsEHZA1NibZp40Yff43ISJnUXJusLkW/VHRdeb/IPyCJpilKdw8uDMZjEjG9rYGZaEmSK75RNON7u3PXHyrhwI2GFeC4g8FrdEvHH5h04I2rbMlpGk+rLS/HacLpbw99G38/pOTb3TgAbRfH0KjVyTStamx5TvnU+AAT+b3x/g6eZmgGLT+9pmw3qWmJrUZsSWOTAsrwjmD4FcN9m/obOxr4I+ScQ1NTh+CpUjBw03AuaOy8fGdjaOrQDYemeuM+Bl/5A8Zt7C74105ntw2N7R4d3T1GyPor16+/Er5cr05fH5RqY7uv2j3mdw5ef7DTHZdV4WvxuOUkCFOOwReNVuMyEbjMUmAMt0SPNzJo6FuwqdQqFlul6D44XJ8Pw3m4awQtuz1ZbBc3YlUQzocbw/n6MraH5+DLcXycxlS78XBSxblSaESSNQjxtzcEha9DBRLFsYkTuGCL02zb8/7kFZ2ZxWzOuaQ5etEo/LdW29625bm4ZF8LS7D+X7fayJKRzhUIANXG+tGLXosDbNl2z6ZJbXT96K5RrOjOZ+lXMZ7jYz1ZpfFQdCpqKxqSIjbHCpcvnzo0nPP2fdF6eH10W+JcCKjDyYvvLo+Ozo+OzkXfQ5x3al/0dnjCTxwQFjl6/4v/F62dH33/xcs4EmIfxGFuhwLK0Bq3Y/mGq1Ktk3o4iaaNftBSobcEmF0JFYgeFnRr7CKgeewFEJCXtMSdoGbR9cSVG9vJEAu6NXRUmu00u5dnVNOjuU0iRTSEQIME2AhdEyxy4sh2ErKtd9phtzgJM+Bwc5AUrQrqes1OtzgJO+CYFBXNQXtVtNxFdNUtjlvQtyYTaCaB4ag6Xa1OL1BSGTrnnIunpz/K8gY666LMG4ahh7ogC2YaIJ+xM3mAjMnLApZinSmLHr3Q9ETZ7DaVBDOz3DRtCr2mvIyoSdIJNgeVSKaURgQgaIi3BXymBFEVNMXNqlhpExVYNe+qsqAJWGVgE5UoYkrkdCKbRI376xwWKCv9NV5R3PxK/6yraKv7a/jk0qKC/eFYZXrzdCUmp6Z3T+PvXgDLFBRBr+MydJwsQneNTjYjagRnTgQdV1FHU5FOFpdBo5G0pZwSk7bYBTvKfNIWhzOtLi/mu3OS9TVzEg2RMyWLdNeU4kT97DV5OZ3tLgp5oihreaKLXGqlv8nhgKt4igyQE54m3x7Bt+HXsW7YzuxCO4YeVn0l3DcHCUBPIn6Eo0huMon5oe+LQv6Hf1rDiI7frk+mWS0c2e/pur212dTY9GS97Tsnva1DY2NDW73RoXMLhXOH3uNaBUVP57Jq2s+5flq10lnVyo9ZHTQ7nOwNzx24UedVJxz0vP7+bIrXbzwwN+wqcNHtl7Xz+fZlt6ecUn9/yX482wcK8Q22jlvnZPJcNsuqvsKGgqS66fyLSryuTMtike/amJPoIwuxNYr1ZBwv8AA+V/jz+wufpZT9bOH++wtv+Nzn8NHt8zl8xH0S782Ktfgl9mc/a3/kI5TCsH3ypP1wtOtjzsmTznJcO9aDKrOXWj6qf+i5Q4YRZJsBpOut0m8eGmy4cuFBQtTcnVjnxBokLMT3UF4mJMvmiOrvFnwnoN8JBPTe2ymfsziDvqnErz84I/A8LRQDgYdzDk3TD2og3OwfH3Q2/MaeqV4y1nNH/jn5tuAD9uTczDUbOF7odeM6l3U4Oho7fc0GnmOTF7EcW8ieGMmcB5y9oVTpOVDbaCw95tMzcXwsiQENUntHP9iirgIq/bbV5BJF17bKpPsNDEc/+0LgC89E26u2lT2dtezqnG2cNmyYvDkIXhQE5K3B4wG8yY9+NNTnOH1DYEc/ypdKebCnv/nNb8Lbpi+5hDkLF2QqIqGjtqvUBMYxgxhjx5bgF38MLFiLC1543FWwYGzs98CCLi6g8lFYiSKis9C7rUGTiS/qBuW6kcL/3aAooPUNeOLECcz34oHgjNt7dzsTZ2g4zk9ic73vQWJ72I/eyhjTYubo2YfVVhFijEAhQherIqW5mo22okNoCKwabkA3MEascaSFowiiPIeiG4dpKJqg0gzMZnrP/VZKoqfR771gdig1Md0q2OnaCGhBCTpZx9+2o1wf4/4xEIdLjuFkxyt9A8q2we2FHIgGrKunbaFZrm24lmW6IyFZYnCwRsPN+WO+N5hKLwwYRnHnLW5N0XbvU9ROv1IcU9EQ1dziiJeJPhLkfEgPLKRTg55hdIp7R7H7cvxWgW/E3s0EM5vc9nTKsWS26l0PznMzrXYZ7aVTFsrIFZF0LxrpdyLYGE+oQEF6fEtid6jB3wBoh+lpRc1Qh7+0JcHWo+2aJUgm/CVwEG2Bp6LHBL8/4DfRINi8kK/6AsziSYveS1ydJznCtziJu5CAuIOk/FrtPkWUgUO/RI+eQ7sCefq1drRoeZ6FZ9KybfrwZTMlqqqY+huWHeFMfr0gyYflXXmH4ZeeW8ZCybdtTI2rVwgnxl5Kq5aHMEa3ThWe+ymf5k9zkgSn0AOufetb/0IDsB58l5AokHRJleFT0bZLhv/pLfRkJxgLcNw0jppF2e1n6vFXw01mPbOB2ch8AraejbwoVqrOInqiIIhCI/odcHUS8Qm9YKl7DpYhpKFXbvST4KbYaf8nSHs+SLPLeVvYa1tWmTVsK52Z8Ut7eAH2lHz7okzaqgCWWvZMvryHF6///wjJ7eFsr3BOnlPUrM+pCleyuUJhmNULWO4/r7jz/zrgW75T/xLLMTPMPKZEEofvCNXfhAYgOvE1Rz0WdiykQX/Ri4N8nQQEit1rUntSoI1FeKK/43Pc7DZXM9QUwGwfrleW81mr0ky7Qop+raRb4UgjkxblvfVJnuxd3x4pnxPK0U91YBf6YVM2d+WuTSy7R0hrhS1BqjGcypVYtjDiWg5c1VdKOxxX1M2iG/r1dRcuTB8O8sLEM6pd2cT8H3uqFet4nGNgZGBgAOJ1Bw+djue3+crAzcQAAveX8ljB6P+//n9m4mZiA3I5GMDSAGQKDEl4nGNgZGBgYgACPSaG/7/+f2XiZmBkQAUBAF9QBH8AAHicY2BgYGAC4///mOBsYvD//8SJkSKPrOb/LySx3yDMeI8U99ES//8LYwMA4F4TWgAAAAABEgEkAToBTgFgAXQBiAGcAa4BwAHWAewB/AIQAiYCPAJOAwwDvgQqBOwFhgYoBvAHeggSCCYIXAkyCUQJlAmuCcgKNgqsCsoK9AsoC0wLigwGDF4NoA3+Di4OZA7wD0wPvBAIEBYQJBDQEPwRoBIQEpgTPBNQE2QTkBO8E+wUNBRwFfwWghacFrgXMBdwF5wXyBf4GIAY9hkiGvYbXgAAeJxjYGRgYAhg9GIQYQABJiDmAkIGhv9gPgMAGdoBxgB4nG2PPW7CQBCFn/mLAlKEEilSulWKNBHmp6DgANBT0Buz/kG211oWJC6QE+QMOUNOkDJnyFHybEYuEnal1ffevNnRABjiCx6q4+G2fqvTwg3VhdukoXCH/CTcxQDPwj36I+E+XjEXHuABAX/wOtVv93DCLdzhTbhN/124Q/4Q7uIRn8I9+t/CfWzwIzzAizc/py4ZpaEp1jo+ZoFtdAMbbQ+pKdTUnzTeShfaBk7v1PasDqd45lykImtytTSF01lmVGnNXofOT5wrF+NxJL4fmhxnpNwm4dYpQhgUWEMjxhEZN7ZX6v+dDTssDtSVUpjCx+RKbsVcUWcDVjR2zG6ZU+w9ceaMrkNEHTFjkJOWdWeVzngNnbKu7emE9H1OqLpKLDDmjf7k/Xp2/gurBGCqeJxtUmlz2yAU9DaSK8uKkzRJ7/u+1Pu+7/tIfwJFzxITDCpI8fjfFyTbcTPlA7O7sI/HQmdfpx1h5/9jC/uwhAAhutiPCD3E6CPBMgZYwSrWcADr2MAmDuIQDuMIjuIYjuMETuIUTuMMzuIczuMCLuISLuMKruIariPFDdzELdzGHdzFPdzHAzzEIzzGEzzFMzzHC7zEK7zGG7zFO7zHB3zEJ3zGF3zFN3zHD/zEFn51Ysa5rlUlVD5gxuhxmumxSpms1heo1Cr32soeLd7lU7ekYbXgbuge91yLd/l0yYi8aOwbi3zmX90r9heEpMV16XeuzcnMu/yPEs1Y/Jup7ZQXxLcDDxPOJKmMmZRl2WBORlrRZG1OrTNktaRopixzZovUUC5sRSbwrMsLZirba2r7DpIWcWG4pM2WlEbnhqydqmGjhty1SD03W/LGsEEB1+Wkzw1loko5M1nI3RVU5LOXmmVBZlge+NWQlGsipgmljTNbcjApSJbukdOCqSwUI5ZTItRQp/ZPzVzRwJO+dP2nlpjhRSA13+65fUoMBZloxIRMdV31RkLVtumrQf0mm2mEI22oW7JJyeRSmQ27JelSUq8sdKV9olEpW2/gQeTO1Q3zIDRUyombLVWBZTsUOeD/pU1sIUhm7StEVpvmiwQexJUYUXt4WBkXe1SraU0PunXps4lqSybVw2G4IzLSq2NmlM+iMoKpXNJgrI2rPzsvmIiq6HT+At2JLgAAAAA=") format("woff"),
|
12 |
+
url("../fonts/yith-icon.ttf?6c9fac5a69711520a55f03f0159e3932") format("truetype");
|
13 |
font-weight: 400;
|
14 |
font-style: normal;
|
15 |
}
|
139 |
content: "\e91f";
|
140 |
}
|
141 |
|
142 |
+
.yith-icon-charts:before {
|
143 |
+
content: "\f130";
|
144 |
+
}
|
145 |
+
|
146 |
.yith-icon-check-alt:before {
|
147 |
content: "\f114";
|
148 |
}
|
plugin-fw/assets/fonts/font-awesome/font-awesome.min 2.css
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
|
3 |
+
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
|
4 |
+
*/@font-face{font-family:'FontAwesome';src:url('./fontawesome-webfont.eot?v=4.7.0');src:url('./fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('./fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('./fontawesome-webfont.woff?v=4.7.0') format('woff'),url('./fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('./fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
|
plugin-fw/assets/fonts/yith-icon.eot
CHANGED
Binary file
|
plugin-fw/assets/fonts/yith-icon.ttf
CHANGED
Binary file
|
plugin-fw/assets/fonts/yith-icon.woff2
CHANGED
Binary file
|
plugin-fw/assets/images/arrow 2.svg
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<svg width="86px" height="26px" viewBox="0 0 86 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3 |
+
<title>arrow2</title>
|
4 |
+
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
5 |
+
<g id="Create-badge---image-Copy" transform="translate(-795.000000, -218.000000)" fill="#336374">
|
6 |
+
<g id="arrow2" transform="translate(795.000000, 218.000000)">
|
7 |
+
<path d="M85.2527743,11.0287846 C85.0291804,10.8409658 84.5580864,10.4653284 83.9069923,9.99202513 C81.7582412,8.39556583 77.6702704,5.45995889 74.5990189,3.18547392 C73.0029243,2.00033766 71.6866736,1.0236802 71.0833921,0.482762228 C71.0032358,0.409512919 70.9019857,0.351289109 70.8513607,0.294943486 L70.8513607,0.306212611 L70.8513607,0.293065299 L70.8330794,0.272405237 C70.8246419,0.261136113 70.8204232,0.25550155 70.8218294,0.238597864 L70.8218294,0.238597864 C70.7216008,0.0191459435 70.5127354,-0.0622623017 70.3398646,0.0507452248 C70.1669939,0.163752751 70.086996,0.433994045 70.1552666,0.674337345 C70.2269854,0.978603707 71.7626112,2.67272876 73.859331,4.71995305 C75.783082,6.59814047 78.1540207,8.82567074 80.1143342,10.6512689 C75.6298006,10.6756854 69.8008914,10.6249743 63.3321381,10.6137052 C59.113386,10.6043142 54.6358837,10.5986797 50.0768189,10.641878 C47.4386925,10.6681726 44.7752537,10.7282746 42.1244711,10.7902548 C38.0730628,10.8860423 34.052592,11.0043682 30.1966525,11.1208158 C14.2807069,11.6072663 1.19835652,12.0279803 0.512106166,11.684272 C0.389268144,11.6171708 0.248958141,11.642693 0.144029579,11.7512246 C0.0391010166,11.8597562 -0.0145049592,12.0348087 0.00340450444,12.2104414 C0.0213139681,12.3860742 0.108017998,12.5356045 0.230856023,12.6027056 C0.848200087,12.9558049 11.476643,13.5925104 25.2283687,14.0338845 C30.4314964,14.2010431 36.088843,14.3512981 41.8108772,14.4226693 C44.5727536,14.4583548 47.351505,14.4715021 50.1077564,14.4508421 C52.9202578,14.4320602 55.6933842,14.3738364 58.3976044,14.3043434 C62.8062004,14.1916522 67.016515,14.0338845 70.8344857,13.8648476 C74.942144,13.6770288 78.5885521,13.46855 81.5388661,13.2694622 C81.0438659,13.678907 80.4940219,14.1334284 79.9104278,14.6255135 C79.0905836,15.3148083 78.2074582,16.0717178 77.3130827,16.8511656 C74.0660498,19.6853504 70.6558918,22.7392831 69.5674538,23.650204 C69.1305592,24.0067591 68.9841166,24.7618416 69.2364633,25.3568463 C69.4888101,25.951851 70.0490011,26.1723396 70.5026105,25.8551961 C71.5544861,25.1414849 74.7058939,22.9815693 77.824958,20.6357132 C79.5391776,19.3472767 81.2393347,18.0062509 82.5865229,16.8793384 C83.5022712,16.1209452 84.3879897,15.299703 85.240118,14.4189129 C85.8926184,13.708958 85.9952747,12.9708304 86,12.7754989 C85.9966809,12.7022496 86.0669934,11.6899066 85.2527743,11.0287846 Z" id="Path"></path>
|
8 |
+
</g>
|
9 |
+
</g>
|
10 |
+
</g>
|
11 |
+
</svg>
|
plugin-fw/assets/images/bh-onboarding/check 2.svg
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2 |
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
3 |
+
<svg width="100%" height="100%" viewBox="0 0 35 35" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
4 |
+
<g transform="matrix(2.0825,0,0,3.04444,-3.82583,-18.2777)">
|
5 |
+
<ellipse cx="10.24" cy="11.752" rx="8.403" ry="5.748" style="fill:rgb(226,235,252);"/>
|
6 |
+
</g>
|
7 |
+
<g transform="matrix(0.805374,0,0,0.805374,7.56329,9.79297)">
|
8 |
+
<g id="Plugin-onboarding---Step-2">
|
9 |
+
<g id="Group">
|
10 |
+
<g id="check-verde--1-" serif:id="check-verde-(1)">
|
11 |
+
<path id="Path" d="M4.705,4.608L10.178,9.985L20.163,0L24.676,4.449L10.146,19.139L0,9.249L4.705,4.608Z" style="fill:rgb(115,161,239);fill-rule:nonzero;"/>
|
12 |
+
</g>
|
13 |
+
</g>
|
14 |
+
</g>
|
15 |
+
</g>
|
16 |
+
</svg>
|
plugin-fw/assets/images/colorbox/border1 2.png
ADDED
Binary file
|
plugin-fw/assets/images/help-tab/documentation 2.svg
ADDED
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<svg width="274px" height="200px" viewBox="0 0 197 144" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
3 |
+
<title>documentation-bluehost</title>
|
4 |
+
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
5 |
+
<g id="Help-Bluehost" transform="translate(-358.000000, -322.000000)" fill-rule="nonzero">
|
6 |
+
<g id="documentation-bluehost" transform="translate(358.000000, 322.000000)">
|
7 |
+
<g id="Group" transform="translate(110.000000, 0.000000)" fill="#E3F6FF">
|
8 |
+
<path d="M6.3766672,35.9266104 C6.44826487,35.8558364 6.475114,35.7496756 6.43931516,35.6523614 C6.42141575,35.6081277 4.85074193,31.2643785 5.39219929,25.3016759 C5.89338295,19.8078504 8.34112819,11.7705873 17.1744903,4.67992536 C17.2863617,4.59145796 17.3042611,4.42779327 17.214764,4.31278566 C17.1252669,4.20220141 16.9552225,4.18450793 16.8433511,4.27297533 C7.85784394,11.4830683 5.37429987,19.6751493 4.86864135,25.2751356 C4.32270914,31.3484225 5.92918179,35.7850625 5.9470812,35.8292962 C5.9963046,35.9664207 6.14844964,36.0327712 6.28269527,35.9841142 C6.3184941,35.9708441 6.35429293,35.9487272 6.3766672,35.922187 L6.3766672,35.9266104 Z" id="Path"></path>
|
9 |
+
<path d="M11.1289623,4.62242155 C11.1065881,6.29445537 11.9389109,7.26317338 12.981552,7.27644349 C14.024193,7.2897136 14.8788901,6.34311244 14.9012644,4.66665525 C14.9236387,2.99462143 13.0576245,1.21200335 13.0576245,1.21200335 C13.0576245,1.21200335 11.1513366,2.94596436 11.1289623,4.61799818 L11.1289623,4.62242155 Z" id="Path"></path>
|
10 |
+
<path d="M7.28953746,9.36869746 C7.73254802,10.9832275 8.80203817,11.6909667 9.80440551,11.4211411 C10.8112477,11.1513155 11.3706045,10.0100861 10.9275939,8.39555608 C10.4845833,6.78102606 8.19793286,5.57344608 8.19793286,5.57344608 C8.19793286,5.57344608 6.84205204,7.75859081 7.2850626,9.37312083 L7.28953746,9.36869746 Z" id="Path"></path>
|
11 |
+
<path d="M4.34060855,14.3582587 C5.15950687,15.8223941 6.36324264,16.2603078 7.27611289,15.7648903 C8.18898315,15.2694729 8.46194925,14.026506 7.64305094,12.5623705 C6.82415262,11.0982351 4.31823428,10.4568465 4.31823428,10.4568465 C4.31823428,10.4568465 3.52171024,12.8941233 4.34060855,14.3626821 L4.34060855,14.3582587 Z" id="Path"></path>
|
12 |
+
<path d="M2.33587388,19.6574559 C3.2621687,21.0596641 4.49722845,21.404687 5.36982501,20.842919 C6.24242158,20.281151 6.42141575,19.0204906 5.49512093,17.6227057 C4.56882612,16.2204974 2.01815923,15.7693137 2.01815923,15.7693137 C2.01815923,15.7693137 1.40957907,18.259671 2.33587388,19.6618792 L2.33587388,19.6574559 Z" id="Path"></path>
|
13 |
+
<path d="M1.37378023,25.4255302 C2.64911367,26.5269493 3.93339682,26.5269493 4.61804951,25.7484362 C5.3027022,24.9743465 5.12818289,23.7136861 3.85284945,22.6122669 C2.57751601,21.5108478 0,21.7629799 0,21.7629799 C0,21.7629799 0.0984467919,24.3241111 1.37825509,25.4211068 L1.37378023,25.4255302 Z" id="Path"></path>
|
14 |
+
<path d="M17.2729371,1.37124467 C16.1631733,2.63632846 16.1676481,3.90583563 16.9552225,4.57818785 C17.7427968,5.25054008 19.0136554,5.07802865 20.1234192,3.81294486 C21.2331831,2.54786106 20.9736415,0 20.9736415,0 C20.9736415,0 18.382701,0.106160878 17.277412,1.37124467 L17.2729371,1.37124467 Z" id="Path"></path>
|
15 |
+
<path d="M16.2392458,6.25022167 C14.5567006,6.42715647 13.6841041,7.36048752 13.7915006,8.38228597 C13.9033719,9.40408442 14.9549627,10.1339405 16.6375078,9.95700565 C18.320053,9.78007086 19.886252,7.73647396 19.886252,7.73647396 C19.886252,7.73647396 17.9173161,6.06886351 16.234771,6.25022167 L16.2392458,6.25022167 Z" id="Path"></path>
|
16 |
+
<path d="M12.8294069,10.2622182 C11.1468618,10.439153 10.2742652,11.372484 10.3816617,12.3942825 C10.493533,13.4160809 11.5451238,14.145937 13.227669,13.9690022 C14.9102141,13.7920674 16.4764131,11.7484705 16.4764131,11.7484705 C16.4764131,11.7484705 14.5074772,10.08086 12.8249321,10.2577948 L12.8294069,10.2622182 Z" id="Path"></path>
|
17 |
+
<path d="M10.2876898,14.3847989 C8.60514459,14.5617337 7.73254802,15.4950648 7.83994452,16.5168632 C7.95181588,17.5386617 9.00340661,18.2685177 10.6859518,18.0915829 C12.368497,17.9146481 13.9346959,15.8710512 13.9346959,15.8710512 C13.9346959,15.8710512 11.9657601,14.2034408 10.2832149,14.3803756 L10.2876898,14.3847989 Z" id="Path"></path>
|
18 |
+
<path d="M8.65884284,18.8568259 C6.97629766,19.0337607 6.1037011,19.9670917 6.2110976,20.9888902 C6.32296895,22.0106886 7.37455969,22.7405447 9.05710486,22.5636099 C10.73965,22.3866751 12.305849,20.3430782 12.305849,20.3430782 C12.305849,20.3430782 10.3369132,18.6754677 8.65436798,18.8524025 L8.65884284,18.8568259 Z" id="Path"></path>
|
19 |
+
<path d="M7.79519598,23.4482839 C6.11265081,23.6252187 5.24005424,24.5585497 5.34745074,25.5803482 C5.4593221,26.6021466 6.51091283,27.3320026 8.193458,27.1550678 C9.87600317,26.978133 11.4422021,24.9345361 11.4422021,24.9345361 C11.4422021,24.9345361 9.4732663,23.2669257 7.79072113,23.4482839 L7.79519598,23.4482839 Z" id="Path"></path>
|
20 |
+
</g>
|
21 |
+
<path d="M25.1177429,16.7436106 C15.8345531,17.6803268 6.71594304,25.7112261 7.13406467,35.4779361 C7.50770528,44.1836262 14.8025933,51.007005 16.2749152,59.5839521 C18.4500373,72.2629175 7.61890784,83.259345 5.39930471,95.9294315 C3.94032711,104.262211 6.54246705,113.269781 12.1737648,119.347338 C17.8050625,125.429335 26.3142825,128.425939 34.3075226,127.142949 C44.8495254,125.451532 54.0215127,116.936737 64.6747181,117.393996 C73.2551078,117.762468 80.4610337,123.844464 87.9249497,128.306075 C95.3888656,132.763246 105.45937,135.489046 112.060354,129.726688 C116.517352,125.833322 117.851783,119.316263 121.134483,114.299725 C126.067428,106.761601 135.86215,103.152358 144.211238,105.798248 C151.261481,108.031273 157.12408,114.162103 164.476793,114.637121 C171.736096,115.107698 178.657344,109.269869 180.570028,101.918201 C182.48716,94.5665315 179.769369,86.3491769 174.498368,81.0973506 C171.157843,77.7677904 166.620778,75.0686269 165.56213,70.3672878 C164.583547,66.0299807 167.065589,61.6172036 170.134779,58.5318111 C173.20397,55.4464186 176.95372,53.1068476 179.675959,49.6796203 C185.86327,41.8928888 184.964753,31.4513879 179.800506,23.3672157 C177.09606,19.1364545 174.062454,16.4772458 169.787827,14.0710836 C165.495408,11.6560425 160.887174,9.85808003 156.141049,8.71271131 C145.523428,6.15116964 129.34568,5.32543871 121.276822,14.5416614 C117.260185,19.1320151 113.172379,24.8721769 106.500226,24.0952795 C102.385731,23.6158229 99.8369681,20.4860363 96.5453722,18.2219353 C92.2929863,15.3008011 87.9872231,16.9123083 83.9527942,19.4338952 C79.7938184,22.039831 76.4310529,25.8577268 72.3254543,28.5480114 C63.0867455,34.5989322 56.6236527,28.7966186 48.7149265,23.8688695 C41.6246512,19.4516529 33.5513452,15.8779249 25.1266391,16.7302923 L25.1177429,16.7436106 Z" id="Path" fill="#ECF7FA"></path>
|
22 |
+
<path d="M38.1177429,27.7436106 C28.8345531,28.6803268 19.715943,36.7112261 20.1340647,46.4779361 C20.5077053,55.1836262 27.8025933,62.007005 29.2749152,70.5839521 C31.4500373,83.2629175 20.6189078,94.259345 18.3993047,106.929432 C16.9403271,115.262211 19.542467,124.269781 25.1737648,130.347338 C30.8050625,136.429335 39.3142825,139.425939 47.3075226,138.142949 C57.8495254,136.451532 67.0215127,127.936737 77.6747181,128.393996 C86.2551078,128.762468 93.4610337,134.844464 100.92495,139.306075 C108.388866,143.763246 118.45937,146.489046 125.060354,140.726688 C129.517352,136.833322 130.851783,130.316263 134.134483,125.299725 C139.067428,117.761601 148.86215,114.152358 157.211238,116.798248 C164.261481,119.031273 170.12408,125.162103 177.476793,125.637121 C184.736096,126.107698 191.657344,120.269869 193.570028,112.918201 C195.48716,105.566532 192.769369,97.3491769 187.498368,92.0973506 C184.157843,88.7677904 179.620778,86.0686269 178.56213,81.3672878 C177.583547,77.0299807 180.065589,72.6172036 183.134779,69.5318111 C186.20397,66.4464186 189.95372,64.1068476 192.675959,60.6796203 C198.86327,52.8928888 197.964753,42.4513879 192.800506,34.3672157 C190.09606,30.1364545 187.062454,27.4772458 182.787827,25.0710836 C178.495408,22.6560425 173.887174,20.85808 169.141049,19.7127113 C158.523428,17.1511696 142.34568,16.3254387 134.276822,25.5416614 C130.260185,30.1320151 126.172379,35.8721769 119.500226,35.0952795 C115.385731,34.6158229 112.836968,31.4860363 109.545372,29.2219353 C105.292986,26.3008011 100.987223,27.9123083 96.9527942,30.4338952 C92.7938184,33.039831 89.4310529,36.8577268 85.3254543,39.5480114 C76.0867455,45.5989322 69.6236527,39.7966186 61.7149265,34.8688695 C54.6246512,30.4516529 46.5513452,26.8779249 38.1266391,27.7302923 L38.1177429,27.7436106 Z" id="Path" fill="#DDEFF7"></path>
|
23 |
+
<g id="Group" transform="translate(41.000000, 35.000000)" fill="#B2E4F9">
|
24 |
+
<path d="M30.6678034,26.9903235 C30.5748169,26.963378 30.4951143,26.8870327 30.4774026,26.7837419 C30.4685468,26.7388329 29.6051015,22.135658 26.1203252,17.1911744 C22.9056521,12.6329085 16.7419816,6.84413526 5.61460795,5.12861055 C5.47291437,5.10615603 5.37550004,4.97142896 5.39763966,4.82772008 C5.41977928,4.68401121 5.55261701,4.58521135 5.69431059,4.60766587 C17.0165129,6.350136 23.2908816,12.2556727 26.5631176,16.9037566 C30.1098849,21.9425491 30.9866139,26.6400331 30.9954698,26.689433 C31.0220373,26.8331419 30.9290509,26.9723598 30.7873573,26.9948144 C30.747506,27.0037962 30.7120826,26.9993053 30.6766592,26.9948144 L30.6678034,26.9903235 Z" id="Path"></path>
|
25 |
+
<path d="M10.7377163,2.00294247 C11.6055895,3.45799485 11.3841932,4.72892023 10.5030363,5.26782852 C9.6218794,5.80673681 8.40862815,5.4160283 7.54518292,3.96097592 C6.67730977,2.50592354 7.36806595,0 7.36806595,0 C7.36806595,0 9.87427108,0.547890093 10.7421442,2.00294247 L10.7377163,2.00294247 Z" id="Path"></path>
|
26 |
+
<path d="M16.4187431,4.20348465 C16.8615355,5.84266403 16.308045,7.00131685 15.3117621,7.2797528 C14.3154791,7.55369784 13.2572052,6.83964436 12.8188407,5.20046498 C12.3760483,3.56128561 13.7132814,1.34277982 13.7132814,1.34277982 C13.7132814,1.34277982 15.9759507,2.56430527 16.4187431,4.20348465 Z" id="Path"></path>
|
27 |
+
<path d="M21.4665768,7.07317129 C21.510856,8.7707324 20.7049738,9.76771273 19.6732674,9.79465814 C18.6415611,9.82160356 17.7825438,8.87402315 17.7338366,7.17646204 C17.6895574,5.47890093 19.5050063,3.64212185 19.5050063,3.64212185 C19.5050063,3.64212185 21.4178696,5.37111928 21.4665768,7.07317129 Z" id="Path"></path>
|
28 |
+
<path d="M25.8635055,10.6928386 C25.7838029,12.3903997 24.9070739,13.3200165 23.8753676,13.2706166 C22.8436612,13.2212167 22.0554907,12.2107636 22.1351933,10.5132025 C22.214896,8.81564142 24.1587547,7.12257121 24.1587547,7.12257121 C24.1587547,7.12257121 25.9387803,8.99078661 25.8635055,10.6883477 L25.8635055,10.6928386 Z" id="Path"></path>
|
29 |
+
<path d="M29.6095295,15.2511046 C29.0781786,16.8633385 27.9800533,17.5145194 27.00591,17.1821926 C26.0273387,16.8498658 25.5402671,15.6597767 26.071618,14.0475427 C26.6029689,12.4353088 28.932057,11.3440195 28.932057,11.3440195 C28.932057,11.3440195 30.1453083,13.6343797 29.6139574,15.2466137 L29.6095295,15.2511046 Z" id="Path"></path>
|
30 |
+
<path d="M3.84786617,2.27688752 C5.43749098,2.82028671 6.07511207,3.93403051 5.74744568,4.92202904 C5.41977928,5.91451847 4.24195143,6.40402683 2.65675455,5.86062764 C1.06712974,5.31722845 0,2.95501378 0,2.95501378 C0,2.95501378 2.26266929,1.73348833 3.84786617,2.27239662 L3.84786617,2.27688752 Z" id="Path"></path>
|
31 |
+
<path d="M7.20423275,6.02230012 C8.73186662,5.32171935 9.94954579,5.69446425 10.3746265,6.64653556 C10.7997072,7.59860687 10.2683563,8.7707324 8.74515039,9.47131317 C7.21751653,10.1718939 4.84857705,9.17940451 4.84857705,9.17940451 C4.84857705,9.17940451 5.68102681,6.71839 7.20866068,6.02230012 L7.20423275,6.02230012 Z" id="Path"></path>
|
32 |
+
<path d="M12.1457962,7.80069748 C13.6734301,7.1001167 14.8911093,7.4728616 15.31619,8.42493291 C15.7412707,9.37700422 15.2099198,10.5491297 13.6867139,11.2497105 C12.15908,11.9502913 9.79014052,10.9578019 9.79014052,10.9578019 C9.79014052,10.9578019 10.6225903,8.49678735 12.1502241,7.80069748 L12.1457962,7.80069748 Z" id="Path"></path>
|
33 |
+
<path d="M16.4054593,10.1180031 C17.9330932,9.41742234 19.1507724,9.79016724 19.5758531,10.7422386 C20.0009338,11.6943099 19.4695829,12.8664354 17.946377,13.5670162 C16.4187431,14.2675969 14.0498036,13.2751075 14.0498036,13.2751075 C14.0498036,13.2751075 14.8822534,10.814093 16.4098873,10.1180031 L16.4054593,10.1180031 Z" id="Path"></path>
|
34 |
+
<path d="M20.0629248,13.2032531 C21.5905586,12.5026723 22.8082378,12.8754172 23.2333185,13.8274885 C23.6583993,14.7795598 23.1270484,15.9516853 21.6038424,16.6522661 C20.0762085,17.3528469 17.7072691,16.3603575 17.7072691,16.3603575 C17.7072691,16.3603575 18.5397188,13.8993429 20.0673527,13.2032531 L20.0629248,13.2032531 Z" id="Path"></path>
|
35 |
+
<path d="M23.1314763,16.7869932 C24.6591101,16.0864124 25.8767893,16.4591573 26.30187,17.4112286 C26.7269508,18.3632999 26.1955999,19.5354255 24.6723939,20.2360062 C23.1447601,20.936587 20.7758206,19.9440976 20.7758206,19.9440976 C20.7758206,19.9440976 21.6082703,17.4830831 23.1359042,16.7869932 L23.1314763,16.7869932 Z" id="Path"></path>
|
36 |
+
</g>
|
37 |
+
<g id="Group" transform="translate(133.000000, 38.000000)" fill="#B2E4F9">
|
38 |
+
<path d="M0.332244101,26.9903218 C0.425243793,26.9633719 0.504957816,26.8870139 0.522672043,26.783706 C0.531529157,26.7387895 1.39509773,22.1348487 4.88037194,17.1895426 C8.09550419,12.6305184 14.2600553,6.84078219 25.3890185,5.12497208 C25.5307323,5.10251383 25.6281606,4.96776435 25.6060178,4.82403156 C25.583875,4.68029878 25.4510183,4.58148249 25.3093045,4.60394074 C13.9854847,6.34670074 7.71021974,12.2532198 4.43751626,16.9020771 C0.890242258,21.9417078 0.0133880103,26.6399732 0.00453089667,26.6893813 C-0.0220404442,26.8331141 0.0709592488,26.9723552 0.212673067,26.9948135 C0.252530078,27.0037968 0.287958532,26.9993051 0.323386987,26.9948135 L0.332244101,26.9903218 Z" id="Path"></path>
|
39 |
+
<path d="M20.2651783,2.00327568 C19.3971812,3.45857011 19.618609,4.72970692 20.4998918,5.26870486 C21.3811746,5.8077028 22.5945992,5.4169293 23.4581678,3.96163486 C24.3217363,2.50634042 23.63531,0 23.63531,0 C23.63531,0 21.1287469,0.547981239 20.2607497,2.00327568 L20.2651783,2.00327568 Z" id="Path"></path>
|
40 |
+
<path d="M14.5789114,4.19969228 C14.1360557,5.83914435 14.6896253,6.99798992 15.6860506,7.27647219 C16.6824758,7.55046281 17.7409009,6.83629054 18.179328,5.19683847 C18.6177552,3.5573864 17.2847596,1.33851155 17.2847596,1.33851155 C17.2847596,1.33851155 15.021767,2.56024021 14.5789114,4.19969228 Z" id="Path"></path>
|
41 |
+
<path d="M9.53478515,7.06985631 C9.49049958,8.76769982 10.2964969,9.76484601 11.3283507,9.79179591 C12.3602044,9.81874581 13.2193444,8.87100776 13.2680585,7.17316425 C13.3123441,5.47532074 11.4966358,3.63823609 11.4966358,3.63823609 C11.4966358,3.63823609 9.58349927,5.36752115 9.53478515,7.06985631 Z" id="Path"></path>
|
42 |
+
<path d="M5.13722824,10.6901258 C5.21694226,12.3879693 6.09379651,13.3177408 7.12565024,13.2683326 C8.15750398,13.2189245 8.94578709,12.2083033 8.86607307,10.5104598 C8.78635905,8.81261632 6.84222261,7.11926446 6.84222261,7.11926446 C6.84222261,7.11926446 5.06194277,8.98779065 5.13722824,10.6856342 L5.13722824,10.6901258 Z" id="Path"></path>
|
43 |
+
<path d="M1.39066918,15.24915 C1.92209599,16.8616522 3.02037808,17.5129414 3.99466058,17.1805593 C4.96894308,16.8481773 5.46051288,15.6578902 4.92908607,14.045388 C4.39765925,12.4328858 2.06823837,11.341415 2.06823837,11.341415 C2.06823837,11.341415 0.854813804,13.6321562 1.38624062,15.2446584 L1.39066918,15.24915 Z" id="Path"></path>
|
44 |
+
<path d="M27.1515841,2.27277465 C25.5617322,2.81626424 24.9240201,3.93019331 25.2517333,4.9183562 C25.5794465,5.91101074 26.7574426,6.40060054 28.3428659,5.85711095 C29.9327178,5.31362136 31,2.95101372 31,2.95101372 C31,2.95101372 28.7370075,1.72928506 27.1515841,2.268283 L27.1515841,2.27277465 Z" id="Path"></path>
|
45 |
+
<path d="M23.7991666,6.02330198 C22.2713145,5.32260466 21.0534614,5.69541156 20.62832,6.64764126 C20.2031785,7.59987095 20.7346053,8.77219147 22.2580289,9.47288879 C23.785881,10.1735861 26.1551589,9.18093158 26.1551589,9.18093158 C26.1551589,9.18093158 25.3225902,6.71950765 23.7947381,6.02330198 L23.7991666,6.02330198 Z" id="Path"></path>
|
46 |
+
<path d="M18.8568972,7.79750353 C17.3290451,7.09680621 16.111192,7.46961312 15.6860506,8.42184281 C15.2609091,9.3740725 15.7923359,10.546393 17.3157595,11.2470903 C18.8436116,11.9477877 21.2128895,10.9551331 21.2128895,10.9551331 C21.2128895,10.9551331 20.3803208,8.4937092 18.8524687,7.79750353 L18.8568972,7.79750353 Z" id="Path"></path>
|
47 |
+
<path d="M14.592197,10.1151947 C13.0643449,9.41449735 11.8464918,9.78730426 11.4213503,10.739534 C10.9962089,11.6917636 11.5276357,12.8640842 13.0510593,13.5647815 C14.5789114,14.2654788 16.9481892,13.2728243 16.9481892,13.2728243 C16.9481892,13.2728243 16.1156206,10.8114003 14.5877685,10.1151947 L14.592197,10.1151947 Z" id="Path"></path>
|
48 |
+
<path d="M10.9342091,13.2054495 C9.406357,12.5047522 8.18850388,12.8775591 7.76336243,13.8297888 C7.33822097,14.7820185 7.86964779,15.954339 9.39307133,16.6550363 C10.9209234,17.3557337 13.2902013,16.3630791 13.2902013,16.3630791 C13.2902013,16.3630791 12.4576326,13.9016552 10.9297805,13.2054495 L10.9342091,13.2054495 Z" id="Path"></path>
|
49 |
+
<path d="M7.86964779,16.7852942 C6.34179569,16.0845969 5.12394257,16.4574038 4.69880111,17.4096335 C4.27365966,18.3618632 4.80508648,19.5341837 6.32851002,20.234881 C7.85636212,20.9355783 10.22564,19.9429238 10.22564,19.9429238 C10.22564,19.9429238 9.39307133,17.4814999 7.86521923,16.7852942 L7.86964779,16.7852942 Z" id="Path"></path>
|
50 |
+
</g>
|
51 |
+
<path d="M69.9135227,28 L140.086477,28 C141.144068,28 142,28.850578 142,29.9015539 L142,120.098446 C142,121.149422 141.144068,122 140.086477,122 L69.9135227,122 C68.8559317,122 68,121.149422 68,120.098446 L68,29.9015539 C68,28.850578 68.8559317,28 69.9135227,28 Z" id="Path" fill="#414A59"></path>
|
52 |
+
<rect id="Rectangle" fill="#FFFFFF" x="71" y="32" width="67" height="87"></rect>
|
53 |
+
<g id="Group" transform="translate(82.000000, 40.000000)" fill="#E5E5E5">
|
54 |
+
<g>
|
55 |
+
<rect id="Rectangle" x="0" y="6.49645752" width="47" height="1.69783622" rx="0.848918108"></rect>
|
56 |
+
<path d="M46.1601618,12.3763324 L0.839838239,12.3763324 C0.375717107,12.3763324 0,11.9965533 0,11.5274143 L0,11.5274143 C0,11.0582754 0.375717107,10.6784962 0.839838239,10.6784962 L46.1601618,10.6784962 C46.6242829,10.6784962 47,11.0582754 47,11.5274143 L47,11.5274143 C47,11.9965533 46.6242829,12.3763324 46.1601618,12.3763324 Z" id="Path"></path>
|
57 |
+
<path d="M31.9978369,1.69783622 L15.0065833,1.69783622 C14.5424621,1.69783622 14.166745,1.31805706 14.166745,0.848918108 L14.166745,0.848918108 C14.166745,0.379779154 14.5424621,0 15.0065833,0 L31.9978369,0 C32.4619581,0 32.8376752,0.379779154 32.8376752,0.848918108 L32.8376752,0.848918108 C32.8376752,1.31805706 32.4619581,1.69783622 31.9978369,1.69783622 Z" id="Path"></path>
|
58 |
+
<rect id="Rectangle" x="0" y="14.8605349" width="37.2799774" height="1.69783622" rx="0.848918108"></rect>
|
59 |
+
<rect id="Rectangle" x="0" y="19.0470416" width="47" height="1.69783622" rx="0.848918108"></rect>
|
60 |
+
</g>
|
61 |
+
<g transform="translate(0.000000, 25.391587)" id="Rectangle">
|
62 |
+
<rect x="0" y="0" width="30.2076554" height="1.69783622" rx="0.848918108"></rect>
|
63 |
+
<rect x="37.2799774" y="0" width="9.72002257" height="1.69783622" rx="0.848918108"></rect>
|
64 |
+
<rect x="0" y="4.18203868" width="47" height="1.69783622" rx="0.848918108"></rect>
|
65 |
+
</g>
|
66 |
+
<g transform="translate(0.000000, 44.657560)" id="Rectangle">
|
67 |
+
<rect x="0" y="0" width="30.2076554" height="1.69783622" rx="0.848918108"></rect>
|
68 |
+
<rect x="37.2799774" y="0" width="9.72002257" height="1.69783622" rx="0.848918108"></rect>
|
69 |
+
<rect x="0" y="4.18203868" width="47" height="1.69783622" rx="0.848918108"></rect>
|
70 |
+
</g>
|
71 |
+
<g transform="translate(0.000000, 35.024574)" id="Rectangle">
|
72 |
+
<rect x="16.7923446" y="4.18203868" width="30.2076554" height="1.69783622" rx="0.848918108"></rect>
|
73 |
+
<rect x="0" y="4.18203868" width="9.72002257" height="1.69783622" rx="0.848918108"></rect>
|
74 |
+
<rect x="0" y="0" width="47" height="1.69783622" rx="0.848918108"></rect>
|
75 |
+
</g>
|
76 |
+
<g transform="translate(0.000000, 55.751580)" id="Path">
|
77 |
+
<path d="M1.37468259,1.69783622 L45.6253174,1.69783622 C46.385592,1.69783622 47,1.31805706 47,0.848918108 L47,0.848918108 C47,0.379779154 46.385592,0 45.6253174,0 L1.37468259,0 C0.614407975,0 0,0.379779154 0,0.848918108 L0,0.848918108 C0,1.31805706 0.614407975,1.69783622 1.37468259,1.69783622 Z"></path>
|
78 |
+
<path d="M1.37468259,5.88434289 L45.6253174,5.88434289 C46.385592,5.88434289 47,5.50456373 47,5.03542478 L47,5.03542478 C47,4.56628582 46.385592,4.18650667 45.6253174,4.18650667 L1.37468259,4.18650667 C0.614407975,4.18650667 0,4.56628582 0,5.03542478 L0,5.03542478 C0,5.50456373 0.614407975,5.88434289 1.37468259,5.88434289 Z"></path>
|
79 |
+
<path d="M22.8347597,10.0663816 L45.6253174,10.0663816 C46.385592,10.0663816 47,9.68660241 47,9.21746346 L47,9.21746346 C47,8.7483245 46.385592,8.36854535 45.6253174,8.36854535 L22.8347597,8.36854535 C22.0744851,8.36854535 21.4600771,8.7483245 21.4600771,9.21746346 L21.4600771,9.21746346 C21.4600771,9.68660241 22.0744851,10.0663816 22.8347597,10.0663816 Z"></path>
|
80 |
+
<path d="M22.8347597,14.2484202 L45.6253174,14.2484202 C46.385592,14.2484202 47,13.8686411 47,13.3995021 L47,13.3995021 C47,12.9303632 46.385592,12.550584 45.6253174,12.550584 L22.8347597,12.550584 C22.0744851,12.550584 21.4600771,12.9303632 21.4600771,13.3995021 L21.4600771,13.3995021 C21.4600771,13.8686411 22.0744851,14.2484202 22.8347597,14.2484202 Z"></path>
|
81 |
+
</g>
|
82 |
+
</g>
|
83 |
+
<path d="M107,23.5 C107,24.8841808 105.879473,26 104.5,26 C103.120527,26 102,24.8794727 102,23.5 C102,22.1205273 103.120527,21 104.5,21 C105.879473,21 107,22.1205273 107,23.5 Z" id="Path" fill="#FFFFFF"></path>
|
84 |
+
<g id="Group" transform="translate(4.000000, 55.939667)" fill="#C2EBFF">
|
85 |
+
<path d="M2.93251152,0.852687558 L3.1881558,0.845135567 C4.19439556,0.815410223 5.03421121,1.60703157 5.06393656,2.61327133 C5.06501135,2.64965454 5.06499609,2.68606177 5.06389078,2.72244406 L5.05946074,2.86826367 C5.02893766,3.87296381 4.22116579,4.68005863 3.2164404,4.70973923 L2.96079613,4.71729123 C1.95455637,4.74701657 1.11474071,3.95539522 1.08501537,2.94915546 C1.08394057,2.91277226 1.08395584,2.87636502 1.08506114,2.83998273 L1.08949119,2.69416312 C1.12001427,1.68946298 1.92778614,0.882368165 2.93251152,0.852687558 Z" id="Rectangle" transform="translate(3.074476, 2.781213) rotate(32.470000) translate(-3.074476, -2.781213) "></path>
|
86 |
+
<path d="M5.92505754,7.55668777 C6.105641,7.90807732 5.94881852,8.32618641 5.573395,8.49520923 C5.19797148,8.66423205 4.75126502,8.51744907 4.57068156,8.16605952 C4.3900981,7.81466997 4.54692058,7.39656089 4.92234409,7.22753807 C5.29776761,7.05851525 5.74447407,7.20529822 5.92505754,7.55668777 Z" id="Path"></path>
|
87 |
+
<path d="M2.71257276,14.1441298 C3.0547309,14.8068772 2.75534253,15.6075116 2.04726526,15.9277654 C1.339188,16.2480192 0.483792646,15.9677971 0.141634505,15.3050497 C-0.200523637,14.6423024 0.0988647369,13.8416679 0.806942002,13.5214142 C1.51501927,13.2011604 2.37041462,13.4813825 2.71257276,14.1441298 Z" id="Path"></path>
|
88 |
+
</g>
|
89 |
+
<g id="Group" transform="translate(20.000000, 61.000000)">
|
90 |
+
<g>
|
91 |
+
<path d="M9.8410596,9.33125285 C9.8410596,9.33125285 13.4701987,9.88611482 13.9116998,14.0764325 C14.3532009,18.2667501 14.8918322,28.9334167 14.8918322,28.9334167 C14.8918322,28.9334167 15.0198675,32.1072272 12.2384106,33.438896 L9.39514349,23.4069914 L9.83664459,9.33125285 L9.8410596,9.33125285 Z" id="Path" fill="#3B4956"></path>
|
92 |
+
<path d="M9.8410596,9.33125285 C9.8410596,9.33125285 12.8565121,9.75738685 13.7704194,13.2197256 C13.7704194,13.2197256 15.1434879,17.077126 14.6225166,22.3150231 C14.6225166,22.3150231 15.4746137,10.5253158 9.98233996,10.1435708 L9.8410596,9.33569175 L9.8410596,9.33125285 Z" id="Path" fill="#3B4956"></path>
|
93 |
+
<rect id="Rectangle" fill="#FE9E80" x="10.397351" y="57.1736718" width="1.64238411" height="2.18837563"></rect>
|
94 |
+
<path d="M7.11258278,31.0995979 L10.8653422,43.8614233 L10.1059603,59.8725205 L12.0838852,59.9479817 L15.0286976,43.6705508 C15.0286976,43.6705508 13.5143488,28.3741158 11.6203091,25.5776115 L5.68653422,26.3411016 L7.11258278,31.0995979 L7.11258278,31.0995979 Z" id="Path" fill="#062E5B"></path>
|
95 |
+
<rect id="Rectangle" fill="#FE9E80" x="3.22295806" y="57.1736718" width="1.64238411" height="2.18837563"></rect>
|
96 |
+
<path d="M2.6401766,23.0873909 C2.6401766,23.0873909 -0.136865342,21.0233044 3.200883,58.8471355 L4.92715232,59.1001526 L8.24724062,24.5122765 L2.6401766,23.0873909 L2.6401766,23.0873909 Z" id="Path" fill="#062E5B"></path>
|
97 |
+
<path d="M1.94701987,15.4125401 C1.94701987,15.4125401 0.812362031,12.1277572 2.89624724,10.6984328 C4.98013245,9.26910831 10.9845475,9.14481923 12.781457,11.8081567 C14.4415011,14.267305 13.5011038,24.3302818 13.1258278,28.9955613 C13.1258278,28.9955613 7.19205298,30.32723 1.50993377,28.6138162 C1.50993377,28.6138162 2.90066225,23.3137746 1.95143488,15.4081012 L1.94701987,15.4125401 Z" id="Path" fill="#FFFFFF"></path>
|
98 |
+
<g transform="translate(6.374388, 0.081227)" id="Path">
|
99 |
+
<path d="M3.61236745,6.60888275 C3.61236745,6.60888275 3.31656171,8.36668548 4.01413346,10.2487773 C4.82649549,12.4415918 0.61898997,12.0687246 0.0891886455,10.8968561 C0.0891886455,10.8968561 -0.180127028,10.5284277 0.217223966,9.82264331 C0.610159948,9.11685887 1.45342706,6.24489329 0.504199683,4.69571865 L3.61236745,6.60444385 L3.61236745,6.60888275 Z" fill="#FE9E80"></path>
|
100 |
+
<path d="M0.870645599,5.71222579 C0.848570544,5.6012534 0.826495489,5.490281 0.795590411,5.3837475 L3.59912242,6.72429404 C3.56821734,6.95955551 3.51965222,7.54992866 3.58587739,8.30897984 C2.10243368,7.62095099 1.2326765,6.34698789 0.870645599,5.71222579 Z" fill="#F0736D"></path>
|
101 |
+
<path d="M5.9920584,4.14529558 C5.60353743,6.16943206 4.2702041,7.6120732 3.02075597,7.36793393 C1.76689284,7.12379466 0.221638977,4.88659117 0.614574959,2.86245469 C1.00751094,0.838318202 3.17969637,-0.209261208 4.43355951,0.0348780613 C5.68742264,0.27901733 6.38499438,2.11672019 5.99647341,4.14085668 L5.9920584,4.14529558 Z" fill="#FE9E80"></path>
|
102 |
+
</g>
|
103 |
+
<path d="M13.2362031,2.20682509 C13.2362031,2.20682509 13.218543,3.36093799 9.00220751,1.85615232 C9.00220751,1.85615232 7.85871965,1.46552949 8.13686534,4.23983936 L7.8013245,4.6260233 C7.8013245,4.6260233 7.77041943,3.47191039 7.29801325,3.68497739 C6.82560706,3.89804439 6.93156733,4.40407851 7.36423841,5.45609681 C7.36423841,5.45609681 7.41721854,6.2062702 7.27152318,6.45928726 C7.27152318,6.45928726 5.83664459,6.79220445 6.57836645,5.0477184 C6.57836645,5.0477184 4.20750552,0.631017075 7.63355408,0.355805535 C7.63355408,0.355805535 12.3399558,-1.20224689 13.2362031,2.20238619 L13.2362031,2.20682509 Z" id="Path" fill="#282F39"></path>
|
104 |
+
<path d="M6.75055188,9.3800807 C6.75055188,9.3800807 8.07505519,11.7282566 7.3200883,17.8850051 L6.43708609,27.5662368 C6.43708609,27.5662368 6.38852097,32.2315163 3.02869757,32.5644335 L0,32.5644335 C0,32.5644335 1.70419426,20.6770705 1.58057395,13.756832 C1.58057395,13.756832 1.26269316,9.18476929 6.7593819,9.37564181 L6.75055188,9.3800807 Z" id="Path" fill="#3B4956"></path>
|
105 |
+
<path d="M6.75055188,9.3800807 C6.75055188,9.3800807 8.20309051,11.9191291 7.3200883,17.8850051 L6.8785872,22.8343739 C6.8785872,22.8343739 6.81677704,11.328756 4.77704194,9.47329752 C4.77704194,9.47329752 6.02207506,9.23359714 6.75055188,9.3800807 Z" id="Path" fill="#282F39"></path>
|
106 |
+
<path d="M10,14.1430159 C9.598234,14.0453602 9.29801325,13.6858096 9.29801325,13.2507978 C9.29801325,12.7403248 9.70860927,12.3319464 10.2119205,12.3319464 C10.7152318,12.3319464 11.1258278,12.7447637 11.1258278,13.2507978 C11.1258278,13.4638648 11.0507726,13.6547374 10.9315673,13.8145376 C11.2317881,14.6890001 11.8233996,17.077126 11.5717439,21.8666946 L10.5386313,22.7722293 L9.36865342,21.8311834 C9.36865342,21.8311834 10.3311258,16.4956307 9.99558499,14.1430159 L10,14.1430159 Z" id="Path" fill="#64C4FF"></path>
|
107 |
+
<polygon id="Path" fill="#FFFFFF" points="10.0573951 12.2831186 9.3200883 14.4049108 8.39735099 13.6636152 8.86975717 12.5006245 9.77041943 12.0700516"></polygon>
|
108 |
+
<path d="M9.96909492,12.349702 L11.2935982,13.5881539 L11.7969095,12.860175 C11.7969095,12.860175 11.4966887,12.2254129 11.214128,12.1943406 C10.9315673,12.1632684 10.1236203,12.1144405 10.1236203,12.1144405 L9.96467991,12.3541409 L9.96909492,12.349702 Z" id="Path" fill="#FFFFFF"></path>
|
109 |
+
<path d="M11.1434879,22.9453463 C11.3863135,23.6422529 12.1412804,24.0062424 12.8344371,23.766542 C13.5275938,23.5224027 13.8896247,22.7633516 13.6512141,22.0664449 C13.4083885,21.3695383 12.6534216,21.0055488 11.9602649,21.2452492 C11.2671082,21.4893885 10.9050773,22.2484396 11.1434879,22.9453463 Z" id="Path" fill="#FE9E80"></path>
|
110 |
+
<polygon id="Path" fill="#3B4956" points="2.30463576 12.988903 1.34657837 24.9384105 11.3863135 23.682203 11.187638 21.5914831 4.7593819 21.4583162 5.1611479 15.7454573"></polygon>
|
111 |
+
<g transform="translate(11.395143, 6.710623)">
|
112 |
+
<path d="M0.348785872,2.50521853 C-0.0529801325,3.18880848 0.799116998,3.56611462 1.49227373,3.51284787 C2.18543046,3.45958112 2.59161148,2.56736307 2.53863135,1.87045643 C2.48565121,1.17354979 1.2803532,-0.051585456 0.587196468,0.00168129364 C-0.105960265,0.0549480433 1.22737307,1.00931064 0.348785872,2.50077963 L0.348785872,2.50521853 Z" id="Path" fill="#FE9E80"></path>
|
113 |
+
<polygon id="Rectangle" fill="#FE9E80" transform="translate(1.162557, 3.583125) rotate(167.890000) translate(-1.162557, -3.583125) " points="0.472204732 2.89380735 1.85443221 2.89227388 1.85290854 4.27244355 0.470681062 4.27397702"></polygon>
|
114 |
+
<path d="M2.00883002,3.55723683 L4.36644592,14.2816091 C4.36644592,14.2816091 4.82560706,15.9950229 3.78807947,16.5099348 C2.75055188,17.0248467 1.17880795,16.8384131 1.13465784,14.8897378 L0,3.77918162 L2.01324503,3.55723683 L2.00883002,3.55723683 Z" id="Path" fill="#3B4956"></path>
|
115 |
+
</g>
|
116 |
+
<polygon id="Path" fill="#282F39" points="6.74172185 24.2548205 2.93156733 24.405743 1.88962472 15.1728397 1.55408389 25.8838953 6.62251656 25.6441949"></polygon>
|
117 |
+
<path d="M6.98896247,21.5027051 L5.48344371,21.5027051 C5.48344371,21.5027051 6.90507726,13.6946874 4.77262693,9.47329752 C4.77262693,9.47329752 6.08388521,9.1714526 6.74613687,9.3800807 C6.74613687,9.3800807 7.74392936,18.0758776 6.98896247,21.5027051 Z" id="Path" fill="#282F39"></path>
|
118 |
+
</g>
|
119 |
+
<path d="M10.384106,58.2700791 C10.384106,58.2700791 9.37306843,59.4774587 10.2560706,61 L16,61 C16,61 15.9381898,59.0024969 12.781457,59.4774587 L12.1236203,58.7317242 C12.1236203,58.7317242 10.9183223,59.508531 10.384106,58.2700791 L10.384106,58.2700791 Z" id="Path" fill="#282F39"></path>
|
120 |
+
<path d="M3.20971302,58.2700791 C3.20971302,58.2700791 2.1986755,59.4774587 3.0816777,61 L8.82560706,61 C8.82560706,61 8.76379691,59.0024969 5.60706402,59.4774587 L4.94922737,58.7317242 C4.94922737,58.7317242 3.74392936,59.508531 3.20971302,58.2700791 L3.20971302,58.2700791 Z" id="Path" fill="#282F39"></path>
|
121 |
+
</g>
|
122 |
+
<g id="Group" transform="translate(44.000000, 59.000000)">
|
123 |
+
<g transform="translate(0.000000, 10.153651)">
|
124 |
+
<g transform="translate(3.686949, 13.722670)" fill="#FE9E80">
|
125 |
+
<polygon id="Rectangle" transform="translate(0.850467, 0.947390) rotate(-29.400000) translate(-0.850467, -0.947390) " points="0.317943382 0.160015062 1.36739467 0.170352929 1.38299137 1.73476414 0.333540078 1.72442627"></polygon>
|
126 |
+
<path d="M0.644272177,2.69879007 C0.35980637,2.20117005 0.538744539,1.57354121 1.04344194,1.29559129 C1.5527275,1.01764137 2.19506964,1.19248084 2.47953545,1.68561779 C2.76400126,2.1832378 2.58506309,2.81086665 2.08036569,3.08881656 C1.57108013,3.36676648 0.928737985,3.19192702 0.644272177,2.69879007 Z" id="Path"></path>
|
127 |
+
</g>
|
128 |
+
<polygon id="Path" fill="#1F4C72" points="7.65304785 3.35781433 2.48678173 7.83191139 5.16167795 14.3592514 3.91369893 14.9106682 0 7.63913967 6.34083461 0"></polygon>
|
129 |
+
</g>
|
130 |
+
<g transform="translate(13.346952, 10.826111)">
|
131 |
+
<g transform="translate(1.351316, 13.726786)" fill="#FE9E80">
|
132 |
+
<polygon id="Rectangle" transform="translate(1.767504, 0.947390) rotate(-150.600000) translate(-1.767504, -0.947390) " points="1.25057627 0.170352929 2.30002756 0.160015062 2.28443086 1.72442627 1.23497957 1.73476414"></polygon>
|
133 |
+
<path d="M1.97051012,2.69019134 C2.25497592,2.19257132 2.07603776,1.56494248 1.57134036,1.28699256 C1.06664296,1.00904264 0.419712652,1.1838821 0.135246844,1.67701906 C-0.149218963,2.17463907 0.0297192063,2.80226791 0.534416606,3.08021783 C1.03911401,3.35816775 1.68604431,3.18332829 1.97051012,2.69019134 Z" id="Path"></path>
|
134 |
+
</g>
|
135 |
+
<polygon id="Path" fill="#1F4C72" points="0 3.35781433 5.16626611 7.83191139 2.48678173 14.3592514 3.73934892 14.9061851 7.65304785 7.63913967 1.31221324 0"></polygon>
|
136 |
+
</g>
|
137 |
+
<path d="M12.5761416,2.01240841 C12.3972034,2.0751713 12.2228534,2.15138337 12.0576797,2.24104463 C10.3279441,3.16455565 9.27266769,5.08778976 8.70373607,6.86756584 C8.36880052,7.92108569 8.26327289,9.06874987 8.58444396,10.1222697 C8.90561503,11.1757896 9.70395456,12.126199 10.7729954,12.4758779 C11.8420363,12.8255568 13.1588377,12.480361 13.7736509,11.561333 C14.2370548,10.8619751 14.2737601,9.95191332 14.764693,9.27048771 C15.1822154,8.69217256 15.9209089,8.26179849 15.9622023,7.55795757 C15.9943194,6.99757468 15.5446799,6.51788691 15.4620931,5.96198708 C15.3519773,5.23573084 15.8842036,4.5587883 15.9163207,3.828049 C15.9576142,2.99868231 15.315272,2.22759545 14.5123443,1.95412859 C13.8883548,1.74342462 13.2001311,1.79273832 12.5761416,2.01689148 L12.5761416,2.01240841 Z" id="Path" fill="#81CAE3"></path>
|
138 |
+
<g transform="translate(3.980125, 57.660672)" id="Path">
|
139 |
+
<path d="M0.36027273,2.22359934 L0.649326696,1.87840348 L0.603445114,0 L1.91565835,0 L1.72754387,1.80667446 C1.72754387,1.80667446 3.31963476,2.6674226 3.2049308,4.72066554 L2.40659128,4.80584374 C2.40659128,4.80584374 0.938380661,2.30877754 0.36027273,2.21911628 L0.36027273,2.22359934 Z" fill="#FE9E80"></path>
|
140 |
+
<path d="M0.36027273,2.22359934 C0.36027273,2.22359934 -0.360068104,2.86467738 0.236392459,3.65817956 L0.61262143,5.33932825 L1.02096751,5.33932825 L1.33296226,3.75232389 C1.33296226,3.75232389 2.02118599,3.81508677 1.92483467,5.33932825 L4.08126902,5.33932825 C4.08126902,5.33932825 4.42538088,4.94033563 3.17740185,4.54582607 L2.52129523,4.42478336 C2.52129523,4.42478336 1.8009544,2.56431214 0.364860888,2.2280824 L0.36027273,2.22359934 Z" fill="#282F39"></path>
|
141 |
+
</g>
|
142 |
+
<g transform="translate(12.229633, 57.660672)" id="Path">
|
143 |
+
<path d="M0.36027273,2.22359934 L0.649326696,1.87840348 L0.603445114,0 L1.91565835,0 L1.72754387,1.80667446 C1.72754387,1.80667446 3.31963476,2.6674226 3.2049308,4.72066554 L2.40659128,4.80584374 C2.40659128,4.80584374 0.938380661,2.30877754 0.36027273,2.21911628 L0.36027273,2.22359934 Z" fill="#FE9E80"></path>
|
144 |
+
<path d="M0.36027273,2.22359934 C0.36027273,2.22359934 -0.360068104,2.86467738 0.236392459,3.65817956 L0.61262143,5.33932825 L1.02096751,5.33932825 L1.33296226,3.75232389 C1.33296226,3.75232389 2.02118599,3.81508677 1.92483467,5.33932825 L4.08126902,5.33932825 C4.08126902,5.33932825 4.42538088,4.94033563 3.17740185,4.54582607 L2.52129523,4.42478336 C2.52129523,4.42478336 1.8009544,2.56431214 0.364860888,2.2280824 L0.36027273,2.22359934 Z" fill="#282F39"></path>
|
145 |
+
</g>
|
146 |
+
<path d="M6.31330566,24.0870115 C6.31330566,24.0870115 3.8953463,20.6350529 4.4872187,58.8666157 L6.02883985,58.8666157 L11.1584007,25.6695328 L6.31330566,24.0870115 L6.31330566,24.0870115 Z" id="Path" fill="#BEDAFC"></path>
|
147 |
+
<path d="M8.96067293,24.7639541 C8.96067293,24.7639541 8.82761634,26.1716359 12.617435,58.8710988 L14.2278785,58.8710988 L15.6456194,24.6698098 L8.96067293,24.7639541 Z" id="Path" fill="#BEDAFC"></path>
|
148 |
+
<path d="M9.60760323,10.6961018 C8.89185056,10.7364494 8.1852742,10.8664582 7.50622679,11.0906114 C6.80882674,11.3192476 5.85448984,11.843766 5.72602141,12.6103698 C5.56543588,13.5562961 5.9141359,14.3946289 6.30412934,15.2419279 C6.77670964,16.2730324 7.15293861,17.2413741 7.48787415,18.3217923 C7.8228097,19.4022105 7.85492681,20.6485021 7.21717282,21.5899453 C6.66200568,22.4103459 5.859078,22.9931441 5.7168451,23.9659688 C5.63425825,24.5218687 6.06554512,25.252608 7.59340179,26.0819747 C8.85514529,26.7634003 10.2728862,26.7813325 11.718156,26.7813325 C14.154468,26.7813325 15.3290365,26.0864577 15.5905615,25.4139982 C15.9071444,24.6070469 15.7052655,23.696985 15.402447,22.8810675 C15.0996286,22.0696331 14.6958707,21.2761309 14.5995193,20.4153828 C14.3471706,18.1738512 16.2191392,15.963701 15.5630326,13.7983815 C15.1730391,12.4982932 13.9342364,11.5927144 12.6357876,11.1309589 C11.6676863,10.7857631 10.6261744,10.6467881 9.59842692,10.7005849 L9.60760323,10.6961018 Z" id="Path" fill="#1F4C72"></path>
|
149 |
+
<g transform="translate(9.592915, 1.537204)" id="Path">
|
150 |
+
<path d="M2.94193266,6.73356091 C2.94193266,6.73356091 2.31794315,8.35642978 3.6072156,10.3513929 C4.89648805,12.346356 0.643265412,12.2970423 0.0926864304,11.1179967 C0.0926864304,11.1179967 -0.187191219,10.7459025 0.225743018,10.0375785 C0.634089096,9.32477143 1.50583915,6.43767874 0.5239733,4.87757275 L2.94193266,6.73356091 L2.94193266,6.73356091 Z" fill="#FE9E80"></path>
|
151 |
+
<path d="M0.817615423,5.5769306 C0.817615423,5.5769306 1.35901809,6.7828746 2.78593528,7.71983481 C2.78593528,7.71983481 2.7951116,7.27601155 2.88228661,6.98012938 L0.817615423,5.5769306 Z" fill="#F0736D"></path>
|
152 |
+
<path d="M5.48377229,3.5685183 C5.48377229,5.5410661 4.46520118,7.14151966 3.20804584,7.14151966 C1.95089049,7.14151966 0.0422166904,5.32587907 0.0422166904,3.35333126 C0.0422166904,1.38078346 1.95089049,0 3.20804584,0 C4.46520118,0 5.48377229,1.60045356 5.48377229,3.57300136 L5.48377229,3.5685183 Z" fill="#FE9E80"></path>
|
153 |
+
</g>
|
154 |
+
<path d="M14.2278785,1.64479723 C14.2324667,1.71204318 14.2370548,1.77928913 14.2278785,1.84653507 C14.1636443,2.86867348 13.0900153,3.50078539 12.1494429,3.95357477 C11.2088704,4.40636415 10.1352414,5.05192525 10.0893598,6.07406366 C10.0618309,6.73755701 10.4931178,7.32932135 10.731702,7.95246713 C11.167577,9.10461437 10.8464059,10.4674656 10.0205375,11.3730443 C9.26349137,12.197928 8.24492025,13.5338808 7.00611754,13.5518131 C6.07930959,13.5652622 5.17544243,12.9421165 4.87721215,12.0813683 C4.51474765,11.0457807 4.9919161,9.91604881 5.57920035,8.98357167 C6.1664846,8.05109452 6.89141359,7.15448189 7.08870439,6.07854672 C7.24470177,5.23124778 7.05199913,4.33911821 7.27223072,3.50078539 C7.56128468,2.42036716 8.49726895,1.62686498 9.4470177,0.999236132 C10.2866506,0.44781936 11.2409875,-0.0498006533 12.2503823,0.00399610494 C13.1909548,0.0533098 14.1452917,0.748184594 14.2278785,1.64031417 L14.2278785,1.64479723 Z" id="Path" fill="#81CAE3"></path>
|
155 |
+
<path d="M5.31767533,9.97432863 C4.80838977,10.8395598 4.7946253,11.9648087 5.27638191,12.8434891 C5.76272668,13.7221695 6.73082805,14.327383 7.74939917,14.3901459 C8.34585973,14.4260104 8.93314398,14.2915185 9.52960454,14.2466878 C10.2453572,14.1928911 10.9702862,14.2780693 11.6860389,14.2691032 C12.6266113,14.2511709 13.5809482,14.0628823 14.3838759,13.5831945 C15.1868036,13.1035067 15.8199694,12.3144876 15.9667905,11.4089089 C16.0723181,10.7498986 15.9254971,10.0774391 16.0264365,9.4184288 C16.154905,8.56664679 16.6733668,7.62968658 16.1778458,6.91239648 C16.0218484,6.68376025 15.778676,6.52236998 15.6135023,6.30269988 C15.1179812,5.65265572 15.3795062,4.73362777 15.2143325,3.94012558 C14.9711601,2.77901222 14.328818,1.73894156 13.1313087,1.56858516 C11.9337994,1.39374569 10.181123,1.96309472 9.0294953,2.32173977 C8.12103998,2.60417275 7.68516496,7.871772 6.07472143,9.27048771 C5.72143325,9.43636105 5.45073192,9.7591416 5.3543806,10.1312358 L5.31767533,9.97881169 L5.31767533,9.97432863 Z" id="Path" fill="#81CAE3"></path>
|
156 |
+
<polygon id="Path" fill="#9DC5ED" points="6.02425169 58.8710988 9.84618746 34.191836 9.09372952 28.5969731"></polygon>
|
157 |
+
</g>
|
158 |
+
<g id="Group" transform="translate(0.000000, 30.000000)" fill="#B1D8E5">
|
159 |
+
<path d="M8.05217391,11.3478261 C7.93478261,11.3478261 7.82173913,11.3 7.73913043,11.2173913 L5.83913043,9.3173913 C5.66521739,9.14347826 5.66521739,8.86086957 5.83913043,8.68695652 C5.92173913,8.60434783 6.03478261,8.55652174 6.15217391,8.55652174 C6.26956522,8.55652174 6.3826087,8.60434783 6.46521739,8.68695652 L7.69565217,9.9173913 C7.79130435,10.0130435 7.9173913,10.0652174 8.05217391,10.0652174 C8.18695652,10.0652174 8.31304348,10.0130435 8.40869565,9.9173913 L11.5391304,6.78695652 C11.6217391,6.70434783 11.7347826,6.65652174 11.8521739,6.65652174 C11.9695652,6.65652174 12.0826087,6.70434783 12.1652174,6.78695652 C12.3391304,6.96086957 12.3391304,7.24347826 12.1652174,7.4173913 L8.36086957,11.2217391 C8.27826087,11.3043478 8.16521739,11.3521739 8.04782609,11.3521739 L8.05217391,11.3478261 Z" id="Path"></path>
|
160 |
+
<path d="M9,18 C4.03478261,18 0,13.9608696 0,9 C0,4.03913043 4.03913043,0 9,0 C13.9608696,0 18,4.03913043 18,9 C18,13.9608696 13.9608696,18 9,18 Z M9,0.886956522 C4.52608696,0.886956522 0.891304348,4.52608696 0.891304348,8.99565217 C0.891304348,13.4652174 4.53043478,17.1043478 9,17.1043478 C13.4695652,17.1043478 17.1086957,13.4652174 17.1086957,8.99565217 C17.1086957,4.52608696 13.4695652,0.886956522 9,0.886956522 Z" id="Shape"></path>
|
161 |
+
</g>
|
162 |
+
<g id="Group" transform="translate(161.000000, 15.000000)" fill="#B1D8E5">
|
163 |
+
<path d="M15.0100881,14.8700481 C13.4369646,14.8700481 11.9616058,14.2569419 10.8506429,13.1462421 C9.73968001,12.0355424 9.13087233,10.5605331 9.13087233,8.9877823 C9.13087233,7.41503147 9.74412386,5.93557942 10.8506429,4.82932247 C11.9616058,3.71862273 13.4369646,3.10995927 15.0100881,3.10995927 C16.5832116,3.10995927 18.0630142,3.72306553 19.1695332,4.82932247 C20.2804962,5.94002221 20.8937477,7.41947427 20.8937477,8.9877823 C20.8937477,10.5560903 20.2804962,12.0355424 19.1695332,13.1462421 C18.0585703,14.2569419 16.5832116,14.8700481 15.0100881,14.8700481 Z M15.0100881,3.96297668 C13.663601,3.96297668 12.4015472,4.48278415 11.4550067,5.43354313 C10.5040225,6.38430211 9.98409185,7.64605702 9.98409185,8.9877823 C9.98409185,10.3295076 10.5084663,11.5912625 11.4550067,12.5420215 C12.405991,13.4927805 13.6680449,14.0125879 15.0100881,14.0125879 C16.3521313,14.0125879 17.6141852,13.4883377 18.5651694,12.5420215 C19.5161537,11.5912625 20.0360843,10.3295076 20.0360843,8.9877823 C20.0360843,7.64605702 19.5117098,6.38430211 18.5651694,5.43354313 C17.618629,4.48722695 16.3565751,3.96297668 15.0100881,3.96297668 Z" id="Shape"></path>
|
164 |
+
<path d="M2.10514284,23.9955572 C1.54966139,23.9955572 1.02084304,23.7734173 0.620896388,23.3735653 C-0.183440763,22.5694187 -0.210103873,21.2854498 0.563126316,20.50796 L7.0644813,14.0081451 L7.14002678,13.9637171 C7.29111774,13.8659756 7.34000011,13.6616068 7.24667922,13.5061088 C5.19361975,9.97852647 5.77132047,5.50907071 8.65093635,2.63013699 C10.3440438,0.937430581 12.6059643,0 15.0100881,0 C17.4142118,0 19.6716885,0.932987782 21.3692398,2.63013699 C23.0667912,4.32728619 24,6.58422806 24,8.9877823 C24,11.3913365 23.0667912,13.6482784 21.3692398,15.3454276 C19.6761323,17.0425768 17.4142118,17.9755646 15.0100881,17.9755646 C13.4325207,17.9755646 11.868285,17.5534987 10.4862471,16.7493521 C10.4329209,16.7182525 10.3751508,16.7049241 10.3129369,16.7049241 C10.1973967,16.7049241 10.0907443,16.7626805 10.0285304,16.8559793 C10.0151988,16.8781933 10.0018673,16.8959645 9.9885357,16.9181785 L3.48273686,23.4313217 C3.11834102,23.7956312 2.62507349,24 2.10069899,24 L2.10514284,23.9955572 Z M5.82909054,16.6027397 C5.73576965,16.6027397 5.65133647,16.6382821 5.58912255,16.7049241 L1.17637785,21.1166235 C0.736436531,21.5564606 0.763099641,22.298408 1.23414792,22.7693447 C1.4652282,23.0003702 1.78518552,23.1336542 2.11403055,23.1336542 C2.41176861,23.1336542 2.68728741,23.0225842 2.88726074,22.8271011 L7.30444929,18.4154017 C7.36666322,18.3532025 7.40665788,18.2643465 7.40665788,18.1754906 C7.40665788,18.0866346 7.37110707,17.9977786 7.30444929,17.9355794 L6.08239008,16.7138097 C6.01573231,16.6471677 5.93129913,16.6116253 5.84242209,16.6116253 L5.82909054,16.6027397 Z M7.82882379,14.6034802 C7.73994676,14.6034802 7.65106972,14.6390226 7.5888558,14.7056646 L6.67786621,15.6164384 C6.61565228,15.6786375 6.57565762,15.7674935 6.57565762,15.8563495 C6.57565762,15.9452055 6.61120843,16.0340615 6.67786621,16.0962606 L7.89992542,17.3180304 C7.96658319,17.3846723 8.05101637,17.4202147 8.13989341,17.4202147 C8.22877044,17.4202147 8.31764747,17.3846723 8.3798614,17.3180304 L9.29085099,16.4072566 C9.35750876,16.3406146 9.39305958,16.2473158 9.38861572,16.1495742 C9.38417187,16.0518327 9.33973336,15.9629767 9.26418788,15.9007775 C9.02421989,15.7008515 8.82424656,15.5186968 8.6464925,15.3409848 C8.46873843,15.1632729 8.29098436,14.9677897 8.08656719,14.7234358 C8.02435326,14.6479082 7.93547623,14.6034802 7.83771149,14.5990374 L7.82437994,14.5990374 L7.82882379,14.6034802 Z M15.0100881,0.861902999 C12.8370446,0.861902999 10.7928729,1.7060348 9.25974403,3.23880044 C6.09127779,6.4109589 6.09127779,11.5690485 9.25974403,14.741207 C10.7928729,16.2739726 12.8370446,17.1181044 15.0100881,17.1181044 C17.1831315,17.1181044 19.2273033,16.2739726 20.7604321,14.741207 C22.293561,13.2084413 23.1378928,11.1647538 23.1378928,8.9922251 C23.1378928,6.81969641 22.293561,4.77600889 20.7604321,3.24324324 C19.2273033,1.7104776 17.1831315,0.866345798 15.0100881,0.866345798 L15.0100881,0.861902999 Z" id="Shape"></path>
|
165 |
+
<path d="M17.8985917,8.84116994 C17.6630675,8.84116994 17.4675381,8.65012958 17.4675381,8.41021844 C17.4675381,7.37060348 16.6232062,6.52647168 15.5833449,6.52647168 C15.3478208,6.52647168 15.1522913,6.33543132 15.1522913,6.09552018 C15.1522913,5.85560903 15.343377,5.66456868 15.5833449,5.66456868 C17.0942545,5.66456868 18.3252014,6.89522399 18.3252014,8.40577564 C18.3252014,8.64124398 18.1341158,8.83672714 17.8941478,8.83672714 L17.8985917,8.84116994 Z" id="Path"></path>
|
166 |
+
</g>
|
167 |
+
<g id="Group" transform="translate(149.000000, 13.000000)" fill="#B9E9FC">
|
168 |
+
<path d="M6.75554844,1.00477209 C8.42857149,1.02711616 9.77924792,2.3782215 9.8010608,4.05125155 L9.80296982,4.19767203 C9.82405347,5.81476988 8.53022832,7.14277837 6.91313047,7.16386201 C6.88737145,7.16419786 6.86160911,7.16419377 6.8358502,7.16384974 C5.16282715,7.14150567 3.81215073,5.79040033 3.79033784,4.11737028 L3.78842882,3.9709498 C3.76734518,2.35385195 5.06117033,1.02584346 6.67826817,1.00475982 C6.7040272,1.00442397 6.72978953,1.00442806 6.75554844,1.00477209 Z" id="Rectangle" transform="translate(6.795699, 4.084311) rotate(23.820000) translate(-6.795699, -4.084311) "></path>
|
169 |
+
<path d="M14.8902685,11.6454812 C14.603398,12.3155198 13.8498279,12.6216963 13.1990174,12.3243945 C12.5524884,12.0270926 12.2570547,11.2461205 12.5439251,10.5716446 C12.8307956,9.89716877 13.5843657,9.59542956 14.2351763,9.89273143 C14.8817052,10.1900333 15.1771389,10.9710054 14.8902685,11.6454812 Z" id="Path"></path>
|
170 |
+
<path d="M4.02344479,15.7012112 C3.55246346,16.8016718 2.31506707,17.298654 1.25321826,16.8149838 C0.19136945,16.3268763 -0.288175173,15.0444847 0.178524505,13.944024 C0.645224183,12.8435634 1.88690223,12.3465812 2.94875103,12.8302514 C4.01059984,13.3183589 4.49014447,14.6007505 4.02344479,15.7012112 L4.02344479,15.7012112 Z" id="Path"></path>
|
171 |
+
</g>
|
172 |
+
<path d="M161.960187,58.8451352 C161.771932,59.6512551 160.960985,60.1484428 160.154865,59.9601873 C159.348745,59.7719317 158.851557,58.9609847 159.039813,58.1548648 C159.228068,57.3487449 160.039015,56.8515572 160.845135,57.0398127 C161.651255,57.2280683 162.148443,58.0390153 161.960187,58.8451352 Z" id="Path" fill="#C2EBFF"></path>
|
173 |
+
</g>
|
174 |
+
</g>
|
175 |
+
</g>
|
176 |
+
</svg>
|
plugin-fw/assets/js/codemirror/codemirror 2.js
ADDED
@@ -0,0 +1,5806 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* CodeMirror version 3.15
|
3 |
+
* https://codemirror.net/
|
4 |
+
* Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
|
5 |
+
*
|
6 |
+
* Released under the MIT license
|
7 |
+
* https://codemirror.net/LICENSE
|
8 |
+
*/
|
9 |
+
|
10 |
+
// CodeMirror is the only global var we claim
|
11 |
+
window.CodeMirror = (function() {
|
12 |
+
"use strict";
|
13 |
+
|
14 |
+
// BROWSER SNIFFING
|
15 |
+
|
16 |
+
// Crude, but necessary to handle a number of hard-to-feature-detect
|
17 |
+
// bugs and behavior differences.
|
18 |
+
var gecko = /gecko\/\d/i.test(navigator.userAgent);
|
19 |
+
var ie = /MSIE \d/.test(navigator.userAgent);
|
20 |
+
var ie_lt8 = ie && (document.documentMode == null || document.documentMode < 8);
|
21 |
+
var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);
|
22 |
+
var webkit = /WebKit\//.test(navigator.userAgent);
|
23 |
+
var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent);
|
24 |
+
var chrome = /Chrome\//.test(navigator.userAgent);
|
25 |
+
var opera = /Opera\//.test(navigator.userAgent);
|
26 |
+
var safari = /Apple Computer/.test(navigator.vendor);
|
27 |
+
var khtml = /KHTML\//.test(navigator.userAgent);
|
28 |
+
var mac_geLion = /Mac OS X 1\d\D([7-9]|\d\d)\D/.test(navigator.userAgent);
|
29 |
+
var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent);
|
30 |
+
var phantom = /PhantomJS/.test(navigator.userAgent);
|
31 |
+
|
32 |
+
var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent);
|
33 |
+
// This is woefully incomplete. Suggestions for alternative methods welcome.
|
34 |
+
var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent);
|
35 |
+
var mac = ios || /Mac/.test(navigator.platform);
|
36 |
+
var windows = /windows/i.test(navigator.platform);
|
37 |
+
|
38 |
+
var opera_version = opera && navigator.userAgent.match(/Version\/(\d*\.\d*)/);
|
39 |
+
if (opera_version) opera_version = Number(opera_version[1]);
|
40 |
+
if (opera_version && opera_version >= 15) { opera = false; webkit = true; }
|
41 |
+
// Some browsers use the wrong event properties to signal cmd/ctrl on OS X
|
42 |
+
var flipCtrlCmd = mac && (qtwebkit || opera && (opera_version == null || opera_version < 12.11));
|
43 |
+
var captureMiddleClick = gecko || (ie && !ie_lt9);
|
44 |
+
|
45 |
+
// Optimize some code when these features are not used
|
46 |
+
var sawReadOnlySpans = false, sawCollapsedSpans = false;
|
47 |
+
|
48 |
+
// CONSTRUCTOR
|
49 |
+
|
50 |
+
function CodeMirror(place, options) {
|
51 |
+
if (!(this instanceof CodeMirror)) return new CodeMirror(place, options);
|
52 |
+
|
53 |
+
this.options = options = options || {};
|
54 |
+
// Determine effective options based on given values and defaults.
|
55 |
+
for (var opt in defaults) if (!options.hasOwnProperty(opt) && defaults.hasOwnProperty(opt))
|
56 |
+
options[opt] = defaults[opt];
|
57 |
+
setGuttersForLineNumbers(options);
|
58 |
+
|
59 |
+
var docStart = typeof options.value == "string" ? 0 : options.value.first;
|
60 |
+
var display = this.display = makeDisplay(place, docStart);
|
61 |
+
display.wrapper.CodeMirror = this;
|
62 |
+
updateGutters(this);
|
63 |
+
if (options.autofocus && !mobile) focusInput(this);
|
64 |
+
|
65 |
+
this.state = {keyMaps: [],
|
66 |
+
overlays: [],
|
67 |
+
modeGen: 0,
|
68 |
+
overwrite: false, focused: false,
|
69 |
+
suppressEdits: false, pasteIncoming: false,
|
70 |
+
draggingText: false,
|
71 |
+
highlight: new Delayed()};
|
72 |
+
|
73 |
+
themeChanged(this);
|
74 |
+
if (options.lineWrapping)
|
75 |
+
this.display.wrapper.className += " CodeMirror-wrap";
|
76 |
+
|
77 |
+
var doc = options.value;
|
78 |
+
if (typeof doc == "string") doc = new Doc(options.value, options.mode);
|
79 |
+
operation(this, attachDoc)(this, doc);
|
80 |
+
|
81 |
+
// Override magic textarea content restore that IE sometimes does
|
82 |
+
// on our hidden textarea on reload
|
83 |
+
if (ie) setTimeout(bind(resetInput, this, true), 20);
|
84 |
+
|
85 |
+
registerEventHandlers(this);
|
86 |
+
// IE throws unspecified error in certain cases, when
|
87 |
+
// trying to access activeElement before onload
|
88 |
+
var hasFocus; try { hasFocus = (document.activeElement == display.input); } catch(e) { }
|
89 |
+
if (hasFocus || (options.autofocus && !mobile)) setTimeout(bind(onFocus, this), 20);
|
90 |
+
else onBlur(this);
|
91 |
+
|
92 |
+
operation(this, function() {
|
93 |
+
for (var opt in optionHandlers)
|
94 |
+
if (optionHandlers.propertyIsEnumerable(opt))
|
95 |
+
optionHandlers[opt](this, options[opt], Init);
|
96 |
+
for (var i = 0; i < initHooks.length; ++i) initHooks[i](this);
|
97 |
+
})();
|
98 |
+
}
|
99 |
+
|
100 |
+
// DISPLAY CONSTRUCTOR
|
101 |
+
|
102 |
+
function makeDisplay(place, docStart) {
|
103 |
+
var d = {};
|
104 |
+
|
105 |
+
var input = d.input = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none; font-size: 4px;");
|
106 |
+
if (webkit) input.style.width = "1000px";
|
107 |
+
else input.setAttribute("wrap", "off");
|
108 |
+
// if border: 0; -- iOS fails to open keyboard (issue #1287)
|
109 |
+
if (ios) input.style.border = "1px solid black";
|
110 |
+
input.setAttribute("autocorrect", "off"); input.setAttribute("autocapitalize", "off"); input.setAttribute("spellcheck", "false");
|
111 |
+
|
112 |
+
// Wraps and hides input textarea
|
113 |
+
d.inputDiv = elt("div", [input], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
|
114 |
+
// The actual fake scrollbars.
|
115 |
+
d.scrollbarH = elt("div", [elt("div", null, null, "height: 1px")], "CodeMirror-hscrollbar");
|
116 |
+
d.scrollbarV = elt("div", [elt("div", null, null, "width: 1px")], "CodeMirror-vscrollbar");
|
117 |
+
d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
|
118 |
+
d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
|
119 |
+
// DIVs containing the selection and the actual code
|
120 |
+
d.lineDiv = elt("div", null, "CodeMirror-code");
|
121 |
+
d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
|
122 |
+
// Blinky cursor, and element used to ensure cursor fits at the end of a line
|
123 |
+
d.cursor = elt("div", "\u00a0", "CodeMirror-cursor");
|
124 |
+
// Secondary cursor, shown when on a 'jump' in bi-directional text
|
125 |
+
d.otherCursor = elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor");
|
126 |
+
// Used to measure text size
|
127 |
+
d.measure = elt("div", null, "CodeMirror-measure");
|
128 |
+
// Wraps everything that needs to exist inside the vertically-padded coordinate system
|
129 |
+
d.lineSpace = elt("div", [d.measure, d.selectionDiv, d.lineDiv, d.cursor, d.otherCursor],
|
130 |
+
null, "position: relative; outline: none");
|
131 |
+
// Moved around its parent to cover visible view
|
132 |
+
d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative");
|
133 |
+
// Set to the height of the text, causes scrolling
|
134 |
+
d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
|
135 |
+
// D is needed because behavior of elts with overflow: auto and padding is inconsistent across browsers
|
136 |
+
d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerCutOff + "px; width: 1px;");
|
137 |
+
// Will contain the gutters, if any
|
138 |
+
d.gutters = elt("div", null, "CodeMirror-gutters");
|
139 |
+
d.lineGutter = null;
|
140 |
+
// Provides scrolling
|
141 |
+
d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
|
142 |
+
d.scroller.setAttribute("tabIndex", "-1");
|
143 |
+
// The element in which the editor lives.
|
144 |
+
d.wrapper = elt("div", [d.inputDiv, d.scrollbarH, d.scrollbarV,
|
145 |
+
d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
|
146 |
+
// Work around IE7 z-index bug
|
147 |
+
if (ie_lt8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
|
148 |
+
if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper);
|
149 |
+
|
150 |
+
// Needed to hide big blue blinking cursor on Mobile Safari
|
151 |
+
if (ios) input.style.width = "0px";
|
152 |
+
if (!webkit) d.scroller.draggable = true;
|
153 |
+
// Needed to handle Tab key in KHTML
|
154 |
+
if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; }
|
155 |
+
// Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
|
156 |
+
else if (ie_lt8) d.scrollbarH.style.minWidth = d.scrollbarV.style.minWidth = "18px";
|
157 |
+
|
158 |
+
// Current visible range (may be bigger than the view window).
|
159 |
+
d.viewOffset = d.lastSizeC = 0;
|
160 |
+
d.showingFrom = d.showingTo = docStart;
|
161 |
+
|
162 |
+
// Used to only resize the line number gutter when necessary (when
|
163 |
+
// the amount of lines crosses a boundary that makes its width change)
|
164 |
+
d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
|
165 |
+
// See readInput and resetInput
|
166 |
+
d.prevInput = "";
|
167 |
+
// Set to true when a non-horizontal-scrolling widget is added. As
|
168 |
+
// an optimization, widget aligning is skipped when d is false.
|
169 |
+
d.alignWidgets = false;
|
170 |
+
// Flag that indicates whether we currently expect input to appear
|
171 |
+
// (after some event like 'keypress' or 'input') and are polling
|
172 |
+
// intensively.
|
173 |
+
d.pollingFast = false;
|
174 |
+
// Self-resetting timeout for the poller
|
175 |
+
d.poll = new Delayed();
|
176 |
+
|
177 |
+
d.cachedCharWidth = d.cachedTextHeight = null;
|
178 |
+
d.measureLineCache = [];
|
179 |
+
d.measureLineCachePos = 0;
|
180 |
+
|
181 |
+
// Tracks when resetInput has punted to just putting a short
|
182 |
+
// string instead of the (large) selection.
|
183 |
+
d.inaccurateSelection = false;
|
184 |
+
|
185 |
+
// Tracks the maximum line length so that the horizontal scrollbar
|
186 |
+
// can be kept static when scrolling.
|
187 |
+
d.maxLine = null;
|
188 |
+
d.maxLineLength = 0;
|
189 |
+
d.maxLineChanged = false;
|
190 |
+
|
191 |
+
// Used for measuring wheel scrolling granularity
|
192 |
+
d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
|
193 |
+
|
194 |
+
return d;
|
195 |
+
}
|
196 |
+
|
197 |
+
// STATE UPDATES
|
198 |
+
|
199 |
+
// Used to get the editor into a consistent state again when options change.
|
200 |
+
|
201 |
+
function loadMode(cm) {
|
202 |
+
cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption);
|
203 |
+
cm.doc.iter(function(line) {
|
204 |
+
if (line.stateAfter) line.stateAfter = null;
|
205 |
+
if (line.styles) line.styles = null;
|
206 |
+
});
|
207 |
+
cm.doc.frontier = cm.doc.first;
|
208 |
+
startWorker(cm, 100);
|
209 |
+
cm.state.modeGen++;
|
210 |
+
if (cm.curOp) regChange(cm);
|
211 |
+
}
|
212 |
+
|
213 |
+
function wrappingChanged(cm) {
|
214 |
+
if (cm.options.lineWrapping) {
|
215 |
+
cm.display.wrapper.className += " CodeMirror-wrap";
|
216 |
+
cm.display.sizer.style.minWidth = "";
|
217 |
+
} else {
|
218 |
+
cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-wrap", "");
|
219 |
+
computeMaxLength(cm);
|
220 |
+
}
|
221 |
+
estimateLineHeights(cm);
|
222 |
+
regChange(cm);
|
223 |
+
clearCaches(cm);
|
224 |
+
setTimeout(function(){updateScrollbars(cm);}, 100);
|
225 |
+
}
|
226 |
+
|
227 |
+
function estimateHeight(cm) {
|
228 |
+
var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
|
229 |
+
var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
|
230 |
+
return function(line) {
|
231 |
+
if (lineIsHidden(cm.doc, line))
|
232 |
+
return 0;
|
233 |
+
else if (wrapping)
|
234 |
+
return (Math.ceil(line.text.length / perLine) || 1) * th;
|
235 |
+
else
|
236 |
+
return th;
|
237 |
+
};
|
238 |
+
}
|
239 |
+
|
240 |
+
function estimateLineHeights(cm) {
|
241 |
+
var doc = cm.doc, est = estimateHeight(cm);
|
242 |
+
doc.iter(function(line) {
|
243 |
+
var estHeight = est(line);
|
244 |
+
if (estHeight != line.height) updateLineHeight(line, estHeight);
|
245 |
+
});
|
246 |
+
}
|
247 |
+
|
248 |
+
function keyMapChanged(cm) {
|
249 |
+
var map = keyMap[cm.options.keyMap], style = map.style;
|
250 |
+
cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-keymap-\S+/g, "") +
|
251 |
+
(style ? " cm-keymap-" + style : "");
|
252 |
+
cm.state.disableInput = map.disableInput;
|
253 |
+
}
|
254 |
+
|
255 |
+
function themeChanged(cm) {
|
256 |
+
cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
|
257 |
+
cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
|
258 |
+
clearCaches(cm);
|
259 |
+
}
|
260 |
+
|
261 |
+
function guttersChanged(cm) {
|
262 |
+
updateGutters(cm);
|
263 |
+
regChange(cm);
|
264 |
+
setTimeout(function(){alignHorizontally(cm);}, 20);
|
265 |
+
}
|
266 |
+
|
267 |
+
function updateGutters(cm) {
|
268 |
+
var gutters = cm.display.gutters, specs = cm.options.gutters;
|
269 |
+
removeChildren(gutters);
|
270 |
+
for (var i = 0; i < specs.length; ++i) {
|
271 |
+
var gutterClass = specs[i];
|
272 |
+
var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass));
|
273 |
+
if (gutterClass == "CodeMirror-linenumbers") {
|
274 |
+
cm.display.lineGutter = gElt;
|
275 |
+
gElt.style.width = (cm.display.lineNumWidth || 1) + "px";
|
276 |
+
}
|
277 |
+
}
|
278 |
+
gutters.style.display = i ? "" : "none";
|
279 |
+
}
|
280 |
+
|
281 |
+
function lineLength(doc, line) {
|
282 |
+
if (line.height == 0) return 0;
|
283 |
+
var len = line.text.length, merged, cur = line;
|
284 |
+
while (merged = collapsedSpanAtStart(cur)) {
|
285 |
+
var found = merged.find();
|
286 |
+
cur = getLine(doc, found.from.line);
|
287 |
+
len += found.from.ch - found.to.ch;
|
288 |
+
}
|
289 |
+
cur = line;
|
290 |
+
while (merged = collapsedSpanAtEnd(cur)) {
|
291 |
+
var found = merged.find();
|
292 |
+
len -= cur.text.length - found.from.ch;
|
293 |
+
cur = getLine(doc, found.to.line);
|
294 |
+
len += cur.text.length - found.to.ch;
|
295 |
+
}
|
296 |
+
return len;
|
297 |
+
}
|
298 |
+
|
299 |
+
function computeMaxLength(cm) {
|
300 |
+
var d = cm.display, doc = cm.doc;
|
301 |
+
d.maxLine = getLine(doc, doc.first);
|
302 |
+
d.maxLineLength = lineLength(doc, d.maxLine);
|
303 |
+
d.maxLineChanged = true;
|
304 |
+
doc.iter(function(line) {
|
305 |
+
var len = lineLength(doc, line);
|
306 |
+
if (len > d.maxLineLength) {
|
307 |
+
d.maxLineLength = len;
|
308 |
+
d.maxLine = line;
|
309 |
+
}
|
310 |
+
});
|
311 |
+
}
|
312 |
+
|
313 |
+
// Make sure the gutters options contains the element
|
314 |
+
// "CodeMirror-linenumbers" when the lineNumbers option is true.
|
315 |
+
function setGuttersForLineNumbers(options) {
|
316 |
+
var found = false;
|
317 |
+
for (var i = 0; i < options.gutters.length; ++i) {
|
318 |
+
if (options.gutters[i] == "CodeMirror-linenumbers") {
|
319 |
+
if (options.lineNumbers) found = true;
|
320 |
+
else options.gutters.splice(i--, 1);
|
321 |
+
}
|
322 |
+
}
|
323 |
+
if (!found && options.lineNumbers)
|
324 |
+
options.gutters.push("CodeMirror-linenumbers");
|
325 |
+
}
|
326 |
+
|
327 |
+
// SCROLLBARS
|
328 |
+
|
329 |
+
// Re-synchronize the fake scrollbars with the actual size of the
|
330 |
+
// content. Optionally force a scrollTop.
|
331 |
+
function updateScrollbars(cm) {
|
332 |
+
var d = cm.display, docHeight = cm.doc.height;
|
333 |
+
var totalHeight = docHeight + paddingVert(d);
|
334 |
+
d.sizer.style.minHeight = d.heightForcer.style.top = totalHeight + "px";
|
335 |
+
d.gutters.style.height = Math.max(totalHeight, d.scroller.clientHeight - scrollerCutOff) + "px";
|
336 |
+
var scrollHeight = Math.max(totalHeight, d.scroller.scrollHeight);
|
337 |
+
var needsH = d.scroller.scrollWidth > (d.scroller.clientWidth + 1);
|
338 |
+
var needsV = scrollHeight > (d.scroller.clientHeight + 1);
|
339 |
+
if (needsV) {
|
340 |
+
d.scrollbarV.style.display = "block";
|
341 |
+
d.scrollbarV.style.bottom = needsH ? scrollbarWidth(d.measure) + "px" : "0";
|
342 |
+
d.scrollbarV.firstChild.style.height =
|
343 |
+
(scrollHeight - d.scroller.clientHeight + d.scrollbarV.clientHeight) + "px";
|
344 |
+
} else d.scrollbarV.style.display = "";
|
345 |
+
if (needsH) {
|
346 |
+
d.scrollbarH.style.display = "block";
|
347 |
+
d.scrollbarH.style.right = needsV ? scrollbarWidth(d.measure) + "px" : "0";
|
348 |
+
d.scrollbarH.firstChild.style.width =
|
349 |
+
(d.scroller.scrollWidth - d.scroller.clientWidth + d.scrollbarH.clientWidth) + "px";
|
350 |
+
} else d.scrollbarH.style.display = "";
|
351 |
+
if (needsH && needsV) {
|
352 |
+
d.scrollbarFiller.style.display = "block";
|
353 |
+
d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = scrollbarWidth(d.measure) + "px";
|
354 |
+
} else d.scrollbarFiller.style.display = "";
|
355 |
+
if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
|
356 |
+
d.gutterFiller.style.display = "block";
|
357 |
+
d.gutterFiller.style.height = scrollbarWidth(d.measure) + "px";
|
358 |
+
d.gutterFiller.style.width = d.gutters.offsetWidth + "px";
|
359 |
+
} else d.gutterFiller.style.display = "";
|
360 |
+
|
361 |
+
if (mac_geLion && scrollbarWidth(d.measure) === 0)
|
362 |
+
d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = mac_geMountainLion ? "18px" : "12px";
|
363 |
+
}
|
364 |
+
|
365 |
+
function visibleLines(display, doc, viewPort) {
|
366 |
+
var top = display.scroller.scrollTop, height = display.wrapper.clientHeight;
|
367 |
+
if (typeof viewPort == "number") top = viewPort;
|
368 |
+
else if (viewPort) {top = viewPort.top; height = viewPort.bottom - viewPort.top;}
|
369 |
+
top = Math.floor(top - paddingTop(display));
|
370 |
+
var bottom = Math.ceil(top + height);
|
371 |
+
return {from: lineAtHeight(doc, top), to: lineAtHeight(doc, bottom)};
|
372 |
+
}
|
373 |
+
|
374 |
+
// LINE NUMBERS
|
375 |
+
|
376 |
+
function alignHorizontally(cm) {
|
377 |
+
var display = cm.display;
|
378 |
+
if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return;
|
379 |
+
var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
|
380 |
+
var gutterW = display.gutters.offsetWidth, l = comp + "px";
|
381 |
+
for (var n = display.lineDiv.firstChild; n; n = n.nextSibling) if (n.alignable) {
|
382 |
+
for (var i = 0, a = n.alignable; i < a.length; ++i) a[i].style.left = l;
|
383 |
+
}
|
384 |
+
if (cm.options.fixedGutter)
|
385 |
+
display.gutters.style.left = (comp + gutterW) + "px";
|
386 |
+
}
|
387 |
+
|
388 |
+
function maybeUpdateLineNumberWidth(cm) {
|
389 |
+
if (!cm.options.lineNumbers) return false;
|
390 |
+
var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
|
391 |
+
if (last.length != display.lineNumChars) {
|
392 |
+
var test = display.measure.appendChild(elt("div", [elt("div", last)],
|
393 |
+
"CodeMirror-linenumber CodeMirror-gutter-elt"));
|
394 |
+
var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
|
395 |
+
display.lineGutter.style.width = "";
|
396 |
+
display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding);
|
397 |
+
display.lineNumWidth = display.lineNumInnerWidth + padding;
|
398 |
+
display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
|
399 |
+
display.lineGutter.style.width = display.lineNumWidth + "px";
|
400 |
+
return true;
|
401 |
+
}
|
402 |
+
return false;
|
403 |
+
}
|
404 |
+
|
405 |
+
function lineNumberFor(options, i) {
|
406 |
+
return String(options.lineNumberFormatter(i + options.firstLineNumber));
|
407 |
+
}
|
408 |
+
function compensateForHScroll(display) {
|
409 |
+
return getRect(display.scroller).left - getRect(display.sizer).left;
|
410 |
+
}
|
411 |
+
|
412 |
+
// DISPLAY DRAWING
|
413 |
+
|
414 |
+
function updateDisplay(cm, changes, viewPort, forced) {
|
415 |
+
var oldFrom = cm.display.showingFrom, oldTo = cm.display.showingTo, updated;
|
416 |
+
var visible = visibleLines(cm.display, cm.doc, viewPort);
|
417 |
+
for (;;) {
|
418 |
+
if (!updateDisplayInner(cm, changes, visible, forced)) break;
|
419 |
+
forced = false;
|
420 |
+
updated = true;
|
421 |
+
updateSelection(cm);
|
422 |
+
updateScrollbars(cm);
|
423 |
+
|
424 |
+
// Clip forced viewport to actual scrollable area
|
425 |
+
if (viewPort)
|
426 |
+
viewPort = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight,
|
427 |
+
typeof viewPort == "number" ? viewPort : viewPort.top);
|
428 |
+
visible = visibleLines(cm.display, cm.doc, viewPort);
|
429 |
+
if (visible.from >= cm.display.showingFrom && visible.to <= cm.display.showingTo)
|
430 |
+
break;
|
431 |
+
changes = [];
|
432 |
+
}
|
433 |
+
|
434 |
+
if (updated) {
|
435 |
+
signalLater(cm, "update", cm);
|
436 |
+
if (cm.display.showingFrom != oldFrom || cm.display.showingTo != oldTo)
|
437 |
+
signalLater(cm, "viewportChange", cm, cm.display.showingFrom, cm.display.showingTo);
|
438 |
+
}
|
439 |
+
return updated;
|
440 |
+
}
|
441 |
+
|
442 |
+
// Uses a set of changes plus the current scroll position to
|
443 |
+
// determine which DOM updates have to be made, and makes the
|
444 |
+
// updates.
|
445 |
+
function updateDisplayInner(cm, changes, visible, forced) {
|
446 |
+
var display = cm.display, doc = cm.doc;
|
447 |
+
if (!display.wrapper.clientWidth) {
|
448 |
+
display.showingFrom = display.showingTo = doc.first;
|
449 |
+
display.viewOffset = 0;
|
450 |
+
return;
|
451 |
+
}
|
452 |
+
|
453 |
+
// Bail out if the visible area is already rendered and nothing changed.
|
454 |
+
if (!forced && changes.length == 0 &&
|
455 |
+
visible.from > display.showingFrom && visible.to < display.showingTo)
|
456 |
+
return;
|
457 |
+
|
458 |
+
if (maybeUpdateLineNumberWidth(cm))
|
459 |
+
changes = [{from: doc.first, to: doc.first + doc.size}];
|
460 |
+
var gutterW = display.sizer.style.marginLeft = display.gutters.offsetWidth + "px";
|
461 |
+
display.scrollbarH.style.left = cm.options.fixedGutter ? gutterW : "0";
|
462 |
+
|
463 |
+
// Used to determine which lines need their line numbers updated
|
464 |
+
var positionsChangedFrom = Infinity;
|
465 |
+
if (cm.options.lineNumbers)
|
466 |
+
for (var i = 0; i < changes.length; ++i)
|
467 |
+
if (changes[i].diff) { positionsChangedFrom = changes[i].from; break; }
|
468 |
+
|
469 |
+
var end = doc.first + doc.size;
|
470 |
+
var from = Math.max(visible.from - cm.options.viewportMargin, doc.first);
|
471 |
+
var to = Math.min(end, visible.to + cm.options.viewportMargin);
|
472 |
+
if (display.showingFrom < from && from - display.showingFrom < 20) from = Math.max(doc.first, display.showingFrom);
|
473 |
+
if (display.showingTo > to && display.showingTo - to < 20) to = Math.min(end, display.showingTo);
|
474 |
+
if (sawCollapsedSpans) {
|
475 |
+
from = lineNo(visualLine(doc, getLine(doc, from)));
|
476 |
+
while (to < end && lineIsHidden(doc, getLine(doc, to))) ++to;
|
477 |
+
}
|
478 |
+
|
479 |
+
// Create a range of theoretically intact lines, and punch holes
|
480 |
+
// in that using the change info.
|
481 |
+
var intact = [{from: Math.max(display.showingFrom, doc.first),
|
482 |
+
to: Math.min(display.showingTo, end)}];
|
483 |
+
if (intact[0].from >= intact[0].to) intact = [];
|
484 |
+
else intact = computeIntact(intact, changes);
|
485 |
+
// When merged lines are present, we might have to reduce the
|
486 |
+
// intact ranges because changes in continued fragments of the
|
487 |
+
// intact lines do require the lines to be redrawn.
|
488 |
+
if (sawCollapsedSpans)
|
489 |
+
for (var i = 0; i < intact.length; ++i) {
|
490 |
+
var range = intact[i], merged;
|
491 |
+
while (merged = collapsedSpanAtEnd(getLine(doc, range.to - 1))) {
|
492 |
+
var newTo = merged.find().from.line;
|
493 |
+
if (newTo > range.from) range.to = newTo;
|
494 |
+
else { intact.splice(i--, 1); break; }
|
495 |
+
}
|
496 |
+
}
|
497 |
+
|
498 |
+
// Clip off the parts that won't be visible
|
499 |
+
var intactLines = 0;
|
500 |
+
for (var i = 0; i < intact.length; ++i) {
|
501 |
+
var range = intact[i];
|
502 |
+
if (range.from < from) range.from = from;
|
503 |
+
if (range.to > to) range.to = to;
|
504 |
+
if (range.from >= range.to) intact.splice(i--, 1);
|
505 |
+
else intactLines += range.to - range.from;
|
506 |
+
}
|
507 |
+
if (!forced && intactLines == to - from && from == display.showingFrom && to == display.showingTo) {
|
508 |
+
updateViewOffset(cm);
|
509 |
+
return;
|
510 |
+
}
|
511 |
+
intact.sort(function(a, b) {return a.from - b.from;});
|
512 |
+
|
513 |
+
// Avoid crashing on IE's "unspecified error" when in iframes
|
514 |
+
try {
|
515 |
+
var focused = document.activeElement;
|
516 |
+
} catch(e) {}
|
517 |
+
if (intactLines < (to - from) * .7) display.lineDiv.style.display = "none";
|
518 |
+
patchDisplay(cm, from, to, intact, positionsChangedFrom);
|
519 |
+
display.lineDiv.style.display = "";
|
520 |
+
if (focused && document.activeElement != focused && focused.offsetHeight) focused.focus();
|
521 |
+
|
522 |
+
var different = from != display.showingFrom || to != display.showingTo ||
|
523 |
+
display.lastSizeC != display.wrapper.clientHeight;
|
524 |
+
// This is just a bogus formula that detects when the editor is
|
525 |
+
// resized or the font size changes.
|
526 |
+
if (different) {
|
527 |
+
display.lastSizeC = display.wrapper.clientHeight;
|
528 |
+
startWorker(cm, 400);
|
529 |
+
}
|
530 |
+
display.showingFrom = from; display.showingTo = to;
|
531 |
+
|
532 |
+
updateHeightsInViewport(cm);
|
533 |
+
updateViewOffset(cm);
|
534 |
+
|
535 |
+
return true;
|
536 |
+
}
|
537 |
+
|
538 |
+
function updateHeightsInViewport(cm) {
|
539 |
+
var display = cm.display;
|
540 |
+
var prevBottom = display.lineDiv.offsetTop;
|
541 |
+
for (var node = display.lineDiv.firstChild, height; node; node = node.nextSibling) if (node.lineObj) {
|
542 |
+
if (ie_lt8) {
|
543 |
+
var bot = node.offsetTop + node.offsetHeight;
|
544 |
+
height = bot - prevBottom;
|
545 |
+
prevBottom = bot;
|
546 |
+
} else {
|
547 |
+
var box = getRect(node);
|
548 |
+
height = box.bottom - box.top;
|
549 |
+
}
|
550 |
+
var diff = node.lineObj.height - height;
|
551 |
+
if (height < 2) height = textHeight(display);
|
552 |
+
if (diff > .001 || diff < -.001) {
|
553 |
+
updateLineHeight(node.lineObj, height);
|
554 |
+
var widgets = node.lineObj.widgets;
|
555 |
+
if (widgets) for (var i = 0; i < widgets.length; ++i)
|
556 |
+
widgets[i].height = widgets[i].node.offsetHeight;
|
557 |
+
}
|
558 |
+
}
|
559 |
+
}
|
560 |
+
|
561 |
+
function updateViewOffset(cm) {
|
562 |
+
var off = cm.display.viewOffset = heightAtLine(cm, getLine(cm.doc, cm.display.showingFrom));
|
563 |
+
// Position the mover div to align with the current virtual scroll position
|
564 |
+
cm.display.mover.style.top = off + "px";
|
565 |
+
}
|
566 |
+
|
567 |
+
function computeIntact(intact, changes) {
|
568 |
+
for (var i = 0, l = changes.length || 0; i < l; ++i) {
|
569 |
+
var change = changes[i], intact2 = [], diff = change.diff || 0;
|
570 |
+
for (var j = 0, l2 = intact.length; j < l2; ++j) {
|
571 |
+
var range = intact[j];
|
572 |
+
if (change.to <= range.from && change.diff) {
|
573 |
+
intact2.push({from: range.from + diff, to: range.to + diff});
|
574 |
+
} else if (change.to <= range.from || change.from >= range.to) {
|
575 |
+
intact2.push(range);
|
576 |
+
} else {
|
577 |
+
if (change.from > range.from)
|
578 |
+
intact2.push({from: range.from, to: change.from});
|
579 |
+
if (change.to < range.to)
|
580 |
+
intact2.push({from: change.to + diff, to: range.to + diff});
|
581 |
+
}
|
582 |
+
}
|
583 |
+
intact = intact2;
|
584 |
+
}
|
585 |
+
return intact;
|
586 |
+
}
|
587 |
+
|
588 |
+
function getDimensions(cm) {
|
589 |
+
var d = cm.display, left = {}, width = {};
|
590 |
+
for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
|
591 |
+
left[cm.options.gutters[i]] = n.offsetLeft;
|
592 |
+
width[cm.options.gutters[i]] = n.offsetWidth;
|
593 |
+
}
|
594 |
+
return {fixedPos: compensateForHScroll(d),
|
595 |
+
gutterTotalWidth: d.gutters.offsetWidth,
|
596 |
+
gutterLeft: left,
|
597 |
+
gutterWidth: width,
|
598 |
+
wrapperWidth: d.wrapper.clientWidth};
|
599 |
+
}
|
600 |
+
|
601 |
+
function patchDisplay(cm, from, to, intact, updateNumbersFrom) {
|
602 |
+
var dims = getDimensions(cm);
|
603 |
+
var display = cm.display, lineNumbers = cm.options.lineNumbers;
|
604 |
+
if (!intact.length && (!webkit || !cm.display.currentWheelTarget))
|
605 |
+
removeChildren(display.lineDiv);
|
606 |
+
var container = display.lineDiv, cur = container.firstChild;
|
607 |
+
|
608 |
+
function rm(node) {
|
609 |
+
var next = node.nextSibling;
|
610 |
+
if (webkit && mac && cm.display.currentWheelTarget == node) {
|
611 |
+
node.style.display = "none";
|
612 |
+
node.lineObj = null;
|
613 |
+
} else {
|
614 |
+
node.parentNode.removeChild(node);
|
615 |
+
}
|
616 |
+
return next;
|
617 |
+
}
|
618 |
+
|
619 |
+
var nextIntact = intact.shift(), lineN = from;
|
620 |
+
cm.doc.iter(from, to, function(line) {
|
621 |
+
if (nextIntact && nextIntact.to == lineN) nextIntact = intact.shift();
|
622 |
+
if (lineIsHidden(cm.doc, line)) {
|
623 |
+
if (line.height != 0) updateLineHeight(line, 0);
|
624 |
+
if (line.widgets && cur.previousSibling) for (var i = 0; i < line.widgets.length; ++i) {
|
625 |
+
var w = line.widgets[i];
|
626 |
+
if (w.showIfHidden) {
|
627 |
+
var prev = cur.previousSibling;
|
628 |
+
if (/pre/i.test(prev.nodeName)) {
|
629 |
+
var wrap = elt("div", null, null, "position: relative");
|
630 |
+
prev.parentNode.replaceChild(wrap, prev);
|
631 |
+
wrap.appendChild(prev);
|
632 |
+
prev = wrap;
|
633 |
+
}
|
634 |
+
var wnode = prev.appendChild(elt("div", [w.node], "CodeMirror-linewidget"));
|
635 |
+
if (!w.handleMouseEvents) wnode.ignoreEvents = true;
|
636 |
+
positionLineWidget(w, wnode, prev, dims);
|
637 |
+
}
|
638 |
+
}
|
639 |
+
} else if (nextIntact && nextIntact.from <= lineN && nextIntact.to > lineN) {
|
640 |
+
// This line is intact. Skip to the actual node. Update its
|
641 |
+
// line number if needed.
|
642 |
+
while (cur.lineObj != line) cur = rm(cur);
|
643 |
+
if (lineNumbers && updateNumbersFrom <= lineN && cur.lineNumber)
|
644 |
+
setTextContent(cur.lineNumber, lineNumberFor(cm.options, lineN));
|
645 |
+
cur = cur.nextSibling;
|
646 |
+
} else {
|
647 |
+
// For lines with widgets, make an attempt to find and reuse
|
648 |
+
// the existing element, so that widgets aren't needlessly
|
649 |
+
// removed and re-inserted into the dom
|
650 |
+
if (line.widgets) for (var j = 0, search = cur, reuse; search && j < 20; ++j, search = search.nextSibling)
|
651 |
+
if (search.lineObj == line && /div/i.test(search.nodeName)) { reuse = search; break; }
|
652 |
+
// This line needs to be generated.
|
653 |
+
var lineNode = buildLineElement(cm, line, lineN, dims, reuse);
|
654 |
+
if (lineNode != reuse) {
|
655 |
+
container.insertBefore(lineNode, cur);
|
656 |
+
} else {
|
657 |
+
while (cur != reuse) cur = rm(cur);
|
658 |
+
cur = cur.nextSibling;
|
659 |
+
}
|
660 |
+
|
661 |
+
lineNode.lineObj = line;
|
662 |
+
}
|
663 |
+
++lineN;
|
664 |
+
});
|
665 |
+
while (cur) cur = rm(cur);
|
666 |
+
}
|
667 |
+
|
668 |
+
function buildLineElement(cm, line, lineNo, dims, reuse) {
|
669 |
+
var lineElement = lineContent(cm, line);
|
670 |
+
var markers = line.gutterMarkers, display = cm.display, wrap;
|
671 |
+
|
672 |
+
if (!cm.options.lineNumbers && !markers && !line.bgClass && !line.wrapClass && !line.widgets)
|
673 |
+
return lineElement;
|
674 |
+
|
675 |
+
// Lines with gutter elements, widgets or a background class need
|
676 |
+
// to be wrapped again, and have the extra elements added to the
|
677 |
+
// wrapper div
|
678 |
+
|
679 |
+
if (reuse) {
|
680 |
+
reuse.alignable = null;
|
681 |
+
var isOk = true, widgetsSeen = 0, insertBefore = null;
|
682 |
+
for (var n = reuse.firstChild, next; n; n = next) {
|
683 |
+
next = n.nextSibling;
|
684 |
+
if (!/\bCodeMirror-linewidget\b/.test(n.className)) {
|
685 |
+
reuse.removeChild(n);
|
686 |
+
} else {
|
687 |
+
for (var i = 0; i < line.widgets.length; ++i) {
|
688 |
+
var widget = line.widgets[i];
|
689 |
+
if (widget.node == n.firstChild) {
|
690 |
+
if (!widget.above && !insertBefore) insertBefore = n;
|
691 |
+
positionLineWidget(widget, n, reuse, dims);
|
692 |
+
++widgetsSeen;
|
693 |
+
break;
|
694 |
+
}
|
695 |
+
}
|
696 |
+
if (i == line.widgets.length) { isOk = false; break; }
|
697 |
+
}
|
698 |
+
}
|
699 |
+
reuse.insertBefore(lineElement, insertBefore);
|
700 |
+
if (isOk && widgetsSeen == line.widgets.length) {
|
701 |
+
wrap = reuse;
|
702 |
+
reuse.className = line.wrapClass || "";
|
703 |
+
}
|
704 |
+
}
|
705 |
+
if (!wrap) {
|
706 |
+
wrap = elt("div", null, line.wrapClass, "position: relative");
|
707 |
+
wrap.appendChild(lineElement);
|
708 |
+
}
|
709 |
+
// Kludge to make sure the styled element lies behind the selection (by z-index)
|
710 |
+
if (line.bgClass)
|
711 |
+
wrap.insertBefore(elt("div", null, line.bgClass + " CodeMirror-linebackground"), wrap.firstChild);
|
712 |
+
if (cm.options.lineNumbers || markers) {
|
713 |
+
var gutterWrap = wrap.insertBefore(elt("div", null, null, "position: absolute; left: " +
|
714 |
+
(cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"),
|
715 |
+
wrap.firstChild);
|
716 |
+
if (cm.options.fixedGutter) (wrap.alignable || (wrap.alignable = [])).push(gutterWrap);
|
717 |
+
if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
|
718 |
+
wrap.lineNumber = gutterWrap.appendChild(
|
719 |
+
elt("div", lineNumberFor(cm.options, lineNo),
|
720 |
+
"CodeMirror-linenumber CodeMirror-gutter-elt",
|
721 |
+
"left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: "
|
722 |
+
+ display.lineNumInnerWidth + "px"));
|
723 |
+
if (markers)
|
724 |
+
for (var k = 0; k < cm.options.gutters.length; ++k) {
|
725 |
+
var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];
|
726 |
+
if (found)
|
727 |
+
gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " +
|
728 |
+
dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px"));
|
729 |
+
}
|
730 |
+
}
|
731 |
+
if (ie_lt8) wrap.style.zIndex = 2;
|
732 |
+
if (line.widgets && wrap != reuse) for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
|
733 |
+
var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget");
|
734 |
+
if (!widget.handleMouseEvents) node.ignoreEvents = true;
|
735 |
+
positionLineWidget(widget, node, wrap, dims);
|
736 |
+
if (widget.above)
|
737 |
+
wrap.insertBefore(node, cm.options.lineNumbers && line.height != 0 ? gutterWrap : lineElement);
|
738 |
+
else
|
739 |
+
wrap.appendChild(node);
|
740 |
+
signalLater(widget, "redraw");
|
741 |
+
}
|
742 |
+
return wrap;
|
743 |
+
}
|
744 |
+
|
745 |
+
function positionLineWidget(widget, node, wrap, dims) {
|
746 |
+
if (widget.noHScroll) {
|
747 |
+
(wrap.alignable || (wrap.alignable = [])).push(node);
|
748 |
+
var width = dims.wrapperWidth;
|
749 |
+
node.style.left = dims.fixedPos + "px";
|
750 |
+
if (!widget.coverGutter) {
|
751 |
+
width -= dims.gutterTotalWidth;
|
752 |
+
node.style.paddingLeft = dims.gutterTotalWidth + "px";
|
753 |
+
}
|
754 |
+
node.style.width = width + "px";
|
755 |
+
}
|
756 |
+
if (widget.coverGutter) {
|
757 |
+
node.style.zIndex = 5;
|
758 |
+
node.style.position = "relative";
|
759 |
+
if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px";
|
760 |
+
}
|
761 |
+
}
|
762 |
+
|
763 |
+
// SELECTION / CURSOR
|
764 |
+
|
765 |
+
function updateSelection(cm) {
|
766 |
+
var display = cm.display;
|
767 |
+
var collapsed = posEq(cm.doc.sel.from, cm.doc.sel.to);
|
768 |
+
if (collapsed || cm.options.showCursorWhenSelecting)
|
769 |
+
updateSelectionCursor(cm);
|
770 |
+
else
|
771 |
+
display.cursor.style.display = display.otherCursor.style.display = "none";
|
772 |
+
if (!collapsed)
|
773 |
+
updateSelectionRange(cm);
|
774 |
+
else
|
775 |
+
display.selectionDiv.style.display = "none";
|
776 |
+
|
777 |
+
// Move the hidden textarea near the cursor to prevent scrolling artifacts
|
778 |
+
if (cm.options.moveInputWithCursor) {
|
779 |
+
var headPos = cursorCoords(cm, cm.doc.sel.head, "div");
|
780 |
+
var wrapOff = getRect(display.wrapper), lineOff = getRect(display.lineDiv);
|
781 |
+
display.inputDiv.style.top = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
|
782 |
+
headPos.top + lineOff.top - wrapOff.top)) + "px";
|
783 |
+
display.inputDiv.style.left = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
|
784 |
+
headPos.left + lineOff.left - wrapOff.left)) + "px";
|
785 |
+
}
|
786 |
+
}
|
787 |
+
|
788 |
+
// No selection, plain cursor
|
789 |
+
function updateSelectionCursor(cm) {
|
790 |
+
var display = cm.display, pos = cursorCoords(cm, cm.doc.sel.head, "div");
|
791 |
+
display.cursor.style.left = pos.left + "px";
|
792 |
+
display.cursor.style.top = pos.top + "px";
|
793 |
+
display.cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
|
794 |
+
display.cursor.style.display = "";
|
795 |
+
|
796 |
+
if (pos.other) {
|
797 |
+
display.otherCursor.style.display = "";
|
798 |
+
display.otherCursor.style.left = pos.other.left + "px";
|
799 |
+
display.otherCursor.style.top = pos.other.top + "px";
|
800 |
+
display.otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
|
801 |
+
} else { display.otherCursor.style.display = "none"; }
|
802 |
+
}
|
803 |
+
|
804 |
+
// Highlight selection
|
805 |
+
function updateSelectionRange(cm) {
|
806 |
+
var display = cm.display, doc = cm.doc, sel = cm.doc.sel;
|
807 |
+
var fragment = document.createDocumentFragment();
|
808 |
+
var clientWidth = display.lineSpace.offsetWidth, pl = paddingLeft(cm.display);
|
809 |
+
|
810 |
+
function add(left, top, width, bottom) {
|
811 |
+
if (top < 0) top = 0;
|
812 |
+
fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left +
|
813 |
+
"px; top: " + top + "px; width: " + (width == null ? clientWidth - left : width) +
|
814 |
+
"px; height: " + (bottom - top) + "px"));
|
815 |
+
}
|
816 |
+
|
817 |
+
function drawForLine(line, fromArg, toArg) {
|
818 |
+
var lineObj = getLine(doc, line);
|
819 |
+
var lineLen = lineObj.text.length;
|
820 |
+
var start, end;
|
821 |
+
function coords(ch, bias) {
|
822 |
+
return charCoords(cm, Pos(line, ch), "div", lineObj, bias);
|
823 |
+
}
|
824 |
+
|
825 |
+
iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) {
|
826 |
+
var leftPos = coords(from, "left"), rightPos, left, right;
|
827 |
+
if (from == to) {
|
828 |
+
rightPos = leftPos;
|
829 |
+
left = right = leftPos.left;
|
830 |
+
} else {
|
831 |
+
rightPos = coords(to - 1, "right");
|
832 |
+
if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; }
|
833 |
+
left = leftPos.left;
|
834 |
+
right = rightPos.right;
|
835 |
+
}
|
836 |
+
if (fromArg == null && from == 0) left = pl;
|
837 |
+
if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part
|
838 |
+
add(left, leftPos.top, null, leftPos.bottom);
|
839 |
+
left = pl;
|
840 |
+
if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top);
|
841 |
+
}
|
842 |
+
if (toArg == null && to == lineLen) right = clientWidth;
|
843 |
+
if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)
|
844 |
+
start = leftPos;
|
845 |
+
if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)
|
846 |
+
end = rightPos;
|
847 |
+
if (left < pl + 1) left = pl;
|
848 |
+
add(left, rightPos.top, right - left, rightPos.bottom);
|
849 |
+
});
|
850 |
+
return {start: start, end: end};
|
851 |
+
}
|
852 |
+
|
853 |
+
if (sel.from.line == sel.to.line) {
|
854 |
+
drawForLine(sel.from.line, sel.from.ch, sel.to.ch);
|
855 |
+
} else {
|
856 |
+
var fromLine = getLine(doc, sel.from.line), toLine = getLine(doc, sel.to.line);
|
857 |
+
var singleVLine = visualLine(doc, fromLine) == visualLine(doc, toLine);
|
858 |
+
var leftEnd = drawForLine(sel.from.line, sel.from.ch, singleVLine ? fromLine.text.length : null).end;
|
859 |
+
var rightStart = drawForLine(sel.to.line, singleVLine ? 0 : null, sel.to.ch).start;
|
860 |
+
if (singleVLine) {
|
861 |
+
if (leftEnd.top < rightStart.top - 2) {
|
862 |
+
add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
|
863 |
+
add(pl, rightStart.top, rightStart.left, rightStart.bottom);
|
864 |
+
} else {
|
865 |
+
add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
|
866 |
+
}
|
867 |
+
}
|
868 |
+
if (leftEnd.bottom < rightStart.top)
|
869 |
+
add(pl, leftEnd.bottom, null, rightStart.top);
|
870 |
+
}
|
871 |
+
|
872 |
+
removeChildrenAndAdd(display.selectionDiv, fragment);
|
873 |
+
display.selectionDiv.style.display = "";
|
874 |
+
}
|
875 |
+
|
876 |
+
// Cursor-blinking
|
877 |
+
function restartBlink(cm) {
|
878 |
+
if (!cm.state.focused) return;
|
879 |
+
var display = cm.display;
|
880 |
+
clearInterval(display.blinker);
|
881 |
+
var on = true;
|
882 |
+
display.cursor.style.visibility = display.otherCursor.style.visibility = "";
|
883 |
+
display.blinker = setInterval(function() {
|
884 |
+
display.cursor.style.visibility = display.otherCursor.style.visibility = (on = !on) ? "" : "hidden";
|
885 |
+
}, cm.options.cursorBlinkRate);
|
886 |
+
}
|
887 |
+
|
888 |
+
// HIGHLIGHT WORKER
|
889 |
+
|
890 |
+
function startWorker(cm, time) {
|
891 |
+
if (cm.doc.mode.startState && cm.doc.frontier < cm.display.showingTo)
|
892 |
+
cm.state.highlight.set(time, bind(highlightWorker, cm));
|
893 |
+
}
|
894 |
+
|
895 |
+
function highlightWorker(cm) {
|
896 |
+
var doc = cm.doc;
|
897 |
+
if (doc.frontier < doc.first) doc.frontier = doc.first;
|
898 |
+
if (doc.frontier >= cm.display.showingTo) return;
|
899 |
+
var end = +new Date + cm.options.workTime;
|
900 |
+
var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));
|
901 |
+
var changed = [], prevChange;
|
902 |
+
doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.showingTo + 500), function(line) {
|
903 |
+
if (doc.frontier >= cm.display.showingFrom) { // Visible
|
904 |
+
var oldStyles = line.styles;
|
905 |
+
line.styles = highlightLine(cm, line, state);
|
906 |
+
var ischange = !oldStyles || oldStyles.length != line.styles.length;
|
907 |
+
for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];
|
908 |
+
if (ischange) {
|
909 |
+
if (prevChange && prevChange.end == doc.frontier) prevChange.end++;
|
910 |
+
else changed.push(prevChange = {start: doc.frontier, end: doc.frontier + 1});
|
911 |
+
}
|
912 |
+
line.stateAfter = copyState(doc.mode, state);
|
913 |
+
} else {
|
914 |
+
processLine(cm, line, state);
|
915 |
+
line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null;
|
916 |
+
}
|
917 |
+
++doc.frontier;
|
918 |
+
if (+new Date > end) {
|
919 |
+
startWorker(cm, cm.options.workDelay);
|
920 |
+
return true;
|
921 |
+
}
|
922 |
+
});
|
923 |
+
if (changed.length)
|
924 |
+
operation(cm, function() {
|
925 |
+
for (var i = 0; i < changed.length; ++i)
|
926 |
+
regChange(this, changed[i].start, changed[i].end);
|
927 |
+
})();
|
928 |
+
}
|
929 |
+
|
930 |
+
// Finds the line to start with when starting a parse. Tries to
|
931 |
+
// find a line with a stateAfter, so that it can start with a
|
932 |
+
// valid state. If that fails, it returns the line with the
|
933 |
+
// smallest indentation, which tends to need the least context to
|
934 |
+
// parse correctly.
|
935 |
+
function findStartLine(cm, n, precise) {
|
936 |
+
var minindent, minline, doc = cm.doc;
|
937 |
+
for (var search = n, lim = n - 100; search > lim; --search) {
|
938 |
+
if (search <= doc.first) return doc.first;
|
939 |
+
var line = getLine(doc, search - 1);
|
940 |
+
if (line.stateAfter && (!precise || search <= doc.frontier)) return search;
|
941 |
+
var indented = countColumn(line.text, null, cm.options.tabSize);
|
942 |
+
if (minline == null || minindent > indented) {
|
943 |
+
minline = search - 1;
|
944 |
+
minindent = indented;
|
945 |
+
}
|
946 |
+
}
|
947 |
+
return minline;
|
948 |
+
}
|
949 |
+
|
950 |
+
function getStateBefore(cm, n, precise) {
|
951 |
+
var doc = cm.doc, display = cm.display;
|
952 |
+
if (!doc.mode.startState) return true;
|
953 |
+
var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter;
|
954 |
+
if (!state) state = startState(doc.mode);
|
955 |
+
else state = copyState(doc.mode, state);
|
956 |
+
doc.iter(pos, n, function(line) {
|
957 |
+
processLine(cm, line, state);
|
958 |
+
var save = pos == n - 1 || pos % 5 == 0 || pos >= display.showingFrom && pos < display.showingTo;
|
959 |
+
line.stateAfter = save ? copyState(doc.mode, state) : null;
|
960 |
+
++pos;
|
961 |
+
});
|
962 |
+
return state;
|
963 |
+
}
|
964 |
+
|
965 |
+
// POSITION MEASUREMENT
|
966 |
+
|
967 |
+
function paddingTop(display) {return display.lineSpace.offsetTop;}
|
968 |
+
function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;}
|
969 |
+
function paddingLeft(display) {
|
970 |
+
var e = removeChildrenAndAdd(display.measure, elt("pre", null, null, "text-align: left")).appendChild(elt("span", "x"));
|
971 |
+
return e.offsetLeft;
|
972 |
+
}
|
973 |
+
|
974 |
+
function measureChar(cm, line, ch, data, bias) {
|
975 |
+
var dir = -1;
|
976 |
+
data = data || measureLine(cm, line);
|
977 |
+
|
978 |
+
for (var pos = ch;; pos += dir) {
|
979 |
+
var r = data[pos];
|
980 |
+
if (r) break;
|
981 |
+
if (dir < 0 && pos == 0) dir = 1;
|
982 |
+
}
|
983 |
+
bias = pos > ch ? "left" : pos < ch ? "right" : bias;
|
984 |
+
if (bias == "left" && r.leftSide) r = r.leftSide;
|
985 |
+
else if (bias == "right" && r.rightSide) r = r.rightSide;
|
986 |
+
return {left: pos < ch ? r.right : r.left,
|
987 |
+
right: pos > ch ? r.left : r.right,
|
988 |
+
top: r.top,
|
989 |
+
bottom: r.bottom};
|
990 |
+
}
|
991 |
+
|
992 |
+
function findCachedMeasurement(cm, line) {
|
993 |
+
var cache = cm.display.measureLineCache;
|
994 |
+
for (var i = 0; i < cache.length; ++i) {
|
995 |
+
var memo = cache[i];
|
996 |
+
if (memo.text == line.text && memo.markedSpans == line.markedSpans &&
|
997 |
+
cm.display.scroller.clientWidth == memo.width &&
|
998 |
+
memo.classes == line.textClass + "|" + line.bgClass + "|" + line.wrapClass)
|
999 |
+
return memo;
|
1000 |
+
}
|
1001 |
+
}
|
1002 |
+
|
1003 |
+
function clearCachedMeasurement(cm, line) {
|
1004 |
+
var exists = findCachedMeasurement(cm, line);
|
1005 |
+
if (exists) exists.text = exists.measure = exists.markedSpans = null;
|
1006 |
+
}
|
1007 |
+
|
1008 |
+
function measureLine(cm, line) {
|
1009 |
+
// First look in the cache
|
1010 |
+
var cached = findCachedMeasurement(cm, line);
|
1011 |
+
if (cached) return cached.measure;
|
1012 |
+
|
1013 |
+
// Failing that, recompute and store result in cache
|
1014 |
+
var measure = measureLineInner(cm, line);
|
1015 |
+
var cache = cm.display.measureLineCache;
|
1016 |
+
var memo = {text: line.text, width: cm.display.scroller.clientWidth,
|
1017 |
+
markedSpans: line.markedSpans, measure: measure,
|
1018 |
+
classes: line.textClass + "|" + line.bgClass + "|" + line.wrapClass};
|
1019 |
+
if (cache.length == 16) cache[++cm.display.measureLineCachePos % 16] = memo;
|
1020 |
+
else cache.push(memo);
|
1021 |
+
return measure;
|
1022 |
+
}
|
1023 |
+
|
1024 |
+
function measureLineInner(cm, line) {
|
1025 |
+
var display = cm.display, measure = emptyArray(line.text.length);
|
1026 |
+
var pre = lineContent(cm, line, measure, true);
|
1027 |
+
|
1028 |
+
// IE does not cache element positions of inline elements between
|
1029 |
+
// calls to getBoundingClientRect. This makes the loop below,
|
1030 |
+
// which gathers the positions of all the characters on the line,
|
1031 |
+
// do an amount of layout work quadratic to the number of
|
1032 |
+
// characters. When line wrapping is off, we try to improve things
|
1033 |
+
// by first subdividing the line into a bunch of inline blocks, so
|
1034 |
+
// that IE can reuse most of the layout information from caches
|
1035 |
+
// for those blocks. This does interfere with line wrapping, so it
|
1036 |
+
// doesn't work when wrapping is on, but in that case the
|
1037 |
+
// situation is slightly better, since IE does cache line-wrapping
|
1038 |
+
// information and only recomputes per-line.
|
1039 |
+
if (ie && !ie_lt8 && !cm.options.lineWrapping && pre.childNodes.length > 100) {
|
1040 |
+
var fragment = document.createDocumentFragment();
|
1041 |
+
var chunk = 10, n = pre.childNodes.length;
|
1042 |
+
for (var i = 0, chunks = Math.ceil(n / chunk); i < chunks; ++i) {
|
1043 |
+
var wrap = elt("div", null, null, "display: inline-block");
|
1044 |
+
for (var j = 0; j < chunk && n; ++j) {
|
1045 |
+
wrap.appendChild(pre.firstChild);
|
1046 |
+
--n;
|
1047 |
+
}
|
1048 |
+
fragment.appendChild(wrap);
|
1049 |
+
}
|
1050 |
+
pre.appendChild(fragment);
|
1051 |
+
}
|
1052 |
+
|
1053 |
+
removeChildrenAndAdd(display.measure, pre);
|
1054 |
+
|
1055 |
+
var outer = getRect(display.lineDiv);
|
1056 |
+
var vranges = [], data = emptyArray(line.text.length), maxBot = pre.offsetHeight;
|
1057 |
+
// Work around an IE7/8 bug where it will sometimes have randomly
|
1058 |
+
// replaced our pre with a clone at this point.
|
1059 |
+
if (ie_lt9 && display.measure.first != pre)
|
1060 |
+
removeChildrenAndAdd(display.measure, pre);
|
1061 |
+
|
1062 |
+
function measureRect(rect) {
|
1063 |
+
var top = rect.top - outer.top, bot = rect.bottom - outer.top;
|
1064 |
+
if (bot > maxBot) bot = maxBot;
|
1065 |
+
if (top < 0) top = 0;
|
1066 |
+
for (var i = vranges.length - 2; i >= 0; i -= 2) {
|
1067 |
+
var rtop = vranges[i], rbot = vranges[i+1];
|
1068 |
+
if (rtop > bot || rbot < top) continue;
|
1069 |
+
if (rtop <= top && rbot >= bot ||
|
1070 |
+
top <= rtop && bot >= rbot ||
|
1071 |
+
Math.min(bot, rbot) - Math.max(top, rtop) >= (bot - top) >> 1) {
|
1072 |
+
vranges[i] = Math.min(top, rtop);
|
1073 |
+
vranges[i+1] = Math.max(bot, rbot);
|
1074 |
+
break;
|
1075 |
+
}
|
1076 |
+
}
|
1077 |
+
if (i < 0) { i = vranges.length; vranges.push(top, bot); }
|
1078 |
+
return {left: rect.left - outer.left,
|
1079 |
+
right: rect.right - outer.left,
|
1080 |
+
top: i, bottom: null};
|
1081 |
+
}
|
1082 |
+
function finishRect(rect) {
|
1083 |
+
rect.bottom = vranges[rect.top+1];
|
1084 |
+
rect.top = vranges[rect.top];
|
1085 |
+
}
|
1086 |
+
|
1087 |
+
for (var i = 0, cur; i < measure.length; ++i) if (cur = measure[i]) {
|
1088 |
+
var node = cur, rect = null;
|
1089 |
+
// A widget might wrap, needs special care
|
1090 |
+
if (/\bCodeMirror-widget\b/.test(cur.className) && cur.getClientRects) {
|
1091 |
+
if (cur.firstChild.nodeType == 1) node = cur.firstChild;
|
1092 |
+
var rects = node.getClientRects();
|
1093 |
+
if (rects.length > 1) {
|
1094 |
+
rect = data[i] = measureRect(rects[0]);
|
1095 |
+
rect.rightSide = measureRect(rects[rects.length - 1]);
|
1096 |
+
}
|
1097 |
+
}
|
1098 |
+
if (!rect) rect = data[i] = measureRect(getRect(node));
|
1099 |
+
if (cur.measureRight) rect.right = getRect(cur.measureRight).left;
|
1100 |
+
if (cur.leftSide) rect.leftSide = measureRect(getRect(cur.leftSide));
|
1101 |
+
}
|
1102 |
+
for (var i = 0, cur; i < data.length; ++i) if (cur = data[i]) {
|
1103 |
+
finishRect(cur);
|
1104 |
+
if (cur.leftSide) finishRect(cur.leftSide);
|
1105 |
+
if (cur.rightSide) finishRect(cur.rightSide);
|
1106 |
+
}
|
1107 |
+
return data;
|
1108 |
+
}
|
1109 |
+
|
1110 |
+
function measureLineWidth(cm, line) {
|
1111 |
+
var hasBadSpan = false;
|
1112 |
+
if (line.markedSpans) for (var i = 0; i < line.markedSpans; ++i) {
|
1113 |
+
var sp = line.markedSpans[i];
|
1114 |
+
if (sp.collapsed && (sp.to == null || sp.to == line.text.length)) hasBadSpan = true;
|
1115 |
+
}
|
1116 |
+
var cached = !hasBadSpan && findCachedMeasurement(cm, line);
|
1117 |
+
if (cached) return measureChar(cm, line, line.text.length, cached.measure, "right").right;
|
1118 |
+
|
1119 |
+
var pre = lineContent(cm, line, null, true);
|
1120 |
+
var end = pre.appendChild(zeroWidthElement(cm.display.measure));
|
1121 |
+
removeChildrenAndAdd(cm.display.measure, pre);
|
1122 |
+
return getRect(end).right - getRect(cm.display.lineDiv).left;
|
1123 |
+
}
|
1124 |
+
|
1125 |
+
function clearCaches(cm) {
|
1126 |
+
cm.display.measureLineCache.length = cm.display.measureLineCachePos = 0;
|
1127 |
+
cm.display.cachedCharWidth = cm.display.cachedTextHeight = null;
|
1128 |
+
if (!cm.options.lineWrapping) cm.display.maxLineChanged = true;
|
1129 |
+
cm.display.lineNumChars = null;
|
1130 |
+
}
|
1131 |
+
|
1132 |
+
function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; }
|
1133 |
+
function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; }
|
1134 |
+
|
1135 |
+
// Context is one of "line", "div" (display.lineDiv), "local"/null (editor), or "page"
|
1136 |
+
function intoCoordSystem(cm, lineObj, rect, context) {
|
1137 |
+
if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) {
|
1138 |
+
var size = widgetHeight(lineObj.widgets[i]);
|
1139 |
+
rect.top += size; rect.bottom += size;
|
1140 |
+
}
|
1141 |
+
if (context == "line") return rect;
|
1142 |
+
if (!context) context = "local";
|
1143 |
+
var yOff = heightAtLine(cm, lineObj);
|
1144 |
+
if (context == "local") yOff += paddingTop(cm.display);
|
1145 |
+
else yOff -= cm.display.viewOffset;
|
1146 |
+
if (context == "page" || context == "window") {
|
1147 |
+
var lOff = getRect(cm.display.lineSpace);
|
1148 |
+
yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
|
1149 |
+
var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
|
1150 |
+
rect.left += xOff; rect.right += xOff;
|
1151 |
+
}
|
1152 |
+
rect.top += yOff; rect.bottom += yOff;
|
1153 |
+
return rect;
|
1154 |
+
}
|
1155 |
+
|
1156 |
+
// Context may be "window", "page", "div", or "local"/null
|
1157 |
+
// Result is in "div" coords
|
1158 |
+
function fromCoordSystem(cm, coords, context) {
|
1159 |
+
if (context == "div") return coords;
|
1160 |
+
var left = coords.left, top = coords.top;
|
1161 |
+
// First move into "page" coordinate system
|
1162 |
+
if (context == "page") {
|
1163 |
+
left -= pageScrollX();
|
1164 |
+
top -= pageScrollY();
|
1165 |
+
} else if (context == "local" || !context) {
|
1166 |
+
var localBox = getRect(cm.display.sizer);
|
1167 |
+
left += localBox.left;
|
1168 |
+
top += localBox.top;
|
1169 |
+
}
|
1170 |
+
|
1171 |
+
var lineSpaceBox = getRect(cm.display.lineSpace);
|
1172 |
+
return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top};
|
1173 |
+
}
|
1174 |
+
|
1175 |
+
function charCoords(cm, pos, context, lineObj, bias) {
|
1176 |
+
if (!lineObj) lineObj = getLine(cm.doc, pos.line);
|
1177 |
+
return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, null, bias), context);
|
1178 |
+
}
|
1179 |
+
|
1180 |
+
function cursorCoords(cm, pos, context, lineObj, measurement) {
|
1181 |
+
lineObj = lineObj || getLine(cm.doc, pos.line);
|
1182 |
+
if (!measurement) measurement = measureLine(cm, lineObj);
|
1183 |
+
function get(ch, right) {
|
1184 |
+
var m = measureChar(cm, lineObj, ch, measurement, right ? "right" : "left");
|
1185 |
+
if (right) m.left = m.right; else m.right = m.left;
|
1186 |
+
return intoCoordSystem(cm, lineObj, m, context);
|
1187 |
+
}
|
1188 |
+
function getBidi(ch, partPos) {
|
1189 |
+
var part = order[partPos], right = part.level % 2;
|
1190 |
+
if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) {
|
1191 |
+
part = order[--partPos];
|
1192 |
+
ch = bidiRight(part) - (part.level % 2 ? 0 : 1);
|
1193 |
+
right = true;
|
1194 |
+
} else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) {
|
1195 |
+
part = order[++partPos];
|
1196 |
+
ch = bidiLeft(part) - part.level % 2;
|
1197 |
+
right = false;
|
1198 |
+
}
|
1199 |
+
if (right && ch == part.to && ch > part.from) return get(ch - 1);
|
1200 |
+
return get(ch, right);
|
1201 |
+
}
|
1202 |
+
var order = getOrder(lineObj), ch = pos.ch;
|
1203 |
+
if (!order) return get(ch);
|
1204 |
+
var partPos = getBidiPartAt(order, ch);
|
1205 |
+
var val = getBidi(ch, partPos);
|
1206 |
+
if (bidiOther != null) val.other = getBidi(ch, bidiOther);
|
1207 |
+
return val;
|
1208 |
+
}
|
1209 |
+
|
1210 |
+
function PosWithInfo(line, ch, outside, xRel) {
|
1211 |
+
var pos = new Pos(line, ch);
|
1212 |
+
pos.xRel = xRel;
|
1213 |
+
if (outside) pos.outside = true;
|
1214 |
+
return pos;
|
1215 |
+
}
|
1216 |
+
|
1217 |
+
// Coords must be lineSpace-local
|
1218 |
+
function coordsChar(cm, x, y) {
|
1219 |
+
var doc = cm.doc;
|
1220 |
+
y += cm.display.viewOffset;
|
1221 |
+
if (y < 0) return PosWithInfo(doc.first, 0, true, -1);
|
1222 |
+
var lineNo = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
|
1223 |
+
if (lineNo > last)
|
1224 |
+
return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);
|
1225 |
+
if (x < 0) x = 0;
|
1226 |
+
|
1227 |
+
for (;;) {
|
1228 |
+
var lineObj = getLine(doc, lineNo);
|
1229 |
+
var found = coordsCharInner(cm, lineObj, lineNo, x, y);
|
1230 |
+
var merged = collapsedSpanAtEnd(lineObj);
|
1231 |
+
var mergedPos = merged && merged.find();
|
1232 |
+
if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
|
1233 |
+
lineNo = mergedPos.to.line;
|
1234 |
+
else
|
1235 |
+
return found;
|
1236 |
+
}
|
1237 |
+
}
|
1238 |
+
|
1239 |
+
function coordsCharInner(cm, lineObj, lineNo, x, y) {
|
1240 |
+
var innerOff = y - heightAtLine(cm, lineObj);
|
1241 |
+
var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;
|
1242 |
+
var measurement = measureLine(cm, lineObj);
|
1243 |
+
|
1244 |
+
function getX(ch) {
|
1245 |
+
var sp = cursorCoords(cm, Pos(lineNo, ch), "line",
|
1246 |
+
lineObj, measurement);
|
1247 |
+
wrongLine = true;
|
1248 |
+
if (innerOff > sp.bottom) return sp.left - adjust;
|
1249 |
+
else if (innerOff < sp.top) return sp.left + adjust;
|
1250 |
+
else wrongLine = false;
|
1251 |
+
return sp.left;
|
1252 |
+
}
|
1253 |
+
|
1254 |
+
var bidi = getOrder(lineObj), dist = lineObj.text.length;
|
1255 |
+
var from = lineLeft(lineObj), to = lineRight(lineObj);
|
1256 |
+
var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine;
|
1257 |
+
|
1258 |
+
if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1);
|
1259 |
+
// Do a binary search between these bounds.
|
1260 |
+
for (;;) {
|
1261 |
+
if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) {
|
1262 |
+
var ch = x < fromX || x - fromX <= toX - x ? from : to;
|
1263 |
+
var xDiff = x - (ch == from ? fromX : toX);
|
1264 |
+
while (isExtendingChar.test(lineObj.text.charAt(ch))) ++ch;
|
1265 |
+
var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside,
|
1266 |
+
xDiff < 0 ? -1 : xDiff ? 1 : 0);
|
1267 |
+
return pos;
|
1268 |
+
}
|
1269 |
+
var step = Math.ceil(dist / 2), middle = from + step;
|
1270 |
+
if (bidi) {
|
1271 |
+
middle = from;
|
1272 |
+
for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1);
|
1273 |
+
}
|
1274 |
+
var middleX = getX(middle);
|
1275 |
+
if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;}
|
1276 |
+
else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;}
|
1277 |
+
}
|
1278 |
+
}
|
1279 |
+
|
1280 |
+
var measureText;
|
1281 |
+
function textHeight(display) {
|
1282 |
+
if (display.cachedTextHeight != null) return display.cachedTextHeight;
|
1283 |
+
if (measureText == null) {
|
1284 |
+
measureText = elt("pre");
|
1285 |
+
// Measure a bunch of lines, for browsers that compute
|
1286 |
+
// fractional heights.
|
1287 |
+
for (var i = 0; i < 49; ++i) {
|
1288 |
+
measureText.appendChild(document.createTextNode("x"));
|
1289 |
+
measureText.appendChild(elt("br"));
|
1290 |
+
}
|
1291 |
+
measureText.appendChild(document.createTextNode("x"));
|
1292 |
+
}
|
1293 |
+
removeChildrenAndAdd(display.measure, measureText);
|
1294 |
+
var height = measureText.offsetHeight / 50;
|
1295 |
+
if (height > 3) display.cachedTextHeight = height;
|
1296 |
+
removeChildren(display.measure);
|
1297 |
+
return height || 1;
|
1298 |
+
}
|
1299 |
+
|
1300 |
+
function charWidth(display) {
|
1301 |
+
if (display.cachedCharWidth != null) return display.cachedCharWidth;
|
1302 |
+
var anchor = elt("span", "x");
|
1303 |
+
var pre = elt("pre", [anchor]);
|
1304 |
+
removeChildrenAndAdd(display.measure, pre);
|
1305 |
+
var width = anchor.offsetWidth;
|
1306 |
+
if (width > 2) display.cachedCharWidth = width;
|
1307 |
+
return width || 10;
|
1308 |
+
}
|
1309 |
+
|
1310 |
+
// OPERATIONS
|
1311 |
+
|
1312 |
+
// Operations are used to wrap changes in such a way that each
|
1313 |
+
// change won't have to update the cursor and display (which would
|
1314 |
+
// be awkward, slow, and error-prone), but instead updates are
|
1315 |
+
// batched and then all combined and executed at once.
|
1316 |
+
|
1317 |
+
var nextOpId = 0;
|
1318 |
+
function startOperation(cm) {
|
1319 |
+
cm.curOp = {
|
1320 |
+
// An array of ranges of lines that have to be updated. See
|
1321 |
+
// updateDisplay.
|
1322 |
+
changes: [],
|
1323 |
+
forceUpdate: false,
|
1324 |
+
updateInput: null,
|
1325 |
+
userSelChange: null,
|
1326 |
+
textChanged: null,
|
1327 |
+
selectionChanged: false,
|
1328 |
+
cursorActivity: false,
|
1329 |
+
updateMaxLine: false,
|
1330 |
+
updateScrollPos: false,
|
1331 |
+
id: ++nextOpId
|
1332 |
+
};
|
1333 |
+
if (!delayedCallbackDepth++) delayedCallbacks = [];
|
1334 |
+
}
|
1335 |
+
|
1336 |
+
function endOperation(cm) {
|
1337 |
+
var op = cm.curOp, doc = cm.doc, display = cm.display;
|
1338 |
+
cm.curOp = null;
|
1339 |
+
|
1340 |
+
if (op.updateMaxLine) computeMaxLength(cm);
|
1341 |
+
if (display.maxLineChanged && !cm.options.lineWrapping && display.maxLine) {
|
1342 |
+
var width = measureLineWidth(cm, display.maxLine);
|
1343 |
+
display.sizer.style.minWidth = Math.max(0, width + 3 + scrollerCutOff) + "px";
|
1344 |
+
display.maxLineChanged = false;
|
1345 |
+
var maxScrollLeft = Math.max(0, display.sizer.offsetLeft + display.sizer.offsetWidth - display.scroller.clientWidth);
|
1346 |
+
if (maxScrollLeft < doc.scrollLeft && !op.updateScrollPos)
|
1347 |
+
setScrollLeft(cm, Math.min(display.scroller.scrollLeft, maxScrollLeft), true);
|
1348 |
+
}
|
1349 |
+
var newScrollPos, updated;
|
1350 |
+
if (op.updateScrollPos) {
|
1351 |
+
newScrollPos = op.updateScrollPos;
|
1352 |
+
} else if (op.selectionChanged && display.scroller.clientHeight) { // don't rescroll if not visible
|
1353 |
+
var coords = cursorCoords(cm, doc.sel.head);
|
1354 |
+
newScrollPos = calculateScrollPos(cm, coords.left, coords.top, coords.left, coords.bottom);
|
1355 |
+
}
|
1356 |
+
if (op.changes.length || op.forceUpdate || newScrollPos && newScrollPos.scrollTop != null) {
|
1357 |
+
updated = updateDisplay(cm, op.changes, newScrollPos && newScrollPos.scrollTop, op.forceUpdate);
|
1358 |
+
if (cm.display.scroller.offsetHeight) cm.doc.scrollTop = cm.display.scroller.scrollTop;
|
1359 |
+
}
|
1360 |
+
if (!updated && op.selectionChanged) updateSelection(cm);
|
1361 |
+
if (op.updateScrollPos) {
|
1362 |
+
display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = newScrollPos.scrollTop;
|
1363 |
+
display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = newScrollPos.scrollLeft;
|
1364 |
+
alignHorizontally(cm);
|
1365 |
+
if (op.scrollToPos)
|
1366 |
+
scrollPosIntoView(cm, clipPos(cm.doc, op.scrollToPos), op.scrollToPosMargin);
|
1367 |
+
} else if (newScrollPos) {
|
1368 |
+
scrollCursorIntoView(cm);
|
1369 |
+
}
|
1370 |
+
if (op.selectionChanged) restartBlink(cm);
|
1371 |
+
|
1372 |
+
if (cm.state.focused && op.updateInput)
|
1373 |
+
resetInput(cm, op.userSelChange);
|
1374 |
+
|
1375 |
+
var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
|
1376 |
+
if (hidden) for (var i = 0; i < hidden.length; ++i)
|
1377 |
+
if (!hidden[i].lines.length) signal(hidden[i], "hide");
|
1378 |
+
if (unhidden) for (var i = 0; i < unhidden.length; ++i)
|
1379 |
+
if (unhidden[i].lines.length) signal(unhidden[i], "unhide");
|
1380 |
+
|
1381 |
+
var delayed;
|
1382 |
+
if (!--delayedCallbackDepth) {
|
1383 |
+
delayed = delayedCallbacks;
|
1384 |
+
delayedCallbacks = null;
|
1385 |
+
}
|
1386 |
+
if (op.textChanged)
|
1387 |
+
signal(cm, "change", cm, op.textChanged);
|
1388 |
+
if (op.cursorActivity) signal(cm, "cursorActivity", cm);
|
1389 |
+
if (delayed) for (var i = 0; i < delayed.length; ++i) delayed[i]();
|
1390 |
+
}
|
1391 |
+
|
1392 |
+
// Wraps a function in an operation. Returns the wrapped function.
|
1393 |
+
function operation(cm1, f) {
|
1394 |
+
return function() {
|
1395 |
+
var cm = cm1 || this, withOp = !cm.curOp;
|
1396 |
+
if (withOp) startOperation(cm);
|
1397 |
+
try { var result = f.apply(cm, arguments); }
|
1398 |
+
finally { if (withOp) endOperation(cm); }
|
1399 |
+
return result;
|
1400 |
+
};
|
1401 |
+
}
|
1402 |
+
function docOperation(f) {
|
1403 |
+
return function() {
|
1404 |
+
var withOp = this.cm && !this.cm.curOp, result;
|
1405 |
+
if (withOp) startOperation(this.cm);
|
1406 |
+
try { result = f.apply(this, arguments); }
|
1407 |
+
finally { if (withOp) endOperation(this.cm); }
|
1408 |
+
return result;
|
1409 |
+
};
|
1410 |
+
}
|
1411 |
+
function runInOp(cm, f) {
|
1412 |
+
var withOp = !cm.curOp, result;
|
1413 |
+
if (withOp) startOperation(cm);
|
1414 |
+
try { result = f(); }
|
1415 |
+
finally { if (withOp) endOperation(cm); }
|
1416 |
+
return result;
|
1417 |
+
}
|
1418 |
+
|
1419 |
+
function regChange(cm, from, to, lendiff) {
|
1420 |
+
if (from == null) from = cm.doc.first;
|
1421 |
+
if (to == null) to = cm.doc.first + cm.doc.size;
|
1422 |
+
cm.curOp.changes.push({from: from, to: to, diff: lendiff});
|
1423 |
+
}
|
1424 |
+
|
1425 |
+
// INPUT HANDLING
|
1426 |
+
|
1427 |
+
function slowPoll(cm) {
|
1428 |
+
if (cm.display.pollingFast) return;
|
1429 |
+
cm.display.poll.set(cm.options.pollInterval, function() {
|
1430 |
+
readInput(cm);
|
1431 |
+
if (cm.state.focused) slowPoll(cm);
|
1432 |
+
});
|
1433 |
+
}
|
1434 |
+
|
1435 |
+
function fastPoll(cm) {
|
1436 |
+
var missed = false;
|
1437 |
+
cm.display.pollingFast = true;
|
1438 |
+
function p() {
|
1439 |
+
var changed = readInput(cm);
|
1440 |
+
if (!changed && !missed) {missed = true; cm.display.poll.set(60, p);}
|
1441 |
+
else {cm.display.pollingFast = false; slowPoll(cm);}
|
1442 |
+
}
|
1443 |
+
cm.display.poll.set(20, p);
|
1444 |
+
}
|
1445 |
+
|
1446 |
+
// prevInput is a hack to work with IME. If we reset the textarea
|
1447 |
+
// on every change, that breaks IME. So we look for changes
|
1448 |
+
// compared to the previous content instead. (Modern browsers have
|
1449 |
+
// events that indicate IME taking place, but these are not widely
|
1450 |
+
// supported or compatible enough yet to rely on.)
|
1451 |
+
function readInput(cm) {
|
1452 |
+
var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc, sel = doc.sel;
|
1453 |
+
if (!cm.state.focused || hasSelection(input) || isReadOnly(cm) || cm.state.disableInput) return false;
|
1454 |
+
var text = input.value;
|
1455 |
+
if (text == prevInput && posEq(sel.from, sel.to)) return false;
|
1456 |
+
if (ie && !ie_lt9 && cm.display.inputHasSelection === text) {
|
1457 |
+
resetInput(cm, true);
|
1458 |
+
return false;
|
1459 |
+
}
|
1460 |
+
|
1461 |
+
var withOp = !cm.curOp;
|
1462 |
+
if (withOp) startOperation(cm);
|
1463 |
+
sel.shift = false;
|
1464 |
+
var same = 0, l = Math.min(prevInput.length, text.length);
|
1465 |
+
while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;
|
1466 |
+
var from = sel.from, to = sel.to;
|
1467 |
+
if (same < prevInput.length)
|
1468 |
+
from = Pos(from.line, from.ch - (prevInput.length - same));
|
1469 |
+
else if (cm.state.overwrite && posEq(from, to) && !cm.state.pasteIncoming)
|
1470 |
+
to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + (text.length - same)));
|
1471 |
+
|
1472 |
+
var updateInput = cm.curOp.updateInput;
|
1473 |
+
var changeEvent = {from: from, to: to, text: splitLines(text.slice(same)),
|
1474 |
+
origin: cm.state.pasteIncoming ? "paste" : "+input"};
|
1475 |
+
makeChange(cm.doc, changeEvent, "end");
|
1476 |
+
cm.curOp.updateInput = updateInput;
|
1477 |
+
signalLater(cm, "inputRead", cm, changeEvent);
|
1478 |
+
|
1479 |
+
if (text.length > 1000 || text.indexOf("\n") > -1) input.value = cm.display.prevInput = "";
|
1480 |
+
else cm.display.prevInput = text;
|
1481 |
+
if (withOp) endOperation(cm);
|
1482 |
+
cm.state.pasteIncoming = false;
|
1483 |
+
return true;
|
1484 |
+
}
|
1485 |
+
|
1486 |
+
function resetInput(cm, user) {
|
1487 |
+
var minimal, selected, doc = cm.doc;
|
1488 |
+
if (!posEq(doc.sel.from, doc.sel.to)) {
|
1489 |
+
cm.display.prevInput = "";
|
1490 |
+
minimal = hasCopyEvent &&
|
1491 |
+
(doc.sel.to.line - doc.sel.from.line > 100 || (selected = cm.getSelection()).length > 1000);
|
1492 |
+
var content = minimal ? "-" : selected || cm.getSelection();
|
1493 |
+
cm.display.input.value = content;
|
1494 |
+
if (cm.state.focused) selectInput(cm.display.input);
|
1495 |
+
if (ie && !ie_lt9) cm.display.inputHasSelection = content;
|
1496 |
+
} else if (user) {
|
1497 |
+
cm.display.prevInput = cm.display.input.value = "";
|
1498 |
+
if (ie && !ie_lt9) cm.display.inputHasSelection = null;
|
1499 |
+
}
|
1500 |
+
cm.display.inaccurateSelection = minimal;
|
1501 |
+
}
|
1502 |
+
|
1503 |
+
function focusInput(cm) {
|
1504 |
+
if (cm.options.readOnly != "nocursor" && (!mobile || document.activeElement != cm.display.input))
|
1505 |
+
cm.display.input.focus();
|
1506 |
+
}
|
1507 |
+
|
1508 |
+
function isReadOnly(cm) {
|
1509 |
+
return cm.options.readOnly || cm.doc.cantEdit;
|
1510 |
+
}
|
1511 |
+
|
1512 |
+
// EVENT HANDLERS
|
1513 |
+
|
1514 |
+
function registerEventHandlers(cm) {
|
1515 |
+
var d = cm.display;
|
1516 |
+
on(d.scroller, "mousedown", operation(cm, onMouseDown));
|
1517 |
+
if (ie)
|
1518 |
+
on(d.scroller, "dblclick", operation(cm, function(e) {
|
1519 |
+
if (signalDOMEvent(cm, e)) return;
|
1520 |
+
var pos = posFromMouse(cm, e);
|
1521 |
+
if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return;
|
1522 |
+
e_preventDefault(e);
|
1523 |
+
var word = findWordAt(getLine(cm.doc, pos.line).text, pos);
|
1524 |
+
extendSelection(cm.doc, word.from, word.to);
|
1525 |
+
}));
|
1526 |
+
else
|
1527 |
+
on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); });
|
1528 |
+
on(d.lineSpace, "selectstart", function(e) {
|
1529 |
+
if (!eventInWidget(d, e)) e_preventDefault(e);
|
1530 |
+
});
|
1531 |
+
// Gecko browsers fire contextmenu *after* opening the menu, at
|
1532 |
+
// which point we can't mess with it anymore. Context menu is
|
1533 |
+
// handled in onMouseDown for Gecko.
|
1534 |
+
if (!captureMiddleClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);});
|
1535 |
+
|
1536 |
+
on(d.scroller, "scroll", function() {
|
1537 |
+
if (d.scroller.clientHeight) {
|
1538 |
+
setScrollTop(cm, d.scroller.scrollTop);
|
1539 |
+
setScrollLeft(cm, d.scroller.scrollLeft, true);
|
1540 |
+
signal(cm, "scroll", cm);
|
1541 |
+
}
|
1542 |
+
});
|
1543 |
+
on(d.scrollbarV, "scroll", function() {
|
1544 |
+
if (d.scroller.clientHeight) setScrollTop(cm, d.scrollbarV.scrollTop);
|
1545 |
+
});
|
1546 |
+
on(d.scrollbarH, "scroll", function() {
|
1547 |
+
if (d.scroller.clientHeight) setScrollLeft(cm, d.scrollbarH.scrollLeft);
|
1548 |
+
});
|
1549 |
+
|
1550 |
+
on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);});
|
1551 |
+
on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);});
|
1552 |
+
|
1553 |
+
function reFocus() { if (cm.state.focused) setTimeout(bind(focusInput, cm), 0); }
|
1554 |
+
on(d.scrollbarH, "mousedown", reFocus);
|
1555 |
+
on(d.scrollbarV, "mousedown", reFocus);
|
1556 |
+
// Prevent wrapper from ever scrolling
|
1557 |
+
on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });
|
1558 |
+
|
1559 |
+
var resizeTimer;
|
1560 |
+
function onResize() {
|
1561 |
+
if (resizeTimer == null) resizeTimer = setTimeout(function() {
|
1562 |
+
resizeTimer = null;
|
1563 |
+
// Might be a text scaling operation, clear size caches.
|
1564 |
+
d.cachedCharWidth = d.cachedTextHeight = knownScrollbarWidth = null;
|
1565 |
+
clearCaches(cm);
|
1566 |
+
runInOp(cm, bind(regChange, cm));
|
1567 |
+
}, 100);
|
1568 |
+
}
|
1569 |
+
on(window, "resize", onResize);
|
1570 |
+
// Above handler holds on to the editor and its data structures.
|
1571 |
+
// Here we poll to unregister it when the editor is no longer in
|
1572 |
+
// the document, so that it can be garbage-collected.
|
1573 |
+
function unregister() {
|
1574 |
+
for (var p = d.wrapper.parentNode; p && p != document.body; p = p.parentNode) {}
|
1575 |
+
if (p) setTimeout(unregister, 5000);
|
1576 |
+
else off(window, "resize", onResize);
|
1577 |
+
}
|
1578 |
+
setTimeout(unregister, 5000);
|
1579 |
+
|
1580 |
+
on(d.input, "keyup", operation(cm, function(e) {
|
1581 |
+
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
1582 |
+
if (e.keyCode == 16) cm.doc.sel.shift = false;
|
1583 |
+
}));
|
1584 |
+
on(d.input, "input", bind(fastPoll, cm));
|
1585 |
+
on(d.input, "keydown", operation(cm, onKeyDown));
|
1586 |
+
on(d.input, "keypress", operation(cm, onKeyPress));
|
1587 |
+
on(d.input, "focus", bind(onFocus, cm));
|
1588 |
+
on(d.input, "blur", bind(onBlur, cm));
|
1589 |
+
|
1590 |
+
function drag_(e) {
|
1591 |
+
if (signalDOMEvent(cm, e) || cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))) return;
|
1592 |
+
e_stop(e);
|
1593 |
+
}
|
1594 |
+
if (cm.options.dragDrop) {
|
1595 |
+
on(d.scroller, "dragstart", function(e){onDragStart(cm, e);});
|
1596 |
+
on(d.scroller, "dragenter", drag_);
|
1597 |
+
on(d.scroller, "dragover", drag_);
|
1598 |
+
on(d.scroller, "drop", operation(cm, onDrop));
|
1599 |
+
}
|
1600 |
+
on(d.scroller, "paste", function(e){
|
1601 |
+
if (eventInWidget(d, e)) return;
|
1602 |
+
focusInput(cm);
|
1603 |
+
fastPoll(cm);
|
1604 |
+
});
|
1605 |
+
on(d.input, "paste", function() {
|
1606 |
+
cm.state.pasteIncoming = true;
|
1607 |
+
fastPoll(cm);
|
1608 |
+
});
|
1609 |
+
|
1610 |
+
function prepareCopy() {
|
1611 |
+
if (d.inaccurateSelection) {
|
1612 |
+
d.prevInput = "";
|
1613 |
+
d.inaccurateSelection = false;
|
1614 |
+
d.input.value = cm.getSelection();
|
1615 |
+
selectInput(d.input);
|
1616 |
+
}
|
1617 |
+
}
|
1618 |
+
on(d.input, "cut", prepareCopy);
|
1619 |
+
on(d.input, "copy", prepareCopy);
|
1620 |
+
|
1621 |
+
// Needed to handle Tab key in KHTML
|
1622 |
+
if (khtml) on(d.sizer, "mouseup", function() {
|
1623 |
+
if (document.activeElement == d.input) d.input.blur();
|
1624 |
+
focusInput(cm);
|
1625 |
+
});
|
1626 |
+
}
|
1627 |
+
|
1628 |
+
function eventInWidget(display, e) {
|
1629 |
+
for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
|
1630 |
+
if (!n || n.ignoreEvents || n.parentNode == display.sizer && n != display.mover) return true;
|
1631 |
+
}
|
1632 |
+
}
|
1633 |
+
|
1634 |
+
function posFromMouse(cm, e, liberal) {
|
1635 |
+
var display = cm.display;
|
1636 |
+
if (!liberal) {
|
1637 |
+
var target = e_target(e);
|
1638 |
+
if (target == display.scrollbarH || target == display.scrollbarH.firstChild ||
|
1639 |
+
target == display.scrollbarV || target == display.scrollbarV.firstChild ||
|
1640 |
+
target == display.scrollbarFiller || target == display.gutterFiller) return null;
|
1641 |
+
}
|
1642 |
+
var x, y, space = getRect(display.lineSpace);
|
1643 |
+
// Fails unpredictably on IE[67] when mouse is dragged around quickly.
|
1644 |
+
try { x = e.clientX; y = e.clientY; } catch (e) { return null; }
|
1645 |
+
return coordsChar(cm, x - space.left, y - space.top);
|
1646 |
+
}
|
1647 |
+
|
1648 |
+
var lastClick, lastDoubleClick;
|
1649 |
+
function onMouseDown(e) {
|
1650 |
+
if (signalDOMEvent(this, e)) return;
|
1651 |
+
var cm = this, display = cm.display, doc = cm.doc, sel = doc.sel;
|
1652 |
+
sel.shift = e.shiftKey;
|
1653 |
+
|
1654 |
+
if (eventInWidget(display, e)) {
|
1655 |
+
if (!webkit) {
|
1656 |
+
display.scroller.draggable = false;
|
1657 |
+
setTimeout(function(){display.scroller.draggable = true;}, 100);
|
1658 |
+
}
|
1659 |
+
return;
|
1660 |
+
}
|
1661 |
+
if (clickInGutter(cm, e)) return;
|
1662 |
+
var start = posFromMouse(cm, e);
|
1663 |
+
|
1664 |
+
switch (e_button(e)) {
|
1665 |
+
case 3:
|
1666 |
+
if (captureMiddleClick) onContextMenu.call(cm, cm, e);
|
1667 |
+
return;
|
1668 |
+
case 2:
|
1669 |
+
if (start) extendSelection(cm.doc, start);
|
1670 |
+
setTimeout(bind(focusInput, cm), 20);
|
1671 |
+
e_preventDefault(e);
|
1672 |
+
return;
|
1673 |
+
}
|
1674 |
+
// For button 1, if it was clicked inside the editor
|
1675 |
+
// (posFromMouse returning non-null), we have to adjust the
|
1676 |
+
// selection.
|
1677 |
+
if (!start) {if (e_target(e) == display.scroller) e_preventDefault(e); return;}
|
1678 |
+
|
1679 |
+
if (!cm.state.focused) onFocus(cm);
|
1680 |
+
|
1681 |
+
var now = +new Date, type = "single";
|
1682 |
+
if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) {
|
1683 |
+
type = "triple";
|
1684 |
+
e_preventDefault(e);
|
1685 |
+
setTimeout(bind(focusInput, cm), 20);
|
1686 |
+
selectLine(cm, start.line);
|
1687 |
+
} else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) {
|
1688 |
+
type = "double";
|
1689 |
+
lastDoubleClick = {time: now, pos: start};
|
1690 |
+
e_preventDefault(e);
|
1691 |
+
var word = findWordAt(getLine(doc, start.line).text, start);
|
1692 |
+
extendSelection(cm.doc, word.from, word.to);
|
1693 |
+
} else { lastClick = {time: now, pos: start}; }
|
1694 |
+
|
1695 |
+
var last = start;
|
1696 |
+
if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && !posEq(sel.from, sel.to) &&
|
1697 |
+
!posLess(start, sel.from) && !posLess(sel.to, start) && type == "single") {
|
1698 |
+
var dragEnd = operation(cm, function(e2) {
|
1699 |
+
if (webkit) display.scroller.draggable = false;
|
1700 |
+
cm.state.draggingText = false;
|
1701 |
+
off(document, "mouseup", dragEnd);
|
1702 |
+
off(display.scroller, "drop", dragEnd);
|
1703 |
+
if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {
|
1704 |
+
e_preventDefault(e2);
|
1705 |
+
extendSelection(cm.doc, start);
|
1706 |
+
focusInput(cm);
|
1707 |
+
}
|
1708 |
+
});
|
1709 |
+
// Let the drag handler handle this.
|
1710 |
+
if (webkit) display.scroller.draggable = true;
|
1711 |
+
cm.state.draggingText = dragEnd;
|
1712 |
+
// IE's approach to draggable
|
1713 |
+
if (display.scroller.dragDrop) display.scroller.dragDrop();
|
1714 |
+
on(document, "mouseup", dragEnd);
|
1715 |
+
on(display.scroller, "drop", dragEnd);
|
1716 |
+
return;
|
1717 |
+
}
|
1718 |
+
e_preventDefault(e);
|
1719 |
+
if (type == "single") extendSelection(cm.doc, clipPos(doc, start));
|
1720 |
+
|
1721 |
+
var startstart = sel.from, startend = sel.to, lastPos = start;
|
1722 |
+
|
1723 |
+
function doSelect(cur) {
|
1724 |
+
if (posEq(lastPos, cur)) return;
|
1725 |
+
lastPos = cur;
|
1726 |
+
|
1727 |
+
if (type == "single") {
|
1728 |
+
extendSelection(cm.doc, clipPos(doc, start), cur);
|
1729 |
+
return;
|
1730 |
+
}
|
1731 |
+
|
1732 |
+
startstart = clipPos(doc, startstart);
|
1733 |
+
startend = clipPos(doc, startend);
|
1734 |
+
if (type == "double") {
|
1735 |
+
var word = findWordAt(getLine(doc, cur.line).text, cur);
|
1736 |
+
if (posLess(cur, startstart)) extendSelection(cm.doc, word.from, startend);
|
1737 |
+
else extendSelection(cm.doc, startstart, word.to);
|
1738 |
+
} else if (type == "triple") {
|
1739 |
+
if (posLess(cur, startstart)) extendSelection(cm.doc, startend, clipPos(doc, Pos(cur.line, 0)));
|
1740 |
+
else extendSelection(cm.doc, startstart, clipPos(doc, Pos(cur.line + 1, 0)));
|
1741 |
+
}
|
1742 |
+
}
|
1743 |
+
|
1744 |
+
var editorSize = getRect(display.wrapper);
|
1745 |
+
// Used to ensure timeout re-tries don't fire when another extend
|
1746 |
+
// happened in the meantime (clearTimeout isn't reliable -- at
|
1747 |
+
// least on Chrome, the timeouts still happen even when cleared,
|
1748 |
+
// if the clear happens after their scheduled firing time).
|
1749 |
+
var counter = 0;
|
1750 |
+
|
1751 |
+
function extend(e) {
|
1752 |
+
var curCount = ++counter;
|
1753 |
+
var cur = posFromMouse(cm, e, true);
|
1754 |
+
if (!cur) return;
|
1755 |
+
if (!posEq(cur, last)) {
|
1756 |
+
if (!cm.state.focused) onFocus(cm);
|
1757 |
+
last = cur;
|
1758 |
+
doSelect(cur);
|
1759 |
+
var visible = visibleLines(display, doc);
|
1760 |
+
if (cur.line >= visible.to || cur.line < visible.from)
|
1761 |
+
setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150);
|
1762 |
+
} else {
|
1763 |
+
var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
|
1764 |
+
if (outside) setTimeout(operation(cm, function() {
|
1765 |
+
if (counter != curCount) return;
|
1766 |
+
display.scroller.scrollTop += outside;
|
1767 |
+
extend(e);
|
1768 |
+
}), 50);
|
1769 |
+
}
|
1770 |
+
}
|
1771 |
+
|
1772 |
+
function done(e) {
|
1773 |
+
counter = Infinity;
|
1774 |
+
e_preventDefault(e);
|
1775 |
+
focusInput(cm);
|
1776 |
+
off(document, "mousemove", move);
|
1777 |
+
off(document, "mouseup", up);
|
1778 |
+
}
|
1779 |
+
|
1780 |
+
var move = operation(cm, function(e) {
|
1781 |
+
if (!ie && !e_button(e)) done(e);
|
1782 |
+
else extend(e);
|
1783 |
+
});
|
1784 |
+
var up = operation(cm, done);
|
1785 |
+
on(document, "mousemove", move);
|
1786 |
+
on(document, "mouseup", up);
|
1787 |
+
}
|
1788 |
+
|
1789 |
+
function clickInGutter(cm, e) {
|
1790 |
+
var display = cm.display;
|
1791 |
+
try { var mX = e.clientX, mY = e.clientY; }
|
1792 |
+
catch(e) { return false; }
|
1793 |
+
|
1794 |
+
if (mX >= Math.floor(getRect(display.gutters).right)) return false;
|
1795 |
+
e_preventDefault(e);
|
1796 |
+
if (!hasHandler(cm, "gutterClick")) return true;
|
1797 |
+
|
1798 |
+
var lineBox = getRect(display.lineDiv);
|
1799 |
+
if (mY > lineBox.bottom) return true;
|
1800 |
+
mY -= lineBox.top - display.viewOffset;
|
1801 |
+
|
1802 |
+
for (var i = 0; i < cm.options.gutters.length; ++i) {
|
1803 |
+
var g = display.gutters.childNodes[i];
|
1804 |
+
if (g && getRect(g).right >= mX) {
|
1805 |
+
var line = lineAtHeight(cm.doc, mY);
|
1806 |
+
var gutter = cm.options.gutters[i];
|
1807 |
+
signalLater(cm, "gutterClick", cm, line, gutter, e);
|
1808 |
+
break;
|
1809 |
+
}
|
1810 |
+
}
|
1811 |
+
return true;
|
1812 |
+
}
|
1813 |
+
|
1814 |
+
// Kludge to work around strange IE behavior where it'll sometimes
|
1815 |
+
// re-fire a series of drag-related events right after the drop (#1551)
|
1816 |
+
var lastDrop = 0;
|
1817 |
+
|
1818 |
+
function onDrop(e) {
|
1819 |
+
var cm = this;
|
1820 |
+
if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e) || (cm.options.onDragEvent && cm.options.onDragEvent(cm, addStop(e))))
|
1821 |
+
return;
|
1822 |
+
e_preventDefault(e);
|
1823 |
+
if (ie) lastDrop = +new Date;
|
1824 |
+
var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
|
1825 |
+
if (!pos || isReadOnly(cm)) return;
|
1826 |
+
if (files && files.length && window.FileReader && window.File) {
|
1827 |
+
var n = files.length, text = Array(n), read = 0;
|
1828 |
+
var loadFile = function(file, i) {
|
1829 |
+
var reader = new FileReader;
|
1830 |
+
reader.onload = function() {
|
1831 |
+
text[i] = reader.result;
|
1832 |
+
if (++read == n) {
|
1833 |
+
pos = clipPos(cm.doc, pos);
|
1834 |
+
makeChange(cm.doc, {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}, "around");
|
1835 |
+
}
|
1836 |
+
};
|
1837 |
+
reader.readAsText(file);
|
1838 |
+
};
|
1839 |
+
for (var i = 0; i < n; ++i) loadFile(files[i], i);
|
1840 |
+
} else {
|
1841 |
+
// Don't do a replace if the drop happened inside of the selected text.
|
1842 |
+
if (cm.state.draggingText && !(posLess(pos, cm.doc.sel.from) || posLess(cm.doc.sel.to, pos))) {
|
1843 |
+
cm.state.draggingText(e);
|
1844 |
+
// Ensure the editor is re-focused
|
1845 |
+
setTimeout(bind(focusInput, cm), 20);
|
1846 |
+
return;
|
1847 |
+
}
|
1848 |
+
try {
|
1849 |
+
var text = e.dataTransfer.getData("Text");
|
1850 |
+
if (text) {
|
1851 |
+
var curFrom = cm.doc.sel.from, curTo = cm.doc.sel.to;
|
1852 |
+
setSelection(cm.doc, pos, pos);
|
1853 |
+
if (cm.state.draggingText) replaceRange(cm.doc, "", curFrom, curTo, "paste");
|
1854 |
+
cm.replaceSelection(text, null, "paste");
|
1855 |
+
focusInput(cm);
|
1856 |
+
onFocus(cm);
|
1857 |
+
}
|
1858 |
+
}
|
1859 |
+
catch(e){}
|
1860 |
+
}
|
1861 |
+
}
|
1862 |
+
|
1863 |
+
function onDragStart(cm, e) {
|
1864 |
+
if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; }
|
1865 |
+
if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return;
|
1866 |
+
|
1867 |
+
var txt = cm.getSelection();
|
1868 |
+
e.dataTransfer.setData("Text", txt);
|
1869 |
+
|
1870 |
+
// Use dummy image instead of default browsers image.
|
1871 |
+
// Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
|
1872 |
+
if (e.dataTransfer.setDragImage && !safari) {
|
1873 |
+
var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
|
1874 |
+
if (opera) {
|
1875 |
+
img.width = img.height = 1;
|
1876 |
+
cm.display.wrapper.appendChild(img);
|
1877 |
+
// Force a relayout, or Opera won't use our image for some obscure reason
|
1878 |
+
img._top = img.offsetTop;
|
1879 |
+
}
|
1880 |
+
e.dataTransfer.setDragImage(img, 0, 0);
|
1881 |
+
if (opera) img.parentNode.removeChild(img);
|
1882 |
+
}
|
1883 |
+
}
|
1884 |
+
|
1885 |
+
function setScrollTop(cm, val) {
|
1886 |
+
if (Math.abs(cm.doc.scrollTop - val) < 2) return;
|
1887 |
+
cm.doc.scrollTop = val;
|
1888 |
+
if (!gecko) updateDisplay(cm, [], val);
|
1889 |
+
if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val;
|
1890 |
+
if (cm.display.scrollbarV.scrollTop != val) cm.display.scrollbarV.scrollTop = val;
|
1891 |
+
if (gecko) updateDisplay(cm, []);
|
1892 |
+
startWorker(cm, 100);
|
1893 |
+
}
|
1894 |
+
function setScrollLeft(cm, val, isScroller) {
|
1895 |
+
if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return;
|
1896 |
+
val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);
|
1897 |
+
cm.doc.scrollLeft = val;
|
1898 |
+
alignHorizontally(cm);
|
1899 |
+
if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val;
|
1900 |
+
if (cm.display.scrollbarH.scrollLeft != val) cm.display.scrollbarH.scrollLeft = val;
|
1901 |
+
}
|
1902 |
+
|
1903 |
+
// Since the delta values reported on mouse wheel events are
|
1904 |
+
// unstandardized between browsers and even browser versions, and
|
1905 |
+
// generally horribly unpredictable, this code starts by measuring
|
1906 |
+
// the scroll effect that the first few mouse wheel events have,
|
1907 |
+
// and, from that, detects the way it can convert deltas to pixel
|
1908 |
+
// offsets afterwards.
|
1909 |
+
//
|
1910 |
+
// The reason we want to know the amount a wheel event will scroll
|
1911 |
+
// is that it gives us a chance to update the display before the
|
1912 |
+
// actual scrolling happens, reducing flickering.
|
1913 |
+
|
1914 |
+
var wheelSamples = 0, wheelPixelsPerUnit = null;
|
1915 |
+
// Fill in a browser-detected starting value on browsers where we
|
1916 |
+
// know one. These don't have to be accurate -- the result of them
|
1917 |
+
// being wrong would just be a slight flicker on the first wheel
|
1918 |
+
// scroll (if it is large enough).
|
1919 |
+
if (ie) wheelPixelsPerUnit = -.53;
|
1920 |
+
else if (gecko) wheelPixelsPerUnit = 15;
|
1921 |
+
else if (chrome) wheelPixelsPerUnit = -.7;
|
1922 |
+
else if (safari) wheelPixelsPerUnit = -1/3;
|
1923 |
+
|
1924 |
+
function onScrollWheel(cm, e) {
|
1925 |
+
var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
|
1926 |
+
if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail;
|
1927 |
+
if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail;
|
1928 |
+
else if (dy == null) dy = e.wheelDelta;
|
1929 |
+
|
1930 |
+
var display = cm.display, scroll = display.scroller;
|
1931 |
+
// Quit if there's nothing to scroll here
|
1932 |
+
if (!(dx && scroll.scrollWidth > scroll.clientWidth ||
|
1933 |
+
dy && scroll.scrollHeight > scroll.clientHeight)) return;
|
1934 |
+
|
1935 |
+
// Webkit browsers on OS X abort momentum scrolls when the target
|
1936 |
+
// of the scroll event is removed from the scrollable element.
|
1937 |
+
// This hack (see related code in patchDisplay) makes sure the
|
1938 |
+
// element is kept around.
|
1939 |
+
if (dy && mac && webkit) {
|
1940 |
+
for (var cur = e.target; cur != scroll; cur = cur.parentNode) {
|
1941 |
+
if (cur.lineObj) {
|
1942 |
+
cm.display.currentWheelTarget = cur;
|
1943 |
+
break;
|
1944 |
+
}
|
1945 |
+
}
|
1946 |
+
}
|
1947 |
+
|
1948 |
+
// On some browsers, horizontal scrolling will cause redraws to
|
1949 |
+
// happen before the gutter has been realigned, causing it to
|
1950 |
+
// wriggle around in a most unseemly way. When we have an
|
1951 |
+
// estimated pixels/delta value, we just handle horizontal
|
1952 |
+
// scrolling entirely here. It'll be slightly off from native, but
|
1953 |
+
// better than glitching out.
|
1954 |
+
if (dx && !gecko && !opera && wheelPixelsPerUnit != null) {
|
1955 |
+
if (dy)
|
1956 |
+
setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight)));
|
1957 |
+
setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)));
|
1958 |
+
e_preventDefault(e);
|
1959 |
+
display.wheelStartX = null; // Abort measurement, if in progress
|
1960 |
+
return;
|
1961 |
+
}
|
1962 |
+
|
1963 |
+
if (dy && wheelPixelsPerUnit != null) {
|
1964 |
+
var pixels = dy * wheelPixelsPerUnit;
|
1965 |
+
var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
|
1966 |
+
if (pixels < 0) top = Math.max(0, top + pixels - 50);
|
1967 |
+
else bot = Math.min(cm.doc.height, bot + pixels + 50);
|
1968 |
+
updateDisplay(cm, [], {top: top, bottom: bot});
|
1969 |
+
}
|
1970 |
+
|
1971 |
+
if (wheelSamples < 20) {
|
1972 |
+
if (display.wheelStartX == null) {
|
1973 |
+
display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
|
1974 |
+
display.wheelDX = dx; display.wheelDY = dy;
|
1975 |
+
setTimeout(function() {
|
1976 |
+
if (display.wheelStartX == null) return;
|
1977 |
+
var movedX = scroll.scrollLeft - display.wheelStartX;
|
1978 |
+
var movedY = scroll.scrollTop - display.wheelStartY;
|
1979 |
+
var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
|
1980 |
+
(movedX && display.wheelDX && movedX / display.wheelDX);
|
1981 |
+
display.wheelStartX = display.wheelStartY = null;
|
1982 |
+
if (!sample) return;
|
1983 |
+
wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
|
1984 |
+
++wheelSamples;
|
1985 |
+
}, 200);
|
1986 |
+
} else {
|
1987 |
+
display.wheelDX += dx; display.wheelDY += dy;
|
1988 |
+
}
|
1989 |
+
}
|
1990 |
+
}
|
1991 |
+
|
1992 |
+
function doHandleBinding(cm, bound, dropShift) {
|
1993 |
+
if (typeof bound == "string") {
|
1994 |
+
bound = commands[bound];
|
1995 |
+
if (!bound) return false;
|
1996 |
+
}
|
1997 |
+
// Ensure previous input has been read, so that the handler sees a
|
1998 |
+
// consistent view of the document
|
1999 |
+
if (cm.display.pollingFast && readInput(cm)) cm.display.pollingFast = false;
|
2000 |
+
var doc = cm.doc, prevShift = doc.sel.shift, done = false;
|
2001 |
+
try {
|
2002 |
+
if (isReadOnly(cm)) cm.state.suppressEdits = true;
|
2003 |
+
if (dropShift) doc.sel.shift = false;
|
2004 |
+
done = bound(cm) != Pass;
|
2005 |
+
} finally {
|
2006 |
+
doc.sel.shift = prevShift;
|
2007 |
+
cm.state.suppressEdits = false;
|
2008 |
+
}
|
2009 |
+
return done;
|
2010 |
+
}
|
2011 |
+
|
2012 |
+
function allKeyMaps(cm) {
|
2013 |
+
var maps = cm.state.keyMaps.slice(0);
|
2014 |
+
if (cm.options.extraKeys) maps.push(cm.options.extraKeys);
|
2015 |
+
maps.push(cm.options.keyMap);
|
2016 |
+
return maps;
|
2017 |
+
}
|
2018 |
+
|
2019 |
+
var maybeTransition;
|
2020 |
+
function handleKeyBinding(cm, e) {
|
2021 |
+
// Handle auto keymap transitions
|
2022 |
+
var startMap = getKeyMap(cm.options.keyMap), next = startMap.auto;
|
2023 |
+
clearTimeout(maybeTransition);
|
2024 |
+
if (next && !isModifierKey(e)) maybeTransition = setTimeout(function() {
|
2025 |
+
if (getKeyMap(cm.options.keyMap) == startMap) {
|
2026 |
+
cm.options.keyMap = (next.call ? next.call(null, cm) : next);
|
2027 |
+
keyMapChanged(cm);
|
2028 |
+
}
|
2029 |
+
}, 50);
|
2030 |
+
|
2031 |
+
var name = keyName(e, true), handled = false;
|
2032 |
+
if (!name) return false;
|
2033 |
+
var keymaps = allKeyMaps(cm);
|
2034 |
+
|
2035 |
+
if (e.shiftKey) {
|
2036 |
+
// First try to resolve full name (including 'Shift-'). Failing
|
2037 |
+
// that, see if there is a cursor-motion command (starting with
|
2038 |
+
// 'go') bound to the keyname without 'Shift-'.
|
2039 |
+
handled = lookupKey("Shift-" + name, keymaps, function(b) {return doHandleBinding(cm, b, true);})
|
2040 |
+
|| lookupKey(name, keymaps, function(b) {
|
2041 |
+
if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
|
2042 |
+
return doHandleBinding(cm, b);
|
2043 |
+
});
|
2044 |
+
} else {
|
2045 |
+
handled = lookupKey(name, keymaps, function(b) { return doHandleBinding(cm, b); });
|
2046 |
+
}
|
2047 |
+
|
2048 |
+
if (handled) {
|
2049 |
+
e_preventDefault(e);
|
2050 |
+
restartBlink(cm);
|
2051 |
+
if (ie_lt9) { e.oldKeyCode = e.keyCode; e.keyCode = 0; }
|
2052 |
+
signalLater(cm, "keyHandled", cm, name, e);
|
2053 |
+
}
|
2054 |
+
return handled;
|
2055 |
+
}
|
2056 |
+
|
2057 |
+
function handleCharBinding(cm, e, ch) {
|
2058 |
+
var handled = lookupKey("'" + ch + "'", allKeyMaps(cm),
|
2059 |
+
function(b) { return doHandleBinding(cm, b, true); });
|
2060 |
+
if (handled) {
|
2061 |
+
e_preventDefault(e);
|
2062 |
+
restartBlink(cm);
|
2063 |
+
signalLater(cm, "keyHandled", cm, "'" + ch + "'", e);
|
2064 |
+
}
|
2065 |
+
return handled;
|
2066 |
+
}
|
2067 |
+
|
2068 |
+
var lastStoppedKey = null;
|
2069 |
+
function onKeyDown(e) {
|
2070 |
+
var cm = this;
|
2071 |
+
if (!cm.state.focused) onFocus(cm);
|
2072 |
+
if (ie && e.keyCode == 27) { e.returnValue = false; }
|
2073 |
+
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
2074 |
+
var code = e.keyCode;
|
2075 |
+
// IE does strange things with escape.
|
2076 |
+
cm.doc.sel.shift = code == 16 || e.shiftKey;
|
2077 |
+
// First give onKeyEvent option a chance to handle this.
|
2078 |
+
var handled = handleKeyBinding(cm, e);
|
2079 |
+
if (opera) {
|
2080 |
+
lastStoppedKey = handled ? code : null;
|
2081 |
+
// Opera has no cut event... we try to at least catch the key combo
|
2082 |
+
if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
|
2083 |
+
cm.replaceSelection("");
|
2084 |
+
}
|
2085 |
+
}
|
2086 |
+
|
2087 |
+
function onKeyPress(e) {
|
2088 |
+
var cm = this;
|
2089 |
+
if (signalDOMEvent(cm, e) || cm.options.onKeyEvent && cm.options.onKeyEvent(cm, addStop(e))) return;
|
2090 |
+
var keyCode = e.keyCode, charCode = e.charCode;
|
2091 |
+
if (opera && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}
|
2092 |
+
if (((opera && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return;
|
2093 |
+
var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
|
2094 |
+
if (this.options.electricChars && this.doc.mode.electricChars &&
|
2095 |
+
this.options.smartIndent && !isReadOnly(this) &&
|
2096 |
+
this.doc.mode.electricChars.indexOf(ch) > -1)
|
2097 |
+
setTimeout(operation(cm, function() {indentLine(cm, cm.doc.sel.to.line, "smart");}), 75);
|
2098 |
+
if (handleCharBinding(cm, e, ch)) return;
|
2099 |
+
if (ie && !ie_lt9) cm.display.inputHasSelection = null;
|
2100 |
+
fastPoll(cm);
|
2101 |
+
}
|
2102 |
+
|
2103 |
+
function onFocus(cm) {
|
2104 |
+
if (cm.options.readOnly == "nocursor") return;
|
2105 |
+
if (!cm.state.focused) {
|
2106 |
+
signal(cm, "focus", cm);
|
2107 |
+
cm.state.focused = true;
|
2108 |
+
if (cm.display.wrapper.className.search(/\bCodeMirror-focused\b/) == -1)
|
2109 |
+
cm.display.wrapper.className += " CodeMirror-focused";
|
2110 |
+
resetInput(cm, true);
|
2111 |
+
}
|
2112 |
+
slowPoll(cm);
|
2113 |
+
restartBlink(cm);
|
2114 |
+
}
|
2115 |
+
function onBlur(cm) {
|
2116 |
+
if (cm.state.focused) {
|
2117 |
+
signal(cm, "blur", cm);
|
2118 |
+
cm.state.focused = false;
|
2119 |
+
cm.display.wrapper.className = cm.display.wrapper.className.replace(" CodeMirror-focused", "");
|
2120 |
+
}
|
2121 |
+
clearInterval(cm.display.blinker);
|
2122 |
+
setTimeout(function() {if (!cm.state.focused) cm.doc.sel.shift = false;}, 150);
|
2123 |
+
}
|
2124 |
+
|
2125 |
+
var detectingSelectAll;
|
2126 |
+
function onContextMenu(cm, e) {
|
2127 |
+
if (signalDOMEvent(cm, e, "contextmenu")) return;
|
2128 |
+
var display = cm.display, sel = cm.doc.sel;
|
2129 |
+
if (eventInWidget(display, e)) return;
|
2130 |
+
|
2131 |
+
var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
|
2132 |
+
if (!pos || opera) return; // Opera is difficult.
|
2133 |
+
if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))
|
2134 |
+
operation(cm, setSelection)(cm.doc, pos, pos);
|
2135 |
+
|
2136 |
+
var oldCSS = display.input.style.cssText;
|
2137 |
+
display.inputDiv.style.position = "absolute";
|
2138 |
+
display.input.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) +
|
2139 |
+
"px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: white; outline: none;" +
|
2140 |
+
"border-width: 0; outline: none; overflow: hidden; opacity: .05; -ms-opacity: .05; filter: alpha(opacity=5);";
|
2141 |
+
focusInput(cm);
|
2142 |
+
resetInput(cm, true);
|
2143 |
+
// Adds "Select all" to context menu in FF
|
2144 |
+
if (posEq(sel.from, sel.to)) display.input.value = display.prevInput = " ";
|
2145 |
+
|
2146 |
+
function prepareSelectAllHack() {
|
2147 |
+
if (display.input.selectionStart != null) {
|
2148 |
+
var extval = display.input.value = " " + (posEq(sel.from, sel.to) ? "" : display.input.value);
|
2149 |
+
display.prevInput = " ";
|
2150 |
+
display.input.selectionStart = 1; display.input.selectionEnd = extval.length;
|
2151 |
+
}
|
2152 |
+
}
|
2153 |
+
function rehide() {
|
2154 |
+
display.inputDiv.style.position = "relative";
|
2155 |
+
display.input.style.cssText = oldCSS;
|
2156 |
+
if (ie_lt9) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos;
|
2157 |
+
slowPoll(cm);
|
2158 |
+
|
2159 |
+
// Try to detect the user choosing select-all
|
2160 |
+
if (display.input.selectionStart != null) {
|
2161 |
+
if (!ie || ie_lt9) prepareSelectAllHack();
|
2162 |
+
clearTimeout(detectingSelectAll);
|
2163 |
+
var i = 0, poll = function(){
|
2164 |
+
if (display.prevInput == " " && display.input.selectionStart == 0)
|
2165 |
+
operation(cm, commands.selectAll)(cm);
|
2166 |
+
else if (i++ < 10) detectingSelectAll = setTimeout(poll, 500);
|
2167 |
+
else resetInput(cm);
|
2168 |
+
};
|
2169 |
+
detectingSelectAll = setTimeout(poll, 200);
|
2170 |
+
}
|
2171 |
+
}
|
2172 |
+
|
2173 |
+
if (ie && !ie_lt9) prepareSelectAllHack();
|
2174 |
+
if (captureMiddleClick) {
|
2175 |
+
e_stop(e);
|
2176 |
+
var mouseup = function() {
|
2177 |
+
off(window, "mouseup", mouseup);
|
2178 |
+
setTimeout(rehide, 20);
|
2179 |
+
};
|
2180 |
+
on(window, "mouseup", mouseup);
|
2181 |
+
} else {
|
2182 |
+
setTimeout(rehide, 50);
|
2183 |
+
}
|
2184 |
+
}
|
2185 |
+
|
2186 |
+
// UPDATING
|
2187 |
+
|
2188 |
+
var changeEnd = CodeMirror.changeEnd = function(change) {
|
2189 |
+
if (!change.text) return change.to;
|
2190 |
+
return Pos(change.from.line + change.text.length - 1,
|
2191 |
+
lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));
|
2192 |
+
};
|
2193 |
+
|
2194 |
+
// Make sure a position will be valid after the given change.
|
2195 |
+
function clipPostChange(doc, change, pos) {
|
2196 |
+
if (!posLess(change.from, pos)) return clipPos(doc, pos);
|
2197 |
+
var diff = (change.text.length - 1) - (change.to.line - change.from.line);
|
2198 |
+
if (pos.line > change.to.line + diff) {
|
2199 |
+
var preLine = pos.line - diff, lastLine = doc.first + doc.size - 1;
|
2200 |
+
if (preLine > lastLine) return Pos(lastLine, getLine(doc, lastLine).text.length);
|
2201 |
+
return clipToLen(pos, getLine(doc, preLine).text.length);
|
2202 |
+
}
|
2203 |
+
if (pos.line == change.to.line + diff)
|
2204 |
+
return clipToLen(pos, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0) +
|
2205 |
+
getLine(doc, change.to.line).text.length - change.to.ch);
|
2206 |
+
var inside = pos.line - change.from.line;
|
2207 |
+
return clipToLen(pos, change.text[inside].length + (inside ? 0 : change.from.ch));
|
2208 |
+
}
|
2209 |
+
|
2210 |
+
// Hint can be null|"end"|"start"|"around"|{anchor,head}
|
2211 |
+
function computeSelAfterChange(doc, change, hint) {
|
2212 |
+
if (hint && typeof hint == "object") // Assumed to be {anchor, head} object
|
2213 |
+
return {anchor: clipPostChange(doc, change, hint.anchor),
|
2214 |
+
head: clipPostChange(doc, change, hint.head)};
|
2215 |
+
|
2216 |
+
if (hint == "start") return {anchor: change.from, head: change.from};
|
2217 |
+
|
2218 |
+
var end = changeEnd(change);
|
2219 |
+
if (hint == "around") return {anchor: change.from, head: end};
|
2220 |
+
if (hint == "end") return {anchor: end, head: end};
|
2221 |
+
|
2222 |
+
// hint is null, leave the selection alone as much as possible
|
2223 |
+
var adjustPos = function(pos) {
|
2224 |
+
if (posLess(pos, change.from)) return pos;
|
2225 |
+
if (!posLess(change.to, pos)) return end;
|
2226 |
+
|
2227 |
+
var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
|
2228 |
+
if (pos.line == change.to.line) ch += end.ch - change.to.ch;
|
2229 |
+
return Pos(line, ch);
|
2230 |
+
};
|
2231 |
+
return {anchor: adjustPos(doc.sel.anchor), head: adjustPos(doc.sel.head)};
|
2232 |
+
}
|
2233 |
+
|
2234 |
+
function filterChange(doc, change, update) {
|
2235 |
+
var obj = {
|
2236 |
+
canceled: false,
|
2237 |
+
from: change.from,
|
2238 |
+
to: change.to,
|
2239 |
+
text: change.text,
|
2240 |
+
origin: change.origin,
|
2241 |
+
cancel: function() { this.canceled = true; }
|
2242 |
+
};
|
2243 |
+
if (update) obj.update = function(from, to, text, origin) {
|
2244 |
+
if (from) this.from = clipPos(doc, from);
|
2245 |
+
if (to) this.to = clipPos(doc, to);
|
2246 |
+
if (text) this.text = text;
|
2247 |
+
if (origin !== undefined) this.origin = origin;
|
2248 |
+
};
|
2249 |
+
signal(doc, "beforeChange", doc, obj);
|
2250 |
+
if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj);
|
2251 |
+
|
2252 |
+
if (obj.canceled) return null;
|
2253 |
+
return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin};
|
2254 |
+
}
|
2255 |
+
|
2256 |
+
// Replace the range from from to to by the strings in replacement.
|
2257 |
+
// change is a {from, to, text [, origin]} object
|
2258 |
+
function makeChange(doc, change, selUpdate, ignoreReadOnly) {
|
2259 |
+
if (doc.cm) {
|
2260 |
+
if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, selUpdate, ignoreReadOnly);
|
2261 |
+
if (doc.cm.state.suppressEdits) return;
|
2262 |
+
}
|
2263 |
+
|
2264 |
+
if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
|
2265 |
+
change = filterChange(doc, change, true);
|
2266 |
+
if (!change) return;
|
2267 |
+
}
|
2268 |
+
|
2269 |
+
// Possibly split or suppress the update based on the presence
|
2270 |
+
// of read-only spans in its range.
|
2271 |
+
var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
|
2272 |
+
if (split) {
|
2273 |
+
for (var i = split.length - 1; i >= 1; --i)
|
2274 |
+
makeChangeNoReadonly(doc, {from: split[i].from, to: split[i].to, text: [""]});
|
2275 |
+
if (split.length)
|
2276 |
+
makeChangeNoReadonly(doc, {from: split[0].from, to: split[0].to, text: change.text}, selUpdate);
|
2277 |
+
} else {
|
2278 |
+
makeChangeNoReadonly(doc, change, selUpdate);
|
2279 |
+
}
|
2280 |
+
}
|
2281 |
+
|
2282 |
+
function makeChangeNoReadonly(doc, change, selUpdate) {
|
2283 |
+
var selAfter = computeSelAfterChange(doc, change, selUpdate);
|
2284 |
+
addToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
|
2285 |
+
|
2286 |
+
makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
|
2287 |
+
var rebased = [];
|
2288 |
+
|
2289 |
+
linkedDocs(doc, function(doc, sharedHist) {
|
2290 |
+
if (!sharedHist && indexOf(rebased, doc.history) == -1) {
|
2291 |
+
rebaseHist(doc.history, change);
|
2292 |
+
rebased.push(doc.history);
|
2293 |
+
}
|
2294 |
+
makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
|
2295 |
+
});
|
2296 |
+
}
|
2297 |
+
|
2298 |
+
function makeChangeFromHistory(doc, type) {
|
2299 |
+
if (doc.cm && doc.cm.state.suppressEdits) return;
|
2300 |
+
|
2301 |
+
var hist = doc.history;
|
2302 |
+
var event = (type == "undo" ? hist.done : hist.undone).pop();
|
2303 |
+
if (!event) return;
|
2304 |
+
|
2305 |
+
var anti = {changes: [], anchorBefore: event.anchorAfter, headBefore: event.headAfter,
|
2306 |
+
anchorAfter: event.anchorBefore, headAfter: event.headBefore,
|
2307 |
+
generation: hist.generation};
|
2308 |
+
(type == "undo" ? hist.undone : hist.done).push(anti);
|
2309 |
+
hist.generation = event.generation || ++hist.maxGeneration;
|
2310 |
+
|
2311 |
+
var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
|
2312 |
+
|
2313 |
+
for (var i = event.changes.length - 1; i >= 0; --i) {
|
2314 |
+
var change = event.changes[i];
|
2315 |
+
change.origin = type;
|
2316 |
+
if (filter && !filterChange(doc, change, false)) {
|
2317 |
+
(type == "undo" ? hist.done : hist.undone).length = 0;
|
2318 |
+
return;
|
2319 |
+
}
|
2320 |
+
|
2321 |
+
anti.changes.push(historyChangeFromChange(doc, change));
|
2322 |
+
|
2323 |
+
var after = i ? computeSelAfterChange(doc, change, null)
|
2324 |
+
: {anchor: event.anchorBefore, head: event.headBefore};
|
2325 |
+
makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
|
2326 |
+
var rebased = [];
|
2327 |
+
|
2328 |
+
linkedDocs(doc, function(doc, sharedHist) {
|
2329 |
+
if (!sharedHist && indexOf(rebased, doc.history) == -1) {
|
2330 |
+
rebaseHist(doc.history, change);
|
2331 |
+
rebased.push(doc.history);
|
2332 |
+
}
|
2333 |
+
makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
|
2334 |
+
});
|
2335 |
+
}
|
2336 |
+
}
|
2337 |
+
|
2338 |
+
function shiftDoc(doc, distance) {
|
2339 |
+
function shiftPos(pos) {return Pos(pos.line + distance, pos.ch);}
|
2340 |
+
doc.first += distance;
|
2341 |
+
if (doc.cm) regChange(doc.cm, doc.first, doc.first, distance);
|
2342 |
+
doc.sel.head = shiftPos(doc.sel.head); doc.sel.anchor = shiftPos(doc.sel.anchor);
|
2343 |
+
doc.sel.from = shiftPos(doc.sel.from); doc.sel.to = shiftPos(doc.sel.to);
|
2344 |
+
}
|
2345 |
+
|
2346 |
+
function makeChangeSingleDoc(doc, change, selAfter, spans) {
|
2347 |
+
if (doc.cm && !doc.cm.curOp)
|
2348 |
+
return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);
|
2349 |
+
|
2350 |
+
if (change.to.line < doc.first) {
|
2351 |
+
shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
|
2352 |
+
return;
|
2353 |
+
}
|
2354 |
+
if (change.from.line > doc.lastLine()) return;
|
2355 |
+
|
2356 |
+
// Clip the change to the size of this doc
|
2357 |
+
if (change.from.line < doc.first) {
|
2358 |
+
var shift = change.text.length - 1 - (doc.first - change.from.line);
|
2359 |
+
shiftDoc(doc, shift);
|
2360 |
+
change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
|
2361 |
+
text: [lst(change.text)], origin: change.origin};
|
2362 |
+
}
|
2363 |
+
var last = doc.lastLine();
|
2364 |
+
if (change.to.line > last) {
|
2365 |
+
change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
|
2366 |
+
text: [change.text[0]], origin: change.origin};
|
2367 |
+
}
|
2368 |
+
|
2369 |
+
change.removed = getBetween(doc, change.from, change.to);
|
2370 |
+
|
2371 |
+
if (!selAfter) selAfter = computeSelAfterChange(doc, change, null);
|
2372 |
+
if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans, selAfter);
|
2373 |
+
else updateDoc(doc, change, spans, selAfter);
|
2374 |
+
}
|
2375 |
+
|
2376 |
+
function makeChangeSingleDocInEditor(cm, change, spans, selAfter) {
|
2377 |
+
var doc = cm.doc, display = cm.display, from = change.from, to = change.to;
|
2378 |
+
|
2379 |
+
var recomputeMaxLength = false, checkWidthStart = from.line;
|
2380 |
+
if (!cm.options.lineWrapping) {
|
2381 |
+
checkWidthStart = lineNo(visualLine(doc, getLine(doc, from.line)));
|
2382 |
+
doc.iter(checkWidthStart, to.line + 1, function(line) {
|
2383 |
+
if (line == display.maxLine) {
|
2384 |
+
recomputeMaxLength = true;
|
2385 |
+
return true;
|
2386 |
+
}
|
2387 |
+
});
|
2388 |
+
}
|
2389 |
+
|
2390 |
+
if (!posLess(doc.sel.head, change.from) && !posLess(change.to, doc.sel.head))
|
2391 |
+
cm.curOp.cursorActivity = true;
|
2392 |
+
|
2393 |
+
updateDoc(doc, change, spans, selAfter, estimateHeight(cm));
|
2394 |
+
|
2395 |
+
if (!cm.options.lineWrapping) {
|
2396 |
+
doc.iter(checkWidthStart, from.line + change.text.length, function(line) {
|
2397 |
+
var len = lineLength(doc, line);
|
2398 |
+
if (len > display.maxLineLength) {
|
2399 |
+
display.maxLine = line;
|
2400 |
+
display.maxLineLength = len;
|
2401 |
+
display.maxLineChanged = true;
|
2402 |
+
recomputeMaxLength = false;
|
2403 |
+
}
|
2404 |
+
});
|
2405 |
+
if (recomputeMaxLength) cm.curOp.updateMaxLine = true;
|
2406 |
+
}
|
2407 |
+
|
2408 |
+
// Adjust frontier, schedule worker
|
2409 |
+
doc.frontier = Math.min(doc.frontier, from.line);
|
2410 |
+
startWorker(cm, 400);
|
2411 |
+
|
2412 |
+
var lendiff = change.text.length - (to.line - from.line) - 1;
|
2413 |
+
// Remember that these lines changed, for updating the display
|
2414 |
+
regChange(cm, from.line, to.line + 1, lendiff);
|
2415 |
+
|
2416 |
+
if (hasHandler(cm, "change")) {
|
2417 |
+
var changeObj = {from: from, to: to,
|
2418 |
+
text: change.text,
|
2419 |
+
removed: change.removed,
|
2420 |
+
origin: change.origin};
|
2421 |
+
if (cm.curOp.textChanged) {
|
2422 |
+
for (var cur = cm.curOp.textChanged; cur.next; cur = cur.next) {}
|
2423 |
+
cur.next = changeObj;
|
2424 |
+
} else cm.curOp.textChanged = changeObj;
|
2425 |
+
}
|
2426 |
+
}
|
2427 |
+
|
2428 |
+
function replaceRange(doc, code, from, to, origin) {
|
2429 |
+
if (!to) to = from;
|
2430 |
+
if (posLess(to, from)) { var tmp = to; to = from; from = tmp; }
|
2431 |
+
if (typeof code == "string") code = splitLines(code);
|
2432 |
+
makeChange(doc, {from: from, to: to, text: code, origin: origin}, null);
|
2433 |
+
}
|
2434 |
+
|
2435 |
+
// POSITION OBJECT
|
2436 |
+
|
2437 |
+
function Pos(line, ch) {
|
2438 |
+
if (!(this instanceof Pos)) return new Pos(line, ch);
|
2439 |
+
this.line = line; this.ch = ch;
|
2440 |
+
}
|
2441 |
+
CodeMirror.Pos = Pos;
|
2442 |
+
|
2443 |
+
function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}
|
2444 |
+
function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}
|
2445 |
+
function copyPos(x) {return Pos(x.line, x.ch);}
|
2446 |
+
|
2447 |
+
// SELECTION
|
2448 |
+
|
2449 |
+
function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));}
|
2450 |
+
function clipPos(doc, pos) {
|
2451 |
+
if (pos.line < doc.first) return Pos(doc.first, 0);
|
2452 |
+
var last = doc.first + doc.size - 1;
|
2453 |
+
if (pos.line > last) return Pos(last, getLine(doc, last).text.length);
|
2454 |
+
return clipToLen(pos, getLine(doc, pos.line).text.length);
|
2455 |
+
}
|
2456 |
+
function clipToLen(pos, linelen) {
|
2457 |
+
var ch = pos.ch;
|
2458 |
+
if (ch == null || ch > linelen) return Pos(pos.line, linelen);
|
2459 |
+
else if (ch < 0) return Pos(pos.line, 0);
|
2460 |
+
else return pos;
|
2461 |
+
}
|
2462 |
+
function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;}
|
2463 |
+
|
2464 |
+
// If shift is held, this will move the selection anchor. Otherwise,
|
2465 |
+
// it'll set the whole selection.
|
2466 |
+
function extendSelection(doc, pos, other, bias) {
|
2467 |
+
if (doc.sel.shift || doc.sel.extend) {
|
2468 |
+
var anchor = doc.sel.anchor;
|
2469 |
+
if (other) {
|
2470 |
+
var posBefore = posLess(pos, anchor);
|
2471 |
+
if (posBefore != posLess(other, anchor)) {
|
2472 |
+
anchor = pos;
|
2473 |
+
pos = other;
|
2474 |
+
} else if (posBefore != posLess(pos, other)) {
|
2475 |
+
pos = other;
|
2476 |
+
}
|
2477 |
+
}
|
2478 |
+
setSelection(doc, anchor, pos, bias);
|
2479 |
+
} else {
|
2480 |
+
setSelection(doc, pos, other || pos, bias);
|
2481 |
+
}
|
2482 |
+
if (doc.cm) doc.cm.curOp.userSelChange = true;
|
2483 |
+
}
|
2484 |
+
|
2485 |
+
function filterSelectionChange(doc, anchor, head) {
|
2486 |
+
var obj = {anchor: anchor, head: head};
|
2487 |
+
signal(doc, "beforeSelectionChange", doc, obj);
|
2488 |
+
if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj);
|
2489 |
+
obj.anchor = clipPos(doc, obj.anchor); obj.head = clipPos(doc, obj.head);
|
2490 |
+
return obj;
|
2491 |
+
}
|
2492 |
+
|
2493 |
+
// Update the selection. Last two args are only used by
|
2494 |
+
// updateDoc, since they have to be expressed in the line
|
2495 |
+
// numbers before the update.
|
2496 |
+
function setSelection(doc, anchor, head, bias, checkAtomic) {
|
2497 |
+
if (!checkAtomic && hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) {
|
2498 |
+
var filtered = filterSelectionChange(doc, anchor, head);
|
2499 |
+
head = filtered.head;
|
2500 |
+
anchor = filtered.anchor;
|
2501 |
+
}
|
2502 |
+
|
2503 |
+
var sel = doc.sel;
|
2504 |
+
sel.goalColumn = null;
|
2505 |
+
// Skip over atomic spans.
|
2506 |
+
if (checkAtomic || !posEq(anchor, sel.anchor))
|
2507 |
+
anchor = skipAtomic(doc, anchor, bias, checkAtomic != "push");
|
2508 |
+
if (checkAtomic || !posEq(head, sel.head))
|
2509 |
+
head = skipAtomic(doc, head, bias, checkAtomic != "push");
|
2510 |
+
|
2511 |
+
if (posEq(sel.anchor, anchor) && posEq(sel.head, head)) return;
|
2512 |
+
|
2513 |
+
sel.anchor = anchor; sel.head = head;
|
2514 |
+
var inv = posLess(head, anchor);
|
2515 |
+
sel.from = inv ? head : anchor;
|
2516 |
+
sel.to = inv ? anchor : head;
|
2517 |
+
|
2518 |
+
if (doc.cm)
|
2519 |
+
doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged =
|
2520 |
+
doc.cm.curOp.cursorActivity = true;
|
2521 |
+
|
2522 |
+
signalLater(doc, "cursorActivity", doc);
|
2523 |
+
}
|
2524 |
+
|
2525 |
+
function reCheckSelection(cm) {
|
2526 |
+
setSelection(cm.doc, cm.doc.sel.from, cm.doc.sel.to, null, "push");
|
2527 |
+
}
|
2528 |
+
|
2529 |
+
function skipAtomic(doc, pos, bias, mayClear) {
|
2530 |
+
var flipped = false, curPos = pos;
|
2531 |
+
var dir = bias || 1;
|
2532 |
+
doc.cantEdit = false;
|
2533 |
+
search: for (;;) {
|
2534 |
+
var line = getLine(doc, curPos.line);
|
2535 |
+
if (line.markedSpans) {
|
2536 |
+
for (var i = 0; i < line.markedSpans.length; ++i) {
|
2537 |
+
var sp = line.markedSpans[i], m = sp.marker;
|
2538 |
+
if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) &&
|
2539 |
+
(sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) {
|
2540 |
+
if (mayClear) {
|
2541 |
+
signal(m, "beforeCursorEnter");
|
2542 |
+
if (m.explicitlyCleared) {
|
2543 |
+
if (!line.markedSpans) break;
|
2544 |
+
else {--i; continue;}
|
2545 |
+
}
|
2546 |
+
}
|
2547 |
+
if (!m.atomic) continue;
|
2548 |
+
var newPos = m.find()[dir < 0 ? "from" : "to"];
|
2549 |
+
if (posEq(newPos, curPos)) {
|
2550 |
+
newPos.ch += dir;
|
2551 |
+
if (newPos.ch < 0) {
|
2552 |
+
if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1));
|
2553 |
+
else newPos = null;
|
2554 |
+
} else if (newPos.ch > line.text.length) {
|
2555 |
+
if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0);
|
2556 |
+
else newPos = null;
|
2557 |
+
}
|
2558 |
+
if (!newPos) {
|
2559 |
+
if (flipped) {
|
2560 |
+
// Driven in a corner -- no valid cursor position found at all
|
2561 |
+
// -- try again *with* clearing, if we didn't already
|
2562 |
+
if (!mayClear) return skipAtomic(doc, pos, bias, true);
|
2563 |
+
// Otherwise, turn off editing until further notice, and return the start of the doc
|
2564 |
+
doc.cantEdit = true;
|
2565 |
+
return Pos(doc.first, 0);
|
2566 |
+
}
|
2567 |
+
flipped = true; newPos = pos; dir = -dir;
|
2568 |
+
}
|
2569 |
+
}
|
2570 |
+
curPos = newPos;
|
2571 |
+
continue search;
|
2572 |
+
}
|
2573 |
+
}
|
2574 |
+
}
|
2575 |
+
return curPos;
|
2576 |
+
}
|
2577 |
+
}
|
2578 |
+
|
2579 |
+
// SCROLLING
|
2580 |
+
|
2581 |
+
function scrollCursorIntoView(cm) {
|
2582 |
+
var coords = scrollPosIntoView(cm, cm.doc.sel.head, cm.options.cursorScrollMargin);
|
2583 |
+
if (!cm.state.focused) return;
|
2584 |
+
var display = cm.display, box = getRect(display.sizer), doScroll = null;
|
2585 |
+
if (coords.top + box.top < 0) doScroll = true;
|
2586 |
+
else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false;
|
2587 |
+
if (doScroll != null && !phantom) {
|
2588 |
+
var hidden = display.cursor.style.display == "none";
|
2589 |
+
if (hidden) {
|
2590 |
+
display.cursor.style.display = "";
|
2591 |
+
display.cursor.style.left = coords.left + "px";
|
2592 |
+
display.cursor.style.top = (coords.top - display.viewOffset) + "px";
|
2593 |
+
}
|
2594 |
+
display.cursor.scrollIntoView(doScroll);
|
2595 |
+
if (hidden) display.cursor.style.display = "none";
|
2596 |
+
}
|
2597 |
+
}
|
2598 |
+
|
2599 |
+
function scrollPosIntoView(cm, pos, margin) {
|
2600 |
+
if (margin == null) margin = 0;
|
2601 |
+
for (;;) {
|
2602 |
+
var changed = false, coords = cursorCoords(cm, pos);
|
2603 |
+
var scrollPos = calculateScrollPos(cm, coords.left, coords.top - margin, coords.left, coords.bottom + margin);
|
2604 |
+
var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
|
2605 |
+
if (scrollPos.scrollTop != null) {
|
2606 |
+
setScrollTop(cm, scrollPos.scrollTop);
|
2607 |
+
if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true;
|
2608 |
+
}
|
2609 |
+
if (scrollPos.scrollLeft != null) {
|
2610 |
+
setScrollLeft(cm, scrollPos.scrollLeft);
|
2611 |
+
if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true;
|
2612 |
+
}
|
2613 |
+
if (!changed) return coords;
|
2614 |
+
}
|
2615 |
+
}
|
2616 |
+
|
2617 |
+
function scrollIntoView(cm, x1, y1, x2, y2) {
|
2618 |
+
var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2);
|
2619 |
+
if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop);
|
2620 |
+
if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft);
|
2621 |
+
}
|
2622 |
+
|
2623 |
+
function calculateScrollPos(cm, x1, y1, x2, y2) {
|
2624 |
+
var display = cm.display, snapMargin = textHeight(cm.display);
|
2625 |
+
if (y1 < 0) y1 = 0;
|
2626 |
+
var screen = display.scroller.clientHeight - scrollerCutOff, screentop = display.scroller.scrollTop, result = {};
|
2627 |
+
var docBottom = cm.doc.height + paddingVert(display);
|
2628 |
+
var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin;
|
2629 |
+
if (y1 < screentop) {
|
2630 |
+
result.scrollTop = atTop ? 0 : y1;
|
2631 |
+
} else if (y2 > screentop + screen) {
|
2632 |
+
var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen);
|
2633 |
+
if (newTop != screentop) result.scrollTop = newTop;
|
2634 |
+
}
|
2635 |
+
|
2636 |
+
var screenw = display.scroller.clientWidth - scrollerCutOff, screenleft = display.scroller.scrollLeft;
|
2637 |
+
x1 += display.gutters.offsetWidth; x2 += display.gutters.offsetWidth;
|
2638 |
+
var gutterw = display.gutters.offsetWidth;
|
2639 |
+
var atLeft = x1 < gutterw + 10;
|
2640 |
+
if (x1 < screenleft + gutterw || atLeft) {
|
2641 |
+
if (atLeft) x1 = 0;
|
2642 |
+
result.scrollLeft = Math.max(0, x1 - 10 - gutterw);
|
2643 |
+
} else if (x2 > screenw + screenleft - 3) {
|
2644 |
+
result.scrollLeft = x2 + 10 - screenw;
|
2645 |
+
}
|
2646 |
+
return result;
|
2647 |
+
}
|
2648 |
+
|
2649 |
+
function updateScrollPos(cm, left, top) {
|
2650 |
+
cm.curOp.updateScrollPos = {scrollLeft: left == null ? cm.doc.scrollLeft : left,
|
2651 |
+
scrollTop: top == null ? cm.doc.scrollTop : top};
|
2652 |
+
}
|
2653 |
+
|
2654 |
+
function addToScrollPos(cm, left, top) {
|
2655 |
+
var pos = cm.curOp.updateScrollPos || (cm.curOp.updateScrollPos = {scrollLeft: cm.doc.scrollLeft, scrollTop: cm.doc.scrollTop});
|
2656 |
+
var scroll = cm.display.scroller;
|
2657 |
+
pos.scrollTop = Math.max(0, Math.min(scroll.scrollHeight - scroll.clientHeight, pos.scrollTop + top));
|
2658 |
+
pos.scrollLeft = Math.max(0, Math.min(scroll.scrollWidth - scroll.clientWidth, pos.scrollLeft + left));
|
2659 |
+
}
|
2660 |
+
|
2661 |
+
// API UTILITIES
|
2662 |
+
|
2663 |
+
function indentLine(cm, n, how, aggressive) {
|
2664 |
+
var doc = cm.doc;
|
2665 |
+
if (how == null) how = "add";
|
2666 |
+
if (how == "smart") {
|
2667 |
+
if (!cm.doc.mode.indent) how = "prev";
|
2668 |
+
else var state = getStateBefore(cm, n);
|
2669 |
+
}
|
2670 |
+
|
2671 |
+
var tabSize = cm.options.tabSize;
|
2672 |
+
var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
|
2673 |
+
var curSpaceString = line.text.match(/^\s*/)[0], indentation;
|
2674 |
+
if (how == "smart") {
|
2675 |
+
indentation = cm.doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
|
2676 |
+
if (indentation == Pass) {
|
2677 |
+
if (!aggressive) return;
|
2678 |
+
how = "prev";
|
2679 |
+
}
|
2680 |
+
}
|
2681 |
+
if (how == "prev") {
|
2682 |
+
if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize);
|
2683 |
+
else indentation = 0;
|
2684 |
+
} else if (how == "add") {
|
2685 |
+
indentation = curSpace + cm.options.indentUnit;
|
2686 |
+
} else if (how == "subtract") {
|
2687 |
+
indentation = curSpace - cm.options.indentUnit;
|
2688 |
+
} else if (typeof how == "number") {
|
2689 |
+
indentation = curSpace + how;
|
2690 |
+
}
|
2691 |
+
indentation = Math.max(0, indentation);
|
2692 |
+
|
2693 |
+
var indentString = "", pos = 0;
|
2694 |
+
if (cm.options.indentWithTabs)
|
2695 |
+
for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";}
|
2696 |
+
if (pos < indentation) indentString += spaceStr(indentation - pos);
|
2697 |
+
|
2698 |
+
if (indentString != curSpaceString)
|
2699 |
+
replaceRange(cm.doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
|
2700 |
+
line.stateAfter = null;
|
2701 |
+
}
|
2702 |
+
|
2703 |
+
function changeLine(cm, handle, op) {
|
2704 |
+
var no = handle, line = handle, doc = cm.doc;
|
2705 |
+
if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle));
|
2706 |
+
else no = lineNo(handle);
|
2707 |
+
if (no == null) return null;
|
2708 |
+
if (op(line, no)) regChange(cm, no, no + 1);
|
2709 |
+
else return null;
|
2710 |
+
return line;
|
2711 |
+
}
|
2712 |
+
|
2713 |
+
function findPosH(doc, pos, dir, unit, visually) {
|
2714 |
+
var line = pos.line, ch = pos.ch, origDir = dir;
|
2715 |
+
var lineObj = getLine(doc, line);
|
2716 |
+
var possible = true;
|
2717 |
+
function findNextLine() {
|
2718 |
+
var l = line + dir;
|
2719 |
+
if (l < doc.first || l >= doc.first + doc.size) return (possible = false);
|
2720 |
+
line = l;
|
2721 |
+
return lineObj = getLine(doc, l);
|
2722 |
+
}
|
2723 |
+
function moveOnce(boundToLine) {
|
2724 |
+
var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true);
|
2725 |
+
if (next == null) {
|
2726 |
+
if (!boundToLine && findNextLine()) {
|
2727 |
+
if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj);
|
2728 |
+
else ch = dir < 0 ? lineObj.text.length : 0;
|
2729 |
+
} else return (possible = false);
|
2730 |
+
} else ch = next;
|
2731 |
+
return true;
|
2732 |
+
}
|
2733 |
+
|
2734 |
+
if (unit == "char") moveOnce();
|
2735 |
+
else if (unit == "column") moveOnce(true);
|
2736 |
+
else if (unit == "word" || unit == "group") {
|
2737 |
+
var sawType = null, group = unit == "group";
|
2738 |
+
for (var first = true;; first = false) {
|
2739 |
+
if (dir < 0 && !moveOnce(!first)) break;
|
2740 |
+
var cur = lineObj.text.charAt(ch) || "\n";
|
2741 |
+
var type = isWordChar(cur) ? "w"
|
2742 |
+
: !group ? null
|
2743 |
+
: /\s/.test(cur) ? null
|
2744 |
+
: "p";
|
2745 |
+
if (sawType && sawType != type) {
|
2746 |
+
if (dir < 0) {dir = 1; moveOnce();}
|
2747 |
+
break;
|
2748 |
+
}
|
2749 |
+
if (type) sawType = type;
|
2750 |
+
if (dir > 0 && !moveOnce(!first)) break;
|
2751 |
+
}
|
2752 |
+
}
|
2753 |
+
var result = skipAtomic(doc, Pos(line, ch), origDir, true);
|
2754 |
+
if (!possible) result.hitSide = true;
|
2755 |
+
return result;
|
2756 |
+
}
|
2757 |
+
|
2758 |
+
function findPosV(cm, pos, dir, unit) {
|
2759 |
+
var doc = cm.doc, x = pos.left, y;
|
2760 |
+
if (unit == "page") {
|
2761 |
+
var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
|
2762 |
+
y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display));
|
2763 |
+
} else if (unit == "line") {
|
2764 |
+
y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
|
2765 |
+
}
|
2766 |
+
for (;;) {
|
2767 |
+
var target = coordsChar(cm, x, y);
|
2768 |
+
if (!target.outside) break;
|
2769 |
+
if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; }
|
2770 |
+
y += dir * 5;
|
2771 |
+
}
|
2772 |
+
return target;
|
2773 |
+
}
|
2774 |
+
|
2775 |
+
function findWordAt(line, pos) {
|
2776 |
+
var start = pos.ch, end = pos.ch;
|
2777 |
+
if (line) {
|
2778 |
+
if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end;
|
2779 |
+
var startChar = line.charAt(start);
|
2780 |
+
var check = isWordChar(startChar) ? isWordChar
|
2781 |
+
: /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);}
|
2782 |
+
: function(ch) {return !/\s/.test(ch) && !isWordChar(ch);};
|
2783 |
+
while (start > 0 && check(line.charAt(start - 1))) --start;
|
2784 |
+
while (end < line.length && check(line.charAt(end))) ++end;
|
2785 |
+
}
|
2786 |
+
return {from: Pos(pos.line, start), to: Pos(pos.line, end)};
|
2787 |
+
}
|
2788 |
+
|
2789 |
+
function selectLine(cm, line) {
|
2790 |
+
extendSelection(cm.doc, Pos(line, 0), clipPos(cm.doc, Pos(line + 1, 0)));
|
2791 |
+
}
|
2792 |
+
|
2793 |
+
// PROTOTYPE
|
2794 |
+
|
2795 |
+
// The publicly visible API. Note that operation(null, f) means
|
2796 |
+
// 'wrap f in an operation, performed on its `this` parameter'
|
2797 |
+
|
2798 |
+
CodeMirror.prototype = {
|
2799 |
+
constructor: CodeMirror,
|
2800 |
+
focus: function(){window.focus(); focusInput(this); onFocus(this); fastPoll(this);},
|
2801 |
+
|
2802 |
+
setOption: function(option, value) {
|
2803 |
+
var options = this.options, old = options[option];
|
2804 |
+
if (options[option] == value && option != "mode") return;
|
2805 |
+
options[option] = value;
|
2806 |
+
if (optionHandlers.hasOwnProperty(option))
|
2807 |
+
operation(this, optionHandlers[option])(this, value, old);
|
2808 |
+
},
|
2809 |
+
|
2810 |
+
getOption: function(option) {return this.options[option];},
|
2811 |
+
getDoc: function() {return this.doc;},
|
2812 |
+
|
2813 |
+
addKeyMap: function(map, bottom) {
|
2814 |
+
this.state.keyMaps[bottom ? "push" : "unshift"](map);
|
2815 |
+
},
|
2816 |
+
removeKeyMap: function(map) {
|
2817 |
+
var maps = this.state.keyMaps;
|
2818 |
+
for (var i = 0; i < maps.length; ++i)
|
2819 |
+
if (maps[i] == map || (typeof maps[i] != "string" && maps[i].name == map)) {
|
2820 |
+
maps.splice(i, 1);
|
2821 |
+
return true;
|
2822 |
+
}
|
2823 |
+
},
|
2824 |
+
|
2825 |
+
addOverlay: operation(null, function(spec, options) {
|
2826 |
+
var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
|
2827 |
+
if (mode.startState) throw new Error("Overlays may not be stateful.");
|
2828 |
+
this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque});
|
2829 |
+
this.state.modeGen++;
|
2830 |
+
regChange(this);
|
2831 |
+
}),
|
2832 |
+
removeOverlay: operation(null, function(spec) {
|
2833 |
+
var overlays = this.state.overlays;
|
2834 |
+
for (var i = 0; i < overlays.length; ++i) {
|
2835 |
+
var cur = overlays[i].modeSpec;
|
2836 |
+
if (cur == spec || typeof spec == "string" && cur.name == spec) {
|
2837 |
+
overlays.splice(i, 1);
|
2838 |
+
this.state.modeGen++;
|
2839 |
+
regChange(this);
|
2840 |
+
return;
|
2841 |
+
}
|
2842 |
+
}
|
2843 |
+
}),
|
2844 |
+
|
2845 |
+
indentLine: operation(null, function(n, dir, aggressive) {
|
2846 |
+
if (typeof dir != "string" && typeof dir != "number") {
|
2847 |
+
if (dir == null) dir = this.options.smartIndent ? "smart" : "prev";
|
2848 |
+
else dir = dir ? "add" : "subtract";
|
2849 |
+
}
|
2850 |
+
if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive);
|
2851 |
+
}),
|
2852 |
+
indentSelection: operation(null, function(how) {
|
2853 |
+
var sel = this.doc.sel;
|
2854 |
+
if (posEq(sel.from, sel.to)) return indentLine(this, sel.from.line, how);
|
2855 |
+
var e = sel.to.line - (sel.to.ch ? 0 : 1);
|
2856 |
+
for (var i = sel.from.line; i <= e; ++i) indentLine(this, i, how);
|
2857 |
+
}),
|
2858 |
+
|
2859 |
+
// Fetch the parser token for a given character. Useful for hacks
|
2860 |
+
// that want to inspect the mode state (say, for completion).
|
2861 |
+
getTokenAt: function(pos, precise) {
|
2862 |
+
var doc = this.doc;
|
2863 |
+
pos = clipPos(doc, pos);
|
2864 |
+
var state = getStateBefore(this, pos.line, precise), mode = this.doc.mode;
|
2865 |
+
var line = getLine(doc, pos.line);
|
2866 |
+
var stream = new StringStream(line.text, this.options.tabSize);
|
2867 |
+
while (stream.pos < pos.ch && !stream.eol()) {
|
2868 |
+
stream.start = stream.pos;
|
2869 |
+
var style = mode.token(stream, state);
|
2870 |
+
}
|
2871 |
+
return {start: stream.start,
|
2872 |
+
end: stream.pos,
|
2873 |
+
string: stream.current(),
|
2874 |
+
className: style || null, // Deprecated, use 'type' instead
|
2875 |
+
type: style || null,
|
2876 |
+
state: state};
|
2877 |
+
},
|
2878 |
+
|
2879 |
+
getTokenTypeAt: function(pos) {
|
2880 |
+
pos = clipPos(this.doc, pos);
|
2881 |
+
var styles = getLineStyles(this, getLine(this.doc, pos.line));
|
2882 |
+
var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
|
2883 |
+
if (ch == 0) return styles[2];
|
2884 |
+
for (;;) {
|
2885 |
+
var mid = (before + after) >> 1;
|
2886 |
+
if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid;
|
2887 |
+
else if (styles[mid * 2 + 1] < ch) before = mid + 1;
|
2888 |
+
else return styles[mid * 2 + 2];
|
2889 |
+
}
|
2890 |
+
},
|
2891 |
+
|
2892 |
+
getModeAt: function(pos) {
|
2893 |
+
var mode = this.doc.mode;
|
2894 |
+
if (!mode.innerMode) return mode;
|
2895 |
+
return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;
|
2896 |
+
},
|
2897 |
+
|
2898 |
+
getHelper: function(pos, type) {
|
2899 |
+
if (!helpers.hasOwnProperty(type)) return;
|
2900 |
+
var help = helpers[type], mode = this.getModeAt(pos);
|
2901 |
+
return mode[type] && help[mode[type]] ||
|
2902 |
+
mode.helperType && help[mode.helperType] ||
|
2903 |
+
help[mode.name];
|
2904 |
+
},
|
2905 |
+
|
2906 |
+
getStateAfter: function(line, precise) {
|
2907 |
+
var doc = this.doc;
|
2908 |
+
line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
|
2909 |
+
return getStateBefore(this, line + 1, precise);
|
2910 |
+
},
|
2911 |
+
|
2912 |
+
cursorCoords: function(start, mode) {
|
2913 |
+
var pos, sel = this.doc.sel;
|
2914 |
+
if (start == null) pos = sel.head;
|
2915 |
+
else if (typeof start == "object") pos = clipPos(this.doc, start);
|
2916 |
+
else pos = start ? sel.from : sel.to;
|
2917 |
+
return cursorCoords(this, pos, mode || "page");
|
2918 |
+
},
|
2919 |
+
|
2920 |
+
charCoords: function(pos, mode) {
|
2921 |
+
return charCoords(this, clipPos(this.doc, pos), mode || "page");
|
2922 |
+
},
|
2923 |
+
|
2924 |
+
coordsChar: function(coords, mode) {
|
2925 |
+
coords = fromCoordSystem(this, coords, mode || "page");
|
2926 |
+
return coordsChar(this, coords.left, coords.top);
|
2927 |
+
},
|
2928 |
+
|
2929 |
+
lineAtHeight: function(height, mode) {
|
2930 |
+
height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
|
2931 |
+
return lineAtHeight(this.doc, height + this.display.viewOffset);
|
2932 |
+
},
|
2933 |
+
heightAtLine: function(line, mode) {
|
2934 |
+
var end = false, last = this.doc.first + this.doc.size - 1;
|
2935 |
+
if (line < this.doc.first) line = this.doc.first;
|
2936 |
+
else if (line > last) { line = last; end = true; }
|
2937 |
+
var lineObj = getLine(this.doc, line);
|
2938 |
+
return intoCoordSystem(this, getLine(this.doc, line), {top: 0, left: 0}, mode || "page").top +
|
2939 |
+
(end ? lineObj.height : 0);
|
2940 |
+
},
|
2941 |
+
|
2942 |
+
defaultTextHeight: function() { return textHeight(this.display); },
|
2943 |
+
defaultCharWidth: function() { return charWidth(this.display); },
|
2944 |
+
|
2945 |
+
setGutterMarker: operation(null, function(line, gutterID, value) {
|
2946 |
+
return changeLine(this, line, function(line) {
|
2947 |
+
var markers = line.gutterMarkers || (line.gutterMarkers = {});
|
2948 |
+
markers[gutterID] = value;
|
2949 |
+
if (!value && isEmpty(markers)) line.gutterMarkers = null;
|
2950 |
+
return true;
|
2951 |
+
});
|
2952 |
+
}),
|
2953 |
+
|
2954 |
+
clearGutter: operation(null, function(gutterID) {
|
2955 |
+
var cm = this, doc = cm.doc, i = doc.first;
|
2956 |
+
doc.iter(function(line) {
|
2957 |
+
if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
|
2958 |
+
line.gutterMarkers[gutterID] = null;
|
2959 |
+
regChange(cm, i, i + 1);
|
2960 |
+
if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null;
|
2961 |
+
}
|
2962 |
+
++i;
|
2963 |
+
});
|
2964 |
+
}),
|
2965 |
+
|
2966 |
+
addLineClass: operation(null, function(handle, where, cls) {
|
2967 |
+
return changeLine(this, handle, function(line) {
|
2968 |
+
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
2969 |
+
if (!line[prop]) line[prop] = cls;
|
2970 |
+
else if (new RegExp("(?:^|\\s)" + cls + "(?:$|\\s)").test(line[prop])) return false;
|
2971 |
+
else line[prop] += " " + cls;
|
2972 |
+
return true;
|
2973 |
+
});
|
2974 |
+
}),
|
2975 |
+
|
2976 |
+
removeLineClass: operation(null, function(handle, where, cls) {
|
2977 |
+
return changeLine(this, handle, function(line) {
|
2978 |
+
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
2979 |
+
var cur = line[prop];
|
2980 |
+
if (!cur) return false;
|
2981 |
+
else if (cls == null) line[prop] = null;
|
2982 |
+
else {
|
2983 |
+
var found = cur.match(new RegExp("(?:^|\\s+)" + cls + "(?:$|\\s+)"));
|
2984 |
+
if (!found) return false;
|
2985 |
+
var end = found.index + found[0].length;
|
2986 |
+
line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
|
2987 |
+
}
|
2988 |
+
return true;
|
2989 |
+
});
|
2990 |
+
}),
|
2991 |
+
|
2992 |
+
addLineWidget: operation(null, function(handle, node, options) {
|
2993 |
+
return addLineWidget(this, handle, node, options);
|
2994 |
+
}),
|
2995 |
+
|
2996 |
+
removeLineWidget: function(widget) { widget.clear(); },
|
2997 |
+
|
2998 |
+
lineInfo: function(line) {
|
2999 |
+
if (typeof line == "number") {
|
3000 |
+
if (!isLine(this.doc, line)) return null;
|
3001 |
+
var n = line;
|
3002 |
+
line = getLine(this.doc, line);
|
3003 |
+
if (!line) return null;
|
3004 |
+
} else {
|
3005 |
+
var n = lineNo(line);
|
3006 |
+
if (n == null) return null;
|
3007 |
+
}
|
3008 |
+
return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
|
3009 |
+
textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
|
3010 |
+
widgets: line.widgets};
|
3011 |
+
},
|
3012 |
+
|
3013 |
+
getViewport: function() { return {from: this.display.showingFrom, to: this.display.showingTo};},
|
3014 |
+
|
3015 |
+
addWidget: function(pos, node, scroll, vert, horiz) {
|
3016 |
+
var display = this.display;
|
3017 |
+
pos = cursorCoords(this, clipPos(this.doc, pos));
|
3018 |
+
var top = pos.bottom, left = pos.left;
|
3019 |
+
node.style.position = "absolute";
|
3020 |
+
display.sizer.appendChild(node);
|
3021 |
+
if (vert == "over") {
|
3022 |
+
top = pos.top;
|
3023 |
+
} else if (vert == "above" || vert == "near") {
|
3024 |
+
var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
|
3025 |
+
hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
|
3026 |
+
// Default to positioning above (if specified and possible); otherwise default to positioning below
|
3027 |
+
if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
|
3028 |
+
top = pos.top - node.offsetHeight;
|
3029 |
+
else if (pos.bottom + node.offsetHeight <= vspace)
|
3030 |
+
top = pos.bottom;
|
3031 |
+
if (left + node.offsetWidth > hspace)
|
3032 |
+
left = hspace - node.offsetWidth;
|
3033 |
+
}
|
3034 |
+
node.style.top = top + "px";
|
3035 |
+
node.style.left = node.style.right = "";
|
3036 |
+
if (horiz == "right") {
|
3037 |
+
left = display.sizer.clientWidth - node.offsetWidth;
|
3038 |
+
node.style.right = "0px";
|
3039 |
+
} else {
|
3040 |
+
if (horiz == "left") left = 0;
|
3041 |
+
else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2;
|
3042 |
+
node.style.left = left + "px";
|
3043 |
+
}
|
3044 |
+
if (scroll)
|
3045 |
+
scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight);
|
3046 |
+
},
|
3047 |
+
|
3048 |
+
triggerOnKeyDown: operation(null, onKeyDown),
|
3049 |
+
|
3050 |
+
execCommand: function(cmd) {return commands[cmd](this);},
|
3051 |
+
|
3052 |
+
findPosH: function(from, amount, unit, visually) {
|
3053 |
+
var dir = 1;
|
3054 |
+
if (amount < 0) { dir = -1; amount = -amount; }
|
3055 |
+
for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {
|
3056 |
+
cur = findPosH(this.doc, cur, dir, unit, visually);
|
3057 |
+
if (cur.hitSide) break;
|
3058 |
+
}
|
3059 |
+
return cur;
|
3060 |
+
},
|
3061 |
+
|
3062 |
+
moveH: operation(null, function(dir, unit) {
|
3063 |
+
var sel = this.doc.sel, pos;
|
3064 |
+
if (sel.shift || sel.extend || posEq(sel.from, sel.to))
|
3065 |
+
pos = findPosH(this.doc, sel.head, dir, unit, this.options.rtlMoveVisually);
|
3066 |
+
else
|
3067 |
+
pos = dir < 0 ? sel.from : sel.to;
|
3068 |
+
extendSelection(this.doc, pos, pos, dir);
|
3069 |
+
}),
|
3070 |
+
|
3071 |
+
deleteH: operation(null, function(dir, unit) {
|
3072 |
+
var sel = this.doc.sel;
|
3073 |
+
if (!posEq(sel.from, sel.to)) replaceRange(this.doc, "", sel.from, sel.to, "+delete");
|
3074 |
+
else replaceRange(this.doc, "", sel.from, findPosH(this.doc, sel.head, dir, unit, false), "+delete");
|
3075 |
+
this.curOp.userSelChange = true;
|
3076 |
+
}),
|
3077 |
+
|
3078 |
+
findPosV: function(from, amount, unit, goalColumn) {
|
3079 |
+
var dir = 1, x = goalColumn;
|
3080 |
+
if (amount < 0) { dir = -1; amount = -amount; }
|
3081 |
+
for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) {
|
3082 |
+
var coords = cursorCoords(this, cur, "div");
|
3083 |
+
if (x == null) x = coords.left;
|
3084 |
+
else coords.left = x;
|
3085 |
+
cur = findPosV(this, coords, dir, unit);
|
3086 |
+
if (cur.hitSide) break;
|
3087 |
+
}
|
3088 |
+
return cur;
|
3089 |
+
},
|
3090 |
+
|
3091 |
+
moveV: operation(null, function(dir, unit) {
|
3092 |
+
var sel = this.doc.sel;
|
3093 |
+
var pos = cursorCoords(this, sel.head, "div");
|
3094 |
+
if (sel.goalColumn != null) pos.left = sel.goalColumn;
|
3095 |
+
var target = findPosV(this, pos, dir, unit);
|
3096 |
+
|
3097 |
+
if (unit == "page") addToScrollPos(this, 0, charCoords(this, target, "div").top - pos.top);
|
3098 |
+
extendSelection(this.doc, target, target, dir);
|
3099 |
+
sel.goalColumn = pos.left;
|
3100 |
+
}),
|
3101 |
+
|
3102 |
+
toggleOverwrite: function(value) {
|
3103 |
+
if (value != null && value == this.state.overwrite) return;
|
3104 |
+
if (this.state.overwrite = !this.state.overwrite)
|
3105 |
+
this.display.cursor.className += " CodeMirror-overwrite";
|
3106 |
+
else
|
3107 |
+
this.display.cursor.className = this.display.cursor.className.replace(" CodeMirror-overwrite", "");
|
3108 |
+
},
|
3109 |
+
hasFocus: function() { return this.state.focused; },
|
3110 |
+
|
3111 |
+
scrollTo: operation(null, function(x, y) {
|
3112 |
+
updateScrollPos(this, x, y);
|
3113 |
+
}),
|
3114 |
+
getScrollInfo: function() {
|
3115 |
+
var scroller = this.display.scroller, co = scrollerCutOff;
|
3116 |
+
return {left: scroller.scrollLeft, top: scroller.scrollTop,
|
3117 |
+
height: scroller.scrollHeight - co, width: scroller.scrollWidth - co,
|
3118 |
+
clientHeight: scroller.clientHeight - co, clientWidth: scroller.clientWidth - co};
|
3119 |
+
},
|
3120 |
+
|
3121 |
+
scrollIntoView: operation(null, function(pos, margin) {
|
3122 |
+
if (typeof pos == "number") pos = Pos(pos, 0);
|
3123 |
+
if (!margin) margin = 0;
|
3124 |
+
var coords = pos;
|
3125 |
+
|
3126 |
+
if (!pos || pos.line != null) {
|
3127 |
+
this.curOp.scrollToPos = pos ? clipPos(this.doc, pos) : this.doc.sel.head;
|
3128 |
+
this.curOp.scrollToPosMargin = margin;
|
3129 |
+
coords = cursorCoords(this, this.curOp.scrollToPos);
|
3130 |
+
}
|
3131 |
+
var sPos = calculateScrollPos(this, coords.left, coords.top - margin, coords.right, coords.bottom + margin);
|
3132 |
+
updateScrollPos(this, sPos.scrollLeft, sPos.scrollTop);
|
3133 |
+
}),
|
3134 |
+
|
3135 |
+
setSize: operation(null, function(width, height) {
|
3136 |
+
function interpret(val) {
|
3137 |
+
return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val;
|
3138 |
+
}
|
3139 |
+
if (width != null) this.display.wrapper.style.width = interpret(width);
|
3140 |
+
if (height != null) this.display.wrapper.style.height = interpret(height);
|
3141 |
+
if (this.options.lineWrapping)
|
3142 |
+
this.display.measureLineCache.length = this.display.measureLineCachePos = 0;
|
3143 |
+
this.curOp.forceUpdate = true;
|
3144 |
+
}),
|
3145 |
+
|
3146 |
+
operation: function(f){return runInOp(this, f);},
|
3147 |
+
|
3148 |
+
refresh: operation(null, function() {
|
3149 |
+
clearCaches(this);
|
3150 |
+
updateScrollPos(this, this.doc.scrollLeft, this.doc.scrollTop);
|
3151 |
+
regChange(this);
|
3152 |
+
}),
|
3153 |
+
|
3154 |
+
swapDoc: operation(null, function(doc) {
|
3155 |
+
var old = this.doc;
|
3156 |
+
old.cm = null;
|
3157 |
+
attachDoc(this, doc);
|
3158 |
+
clearCaches(this);
|
3159 |
+
resetInput(this, true);
|
3160 |
+
updateScrollPos(this, doc.scrollLeft, doc.scrollTop);
|
3161 |
+
return old;
|
3162 |
+
}),
|
3163 |
+
|
3164 |
+
getInputField: function(){return this.display.input;},
|
3165 |
+
getWrapperElement: function(){return this.display.wrapper;},
|
3166 |
+
getScrollerElement: function(){return this.display.scroller;},
|
3167 |
+
getGutterElement: function(){return this.display.gutters;}
|
3168 |
+
};
|
3169 |
+
eventMixin(CodeMirror);
|
3170 |
+
|
3171 |
+
// OPTION DEFAULTS
|
3172 |
+
|
3173 |
+
var optionHandlers = CodeMirror.optionHandlers = {};
|
3174 |
+
|
3175 |
+
// The default configuration options.
|
3176 |
+
var defaults = CodeMirror.defaults = {};
|
3177 |
+
|
3178 |
+
function option(name, deflt, handle, notOnInit) {
|
3179 |
+
CodeMirror.defaults[name] = deflt;
|
3180 |
+
if (handle) optionHandlers[name] =
|
3181 |
+
notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle;
|
3182 |
+
}
|
3183 |
+
|
3184 |
+
var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}};
|
3185 |
+
|
3186 |
+
// These two are, on init, called from the constructor because they
|
3187 |
+
// have to be initialized before the editor can start at all.
|
3188 |
+
option("value", "", function(cm, val) {
|
3189 |
+
cm.setValue(val);
|
3190 |
+
}, true);
|
3191 |
+
option("mode", null, function(cm, val) {
|
3192 |
+
cm.doc.modeOption = val;
|
3193 |
+
loadMode(cm);
|
3194 |
+
}, true);
|
3195 |
+
|
3196 |
+
option("indentUnit", 2, loadMode, true);
|
3197 |
+
option("indentWithTabs", false);
|
3198 |
+
option("smartIndent", true);
|
3199 |
+
option("tabSize", 4, function(cm) {
|
3200 |
+
loadMode(cm);
|
3201 |
+
clearCaches(cm);
|
3202 |
+
regChange(cm);
|
3203 |
+
}, true);
|
3204 |
+
option("electricChars", true);
|
3205 |
+
option("rtlMoveVisually", !windows);
|
3206 |
+
|
3207 |
+
option("theme", "default", function(cm) {
|
3208 |
+
themeChanged(cm);
|
3209 |
+
guttersChanged(cm);
|
3210 |
+
}, true);
|
3211 |
+
option("keyMap", "default", keyMapChanged);
|
3212 |
+
option("extraKeys", null);
|
3213 |
+
|
3214 |
+
option("onKeyEvent", null);
|
3215 |
+
option("onDragEvent", null);
|
3216 |
+
|
3217 |
+
option("lineWrapping", false, wrappingChanged, true);
|
3218 |
+
option("gutters", [], function(cm) {
|
3219 |
+
setGuttersForLineNumbers(cm.options);
|
3220 |
+
guttersChanged(cm);
|
3221 |
+
}, true);
|
3222 |
+
option("fixedGutter", true, function(cm, val) {
|
3223 |
+
cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
|
3224 |
+
cm.refresh();
|
3225 |
+
}, true);
|
3226 |
+
option("coverGutterNextToScrollbar", false, updateScrollbars, true);
|
3227 |
+
option("lineNumbers", false, function(cm) {
|
3228 |
+
setGuttersForLineNumbers(cm.options);
|
3229 |
+
guttersChanged(cm);
|
3230 |
+
}, true);
|
3231 |
+
option("firstLineNumber", 1, guttersChanged, true);
|
3232 |
+
option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true);
|
3233 |
+
option("showCursorWhenSelecting", false, updateSelection, true);
|
3234 |
+
|
3235 |
+
option("readOnly", false, function(cm, val) {
|
3236 |
+
if (val == "nocursor") {onBlur(cm); cm.display.input.blur();}
|
3237 |
+
else if (!val) resetInput(cm, true);
|
3238 |
+
});
|
3239 |
+
option("dragDrop", true);
|
3240 |
+
|
3241 |
+
option("cursorBlinkRate", 530);
|
3242 |
+
option("cursorScrollMargin", 0);
|
3243 |
+
option("cursorHeight", 1);
|
3244 |
+
option("workTime", 100);
|
3245 |
+
option("workDelay", 100);
|
3246 |
+
option("flattenSpans", true);
|
3247 |
+
option("pollInterval", 100);
|
3248 |
+
option("undoDepth", 40, function(cm, val){cm.doc.history.undoDepth = val;});
|
3249 |
+
option("historyEventDelay", 500);
|
3250 |
+
option("viewportMargin", 10, function(cm){cm.refresh();}, true);
|
3251 |
+
option("maxHighlightLength", 10000, function(cm){loadMode(cm); cm.refresh();}, true);
|
3252 |
+
option("moveInputWithCursor", true, function(cm, val) {
|
3253 |
+
if (!val) cm.display.inputDiv.style.top = cm.display.inputDiv.style.left = 0;
|
3254 |
+
});
|
3255 |
+
|
3256 |
+
option("tabindex", null, function(cm, val) {
|
3257 |
+
cm.display.input.tabIndex = val || "";
|
3258 |
+
});
|
3259 |
+
option("autofocus", null);
|
3260 |
+
|
3261 |
+
// MODE DEFINITION AND QUERYING
|
3262 |
+
|
3263 |
+
// Known modes, by name and by MIME
|
3264 |
+
var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};
|
3265 |
+
|
3266 |
+
CodeMirror.defineMode = function(name, mode) {
|
3267 |
+
if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name;
|
3268 |
+
if (arguments.length > 2) {
|
3269 |
+
mode.dependencies = [];
|
3270 |
+
for (var i = 2; i < arguments.length; ++i) mode.dependencies.push(arguments[i]);
|
3271 |
+
}
|
3272 |
+
modes[name] = mode;
|
3273 |
+
};
|
3274 |
+
|
3275 |
+
CodeMirror.defineMIME = function(mime, spec) {
|
3276 |
+
mimeModes[mime] = spec;
|
3277 |
+
};
|
3278 |
+
|
3279 |
+
CodeMirror.resolveMode = function(spec) {
|
3280 |
+
if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
|
3281 |
+
spec = mimeModes[spec];
|
3282 |
+
} else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
|
3283 |
+
var found = mimeModes[spec.name];
|
3284 |
+
spec = createObj(found, spec);
|
3285 |
+
spec.name = found.name;
|
3286 |
+
} else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
|
3287 |
+
return CodeMirror.resolveMode("application/xml");
|
3288 |
+
}
|
3289 |
+
if (typeof spec == "string") return {name: spec};
|
3290 |
+
else return spec || {name: "null"};
|
3291 |
+
};
|
3292 |
+
|
3293 |
+
CodeMirror.getMode = function(options, spec) {
|
3294 |
+
var spec = CodeMirror.resolveMode(spec);
|
3295 |
+
var mfactory = modes[spec.name];
|
3296 |
+
if (!mfactory) return CodeMirror.getMode(options, "text/plain");
|
3297 |
+
var modeObj = mfactory(options, spec);
|
3298 |
+
if (modeExtensions.hasOwnProperty(spec.name)) {
|
3299 |
+
var exts = modeExtensions[spec.name];
|
3300 |
+
for (var prop in exts) {
|
3301 |
+
if (!exts.hasOwnProperty(prop)) continue;
|
3302 |
+
if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop];
|
3303 |
+
modeObj[prop] = exts[prop];
|
3304 |
+
}
|
3305 |
+
}
|
3306 |
+
modeObj.name = spec.name;
|
3307 |
+
|
3308 |
+
return modeObj;
|
3309 |
+
};
|
3310 |
+
|
3311 |
+
CodeMirror.defineMode("null", function() {
|
3312 |
+
return {token: function(stream) {stream.skipToEnd();}};
|
3313 |
+
});
|
3314 |
+
CodeMirror.defineMIME("text/plain", "null");
|
3315 |
+
|
3316 |
+
var modeExtensions = CodeMirror.modeExtensions = {};
|
3317 |
+
CodeMirror.extendMode = function(mode, properties) {
|
3318 |
+
var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
|
3319 |
+
copyObj(properties, exts);
|
3320 |
+
};
|
3321 |
+
|
3322 |
+
// EXTENSIONS
|
3323 |
+
|
3324 |
+
CodeMirror.defineExtension = function(name, func) {
|
3325 |
+
CodeMirror.prototype[name] = func;
|
3326 |
+
};
|
3327 |
+
CodeMirror.defineDocExtension = function(name, func) {
|
3328 |
+
Doc.prototype[name] = func;
|
3329 |
+
};
|
3330 |
+
CodeMirror.defineOption = option;
|
3331 |
+
|
3332 |
+
var initHooks = [];
|
3333 |
+
CodeMirror.defineInitHook = function(f) {initHooks.push(f);};
|
3334 |
+
|
3335 |
+
var helpers = CodeMirror.helpers = {};
|
3336 |
+
CodeMirror.registerHelper = function(type, name, value) {
|
3337 |
+
if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {};
|
3338 |
+
helpers[type][name] = value;
|
3339 |
+
};
|
3340 |
+
|
3341 |
+
// UTILITIES
|
3342 |
+
|
3343 |
+
CodeMirror.isWordChar = isWordChar;
|
3344 |
+
|
3345 |
+
// MODE STATE HANDLING
|
3346 |
+
|
3347 |
+
// Utility functions for working with state. Exported because modes
|
3348 |
+
// sometimes need to do this.
|
3349 |
+
function copyState(mode, state) {
|
3350 |
+
if (state === true) return state;
|
3351 |
+
if (mode.copyState) return mode.copyState(state);
|
3352 |
+
var nstate = {};
|
3353 |
+
for (var n in state) {
|
3354 |
+
var val = state[n];
|
3355 |
+
if (val instanceof Array) val = val.concat([]);
|
3356 |
+
nstate[n] = val;
|
3357 |
+
}
|
3358 |
+
return nstate;
|
3359 |
+
}
|
3360 |
+
CodeMirror.copyState = copyState;
|
3361 |
+
|
3362 |
+
function startState(mode, a1, a2) {
|
3363 |
+
return mode.startState ? mode.startState(a1, a2) : true;
|
3364 |
+
}
|
3365 |
+
CodeMirror.startState = startState;
|
3366 |
+
|
3367 |
+
CodeMirror.innerMode = function(mode, state) {
|
3368 |
+
while (mode.innerMode) {
|
3369 |
+
var info = mode.innerMode(state);
|
3370 |
+
if (!info || info.mode == mode) break;
|
3371 |
+
state = info.state;
|
3372 |
+
mode = info.mode;
|
3373 |
+
}
|
3374 |
+
return info || {mode: mode, state: state};
|
3375 |
+
};
|
3376 |
+
|
3377 |
+
// STANDARD COMMANDS
|
3378 |
+
|
3379 |
+
var commands = CodeMirror.commands = {
|
3380 |
+
selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()));},
|
3381 |
+
killLine: function(cm) {
|
3382 |
+
var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);
|
3383 |
+
if (!sel && cm.getLine(from.line).length == from.ch)
|
3384 |
+
cm.replaceRange("", from, Pos(from.line + 1, 0), "+delete");
|
3385 |
+
else cm.replaceRange("", from, sel ? to : Pos(from.line), "+delete");
|
3386 |
+
},
|
3387 |
+
deleteLine: function(cm) {
|
3388 |
+
var l = cm.getCursor().line;
|
3389 |
+
cm.replaceRange("", Pos(l, 0), Pos(l), "+delete");
|
3390 |
+
},
|
3391 |
+
delLineLeft: function(cm) {
|
3392 |
+
var cur = cm.getCursor();
|
3393 |
+
cm.replaceRange("", Pos(cur.line, 0), cur, "+delete");
|
3394 |
+
},
|
3395 |
+
undo: function(cm) {cm.undo();},
|
3396 |
+
redo: function(cm) {cm.redo();},
|
3397 |
+
goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));},
|
3398 |
+
goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));},
|
3399 |
+
goLineStart: function(cm) {
|
3400 |
+
cm.extendSelection(lineStart(cm, cm.getCursor().line));
|
3401 |
+
},
|
3402 |
+
goLineStartSmart: function(cm) {
|
3403 |
+
var cur = cm.getCursor(), start = lineStart(cm, cur.line);
|
3404 |
+
var line = cm.getLineHandle(start.line);
|
3405 |
+
var order = getOrder(line);
|
3406 |
+
if (!order || order[0].level == 0) {
|
3407 |
+
var firstNonWS = Math.max(0, line.text.search(/\S/));
|
3408 |
+
var inWS = cur.line == start.line && cur.ch <= firstNonWS && cur.ch;
|
3409 |
+
cm.extendSelection(Pos(start.line, inWS ? 0 : firstNonWS));
|
3410 |
+
} else cm.extendSelection(start);
|
3411 |
+
},
|
3412 |
+
goLineEnd: function(cm) {
|
3413 |
+
cm.extendSelection(lineEnd(cm, cm.getCursor().line));
|
3414 |
+
},
|
3415 |
+
goLineRight: function(cm) {
|
3416 |
+
var top = cm.charCoords(cm.getCursor(), "div").top + 5;
|
3417 |
+
cm.extendSelection(cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"));
|
3418 |
+
},
|
3419 |
+
goLineLeft: function(cm) {
|
3420 |
+
var top = cm.charCoords(cm.getCursor(), "div").top + 5;
|
3421 |
+
cm.extendSelection(cm.coordsChar({left: 0, top: top}, "div"));
|
3422 |
+
},
|
3423 |
+
goLineUp: function(cm) {cm.moveV(-1, "line");},
|
3424 |
+
goLineDown: function(cm) {cm.moveV(1, "line");},
|
3425 |
+
goPageUp: function(cm) {cm.moveV(-1, "page");},
|
3426 |
+
goPageDown: function(cm) {cm.moveV(1, "page");},
|
3427 |
+
goCharLeft: function(cm) {cm.moveH(-1, "char");},
|
3428 |
+
goCharRight: function(cm) {cm.moveH(1, "char");},
|
3429 |
+
goColumnLeft: function(cm) {cm.moveH(-1, "column");},
|
3430 |
+
goColumnRight: function(cm) {cm.moveH(1, "column");},
|
3431 |
+
goWordLeft: function(cm) {cm.moveH(-1, "word");},
|
3432 |
+
goGroupRight: function(cm) {cm.moveH(1, "group");},
|
3433 |
+
goGroupLeft: function(cm) {cm.moveH(-1, "group");},
|
3434 |
+
goWordRight: function(cm) {cm.moveH(1, "word");},
|
3435 |
+
delCharBefore: function(cm) {cm.deleteH(-1, "char");},
|
3436 |
+
delCharAfter: function(cm) {cm.deleteH(1, "char");},
|
3437 |
+
delWordBefore: function(cm) {cm.deleteH(-1, "word");},
|
3438 |
+
delWordAfter: function(cm) {cm.deleteH(1, "word");},
|
3439 |
+
delGroupBefore: function(cm) {cm.deleteH(-1, "group");},
|
3440 |
+
delGroupAfter: function(cm) {cm.deleteH(1, "group");},
|
3441 |
+
indentAuto: function(cm) {cm.indentSelection("smart");},
|
3442 |
+
indentMore: function(cm) {cm.indentSelection("add");},
|
3443 |
+
indentLess: function(cm) {cm.indentSelection("subtract");},
|
3444 |
+
insertTab: function(cm) {cm.replaceSelection("\t", "end", "+input");},
|
3445 |
+
defaultTab: function(cm) {
|
3446 |
+
if (cm.somethingSelected()) cm.indentSelection("add");
|
3447 |
+
else cm.replaceSelection("\t", "end", "+input");
|
3448 |
+
},
|
3449 |
+
transposeChars: function(cm) {
|
3450 |
+
var cur = cm.getCursor(), line = cm.getLine(cur.line);
|
3451 |
+
if (cur.ch > 0 && cur.ch < line.length - 1)
|
3452 |
+
cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1),
|
3453 |
+
Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1));
|
3454 |
+
},
|
3455 |
+
newlineAndIndent: function(cm) {
|
3456 |
+
operation(cm, function() {
|
3457 |
+
cm.replaceSelection("\n", "end", "+input");
|
3458 |
+
cm.indentLine(cm.getCursor().line, null, true);
|
3459 |
+
})();
|
3460 |
+
},
|
3461 |
+
toggleOverwrite: function(cm) {cm.toggleOverwrite();}
|
3462 |
+
};
|
3463 |
+
|
3464 |
+
// STANDARD KEYMAPS
|
3465 |
+
|
3466 |
+
var keyMap = CodeMirror.keyMap = {};
|
3467 |
+
keyMap.basic = {
|
3468 |
+
"Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
|
3469 |
+
"End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
|
3470 |
+
"Delete": "delCharAfter", "Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto",
|
3471 |
+
"Enter": "newlineAndIndent", "Insert": "toggleOverwrite"
|
3472 |
+
};
|
3473 |
+
// Note that the save and find-related commands aren't defined by
|
3474 |
+
// default. Unknown commands are simply ignored.
|
3475 |
+
keyMap.pcDefault = {
|
3476 |
+
"Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
|
3477 |
+
"Ctrl-Home": "goDocStart", "Alt-Up": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Down": "goDocEnd",
|
3478 |
+
"Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
|
3479 |
+
"Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
|
3480 |
+
"Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
|
3481 |
+
"Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
|
3482 |
+
fallthrough: "basic"
|
3483 |
+
};
|
3484 |
+
keyMap.macDefault = {
|
3485 |
+
"Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
|
3486 |
+
"Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
|
3487 |
+
"Alt-Right": "goGroupRight", "Cmd-Left": "goLineStart", "Cmd-Right": "goLineEnd", "Alt-Backspace": "delGroupBefore",
|
3488 |
+
"Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
|
3489 |
+
"Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
|
3490 |
+
"Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delLineLeft",
|
3491 |
+
fallthrough: ["basic", "emacsy"]
|
3492 |
+
};
|
3493 |
+
keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
|
3494 |
+
keyMap.emacsy = {
|
3495 |
+
"Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
|
3496 |
+
"Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
|
3497 |
+
"Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
|
3498 |
+
"Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars"
|
3499 |
+
};
|
3500 |
+
|
3501 |
+
// KEYMAP DISPATCH
|
3502 |
+
|
3503 |
+
function getKeyMap(val) {
|
3504 |
+
if (typeof val == "string") return keyMap[val];
|
3505 |
+
else return val;
|
3506 |
+
}
|
3507 |
+
|
3508 |
+
function lookupKey(name, maps, handle) {
|
3509 |
+
function lookup(map) {
|
3510 |
+
map = getKeyMap(map);
|
3511 |
+
var found = map[name];
|
3512 |
+
if (found === false) return "stop";
|
3513 |
+
if (found != null && handle(found)) return true;
|
3514 |
+
if (map.nofallthrough) return "stop";
|
3515 |
+
|
3516 |
+
var fallthrough = map.fallthrough;
|
3517 |
+
if (fallthrough == null) return false;
|
3518 |
+
if (Object.prototype.toString.call(fallthrough) != "[object Array]")
|
3519 |
+
return lookup(fallthrough);
|
3520 |
+
for (var i = 0, e = fallthrough.length; i < e; ++i) {
|
3521 |
+
var done = lookup(fallthrough[i]);
|
3522 |
+
if (done) return done;
|
3523 |
+
}
|
3524 |
+
return false;
|
3525 |
+
}
|
3526 |
+
|
3527 |
+
for (var i = 0; i < maps.length; ++i) {
|
3528 |
+
var done = lookup(maps[i]);
|
3529 |
+
if (done) return done != "stop";
|
3530 |
+
}
|
3531 |
+
}
|
3532 |
+
function isModifierKey(event) {
|
3533 |
+
var name = keyNames[event.keyCode];
|
3534 |
+
return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod";
|
3535 |
+
}
|
3536 |
+
function keyName(event, noShift) {
|
3537 |
+
if (opera && event.keyCode == 34 && event["char"]) return false;
|
3538 |
+
var name = keyNames[event.keyCode];
|
3539 |
+
if (name == null || event.altGraphKey) return false;
|
3540 |
+
if (event.altKey) name = "Alt-" + name;
|
3541 |
+
if (flipCtrlCmd ? event.metaKey : event.ctrlKey) name = "Ctrl-" + name;
|
3542 |
+
if (flipCtrlCmd ? event.ctrlKey : event.metaKey) name = "Cmd-" + name;
|
3543 |
+
if (!noShift && event.shiftKey) name = "Shift-" + name;
|
3544 |
+
return name;
|
3545 |
+
}
|
3546 |
+
CodeMirror.lookupKey = lookupKey;
|
3547 |
+
CodeMirror.isModifierKey = isModifierKey;
|
3548 |
+
CodeMirror.keyName = keyName;
|
3549 |
+
|
3550 |
+
// FROMTEXTAREA
|
3551 |
+
|
3552 |
+
CodeMirror.fromTextArea = function(textarea, options) {
|
3553 |
+
if (!options) options = {};
|
3554 |
+
options.value = textarea.value;
|
3555 |
+
if (!options.tabindex && textarea.tabindex)
|
3556 |
+
options.tabindex = textarea.tabindex;
|
3557 |
+
if (!options.placeholder && textarea.placeholder)
|
3558 |
+
options.placeholder = textarea.placeholder;
|
3559 |
+
// Set autofocus to true if this textarea is focused, or if it has
|
3560 |
+
// autofocus and no other element is focused.
|
3561 |
+
if (options.autofocus == null) {
|
3562 |
+
var hasFocus = document.body;
|
3563 |
+
// doc.activeElement occasionally throws on IE
|
3564 |
+
try { hasFocus = document.activeElement; } catch(e) {}
|
3565 |
+
options.autofocus = hasFocus == textarea ||
|
3566 |
+
textarea.getAttribute("autofocus") != null && hasFocus == document.body;
|
3567 |
+
}
|
3568 |
+
|
3569 |
+
function save() {textarea.value = cm.getValue();}
|
3570 |
+
if (textarea.form) {
|
3571 |
+
on(textarea.form, "submit", save);
|
3572 |
+
// Deplorable hack to make the submit method do the right thing.
|
3573 |
+
if (!options.leaveSubmitMethodAlone) {
|
3574 |
+
var form = textarea.form, realSubmit = form.submit;
|
3575 |
+
try {
|
3576 |
+
var wrappedSubmit = form.submit = function() {
|
3577 |
+
save();
|
3578 |
+
form.submit = realSubmit;
|
3579 |
+
form.submit();
|
3580 |
+
form.submit = wrappedSubmit;
|
3581 |
+
};
|
3582 |
+
} catch(e) {}
|
3583 |
+
}
|
3584 |
+
}
|
3585 |
+
|
3586 |
+
textarea.style.display = "none";
|
3587 |
+
var cm = CodeMirror(function(node) {
|
3588 |
+
textarea.parentNode.insertBefore(node, textarea.nextSibling);
|
3589 |
+
}, options);
|
3590 |
+
cm.save = save;
|
3591 |
+
cm.getTextArea = function() { return textarea; };
|
3592 |
+
cm.toTextArea = function() {
|
3593 |
+
save();
|
3594 |
+
textarea.parentNode.removeChild(cm.getWrapperElement());
|
3595 |
+
textarea.style.display = "";
|
3596 |
+
if (textarea.form) {
|
3597 |
+
off(textarea.form, "submit", save);
|
3598 |
+
if (typeof textarea.form.submit == "function")
|
3599 |
+
textarea.form.submit = realSubmit;
|
3600 |
+
}
|
3601 |
+
};
|
3602 |
+
return cm;
|
3603 |
+
};
|
3604 |
+
|
3605 |
+
// STRING STREAM
|
3606 |
+
|
3607 |
+
// Fed to the mode parsers, provides helper functions to make
|
3608 |
+
// parsers more succinct.
|
3609 |
+
|
3610 |
+
// The character stream used by a mode's parser.
|
3611 |
+
function StringStream(string, tabSize) {
|
3612 |
+
this.pos = this.start = 0;
|
3613 |
+
this.string = string;
|
3614 |
+
this.tabSize = tabSize || 8;
|
3615 |
+
this.lastColumnPos = this.lastColumnValue = 0;
|
3616 |
+
}
|
3617 |
+
|
3618 |
+
StringStream.prototype = {
|
3619 |
+
eol: function() {return this.pos >= this.string.length;},
|
3620 |
+
sol: function() {return this.pos == 0;},
|
3621 |
+
peek: function() {return this.string.charAt(this.pos) || undefined;},
|
3622 |
+
next: function() {
|
3623 |
+
if (this.pos < this.string.length)
|
3624 |
+
return this.string.charAt(this.pos++);
|
3625 |
+
},
|
3626 |
+
eat: function(match) {
|
3627 |
+
var ch = this.string.charAt(this.pos);
|
3628 |
+
if (typeof match == "string") var ok = ch == match;
|
3629 |
+
else var ok = ch && (match.test ? match.test(ch) : match(ch));
|
3630 |
+
if (ok) {++this.pos; return ch;}
|
3631 |
+
},
|
3632 |
+
eatWhile: function(match) {
|
3633 |
+
var start = this.pos;
|
3634 |
+
while (this.eat(match)){}
|
3635 |
+
return this.pos > start;
|
3636 |
+
},
|
3637 |
+
eatSpace: function() {
|
3638 |
+
var start = this.pos;
|
3639 |
+
while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;
|
3640 |
+
return this.pos > start;
|
3641 |
+
},
|
3642 |
+
skipToEnd: function() {this.pos = this.string.length;},
|
3643 |
+
skipTo: function(ch) {
|
3644 |
+
var found = this.string.indexOf(ch, this.pos);
|
3645 |
+
if (found > -1) {this.pos = found; return true;}
|
3646 |
+
},
|
3647 |
+
backUp: function(n) {this.pos -= n;},
|
3648 |
+
column: function() {
|
3649 |
+
if (this.lastColumnPos < this.start) {
|
3650 |
+
this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
|
3651 |
+
this.lastColumnPos = this.start;
|
3652 |
+
}
|
3653 |
+
return this.lastColumnValue;
|
3654 |
+
},
|
3655 |
+
indentation: function() {return countColumn(this.string, null, this.tabSize);},
|
3656 |
+
match: function(pattern, consume, caseInsensitive) {
|
3657 |
+
if (typeof pattern == "string") {
|
3658 |
+
var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};
|
3659 |
+
var substr = this.string.substr(this.pos, pattern.length);
|
3660 |
+
if (cased(substr) == cased(pattern)) {
|
3661 |
+
if (consume !== false) this.pos += pattern.length;
|
3662 |
+
return true;
|
3663 |
+
}
|
3664 |
+
} else {
|
3665 |
+
var match = this.string.slice(this.pos).match(pattern);
|
3666 |
+
if (match && match.index > 0) return null;
|
3667 |
+
if (match && consume !== false) this.pos += match[0].length;
|
3668 |
+
return match;
|
3669 |
+
}
|
3670 |
+
},
|
3671 |
+
current: function(){return this.string.slice(this.start, this.pos);}
|
3672 |
+
};
|
3673 |
+
CodeMirror.StringStream = StringStream;
|
3674 |
+
|
3675 |
+
// TEXTMARKERS
|
3676 |
+
|
3677 |
+
function TextMarker(doc, type) {
|
3678 |
+
this.lines = [];
|
3679 |
+
this.type = type;
|
3680 |
+
this.doc = doc;
|
3681 |
+
}
|
3682 |
+
CodeMirror.TextMarker = TextMarker;
|
3683 |
+
eventMixin(TextMarker);
|
3684 |
+
|
3685 |
+
TextMarker.prototype.clear = function() {
|
3686 |
+
if (this.explicitlyCleared) return;
|
3687 |
+
var cm = this.doc.cm, withOp = cm && !cm.curOp;
|
3688 |
+
if (withOp) startOperation(cm);
|
3689 |
+
if (hasHandler(this, "clear")) {
|
3690 |
+
var found = this.find();
|
3691 |
+
if (found) signalLater(this, "clear", found.from, found.to);
|
3692 |
+
}
|
3693 |
+
var min = null, max = null;
|
3694 |
+
for (var i = 0; i < this.lines.length; ++i) {
|
3695 |
+
var line = this.lines[i];
|
3696 |
+
var span = getMarkedSpanFor(line.markedSpans, this);
|
3697 |
+
if (span.to != null) max = lineNo(line);
|
3698 |
+
line.markedSpans = removeMarkedSpan(line.markedSpans, span);
|
3699 |
+
if (span.from != null)
|
3700 |
+
min = lineNo(line);
|
3701 |
+
else if (this.collapsed && !lineIsHidden(this.doc, line) && cm)
|
3702 |
+
updateLineHeight(line, textHeight(cm.display));
|
3703 |
+
}
|
3704 |
+
if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) {
|
3705 |
+
var visual = visualLine(cm.doc, this.lines[i]), len = lineLength(cm.doc, visual);
|
3706 |
+
if (len > cm.display.maxLineLength) {
|
3707 |
+
cm.display.maxLine = visual;
|
3708 |
+
cm.display.maxLineLength = len;
|
3709 |
+
cm.display.maxLineChanged = true;
|
3710 |
+
}
|
3711 |
+
}
|
3712 |
+
|
3713 |
+
if (min != null && cm) regChange(cm, min, max + 1);
|
3714 |
+
this.lines.length = 0;
|
3715 |
+
this.explicitlyCleared = true;
|
3716 |
+
if (this.atomic && this.doc.cantEdit) {
|
3717 |
+
this.doc.cantEdit = false;
|
3718 |
+
if (cm) reCheckSelection(cm);
|
3719 |
+
}
|
3720 |
+
if (withOp) endOperation(cm);
|
3721 |
+
};
|
3722 |
+
|
3723 |
+
TextMarker.prototype.find = function() {
|
3724 |
+
var from, to;
|
3725 |
+
for (var i = 0; i < this.lines.length; ++i) {
|
3726 |
+
var line = this.lines[i];
|
3727 |
+
var span = getMarkedSpanFor(line.markedSpans, this);
|
3728 |
+
if (span.from != null || span.to != null) {
|
3729 |
+
var found = lineNo(line);
|
3730 |
+
if (span.from != null) from = Pos(found, span.from);
|
3731 |
+
if (span.to != null) to = Pos(found, span.to);
|
3732 |
+
}
|
3733 |
+
}
|
3734 |
+
if (this.type == "bookmark") return from;
|
3735 |
+
return from && {from: from, to: to};
|
3736 |
+
};
|
3737 |
+
|
3738 |
+
TextMarker.prototype.changed = function() {
|
3739 |
+
var pos = this.find(), cm = this.doc.cm;
|
3740 |
+
if (!pos || !cm) return;
|
3741 |
+
var line = getLine(this.doc, pos.from.line);
|
3742 |
+
clearCachedMeasurement(cm, line);
|
3743 |
+
if (pos.from.line >= cm.display.showingFrom && pos.from.line < cm.display.showingTo) {
|
3744 |
+
for (var node = cm.display.lineDiv.firstChild; node; node = node.nextSibling) if (node.lineObj == line) {
|
3745 |
+
if (node.offsetHeight != line.height) updateLineHeight(line, node.offsetHeight);
|
3746 |
+
break;
|
3747 |
+
}
|
3748 |
+
runInOp(cm, function() {
|
3749 |
+
cm.curOp.selectionChanged = cm.curOp.forceUpdate = cm.curOp.updateMaxLine = true;
|
3750 |
+
});
|
3751 |
+
}
|
3752 |
+
};
|
3753 |
+
|
3754 |
+
TextMarker.prototype.attachLine = function(line) {
|
3755 |
+
if (!this.lines.length && this.doc.cm) {
|
3756 |
+
var op = this.doc.cm.curOp;
|
3757 |
+
if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
|
3758 |
+
(op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);
|
3759 |
+
}
|
3760 |
+
this.lines.push(line);
|
3761 |
+
};
|
3762 |
+
TextMarker.prototype.detachLine = function(line) {
|
3763 |
+
this.lines.splice(indexOf(this.lines, line), 1);
|
3764 |
+
if (!this.lines.length && this.doc.cm) {
|
3765 |
+
var op = this.doc.cm.curOp;
|
3766 |
+
(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
|
3767 |
+
}
|
3768 |
+
};
|
3769 |
+
|
3770 |
+
function markText(doc, from, to, options, type) {
|
3771 |
+
if (options && options.shared) return markTextShared(doc, from, to, options, type);
|
3772 |
+
if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type);
|
3773 |
+
|
3774 |
+
var marker = new TextMarker(doc, type);
|
3775 |
+
if (type == "range" && !posLess(from, to)) return marker;
|
3776 |
+
if (options) copyObj(options, marker);
|
3777 |
+
if (marker.replacedWith) {
|
3778 |
+
marker.collapsed = true;
|
3779 |
+
marker.replacedWith = elt("span", [marker.replacedWith], "CodeMirror-widget");
|
3780 |
+
if (!options.handleMouseEvents) marker.replacedWith.ignoreEvents = true;
|
3781 |
+
}
|
3782 |
+
if (marker.collapsed) sawCollapsedSpans = true;
|
3783 |
+
|
3784 |
+
if (marker.addToHistory)
|
3785 |
+
addToHistory(doc, {from: from, to: to, origin: "markText"},
|
3786 |
+
{head: doc.sel.head, anchor: doc.sel.anchor}, NaN);
|
3787 |
+
|
3788 |
+
var curLine = from.line, size = 0, collapsedAtStart, collapsedAtEnd, cm = doc.cm, updateMaxLine;
|
3789 |
+
doc.iter(curLine, to.line + 1, function(line) {
|
3790 |
+
if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(doc, line) == cm.display.maxLine)
|
3791 |
+
updateMaxLine = true;
|
3792 |
+
var span = {from: null, to: null, marker: marker};
|
3793 |
+
size += line.text.length;
|
3794 |
+
if (curLine == from.line) {span.from = from.ch; size -= from.ch;}
|
3795 |
+
if (curLine == to.line) {span.to = to.ch; size -= line.text.length - to.ch;}
|
3796 |
+
if (marker.collapsed) {
|
3797 |
+
if (curLine == to.line) collapsedAtEnd = collapsedSpanAt(line, to.ch);
|
3798 |
+
if (curLine == from.line) collapsedAtStart = collapsedSpanAt(line, from.ch);
|
3799 |
+
else updateLineHeight(line, 0);
|
3800 |
+
}
|
3801 |
+
addMarkedSpan(line, span);
|
3802 |
+
++curLine;
|
3803 |
+
});
|
3804 |
+
if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) {
|
3805 |
+
if (lineIsHidden(doc, line)) updateLineHeight(line, 0);
|
3806 |
+
});
|
3807 |
+
|
3808 |
+
if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); });
|
3809 |
+
|
3810 |
+
if (marker.readOnly) {
|
3811 |
+
sawReadOnlySpans = true;
|
3812 |
+
if (doc.history.done.length || doc.history.undone.length)
|
3813 |
+
doc.clearHistory();
|
3814 |
+
}
|
3815 |
+
if (marker.collapsed) {
|
3816 |
+
if (collapsedAtStart != collapsedAtEnd)
|
3817 |
+
throw new Error("Inserting collapsed marker overlapping an existing one");
|
3818 |
+
marker.size = size;
|
3819 |
+
marker.atomic = true;
|
3820 |
+
}
|
3821 |
+
if (cm) {
|
3822 |
+
if (updateMaxLine) cm.curOp.updateMaxLine = true;
|
3823 |
+
if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.collapsed)
|
3824 |
+
regChange(cm, from.line, to.line + 1);
|
3825 |
+
if (marker.atomic) reCheckSelection(cm);
|
3826 |
+
}
|
3827 |
+
return marker;
|
3828 |
+
}
|
3829 |
+
|
3830 |
+
// SHARED TEXTMARKERS
|
3831 |
+
|
3832 |
+
function SharedTextMarker(markers, primary) {
|
3833 |
+
this.markers = markers;
|
3834 |
+
this.primary = primary;
|
3835 |
+
for (var i = 0, me = this; i < markers.length; ++i) {
|
3836 |
+
markers[i].parent = this;
|
3837 |
+
on(markers[i], "clear", function(){me.clear();});
|
3838 |
+
}
|
3839 |
+
}
|
3840 |
+
CodeMirror.SharedTextMarker = SharedTextMarker;
|
3841 |
+
eventMixin(SharedTextMarker);
|
3842 |
+
|
3843 |
+
SharedTextMarker.prototype.clear = function() {
|
3844 |
+
if (this.explicitlyCleared) return;
|
3845 |
+
this.explicitlyCleared = true;
|
3846 |
+
for (var i = 0; i < this.markers.length; ++i)
|
3847 |
+
this.markers[i].clear();
|
3848 |
+
signalLater(this, "clear");
|
3849 |
+
};
|
3850 |
+
SharedTextMarker.prototype.find = function() {
|
3851 |
+
return this.primary.find();
|
3852 |
+
};
|
3853 |
+
|
3854 |
+
function markTextShared(doc, from, to, options, type) {
|
3855 |
+
options = copyObj(options);
|
3856 |
+
options.shared = false;
|
3857 |
+
var markers = [markText(doc, from, to, options, type)], primary = markers[0];
|
3858 |
+
var widget = options.replacedWith;
|
3859 |
+
linkedDocs(doc, function(doc) {
|
3860 |
+
if (widget) options.replacedWith = widget.cloneNode(true);
|
3861 |
+
markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
|
3862 |
+
for (var i = 0; i < doc.linked.length; ++i)
|
3863 |
+
if (doc.linked[i].isParent) return;
|
3864 |
+
primary = lst(markers);
|
3865 |
+
});
|
3866 |
+
return new SharedTextMarker(markers, primary);
|
3867 |
+
}
|
3868 |
+
|
3869 |
+
// TEXTMARKER SPANS
|
3870 |
+
|
3871 |
+
function getMarkedSpanFor(spans, marker) {
|
3872 |
+
if (spans) for (var i = 0; i < spans.length; ++i) {
|
3873 |
+
var span = spans[i];
|
3874 |
+
if (span.marker == marker) return span;
|
3875 |
+
}
|
3876 |
+
}
|
3877 |
+
function removeMarkedSpan(spans, span) {
|
3878 |
+
for (var r, i = 0; i < spans.length; ++i)
|
3879 |
+
if (spans[i] != span) (r || (r = [])).push(spans[i]);
|
3880 |
+
return r;
|
3881 |
+
}
|
3882 |
+
function addMarkedSpan(line, span) {
|
3883 |
+
line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
|
3884 |
+
span.marker.attachLine(line);
|
3885 |
+
}
|
3886 |
+
|
3887 |
+
function markedSpansBefore(old, startCh, isInsert) {
|
3888 |
+
if (old) for (var i = 0, nw; i < old.length; ++i) {
|
3889 |
+
var span = old[i], marker = span.marker;
|
3890 |
+
var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
|
3891 |
+
if (startsBefore || marker.type == "bookmark" && span.from == startCh && (!isInsert || !span.marker.insertLeft)) {
|
3892 |
+
var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);
|
3893 |
+
(nw || (nw = [])).push({from: span.from,
|
3894 |
+
to: endsAfter ? null : span.to,
|
3895 |
+
marker: marker});
|
3896 |
+
}
|
3897 |
+
}
|
3898 |
+
return nw;
|
3899 |
+
}
|
3900 |
+
|
3901 |
+
function markedSpansAfter(old, endCh, isInsert) {
|
3902 |
+
if (old) for (var i = 0, nw; i < old.length; ++i) {
|
3903 |
+
var span = old[i], marker = span.marker;
|
3904 |
+
var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
|
3905 |
+
if (endsAfter || marker.type == "bookmark" && span.from == endCh && (!isInsert || span.marker.insertLeft)) {
|
3906 |
+
var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);
|
3907 |
+
(nw || (nw = [])).push({from: startsBefore ? null : span.from - endCh,
|
3908 |
+
to: span.to == null ? null : span.to - endCh,
|
3909 |
+
marker: marker});
|
3910 |
+
}
|
3911 |
+
}
|
3912 |
+
return nw;
|
3913 |
+
}
|
3914 |
+
|
3915 |
+
function stretchSpansOverChange(doc, change) {
|
3916 |
+
var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
|
3917 |
+
var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
|
3918 |
+
if (!oldFirst && !oldLast) return null;
|
3919 |
+
|
3920 |
+
var startCh = change.from.ch, endCh = change.to.ch, isInsert = posEq(change.from, change.to);
|
3921 |
+
// Get the spans that 'stick out' on both sides
|
3922 |
+
var first = markedSpansBefore(oldFirst, startCh, isInsert);
|
3923 |
+
var last = markedSpansAfter(oldLast, endCh, isInsert);
|
3924 |
+
|
3925 |
+
// Next, merge those two ends
|
3926 |
+
var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
|
3927 |
+
if (first) {
|
3928 |
+
// Fix up .to properties of first
|
3929 |
+
for (var i = 0; i < first.length; ++i) {
|
3930 |
+
var span = first[i];
|
3931 |
+
if (span.to == null) {
|
3932 |
+
var found = getMarkedSpanFor(last, span.marker);
|
3933 |
+
if (!found) span.to = startCh;
|
3934 |
+
else if (sameLine) span.to = found.to == null ? null : found.to + offset;
|
3935 |
+
}
|
3936 |
+
}
|
3937 |
+
}
|
3938 |
+
if (last) {
|
3939 |
+
// Fix up .from in last (or move them into first in case of sameLine)
|
3940 |
+
for (var i = 0; i < last.length; ++i) {
|
3941 |
+
var span = last[i];
|
3942 |
+
if (span.to != null) span.to += offset;
|
3943 |
+
if (span.from == null) {
|
3944 |
+
var found = getMarkedSpanFor(first, span.marker);
|
3945 |
+
if (!found) {
|
3946 |
+
span.from = offset;
|
3947 |
+
if (sameLine) (first || (first = [])).push(span);
|
3948 |
+
}
|
3949 |
+
} else {
|
3950 |
+
span.from += offset;
|
3951 |
+
if (sameLine) (first || (first = [])).push(span);
|
3952 |
+
}
|
3953 |
+
}
|
3954 |
+
}
|
3955 |
+
if (sameLine && first) {
|
3956 |
+
// Make sure we didn't create any zero-length spans
|
3957 |
+
for (var i = 0; i < first.length; ++i)
|
3958 |
+
if (first[i].from != null && first[i].from == first[i].to && first[i].marker.type != "bookmark")
|
3959 |
+
first.splice(i--, 1);
|
3960 |
+
if (!first.length) first = null;
|
3961 |
+
}
|
3962 |
+
|
3963 |
+
var newMarkers = [first];
|
3964 |
+
if (!sameLine) {
|
3965 |
+
// Fill gap with whole-line-spans
|
3966 |
+
var gap = change.text.length - 2, gapMarkers;
|
3967 |
+
if (gap > 0 && first)
|
3968 |
+
for (var i = 0; i < first.length; ++i)
|
3969 |
+
if (first[i].to == null)
|
3970 |
+
(gapMarkers || (gapMarkers = [])).push({from: null, to: null, marker: first[i].marker});
|
3971 |
+
for (var i = 0; i < gap; ++i)
|
3972 |
+
newMarkers.push(gapMarkers);
|
3973 |
+
newMarkers.push(last);
|
3974 |
+
}
|
3975 |
+
return newMarkers;
|
3976 |
+
}
|
3977 |
+
|
3978 |
+
function mergeOldSpans(doc, change) {
|
3979 |
+
var old = getOldSpans(doc, change);
|
3980 |
+
var stretched = stretchSpansOverChange(doc, change);
|
3981 |
+
if (!old) return stretched;
|
3982 |
+
if (!stretched) return old;
|
3983 |
+
|
3984 |
+
for (var i = 0; i < old.length; ++i) {
|
3985 |
+
var oldCur = old[i], stretchCur = stretched[i];
|
3986 |
+
if (oldCur && stretchCur) {
|
3987 |
+
spans: for (var j = 0; j < stretchCur.length; ++j) {
|
3988 |
+
var span = stretchCur[j];
|
3989 |
+
for (var k = 0; k < oldCur.length; ++k)
|
3990 |
+
if (oldCur[k].marker == span.marker) continue spans;
|
3991 |
+
oldCur.push(span);
|
3992 |
+
}
|
3993 |
+
} else if (stretchCur) {
|
3994 |
+
old[i] = stretchCur;
|
3995 |
+
}
|
3996 |
+
}
|
3997 |
+
return old;
|
3998 |
+
}
|
3999 |
+
|
4000 |
+
function removeReadOnlyRanges(doc, from, to) {
|
4001 |
+
var markers = null;
|
4002 |
+
doc.iter(from.line, to.line + 1, function(line) {
|
4003 |
+
if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) {
|
4004 |
+
var mark = line.markedSpans[i].marker;
|
4005 |
+
if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
|
4006 |
+
(markers || (markers = [])).push(mark);
|
4007 |
+
}
|
4008 |
+
});
|
4009 |
+
if (!markers) return null;
|
4010 |
+
var parts = [{from: from, to: to}];
|
4011 |
+
for (var i = 0; i < markers.length; ++i) {
|
4012 |
+
var mk = markers[i], m = mk.find();
|
4013 |
+
for (var j = 0; j < parts.length; ++j) {
|
4014 |
+
var p = parts[j];
|
4015 |
+
if (posLess(p.to, m.from) || posLess(m.to, p.from)) continue;
|
4016 |
+
var newParts = [j, 1];
|
4017 |
+
if (posLess(p.from, m.from) || !mk.inclusiveLeft && posEq(p.from, m.from))
|
4018 |
+
newParts.push({from: p.from, to: m.from});
|
4019 |
+
if (posLess(m.to, p.to) || !mk.inclusiveRight && posEq(p.to, m.to))
|
4020 |
+
newParts.push({from: m.to, to: p.to});
|
4021 |
+
parts.splice.apply(parts, newParts);
|
4022 |
+
j += newParts.length - 1;
|
4023 |
+
}
|
4024 |
+
}
|
4025 |
+
return parts;
|
4026 |
+
}
|
4027 |
+
|
4028 |
+
function collapsedSpanAt(line, ch) {
|
4029 |
+
var sps = sawCollapsedSpans && line.markedSpans, found;
|
4030 |
+
if (sps) for (var sp, i = 0; i < sps.length; ++i) {
|
4031 |
+
sp = sps[i];
|
4032 |
+
if (!sp.marker.collapsed) continue;
|
4033 |
+
if ((sp.from == null || sp.from < ch) &&
|
4034 |
+
(sp.to == null || sp.to > ch) &&
|
4035 |
+
(!found || found.width < sp.marker.width))
|
4036 |
+
found = sp.marker;
|
4037 |
+
}
|
4038 |
+
return found;
|
4039 |
+
}
|
4040 |
+
function collapsedSpanAtStart(line) { return collapsedSpanAt(line, -1); }
|
4041 |
+
function collapsedSpanAtEnd(line) { return collapsedSpanAt(line, line.text.length + 1); }
|
4042 |
+
|
4043 |
+
function visualLine(doc, line) {
|
4044 |
+
var merged;
|
4045 |
+
while (merged = collapsedSpanAtStart(line))
|
4046 |
+
line = getLine(doc, merged.find().from.line);
|
4047 |
+
return line;
|
4048 |
+
}
|
4049 |
+
|
4050 |
+
function lineIsHidden(doc, line) {
|
4051 |
+
var sps = sawCollapsedSpans && line.markedSpans;
|
4052 |
+
if (sps) for (var sp, i = 0; i < sps.length; ++i) {
|
4053 |
+
sp = sps[i];
|
4054 |
+
if (!sp.marker.collapsed) continue;
|
4055 |
+
if (sp.from == null) return true;
|
4056 |
+
if (sp.marker.replacedWith) continue;
|
4057 |
+
if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
|
4058 |
+
return true;
|
4059 |
+
}
|
4060 |
+
}
|
4061 |
+
function lineIsHiddenInner(doc, line, span) {
|
4062 |
+
if (span.to == null) {
|
4063 |
+
var end = span.marker.find().to, endLine = getLine(doc, end.line);
|
4064 |
+
return lineIsHiddenInner(doc, endLine, getMarkedSpanFor(endLine.markedSpans, span.marker));
|
4065 |
+
}
|
4066 |
+
if (span.marker.inclusiveRight && span.to == line.text.length)
|
4067 |
+
return true;
|
4068 |
+
for (var sp, i = 0; i < line.markedSpans.length; ++i) {
|
4069 |
+
sp = line.markedSpans[i];
|
4070 |
+
if (sp.marker.collapsed && !sp.marker.replacedWith && sp.from == span.to &&
|
4071 |
+
(sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
|
4072 |
+
lineIsHiddenInner(doc, line, sp)) return true;
|
4073 |
+
}
|
4074 |
+
}
|
4075 |
+
|
4076 |
+
function detachMarkedSpans(line) {
|
4077 |
+
var spans = line.markedSpans;
|
4078 |
+
if (!spans) return;
|
4079 |
+
for (var i = 0; i < spans.length; ++i)
|
4080 |
+
spans[i].marker.detachLine(line);
|
4081 |
+
line.markedSpans = null;
|
4082 |
+
}
|
4083 |
+
|
4084 |
+
function attachMarkedSpans(line, spans) {
|
4085 |
+
if (!spans) return;
|
4086 |
+
for (var i = 0; i < spans.length; ++i)
|
4087 |
+
spans[i].marker.attachLine(line);
|
4088 |
+
line.markedSpans = spans;
|
4089 |
+
}
|
4090 |
+
|
4091 |
+
// LINE WIDGETS
|
4092 |
+
|
4093 |
+
var LineWidget = CodeMirror.LineWidget = function(cm, node, options) {
|
4094 |
+
if (options) for (var opt in options) if (options.hasOwnProperty(opt))
|
4095 |
+
this[opt] = options[opt];
|
4096 |
+
this.cm = cm;
|
4097 |
+
this.node = node;
|
4098 |
+
};
|
4099 |
+
eventMixin(LineWidget);
|
4100 |
+
function widgetOperation(f) {
|
4101 |
+
return function() {
|
4102 |
+
var withOp = !this.cm.curOp;
|
4103 |
+
if (withOp) startOperation(this.cm);
|
4104 |
+
try {var result = f.apply(this, arguments);}
|
4105 |
+
finally {if (withOp) endOperation(this.cm);}
|
4106 |
+
return result;
|
4107 |
+
};
|
4108 |
+
}
|
4109 |
+
LineWidget.prototype.clear = widgetOperation(function() {
|
4110 |
+
var ws = this.line.widgets, no = lineNo(this.line);
|
4111 |
+
if (no == null || !ws) return;
|
4112 |
+
for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1);
|
4113 |
+
if (!ws.length) this.line.widgets = null;
|
4114 |
+
var aboveVisible = heightAtLine(this.cm, this.line) < this.cm.doc.scrollTop;
|
4115 |
+
updateLineHeight(this.line, Math.max(0, this.line.height - widgetHeight(this)));
|
4116 |
+
if (aboveVisible) addToScrollPos(this.cm, 0, -this.height);
|
4117 |
+
regChange(this.cm, no, no + 1);
|
4118 |
+
});
|
4119 |
+
LineWidget.prototype.changed = widgetOperation(function() {
|
4120 |
+
var oldH = this.height;
|
4121 |
+
this.height = null;
|
4122 |
+
var diff = widgetHeight(this) - oldH;
|
4123 |
+
if (!diff) return;
|
4124 |
+
updateLineHeight(this.line, this.line.height + diff);
|
4125 |
+
var no = lineNo(this.line);
|
4126 |
+
regChange(this.cm, no, no + 1);
|
4127 |
+
});
|
4128 |
+
|
4129 |
+
function widgetHeight(widget) {
|
4130 |
+
if (widget.height != null) return widget.height;
|
4131 |
+
if (!widget.node.parentNode || widget.node.parentNode.nodeType != 1)
|
4132 |
+
removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, "position: relative"));
|
4133 |
+
return widget.height = widget.node.offsetHeight;
|
4134 |
+
}
|
4135 |
+
|
4136 |
+
function addLineWidget(cm, handle, node, options) {
|
4137 |
+
var widget = new LineWidget(cm, node, options);
|
4138 |
+
if (widget.noHScroll) cm.display.alignWidgets = true;
|
4139 |
+
changeLine(cm, handle, function(line) {
|
4140 |
+
var widgets = line.widgets || (line.widgets = []);
|
4141 |
+
if (widget.insertAt == null) widgets.push(widget);
|
4142 |
+
else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);
|
4143 |
+
widget.line = line;
|
4144 |
+
if (!lineIsHidden(cm.doc, line) || widget.showIfHidden) {
|
4145 |
+
var aboveVisible = heightAtLine(cm, line) < cm.doc.scrollTop;
|
4146 |
+
updateLineHeight(line, line.height + widgetHeight(widget));
|
4147 |
+
if (aboveVisible) addToScrollPos(cm, 0, widget.height);
|
4148 |
+
}
|
4149 |
+
return true;
|
4150 |
+
});
|
4151 |
+
return widget;
|
4152 |
+
}
|
4153 |
+
|
4154 |
+
// LINE DATA STRUCTURE
|
4155 |
+
|
4156 |
+
// Line objects. These hold state related to a line, including
|
4157 |
+
// highlighting info (the styles array).
|
4158 |
+
var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) {
|
4159 |
+
this.text = text;
|
4160 |
+
attachMarkedSpans(this, markedSpans);
|
4161 |
+
this.height = estimateHeight ? estimateHeight(this) : 1;
|
4162 |
+
};
|
4163 |
+
eventMixin(Line);
|
4164 |
+
|
4165 |
+
function updateLine(line, text, markedSpans, estimateHeight) {
|
4166 |
+
line.text = text;
|
4167 |
+
if (line.stateAfter) line.stateAfter = null;
|
4168 |
+
if (line.styles) line.styles = null;
|
4169 |
+
if (line.order != null) line.order = null;
|
4170 |
+
detachMarkedSpans(line);
|
4171 |
+
attachMarkedSpans(line, markedSpans);
|
4172 |
+
var estHeight = estimateHeight ? estimateHeight(line) : 1;
|
4173 |
+
if (estHeight != line.height) updateLineHeight(line, estHeight);
|
4174 |
+
}
|
4175 |
+
|
4176 |
+
function cleanUpLine(line) {
|
4177 |
+
line.parent = null;
|
4178 |
+
detachMarkedSpans(line);
|
4179 |
+
}
|
4180 |
+
|
4181 |
+
// Run the given mode's parser over a line, update the styles
|
4182 |
+
// array, which contains alternating fragments of text and CSS
|
4183 |
+
// classes.
|
4184 |
+
function runMode(cm, text, mode, state, f) {
|
4185 |
+
var flattenSpans = mode.flattenSpans;
|
4186 |
+
if (flattenSpans == null) flattenSpans = cm.options.flattenSpans;
|
4187 |
+
var curStart = 0, curStyle = null;
|
4188 |
+
var stream = new StringStream(text, cm.options.tabSize), style;
|
4189 |
+
if (text == "" && mode.blankLine) mode.blankLine(state);
|
4190 |
+
while (!stream.eol()) {
|
4191 |
+
if (stream.pos > cm.options.maxHighlightLength) {
|
4192 |
+
flattenSpans = false;
|
4193 |
+
// Webkit seems to refuse to render text nodes longer than 57444 characters
|
4194 |
+
stream.pos = Math.min(text.length, stream.start + 50000);
|
4195 |
+
style = null;
|
4196 |
+
} else {
|
4197 |
+
style = mode.token(stream, state);
|
4198 |
+
}
|
4199 |
+
if (!flattenSpans || curStyle != style) {
|
4200 |
+
if (curStart < stream.start) f(stream.start, curStyle);
|
4201 |
+
curStart = stream.start; curStyle = style;
|
4202 |
+
}
|
4203 |
+
stream.start = stream.pos;
|
4204 |
+
}
|
4205 |
+
if (curStart < stream.pos) f(stream.pos, curStyle);
|
4206 |
+
}
|
4207 |
+
|
4208 |
+
function highlightLine(cm, line, state) {
|
4209 |
+
// A styles array always starts with a number identifying the
|
4210 |
+
// mode/overlays that it is based on (for easy invalidation).
|
4211 |
+
var st = [cm.state.modeGen];
|
4212 |
+
// Compute the base array of styles
|
4213 |
+
runMode(cm, line.text, cm.doc.mode, state, function(end, style) {st.push(end, style);});
|
4214 |
+
|
4215 |
+
// Run overlays, adjust style array.
|
4216 |
+
for (var o = 0; o < cm.state.overlays.length; ++o) {
|
4217 |
+
var overlay = cm.state.overlays[o], i = 1, at = 0;
|
4218 |
+
runMode(cm, line.text, overlay.mode, true, function(end, style) {
|
4219 |
+
var start = i;
|
4220 |
+
// Ensure there's a token end at the current position, and that i points at it
|
4221 |
+
while (at < end) {
|
4222 |
+
var i_end = st[i];
|
4223 |
+
if (i_end > end)
|
4224 |
+
st.splice(i, 1, end, st[i+1], i_end);
|
4225 |
+
i += 2;
|
4226 |
+
at = Math.min(end, i_end);
|
4227 |
+
}
|
4228 |
+
if (!style) return;
|
4229 |
+
if (overlay.opaque) {
|
4230 |
+
st.splice(start, i - start, end, style);
|
4231 |
+
i = start + 2;
|
4232 |
+
} else {
|
4233 |
+
for (; start < i; start += 2) {
|
4234 |
+
var cur = st[start+1];
|
4235 |
+
st[start+1] = cur ? cur + " " + style : style;
|
4236 |
+
}
|
4237 |
+
}
|
4238 |
+
});
|
4239 |
+
}
|
4240 |
+
|
4241 |
+
return st;
|
4242 |
+
}
|
4243 |
+
|
4244 |
+
function getLineStyles(cm, line) {
|
4245 |
+
if (!line.styles || line.styles[0] != cm.state.modeGen)
|
4246 |
+
line.styles = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line)));
|
4247 |
+
return line.styles;
|
4248 |
+
}
|
4249 |
+
|
4250 |
+
// Lightweight form of highlight -- proceed over this line and
|
4251 |
+
// update state, but don't save a style array.
|
4252 |
+
function processLine(cm, line, state) {
|
4253 |
+
var mode = cm.doc.mode;
|
4254 |
+
var stream = new StringStream(line.text, cm.options.tabSize);
|
4255 |
+
if (line.text == "" && mode.blankLine) mode.blankLine(state);
|
4256 |
+
while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) {
|
4257 |
+
mode.token(stream, state);
|
4258 |
+
stream.start = stream.pos;
|
4259 |
+
}
|
4260 |
+
}
|
4261 |
+
|
4262 |
+
var styleToClassCache = {};
|
4263 |
+
function styleToClass(style) {
|
4264 |
+
if (!style) return null;
|
4265 |
+
return styleToClassCache[style] ||
|
4266 |
+
(styleToClassCache[style] = "cm-" + style.replace(/ +/g, " cm-"));
|
4267 |
+
}
|
4268 |
+
|
4269 |
+
function lineContent(cm, realLine, measure, copyWidgets) {
|
4270 |
+
var merged, line = realLine, empty = true;
|
4271 |
+
while (merged = collapsedSpanAtStart(line))
|
4272 |
+
line = getLine(cm.doc, merged.find().from.line);
|
4273 |
+
|
4274 |
+
var builder = {pre: elt("pre"), col: 0, pos: 0,
|
4275 |
+
measure: null, measuredSomething: false, cm: cm,
|
4276 |
+
copyWidgets: copyWidgets};
|
4277 |
+
if (line.textClass) builder.pre.className = line.textClass;
|
4278 |
+
|
4279 |
+
do {
|
4280 |
+
if (line.text) empty = false;
|
4281 |
+
builder.measure = line == realLine && measure;
|
4282 |
+
builder.pos = 0;
|
4283 |
+
builder.addToken = builder.measure ? buildTokenMeasure : buildToken;
|
4284 |
+
if ((ie || webkit) && cm.getOption("lineWrapping"))
|
4285 |
+
builder.addToken = buildTokenSplitSpaces(builder.addToken);
|
4286 |
+
var next = insertLineContent(line, builder, getLineStyles(cm, line));
|
4287 |
+
if (measure && line == realLine && !builder.measuredSomething) {
|
4288 |
+
measure[0] = builder.pre.appendChild(zeroWidthElement(cm.display.measure));
|
4289 |
+
builder.measuredSomething = true;
|
4290 |
+
}
|
4291 |
+
if (next) line = getLine(cm.doc, next.to.line);
|
4292 |
+
} while (next);
|
4293 |
+
|
4294 |
+
if (measure && !builder.measuredSomething && !measure[0])
|
4295 |
+
measure[0] = builder.pre.appendChild(empty ? elt("span", "\u00a0") : zeroWidthElement(cm.display.measure));
|
4296 |
+
if (!builder.pre.firstChild && !lineIsHidden(cm.doc, realLine))
|
4297 |
+
builder.pre.appendChild(document.createTextNode("\u00a0"));
|
4298 |
+
|
4299 |
+
var order;
|
4300 |
+
// Work around problem with the reported dimensions of single-char
|
4301 |
+
// direction spans on IE (issue #1129). See also the comment in
|
4302 |
+
// cursorCoords.
|
4303 |
+
if (measure && ie && (order = getOrder(line))) {
|
4304 |
+
var l = order.length - 1;
|
4305 |
+
if (order[l].from == order[l].to) --l;
|
4306 |
+
var last = order[l], prev = order[l - 1];
|
4307 |
+
if (last.from + 1 == last.to && prev && last.level < prev.level) {
|
4308 |
+
var span = measure[builder.pos - 1];
|
4309 |
+
if (span) span.parentNode.insertBefore(span.measureRight = zeroWidthElement(cm.display.measure),
|
4310 |
+
span.nextSibling);
|
4311 |
+
}
|
4312 |
+
}
|
4313 |
+
|
4314 |
+
signal(cm, "renderLine", cm, realLine, builder.pre);
|
4315 |
+
return builder.pre;
|
4316 |
+
}
|
4317 |
+
|
4318 |
+
var tokenSpecialChars = /[\t\u0000-\u0019\u00ad\u200b\u2028\u2029\uFEFF]/g;
|
4319 |
+
function buildToken(builder, text, style, startStyle, endStyle, title) {
|
4320 |
+
if (!text) return;
|
4321 |
+
if (!tokenSpecialChars.test(text)) {
|
4322 |
+
builder.col += text.length;
|
4323 |
+
var content = document.createTextNode(text);
|
4324 |
+
} else {
|
4325 |
+
var content = document.createDocumentFragment(), pos = 0;
|
4326 |
+
while (true) {
|
4327 |
+
tokenSpecialChars.lastIndex = pos;
|
4328 |
+
var m = tokenSpecialChars.exec(text);
|
4329 |
+
var skipped = m ? m.index - pos : text.length - pos;
|
4330 |
+
if (skipped) {
|
4331 |
+
content.appendChild(document.createTextNode(text.slice(pos, pos + skipped)));
|
4332 |
+
builder.col += skipped;
|
4333 |
+
}
|
4334 |
+
if (!m) break;
|
4335 |
+
pos += skipped + 1;
|
4336 |
+
if (m[0] == "\t") {
|
4337 |
+
var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
|
4338 |
+
content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
|
4339 |
+
builder.col += tabWidth;
|
4340 |
+
} else {
|
4341 |
+
var token = elt("span", "\u2022", "cm-invalidchar");
|
4342 |
+
token.title = "\\u" + m[0].charCodeAt(0).toString(16);
|
4343 |
+
content.appendChild(token);
|
4344 |
+
builder.col += 1;
|
4345 |
+
}
|
4346 |
+
}
|
4347 |
+
}
|
4348 |
+
if (style || startStyle || endStyle || builder.measure) {
|
4349 |
+
var fullStyle = style || "";
|
4350 |
+
if (startStyle) fullStyle += startStyle;
|
4351 |
+
if (endStyle) fullStyle += endStyle;
|
4352 |
+
var token = elt("span", [content], fullStyle);
|
4353 |
+
if (title) token.title = title;
|
4354 |
+
return builder.pre.appendChild(token);
|
4355 |
+
}
|
4356 |
+
builder.pre.appendChild(content);
|
4357 |
+
}
|
4358 |
+
|
4359 |
+
function buildTokenMeasure(builder, text, style, startStyle, endStyle) {
|
4360 |
+
var wrapping = builder.cm.options.lineWrapping;
|
4361 |
+
for (var i = 0; i < text.length; ++i) {
|
4362 |
+
var ch = text.charAt(i), start = i == 0;
|
4363 |
+
if (ch >= "\ud800" && ch < "\udbff" && i < text.length - 1) {
|
4364 |
+
ch = text.slice(i, i + 2);
|
4365 |
+
++i;
|
4366 |
+
} else if (i && wrapping && spanAffectsWrapping(text, i)) {
|
4367 |
+
builder.pre.appendChild(elt("wbr"));
|
4368 |
+
}
|
4369 |
+
var old = builder.measure[builder.pos];
|
4370 |
+
var span = builder.measure[builder.pos] =
|
4371 |
+
buildToken(builder, ch, style,
|
4372 |
+
start && startStyle, i == text.length - 1 && endStyle);
|
4373 |
+
if (old) span.leftSide = old.leftSide || old;
|
4374 |
+
// In IE single-space nodes wrap differently than spaces
|
4375 |
+
// embedded in larger text nodes, except when set to
|
4376 |
+
// white-space: normal (issue #1268).
|
4377 |
+
if (ie && wrapping && ch == " " && i && !/\s/.test(text.charAt(i - 1)) &&
|
4378 |
+
i < text.length - 1 && !/\s/.test(text.charAt(i + 1)))
|
4379 |
+
span.style.whiteSpace = "normal";
|
4380 |
+
builder.pos += ch.length;
|
4381 |
+
}
|
4382 |
+
if (text.length) builder.measuredSomething = true;
|
4383 |
+
}
|
4384 |
+
|
4385 |
+
function buildTokenSplitSpaces(inner) {
|
4386 |
+
function split(old) {
|
4387 |
+
var out = " ";
|
4388 |
+
for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0";
|
4389 |
+
out += " ";
|
4390 |
+
return out;
|
4391 |
+
}
|
4392 |
+
return function(builder, text, style, startStyle, endStyle, title) {
|
4393 |
+
return inner(builder, text.replace(/ {3,}/, split), style, startStyle, endStyle, title);
|
4394 |
+
};
|
4395 |
+
}
|
4396 |
+
|
4397 |
+
function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
|
4398 |
+
var widget = !ignoreWidget && marker.replacedWith;
|
4399 |
+
if (widget) {
|
4400 |
+
if (builder.copyWidgets) widget = widget.cloneNode(true);
|
4401 |
+
builder.pre.appendChild(widget);
|
4402 |
+
if (builder.measure) {
|
4403 |
+
if (size) {
|
4404 |
+
builder.measure[builder.pos] = widget;
|
4405 |
+
} else {
|
4406 |
+
var elt = builder.measure[builder.pos] = zeroWidthElement(builder.cm.display.measure);
|
4407 |
+
if (marker.type != "bookmark" || marker.insertLeft)
|
4408 |
+
builder.pre.insertBefore(elt, widget);
|
4409 |
+
else
|
4410 |
+
builder.pre.appendChild(elt);
|
4411 |
+
}
|
4412 |
+
builder.measuredSomething = true;
|
4413 |
+
}
|
4414 |
+
}
|
4415 |
+
builder.pos += size;
|
4416 |
+
}
|
4417 |
+
|
4418 |
+
// Outputs a number of spans to make up a line, taking highlighting
|
4419 |
+
// and marked text into account.
|
4420 |
+
function insertLineContent(line, builder, styles) {
|
4421 |
+
var spans = line.markedSpans, allText = line.text, at = 0;
|
4422 |
+
if (!spans) {
|
4423 |
+
for (var i = 1; i < styles.length; i+=2)
|
4424 |
+
builder.addToken(builder, allText.slice(at, at = styles[i]), styleToClass(styles[i+1]));
|
4425 |
+
return;
|
4426 |
+
}
|
4427 |
+
|
4428 |
+
var len = allText.length, pos = 0, i = 1, text = "", style;
|
4429 |
+
var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;
|
4430 |
+
for (;;) {
|
4431 |
+
if (nextChange == pos) { // Update current marker set
|
4432 |
+
spanStyle = spanEndStyle = spanStartStyle = title = "";
|
4433 |
+
collapsed = null; nextChange = Infinity;
|
4434 |
+
var foundBookmark = null;
|
4435 |
+
for (var j = 0; j < spans.length; ++j) {
|
4436 |
+
var sp = spans[j], m = sp.marker;
|
4437 |
+
if (sp.from <= pos && (sp.to == null || sp.to > pos)) {
|
4438 |
+
if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; }
|
4439 |
+
if (m.className) spanStyle += " " + m.className;
|
4440 |
+
if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle;
|
4441 |
+
if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle;
|
4442 |
+
if (m.title && !title) title = m.title;
|
4443 |
+
if (m.collapsed && (!collapsed || collapsed.marker.size < m.size))
|
4444 |
+
collapsed = sp;
|
4445 |
+
} else if (sp.from > pos && nextChange > sp.from) {
|
4446 |
+
nextChange = sp.from;
|
4447 |
+
}
|
4448 |
+
if (m.type == "bookmark" && sp.from == pos && m.replacedWith) foundBookmark = m;
|
4449 |
+
}
|
4450 |
+
if (collapsed && (collapsed.from || 0) == pos) {
|
4451 |
+
buildCollapsedSpan(builder, (collapsed.to == null ? len : collapsed.to) - pos,
|
4452 |
+
collapsed.marker, collapsed.from == null);
|
4453 |
+
if (collapsed.to == null) return collapsed.marker.find();
|
4454 |
+
}
|
4455 |
+
if (foundBookmark && !collapsed) buildCollapsedSpan(builder, 0, foundBookmark);
|
4456 |
+
}
|
4457 |
+
if (pos >= len) break;
|
4458 |
+
|
4459 |
+
var upto = Math.min(len, nextChange);
|
4460 |
+
while (true) {
|
4461 |
+
if (text) {
|
4462 |
+
var end = pos + text.length;
|
4463 |
+
if (!collapsed) {
|
4464 |
+
var tokenText = end > upto ? text.slice(0, upto - pos) : text;
|
4465 |
+
builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
|
4466 |
+
spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title);
|
4467 |
+
}
|
4468 |
+
if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}
|
4469 |
+
pos = end;
|
4470 |
+
spanStartStyle = "";
|
4471 |
+
}
|
4472 |
+
text = allText.slice(at, at = styles[i++]);
|
4473 |
+
style = styleToClass(styles[i++]);
|
4474 |
+
}
|
4475 |
+
}
|
4476 |
+
}
|
4477 |
+
|
4478 |
+
// DOCUMENT DATA STRUCTURE
|
4479 |
+
|
4480 |
+
function updateDoc(doc, change, markedSpans, selAfter, estimateHeight) {
|
4481 |
+
function spansFor(n) {return markedSpans ? markedSpans[n] : null;}
|
4482 |
+
function update(line, text, spans) {
|
4483 |
+
updateLine(line, text, spans, estimateHeight);
|
4484 |
+
signalLater(line, "change", line, change);
|
4485 |
+
}
|
4486 |
+
|
4487 |
+
var from = change.from, to = change.to, text = change.text;
|
4488 |
+
var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
|
4489 |
+
var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
|
4490 |
+
|
4491 |
+
// First adjust the line structure
|
4492 |
+
if (from.ch == 0 && to.ch == 0 && lastText == "") {
|
4493 |
+
// This is a whole-line replace. Treated specially to make
|
4494 |
+
// sure line objects move the way they are supposed to.
|
4495 |
+
for (var i = 0, e = text.length - 1, added = []; i < e; ++i)
|
4496 |
+
added.push(new Line(text[i], spansFor(i), estimateHeight));
|
4497 |
+
update(lastLine, lastLine.text, lastSpans);
|
4498 |
+
if (nlines) doc.remove(from.line, nlines);
|
4499 |
+
if (added.length) doc.insert(from.line, added);
|
4500 |
+
} else if (firstLine == lastLine) {
|
4501 |
+
if (text.length == 1) {
|
4502 |
+
update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
|
4503 |
+
} else {
|
4504 |
+
for (var added = [], i = 1, e = text.length - 1; i < e; ++i)
|
4505 |
+
added.push(new Line(text[i], spansFor(i), estimateHeight));
|
4506 |
+
added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));
|
4507 |
+
update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
|
4508 |
+
doc.insert(from.line + 1, added);
|
4509 |
+
}
|
4510 |
+
} else if (text.length == 1) {
|
4511 |
+
update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
|
4512 |
+
doc.remove(from.line + 1, nlines);
|
4513 |
+
} else {
|
4514 |
+
update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
|
4515 |
+
update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
|
4516 |
+
for (var i = 1, e = text.length - 1, added = []; i < e; ++i)
|
4517 |
+
added.push(new Line(text[i], spansFor(i), estimateHeight));
|
4518 |
+
if (nlines > 1) doc.remove(from.line + 1, nlines - 1);
|
4519 |
+
doc.insert(from.line + 1, added);
|
4520 |
+
}
|
4521 |
+
|
4522 |
+
signalLater(doc, "change", doc, change);
|
4523 |
+
setSelection(doc, selAfter.anchor, selAfter.head, null, true);
|
4524 |
+
}
|
4525 |
+
|
4526 |
+
function LeafChunk(lines) {
|
4527 |
+
this.lines = lines;
|
4528 |
+
this.parent = null;
|
4529 |
+
for (var i = 0, e = lines.length, height = 0; i < e; ++i) {
|
4530 |
+
lines[i].parent = this;
|
4531 |
+
height += lines[i].height;
|
4532 |
+
}
|
4533 |
+
this.height = height;
|
4534 |
+
}
|
4535 |
+
|
4536 |
+
LeafChunk.prototype = {
|
4537 |
+
chunkSize: function() { return this.lines.length; },
|
4538 |
+
removeInner: function(at, n) {
|
4539 |
+
for (var i = at, e = at + n; i < e; ++i) {
|
4540 |
+
var line = this.lines[i];
|
4541 |
+
this.height -= line.height;
|
4542 |
+
cleanUpLine(line);
|
4543 |
+
signalLater(line, "delete");
|
4544 |
+
}
|
4545 |
+
this.lines.splice(at, n);
|
4546 |
+
},
|
4547 |
+
collapse: function(lines) {
|
4548 |
+
lines.splice.apply(lines, [lines.length, 0].concat(this.lines));
|
4549 |
+
},
|
4550 |
+
insertInner: function(at, lines, height) {
|
4551 |
+
this.height += height;
|
4552 |
+
this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
|
4553 |
+
for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this;
|
4554 |
+
},
|
4555 |
+
iterN: function(at, n, op) {
|
4556 |
+
for (var e = at + n; at < e; ++at)
|
4557 |
+
if (op(this.lines[at])) return true;
|
4558 |
+
}
|
4559 |
+
};
|
4560 |
+
|
4561 |
+
function BranchChunk(children) {
|
4562 |
+
this.children = children;
|
4563 |
+
var size = 0, height = 0;
|
4564 |
+
for (var i = 0, e = children.length; i < e; ++i) {
|
4565 |
+
var ch = children[i];
|
4566 |
+
size += ch.chunkSize(); height += ch.height;
|
4567 |
+
ch.parent = this;
|
4568 |
+
}
|
4569 |
+
this.size = size;
|
4570 |
+
this.height = height;
|
4571 |
+
this.parent = null;
|
4572 |
+
}
|
4573 |
+
|
4574 |
+
BranchChunk.prototype = {
|
4575 |
+
chunkSize: function() { return this.size; },
|
4576 |
+
removeInner: function(at, n) {
|
4577 |
+
this.size -= n;
|
4578 |
+
for (var i = 0; i < this.children.length; ++i) {
|
4579 |
+
var child = this.children[i], sz = child.chunkSize();
|
4580 |
+
if (at < sz) {
|
4581 |
+
var rm = Math.min(n, sz - at), oldHeight = child.height;
|
4582 |
+
child.removeInner(at, rm);
|
4583 |
+
this.height -= oldHeight - child.height;
|
4584 |
+
if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }
|
4585 |
+
if ((n -= rm) == 0) break;
|
4586 |
+
at = 0;
|
4587 |
+
} else at -= sz;
|
4588 |
+
}
|
4589 |
+
if (this.size - n < 25) {
|
4590 |
+
var lines = [];
|
4591 |
+
this.collapse(lines);
|
4592 |
+
this.children = [new LeafChunk(lines)];
|
4593 |
+
this.children[0].parent = this;
|
4594 |
+
}
|
4595 |
+
},
|
4596 |
+
collapse: function(lines) {
|
4597 |
+
for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines);
|
4598 |
+
},
|
4599 |
+
insertInner: function(at, lines, height) {
|
4600 |
+
this.size += lines.length;
|
4601 |
+
this.height += height;
|
4602 |
+
for (var i = 0, e = this.children.length; i < e; ++i) {
|
4603 |
+
var child = this.children[i], sz = child.chunkSize();
|
4604 |
+
if (at <= sz) {
|
4605 |
+
child.insertInner(at, lines, height);
|
4606 |
+
if (child.lines && child.lines.length > 50) {
|
4607 |
+
while (child.lines.length > 50) {
|
4608 |
+
var spilled = child.lines.splice(child.lines.length - 25, 25);
|
4609 |
+
var newleaf = new LeafChunk(spilled);
|
4610 |
+
child.height -= newleaf.height;
|
4611 |
+
this.children.splice(i + 1, 0, newleaf);
|
4612 |
+
newleaf.parent = this;
|
4613 |
+
}
|
4614 |
+
this.maybeSpill();
|
4615 |
+
}
|
4616 |
+
break;
|
4617 |
+
}
|
4618 |
+
at -= sz;
|
4619 |
+
}
|
4620 |
+
},
|
4621 |
+
maybeSpill: function() {
|
4622 |
+
if (this.children.length <= 10) return;
|
4623 |
+
var me = this;
|
4624 |
+
do {
|
4625 |
+
var spilled = me.children.splice(me.children.length - 5, 5);
|
4626 |
+
var sibling = new BranchChunk(spilled);
|
4627 |
+
if (!me.parent) { // Become the parent node
|
4628 |
+
var copy = new BranchChunk(me.children);
|
4629 |
+
copy.parent = me;
|
4630 |
+
me.children = [copy, sibling];
|
4631 |
+
me = copy;
|
4632 |
+
} else {
|
4633 |
+
me.size -= sibling.size;
|
4634 |
+
me.height -= sibling.height;
|
4635 |
+
var myIndex = indexOf(me.parent.children, me);
|
4636 |
+
me.parent.children.splice(myIndex + 1, 0, sibling);
|
4637 |
+
}
|
4638 |
+
sibling.parent = me.parent;
|
4639 |
+
} while (me.children.length > 10);
|
4640 |
+
me.parent.maybeSpill();
|
4641 |
+
},
|
4642 |
+
iterN: function(at, n, op) {
|
4643 |
+
for (var i = 0, e = this.children.length; i < e; ++i) {
|
4644 |
+
var child = this.children[i], sz = child.chunkSize();
|
4645 |
+
if (at < sz) {
|
4646 |
+
var used = Math.min(n, sz - at);
|
4647 |
+
if (child.iterN(at, used, op)) return true;
|
4648 |
+
if ((n -= used) == 0) break;
|
4649 |
+
at = 0;
|
4650 |
+
} else at -= sz;
|
4651 |
+
}
|
4652 |
+
}
|
4653 |
+
};
|
4654 |
+
|
4655 |
+
var nextDocId = 0;
|
4656 |
+
var Doc = CodeMirror.Doc = function(text, mode, firstLine) {
|
4657 |
+
if (!(this instanceof Doc)) return new Doc(text, mode, firstLine);
|
4658 |
+
if (firstLine == null) firstLine = 0;
|
4659 |
+
|
4660 |
+
BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
|
4661 |
+
this.first = firstLine;
|
4662 |
+
this.scrollTop = this.scrollLeft = 0;
|
4663 |
+
this.cantEdit = false;
|
4664 |
+
this.history = makeHistory();
|
4665 |
+
this.cleanGeneration = 1;
|
4666 |
+
this.frontier = firstLine;
|
4667 |
+
var start = Pos(firstLine, 0);
|
4668 |
+
this.sel = {from: start, to: start, head: start, anchor: start, shift: false, extend: false, goalColumn: null};
|
4669 |
+
this.id = ++nextDocId;
|
4670 |
+
this.modeOption = mode;
|
4671 |
+
|
4672 |
+
if (typeof text == "string") text = splitLines(text);
|
4673 |
+
updateDoc(this, {from: start, to: start, text: text}, null, {head: start, anchor: start});
|
4674 |
+
};
|
4675 |
+
|
4676 |
+
Doc.prototype = createObj(BranchChunk.prototype, {
|
4677 |
+
constructor: Doc,
|
4678 |
+
iter: function(from, to, op) {
|
4679 |
+
if (op) this.iterN(from - this.first, to - from, op);
|
4680 |
+
else this.iterN(this.first, this.first + this.size, from);
|
4681 |
+
},
|
4682 |
+
|
4683 |
+
insert: function(at, lines) {
|
4684 |
+
var height = 0;
|
4685 |
+
for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height;
|
4686 |
+
this.insertInner(at - this.first, lines, height);
|
4687 |
+
},
|
4688 |
+
remove: function(at, n) { this.removeInner(at - this.first, n); },
|
4689 |
+
|
4690 |
+
getValue: function(lineSep) {
|
4691 |
+
var lines = getLines(this, this.first, this.first + this.size);
|
4692 |
+
if (lineSep === false) return lines;
|
4693 |
+
return lines.join(lineSep || "\n");
|
4694 |
+
},
|
4695 |
+
setValue: function(code) {
|
4696 |
+
var top = Pos(this.first, 0), last = this.first + this.size - 1;
|
4697 |
+
makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
|
4698 |
+
text: splitLines(code), origin: "setValue"},
|
4699 |
+
{head: top, anchor: top}, true);
|
4700 |
+
},
|
4701 |
+
replaceRange: function(code, from, to, origin) {
|
4702 |
+
from = clipPos(this, from);
|
4703 |
+
to = to ? clipPos(this, to) : from;
|
4704 |
+
replaceRange(this, code, from, to, origin);
|
4705 |
+
},
|
4706 |
+
getRange: function(from, to, lineSep) {
|
4707 |
+
var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
|
4708 |
+
if (lineSep === false) return lines;
|
4709 |
+
return lines.join(lineSep || "\n");
|
4710 |
+
},
|
4711 |
+
|
4712 |
+
getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;},
|
4713 |
+
setLine: function(line, text) {
|
4714 |
+
if (isLine(this, line))
|
4715 |
+
replaceRange(this, text, Pos(line, 0), clipPos(this, Pos(line)));
|
4716 |
+
},
|
4717 |
+
removeLine: function(line) {
|
4718 |
+
if (line) replaceRange(this, "", clipPos(this, Pos(line - 1)), clipPos(this, Pos(line)));
|
4719 |
+
else replaceRange(this, "", Pos(0, 0), clipPos(this, Pos(1, 0)));
|
4720 |
+
},
|
4721 |
+
|
4722 |
+
getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);},
|
4723 |
+
getLineNumber: function(line) {return lineNo(line);},
|
4724 |
+
|
4725 |
+
getLineHandleVisualStart: function(line) {
|
4726 |
+
if (typeof line == "number") line = getLine(this, line);
|
4727 |
+
return visualLine(this, line);
|
4728 |
+
},
|
4729 |
+
|
4730 |
+
lineCount: function() {return this.size;},
|
4731 |
+
firstLine: function() {return this.first;},
|
4732 |
+
lastLine: function() {return this.first + this.size - 1;},
|
4733 |
+
|
4734 |
+
clipPos: function(pos) {return clipPos(this, pos);},
|
4735 |
+
|
4736 |
+
getCursor: function(start) {
|
4737 |
+
var sel = this.sel, pos;
|
4738 |
+
if (start == null || start == "head") pos = sel.head;
|
4739 |
+
else if (start == "anchor") pos = sel.anchor;
|
4740 |
+
else if (start == "end" || start === false) pos = sel.to;
|
4741 |
+
else pos = sel.from;
|
4742 |
+
return copyPos(pos);
|
4743 |
+
},
|
4744 |
+
somethingSelected: function() {return !posEq(this.sel.head, this.sel.anchor);},
|
4745 |
+
|
4746 |
+
setCursor: docOperation(function(line, ch, extend) {
|
4747 |
+
var pos = clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line);
|
4748 |
+
if (extend) extendSelection(this, pos);
|
4749 |
+
else setSelection(this, pos, pos);
|
4750 |
+
}),
|
4751 |
+
setSelection: docOperation(function(anchor, head) {
|
4752 |
+
setSelection(this, clipPos(this, anchor), clipPos(this, head || anchor));
|
4753 |
+
}),
|
4754 |
+
extendSelection: docOperation(function(from, to) {
|
4755 |
+
extendSelection(this, clipPos(this, from), to && clipPos(this, to));
|
4756 |
+
}),
|
4757 |
+
|
4758 |
+
getSelection: function(lineSep) {return this.getRange(this.sel.from, this.sel.to, lineSep);},
|
4759 |
+
replaceSelection: function(code, collapse, origin) {
|
4760 |
+
makeChange(this, {from: this.sel.from, to: this.sel.to, text: splitLines(code), origin: origin}, collapse || "around");
|
4761 |
+
},
|
4762 |
+
undo: docOperation(function() {makeChangeFromHistory(this, "undo");}),
|
4763 |
+
redo: docOperation(function() {makeChangeFromHistory(this, "redo");}),
|
4764 |
+
|
4765 |
+
setExtending: function(val) {this.sel.extend = val;},
|
4766 |
+
|
4767 |
+
historySize: function() {
|
4768 |
+
var hist = this.history;
|
4769 |
+
return {undo: hist.done.length, redo: hist.undone.length};
|
4770 |
+
},
|
4771 |
+
clearHistory: function() {this.history = makeHistory(this.history.maxGeneration);},
|
4772 |
+
|
4773 |
+
markClean: function() {
|
4774 |
+
this.cleanGeneration = this.changeGeneration();
|
4775 |
+
},
|
4776 |
+
changeGeneration: function() {
|
4777 |
+
this.history.lastOp = this.history.lastOrigin = null;
|
4778 |
+
return this.history.generation;
|
4779 |
+
},
|
4780 |
+
isClean: function (gen) {
|
4781 |
+
return this.history.generation == (gen || this.cleanGeneration);
|
4782 |
+
},
|
4783 |
+
|
4784 |
+
getHistory: function() {
|
4785 |
+
return {done: copyHistoryArray(this.history.done),
|
4786 |
+
undone: copyHistoryArray(this.history.undone)};
|
4787 |
+
},
|
4788 |
+
setHistory: function(histData) {
|
4789 |
+
var hist = this.history = makeHistory(this.history.maxGeneration);
|
4790 |
+
hist.done = histData.done.slice(0);
|
4791 |
+
hist.undone = histData.undone.slice(0);
|
4792 |
+
},
|
4793 |
+
|
4794 |
+
markText: function(from, to, options) {
|
4795 |
+
return markText(this, clipPos(this, from), clipPos(this, to), options, "range");
|
4796 |
+
},
|
4797 |
+
setBookmark: function(pos, options) {
|
4798 |
+
var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
|
4799 |
+
insertLeft: options && options.insertLeft};
|
4800 |
+
pos = clipPos(this, pos);
|
4801 |
+
return markText(this, pos, pos, realOpts, "bookmark");
|
4802 |
+
},
|
4803 |
+
findMarksAt: function(pos) {
|
4804 |
+
pos = clipPos(this, pos);
|
4805 |
+
var markers = [], spans = getLine(this, pos.line).markedSpans;
|
4806 |
+
if (spans) for (var i = 0; i < spans.length; ++i) {
|
4807 |
+
var span = spans[i];
|
4808 |
+
if ((span.from == null || span.from <= pos.ch) &&
|
4809 |
+
(span.to == null || span.to >= pos.ch))
|
4810 |
+
markers.push(span.marker.parent || span.marker);
|
4811 |
+
}
|
4812 |
+
return markers;
|
4813 |
+
},
|
4814 |
+
getAllMarks: function() {
|
4815 |
+
var markers = [];
|
4816 |
+
this.iter(function(line) {
|
4817 |
+
var sps = line.markedSpans;
|
4818 |
+
if (sps) for (var i = 0; i < sps.length; ++i)
|
4819 |
+
if (sps[i].from != null) markers.push(sps[i].marker);
|
4820 |
+
});
|
4821 |
+
return markers;
|
4822 |
+
},
|
4823 |
+
|
4824 |
+
posFromIndex: function(off) {
|
4825 |
+
var ch, lineNo = this.first;
|
4826 |
+
this.iter(function(line) {
|
4827 |
+
var sz = line.text.length + 1;
|
4828 |
+
if (sz > off) { ch = off; return true; }
|
4829 |
+
off -= sz;
|
4830 |
+
++lineNo;
|
4831 |
+
});
|
4832 |
+
return clipPos(this, Pos(lineNo, ch));
|
4833 |
+
},
|
4834 |
+
indexFromPos: function (coords) {
|
4835 |
+
coords = clipPos(this, coords);
|
4836 |
+
var index = coords.ch;
|
4837 |
+
if (coords.line < this.first || coords.ch < 0) return 0;
|
4838 |
+
this.iter(this.first, coords.line, function (line) {
|
4839 |
+
index += line.text.length + 1;
|
4840 |
+
});
|
4841 |
+
return index;
|
4842 |
+
},
|
4843 |
+
|
4844 |
+
copy: function(copyHistory) {
|
4845 |
+
var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first);
|
4846 |
+
doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;
|
4847 |
+
doc.sel = {from: this.sel.from, to: this.sel.to, head: this.sel.head, anchor: this.sel.anchor,
|
4848 |
+
shift: this.sel.shift, extend: false, goalColumn: this.sel.goalColumn};
|
4849 |
+
if (copyHistory) {
|
4850 |
+
doc.history.undoDepth = this.history.undoDepth;
|
4851 |
+
doc.setHistory(this.getHistory());
|
4852 |
+
}
|
4853 |
+
return doc;
|
4854 |
+
},
|
4855 |
+
|
4856 |
+
linkedDoc: function(options) {
|
4857 |
+
if (!options) options = {};
|
4858 |
+
var from = this.first, to = this.first + this.size;
|
4859 |
+
if (options.from != null && options.from > from) from = options.from;
|
4860 |
+
if (options.to != null && options.to < to) to = options.to;
|
4861 |
+
var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from);
|
4862 |
+
if (options.sharedHist) copy.history = this.history;
|
4863 |
+
(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
|
4864 |
+
copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
|
4865 |
+
return copy;
|
4866 |
+
},
|
4867 |
+
unlinkDoc: function(other) {
|
4868 |
+
if (other instanceof CodeMirror) other = other.doc;
|
4869 |
+
if (this.linked) for (var i = 0; i < this.linked.length; ++i) {
|
4870 |
+
var link = this.linked[i];
|
4871 |
+
if (link.doc != other) continue;
|
4872 |
+
this.linked.splice(i, 1);
|
4873 |
+
other.unlinkDoc(this);
|
4874 |
+
break;
|
4875 |
+
}
|
4876 |
+
// If the histories were shared, split them again
|
4877 |
+
if (other.history == this.history) {
|
4878 |
+
var splitIds = [other.id];
|
4879 |
+
linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true);
|
4880 |
+
other.history = makeHistory();
|
4881 |
+
other.history.done = copyHistoryArray(this.history.done, splitIds);
|
4882 |
+
other.history.undone = copyHistoryArray(this.history.undone, splitIds);
|
4883 |
+
}
|
4884 |
+
},
|
4885 |
+
iterLinkedDocs: function(f) {linkedDocs(this, f);},
|
4886 |
+
|
4887 |
+
getMode: function() {return this.mode;},
|
4888 |
+
getEditor: function() {return this.cm;}
|
4889 |
+
});
|
4890 |
+
|
4891 |
+
Doc.prototype.eachLine = Doc.prototype.iter;
|
4892 |
+
|
4893 |
+
// The Doc methods that should be available on CodeMirror instances
|
4894 |
+
var dontDelegate = "iter insert remove copy getEditor".split(" ");
|
4895 |
+
for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
|
4896 |
+
CodeMirror.prototype[prop] = (function(method) {
|
4897 |
+
return function() {return method.apply(this.doc, arguments);};
|
4898 |
+
})(Doc.prototype[prop]);
|
4899 |
+
|
4900 |
+
eventMixin(Doc);
|
4901 |
+
|
4902 |
+
function linkedDocs(doc, f, sharedHistOnly) {
|
4903 |
+
function propagate(doc, skip, sharedHist) {
|
4904 |
+
if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) {
|
4905 |
+
var rel = doc.linked[i];
|
4906 |
+
if (rel.doc == skip) continue;
|
4907 |
+
var shared = sharedHist && rel.sharedHist;
|
4908 |
+
if (sharedHistOnly && !shared) continue;
|
4909 |
+
f(rel.doc, shared);
|
4910 |
+
propagate(rel.doc, doc, shared);
|
4911 |
+
}
|
4912 |
+
}
|
4913 |
+
propagate(doc, null, true);
|
4914 |
+
}
|
4915 |
+
|
4916 |
+
function attachDoc(cm, doc) {
|
4917 |
+
if (doc.cm) throw new Error("This document is already in use.");
|
4918 |
+
cm.doc = doc;
|
4919 |
+
doc.cm = cm;
|
4920 |
+
estimateLineHeights(cm);
|
4921 |
+
loadMode(cm);
|
4922 |
+
if (!cm.options.lineWrapping) computeMaxLength(cm);
|
4923 |
+
cm.options.mode = doc.modeOption;
|
4924 |
+
regChange(cm);
|
4925 |
+
}
|
4926 |
+
|
4927 |
+
// LINE UTILITIES
|
4928 |
+
|
4929 |
+
function getLine(chunk, n) {
|
4930 |
+
n -= chunk.first;
|
4931 |
+
while (!chunk.lines) {
|
4932 |
+
for (var i = 0;; ++i) {
|
4933 |
+
var child = chunk.children[i], sz = child.chunkSize();
|
4934 |
+
if (n < sz) { chunk = child; break; }
|
4935 |
+
n -= sz;
|
4936 |
+
}
|
4937 |
+
}
|
4938 |
+
return chunk.lines[n];
|
4939 |
+
}
|
4940 |
+
|
4941 |
+
function getBetween(doc, start, end) {
|
4942 |
+
var out = [], n = start.line;
|
4943 |
+
doc.iter(start.line, end.line + 1, function(line) {
|
4944 |
+
var text = line.text;
|
4945 |
+
if (n == end.line) text = text.slice(0, end.ch);
|
4946 |
+
if (n == start.line) text = text.slice(start.ch);
|
4947 |
+
out.push(text);
|
4948 |
+
++n;
|
4949 |
+
});
|
4950 |
+
return out;
|
4951 |
+
}
|
4952 |
+
function getLines(doc, from, to) {
|
4953 |
+
var out = [];
|
4954 |
+
doc.iter(from, to, function(line) { out.push(line.text); });
|
4955 |
+
return out;
|
4956 |
+
}
|
4957 |
+
|
4958 |
+
function updateLineHeight(line, height) {
|
4959 |
+
var diff = height - line.height;
|
4960 |
+
for (var n = line; n; n = n.parent) n.height += diff;
|
4961 |
+
}
|
4962 |
+
|
4963 |
+
function lineNo(line) {
|
4964 |
+
if (line.parent == null) return null;
|
4965 |
+
var cur = line.parent, no = indexOf(cur.lines, line);
|
4966 |
+
for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
|
4967 |
+
for (var i = 0;; ++i) {
|
4968 |
+
if (chunk.children[i] == cur) break;
|
4969 |
+
no += chunk.children[i].chunkSize();
|
4970 |
+
}
|
4971 |
+
}
|
4972 |
+
return no + cur.first;
|
4973 |
+
}
|
4974 |
+
|
4975 |
+
function lineAtHeight(chunk, h) {
|
4976 |
+
var n = chunk.first;
|
4977 |
+
outer: do {
|
4978 |
+
for (var i = 0, e = chunk.children.length; i < e; ++i) {
|
4979 |
+
var child = chunk.children[i], ch = child.height;
|
4980 |
+
if (h < ch) { chunk = child; continue outer; }
|
4981 |
+
h -= ch;
|
4982 |
+
n += child.chunkSize();
|
4983 |
+
}
|
4984 |
+
return n;
|
4985 |
+
} while (!chunk.lines);
|
4986 |
+
for (var i = 0, e = chunk.lines.length; i < e; ++i) {
|
4987 |
+
var line = chunk.lines[i], lh = line.height;
|
4988 |
+
if (h < lh) break;
|
4989 |
+
h -= lh;
|
4990 |
+
}
|
4991 |
+
return n + i;
|
4992 |
+
}
|
4993 |
+
|
4994 |
+
function heightAtLine(cm, lineObj) {
|
4995 |
+
lineObj = visualLine(cm.doc, lineObj);
|
4996 |
+
|
4997 |
+
var h = 0, chunk = lineObj.parent;
|
4998 |
+
for (var i = 0; i < chunk.lines.length; ++i) {
|
4999 |
+
var line = chunk.lines[i];
|
5000 |
+
if (line == lineObj) break;
|
5001 |
+
else h += line.height;
|
5002 |
+
}
|
5003 |
+
for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
|
5004 |
+
for (var i = 0; i < p.children.length; ++i) {
|
5005 |
+
var cur = p.children[i];
|
5006 |
+
if (cur == chunk) break;
|
5007 |
+
else h += cur.height;
|
5008 |
+
}
|
5009 |
+
}
|
5010 |
+
return h;
|
5011 |
+
}
|
5012 |
+
|
5013 |
+
function getOrder(line) {
|
5014 |
+
var order = line.order;
|
5015 |
+
if (order == null) order = line.order = bidiOrdering(line.text);
|
5016 |
+
return order;
|
5017 |
+
}
|
5018 |
+
|
5019 |
+
// HISTORY
|
5020 |
+
|
5021 |
+
function makeHistory(startGen) {
|
5022 |
+
return {
|
5023 |
+
// Arrays of history events. Doing something adds an event to
|
5024 |
+
// done and clears undo. Undoing moves events from done to
|
5025 |
+
// undone, redoing moves them in the other direction.
|
5026 |
+
done: [], undone: [], undoDepth: Infinity,
|
5027 |
+
// Used to track when changes can be merged into a single undo
|
5028 |
+
// event
|
5029 |
+
lastTime: 0, lastOp: null, lastOrigin: null,
|
5030 |
+
// Used by the isClean() method
|
5031 |
+
generation: startGen || 1, maxGeneration: startGen || 1
|
5032 |
+
};
|
5033 |
+
}
|
5034 |
+
|
5035 |
+
function attachLocalSpans(doc, change, from, to) {
|
5036 |
+
var existing = change["spans_" + doc.id], n = 0;
|
5037 |
+
doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) {
|
5038 |
+
if (line.markedSpans)
|
5039 |
+
(existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans;
|
5040 |
+
++n;
|
5041 |
+
});
|
5042 |
+
}
|
5043 |
+
|
5044 |
+
function historyChangeFromChange(doc, change) {
|
5045 |
+
var from = { line: change.from.line, ch: change.from.ch };
|
5046 |
+
var histChange = {from: from, to: changeEnd(change), text: getBetween(doc, change.from, change.to)};
|
5047 |
+
attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
|
5048 |
+
linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true);
|
5049 |
+
return histChange;
|
5050 |
+
}
|
5051 |
+
|
5052 |
+
function addToHistory(doc, change, selAfter, opId) {
|
5053 |
+
var hist = doc.history;
|
5054 |
+
hist.undone.length = 0;
|
5055 |
+
var time = +new Date, cur = lst(hist.done);
|
5056 |
+
|
5057 |
+
if (cur &&
|
5058 |
+
(hist.lastOp == opId ||
|
5059 |
+
hist.lastOrigin == change.origin && change.origin &&
|
5060 |
+
((change.origin.charAt(0) == "+" && doc.cm && hist.lastTime > time - doc.cm.options.historyEventDelay) ||
|
5061 |
+
change.origin.charAt(0) == "*"))) {
|
5062 |
+
// Merge this change into the last event
|
5063 |
+
var last = lst(cur.changes);
|
5064 |
+
if (posEq(change.from, change.to) && posEq(change.from, last.to)) {
|
5065 |
+
// Optimized case for simple insertion -- don't want to add
|
5066 |
+
// new changesets for every character typed
|
5067 |
+
last.to = changeEnd(change);
|
5068 |
+
} else {
|
5069 |
+
// Add new sub-event
|
5070 |
+
cur.changes.push(historyChangeFromChange(doc, change));
|
5071 |
+
}
|
5072 |
+
cur.anchorAfter = selAfter.anchor; cur.headAfter = selAfter.head;
|
5073 |
+
} else {
|
5074 |
+
// Can not be merged, start a new event.
|
5075 |
+
cur = {changes: [historyChangeFromChange(doc, change)],
|
5076 |
+
generation: hist.generation,
|
5077 |
+
anchorBefore: doc.sel.anchor, headBefore: doc.sel.head,
|
5078 |
+
anchorAfter: selAfter.anchor, headAfter: selAfter.head};
|
5079 |
+
hist.done.push(cur);
|
5080 |
+
hist.generation = ++hist.maxGeneration;
|
5081 |
+
while (hist.done.length > hist.undoDepth)
|
5082 |
+
hist.done.shift();
|
5083 |
+
}
|
5084 |
+
hist.lastTime = time;
|
5085 |
+
hist.lastOp = opId;
|
5086 |
+
hist.lastOrigin = change.origin;
|
5087 |
+
}
|
5088 |
+
|
5089 |
+
function removeClearedSpans(spans) {
|
5090 |
+
if (!spans) return null;
|
5091 |
+
for (var i = 0, out; i < spans.length; ++i) {
|
5092 |
+
if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); }
|
5093 |
+
else if (out) out.push(spans[i]);
|
5094 |
+
}
|
5095 |
+
return !out ? spans : out.length ? out : null;
|
5096 |
+
}
|
5097 |
+
|
5098 |
+
function getOldSpans(doc, change) {
|
5099 |
+
var found = change["spans_" + doc.id];
|
5100 |
+
if (!found) return null;
|
5101 |
+
for (var i = 0, nw = []; i < change.text.length; ++i)
|
5102 |
+
nw.push(removeClearedSpans(found[i]));
|
5103 |
+
return nw;
|
5104 |
+
}
|
5105 |
+
|
5106 |
+
// Used both to provide a JSON-safe object in .getHistory, and, when
|
5107 |
+
// detaching a document, to split the history in two
|
5108 |
+
function copyHistoryArray(events, newGroup) {
|
5109 |
+
for (var i = 0, copy = []; i < events.length; ++i) {
|
5110 |
+
var event = events[i], changes = event.changes, newChanges = [];
|
5111 |
+
copy.push({changes: newChanges, anchorBefore: event.anchorBefore, headBefore: event.headBefore,
|
5112 |
+
anchorAfter: event.anchorAfter, headAfter: event.headAfter});
|
5113 |
+
for (var j = 0; j < changes.length; ++j) {
|
5114 |
+
var change = changes[j], m;
|
5115 |
+
newChanges.push({from: change.from, to: change.to, text: change.text});
|
5116 |
+
if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) {
|
5117 |
+
if (indexOf(newGroup, Number(m[1])) > -1) {
|
5118 |
+
lst(newChanges)[prop] = change[prop];
|
5119 |
+
delete change[prop];
|
5120 |
+
}
|
5121 |
+
}
|
5122 |
+
}
|
5123 |
+
}
|
5124 |
+
return copy;
|
5125 |
+
}
|
5126 |
+
|
5127 |
+
// Rebasing/resetting history to deal with externally-sourced changes
|
5128 |
+
|
5129 |
+
function rebaseHistSel(pos, from, to, diff) {
|
5130 |
+
if (to < pos.line) {
|
5131 |
+
pos.line += diff;
|
5132 |
+
} else if (from < pos.line) {
|
5133 |
+
pos.line = from;
|
5134 |
+
pos.ch = 0;
|
5135 |
+
}
|
5136 |
+
}
|
5137 |
+
|
5138 |
+
// Tries to rebase an array of history events given a change in the
|
5139 |
+
// document. If the change touches the same lines as the event, the
|
5140 |
+
// event, and everything 'behind' it, is discarded. If the change is
|
5141 |
+
// before the event, the event's positions are updated. Uses a
|
5142 |
+
// copy-on-write scheme for the positions, to avoid having to
|
5143 |
+
// reallocate them all on every rebase, but also avoid problems with
|
5144 |
+
// shared position objects being unsafely updated.
|
5145 |
+
function rebaseHistArray(array, from, to, diff) {
|
5146 |
+
for (var i = 0; i < array.length; ++i) {
|
5147 |
+
var sub = array[i], ok = true;
|
5148 |
+
for (var j = 0; j < sub.changes.length; ++j) {
|
5149 |
+
var cur = sub.changes[j];
|
5150 |
+
if (!sub.copied) { cur.from = copyPos(cur.from); cur.to = copyPos(cur.to); }
|
5151 |
+
if (to < cur.from.line) {
|
5152 |
+
cur.from.line += diff;
|
5153 |
+
cur.to.line += diff;
|
5154 |
+
} else if (from <= cur.to.line) {
|
5155 |
+
ok = false;
|
5156 |
+
break;
|
5157 |
+
}
|
5158 |
+
}
|
5159 |
+
if (!sub.copied) {
|
5160 |
+
sub.anchorBefore = copyPos(sub.anchorBefore); sub.headBefore = copyPos(sub.headBefore);
|
5161 |
+
sub.anchorAfter = copyPos(sub.anchorAfter); sub.readAfter = copyPos(sub.headAfter);
|
5162 |
+
sub.copied = true;
|
5163 |
+
}
|
5164 |
+
if (!ok) {
|
5165 |
+
array.splice(0, i + 1);
|
5166 |
+
i = 0;
|
5167 |
+
} else {
|
5168 |
+
rebaseHistSel(sub.anchorBefore); rebaseHistSel(sub.headBefore);
|
5169 |
+
rebaseHistSel(sub.anchorAfter); rebaseHistSel(sub.headAfter);
|
5170 |
+
}
|
5171 |
+
}
|
5172 |
+
}
|
5173 |
+
|
5174 |
+
function rebaseHist(hist, change) {
|
5175 |
+
var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
|
5176 |
+
rebaseHistArray(hist.done, from, to, diff);
|
5177 |
+
rebaseHistArray(hist.undone, from, to, diff);
|
5178 |
+
}
|
5179 |
+
|
5180 |
+
// EVENT OPERATORS
|
5181 |
+
|
5182 |
+
function stopMethod() {e_stop(this);}
|
5183 |
+
// Ensure an event has a stop method.
|
5184 |
+
function addStop(event) {
|
5185 |
+
if (!event.stop) event.stop = stopMethod;
|
5186 |
+
return event;
|
5187 |
+
}
|
5188 |
+
|
5189 |
+
function e_preventDefault(e) {
|
5190 |
+
if (e.preventDefault) e.preventDefault();
|
5191 |
+
else e.returnValue = false;
|
5192 |
+
}
|
5193 |
+
function e_stopPropagation(e) {
|
5194 |
+
if (e.stopPropagation) e.stopPropagation();
|
5195 |
+
else e.cancelBubble = true;
|
5196 |
+
}
|
5197 |
+
function e_defaultPrevented(e) {
|
5198 |
+
return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;
|
5199 |
+
}
|
5200 |
+
function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
|
5201 |
+
CodeMirror.e_stop = e_stop;
|
5202 |
+
CodeMirror.e_preventDefault = e_preventDefault;
|
5203 |
+
CodeMirror.e_stopPropagation = e_stopPropagation;
|
5204 |
+
|
5205 |
+
function e_target(e) {return e.target || e.srcElement;}
|
5206 |
+
function e_button(e) {
|
5207 |
+
var b = e.which;
|
5208 |
+
if (b == null) {
|
5209 |
+
if (e.button & 1) b = 1;
|
5210 |
+
else if (e.button & 2) b = 3;
|
5211 |
+
else if (e.button & 4) b = 2;
|
5212 |
+
}
|
5213 |
+
if (mac && e.ctrlKey && b == 1) b = 3;
|
5214 |
+
return b;
|
5215 |
+
}
|
5216 |
+
|
5217 |
+
// EVENT HANDLING
|
5218 |
+
|
5219 |
+
function on(emitter, type, f) {
|
5220 |
+
if (emitter.addEventListener)
|
5221 |
+
emitter.addEventListener(type, f, false);
|
5222 |
+
else if (emitter.attachEvent)
|
5223 |
+
emitter.attachEvent("on" + type, f);
|
5224 |
+
else {
|
5225 |
+
var map = emitter._handlers || (emitter._handlers = {});
|
5226 |
+
var arr = map[type] || (map[type] = []);
|
5227 |
+
arr.push(f);
|
5228 |
+
}
|
5229 |
+
}
|
5230 |
+
|
5231 |
+
function off(emitter, type, f) {
|
5232 |
+
if (emitter.removeEventListener)
|
5233 |
+
emitter.removeEventListener(type, f, false);
|
5234 |
+
else if (emitter.detachEvent)
|
5235 |
+
emitter.detachEvent("on" + type, f);
|
5236 |
+
else {
|
5237 |
+
var arr = emitter._handlers && emitter._handlers[type];
|
5238 |
+
if (!arr) return;
|
5239 |
+
for (var i = 0; i < arr.length; ++i)
|
5240 |
+
if (arr[i] == f) { arr.splice(i, 1); break; }
|
5241 |
+
}
|
5242 |
+
}
|
5243 |
+
|
5244 |
+
function signal(emitter, type /*, values...*/) {
|
5245 |
+
var arr = emitter._handlers && emitter._handlers[type];
|
5246 |
+
if (!arr) return;
|
5247 |
+
var args = Array.prototype.slice.call(arguments, 2);
|
5248 |
+
for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args);
|
5249 |
+
}
|
5250 |
+
|
5251 |
+
var delayedCallbacks, delayedCallbackDepth = 0;
|
5252 |
+
function signalLater(emitter, type /*, values...*/) {
|
5253 |
+
var arr = emitter._handlers && emitter._handlers[type];
|
5254 |
+
if (!arr) return;
|
5255 |
+
var args = Array.prototype.slice.call(arguments, 2);
|
5256 |
+
if (!delayedCallbacks) {
|
5257 |
+
++delayedCallbackDepth;
|
5258 |
+
delayedCallbacks = [];
|
5259 |
+
setTimeout(fireDelayed, 0);
|
5260 |
+
}
|
5261 |
+
function bnd(f) {return function(){f.apply(null, args);};};
|
5262 |
+
for (var i = 0; i < arr.length; ++i)
|
5263 |
+
delayedCallbacks.push(bnd(arr[i]));
|
5264 |
+
}
|
5265 |
+
|
5266 |
+
function signalDOMEvent(cm, e, override) {
|
5267 |
+
signal(cm, override || e.type, cm, e);
|
5268 |
+
return e_defaultPrevented(e) || e.codemirrorIgnore;
|
5269 |
+
}
|
5270 |
+
|
5271 |
+
function fireDelayed() {
|
5272 |
+
--delayedCallbackDepth;
|
5273 |
+
var delayed = delayedCallbacks;
|
5274 |
+
delayedCallbacks = null;
|
5275 |
+
for (var i = 0; i < delayed.length; ++i) delayed[i]();
|
5276 |
+
}
|
5277 |
+
|
5278 |
+
function hasHandler(emitter, type) {
|
5279 |
+
var arr = emitter._handlers && emitter._handlers[type];
|
5280 |
+
return arr && arr.length > 0;
|
5281 |
+
}
|
5282 |
+
|
5283 |
+
CodeMirror.on = on; CodeMirror.off = off; CodeMirror.signal = signal;
|
5284 |
+
|
5285 |
+
function eventMixin(ctor) {
|
5286 |
+
ctor.prototype.on = function(type, f) {on(this, type, f);};
|
5287 |
+
ctor.prototype.off = function(type, f) {off(this, type, f);};
|
5288 |
+
}
|
5289 |
+
|
5290 |
+
// MISC UTILITIES
|
5291 |
+
|
5292 |
+
// Number of pixels added to scroller and sizer to hide scrollbar
|
5293 |
+
var scrollerCutOff = 30;
|
5294 |
+
|
5295 |
+
// Returned or thrown by various protocols to signal 'I'm not
|
5296 |
+
// handling this'.
|
5297 |
+
var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}};
|
5298 |
+
|
5299 |
+
function Delayed() {this.id = null;}
|
5300 |
+
Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}};
|
5301 |
+
|
5302 |
+
// Counts the column offset in a string, taking tabs into account.
|
5303 |
+
// Used mostly to find indentation.
|
5304 |
+
function countColumn(string, end, tabSize, startIndex, startValue) {
|
5305 |
+
if (end == null) {
|
5306 |
+
end = string.search(/[^\s\u00a0]/);
|
5307 |
+
if (end == -1) end = string.length;
|
5308 |
+
}
|
5309 |
+
for (var i = startIndex || 0, n = startValue || 0; i < end; ++i) {
|
5310 |
+
if (string.charAt(i) == "\t") n += tabSize - (n % tabSize);
|
5311 |
+
else ++n;
|
5312 |
+
}
|
5313 |
+
return n;
|
5314 |
+
}
|
5315 |
+
CodeMirror.countColumn = countColumn;
|
5316 |
+
|
5317 |
+
var spaceStrs = [""];
|
5318 |
+
function spaceStr(n) {
|
5319 |
+
while (spaceStrs.length <= n)
|
5320 |
+
spaceStrs.push(lst(spaceStrs) + " ");
|
5321 |
+
return spaceStrs[n];
|
5322 |
+
}
|
5323 |
+
|
5324 |
+
function lst(arr) { return arr[arr.length-1]; }
|
5325 |
+
|
5326 |
+
function selectInput(node) {
|
5327 |
+
if (ios) { // Mobile Safari apparently has a bug where select() is broken.
|
5328 |
+
node.selectionStart = 0;
|
5329 |
+
node.selectionEnd = node.value.length;
|
5330 |
+
} else {
|
5331 |
+
// Suppress mysterious IE10 errors
|
5332 |
+
try { node.select(); }
|
5333 |
+
catch(_e) {}
|
5334 |
+
}
|
5335 |
+
}
|
5336 |
+
|
5337 |
+
function indexOf(collection, elt) {
|
5338 |
+
if (collection.indexOf) return collection.indexOf(elt);
|
5339 |
+
for (var i = 0, e = collection.length; i < e; ++i)
|
5340 |
+
if (collection[i] == elt) return i;
|
5341 |
+
return -1;
|
5342 |
+
}
|
5343 |
+
|
5344 |
+
function createObj(base, props) {
|
5345 |
+
function Obj() {}
|
5346 |
+
Obj.prototype = base;
|
5347 |
+
var inst = new Obj();
|
5348 |
+
if (props) copyObj(props, inst);
|
5349 |
+
return inst;
|
5350 |
+
}
|
5351 |
+
|
5352 |
+
function copyObj(obj, target) {
|
5353 |
+
if (!target) target = {};
|
5354 |
+
for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop];
|
5355 |
+
return target;
|
5356 |
+
}
|
5357 |
+
|
5358 |
+
function emptyArray(size) {
|
5359 |
+
for (var a = [], i = 0; i < size; ++i) a.push(undefined);
|
5360 |
+
return a;
|
5361 |
+
}
|
5362 |
+
|
5363 |
+
function bind(f) {
|
5364 |
+
var args = Array.prototype.slice.call(arguments, 1);
|
5365 |
+
return function(){return f.apply(null, args);};
|
5366 |
+
}
|
5367 |
+
|
5368 |
+
var nonASCIISingleCaseWordChar = /[\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
|
5369 |
+
function isWordChar(ch) {
|
5370 |
+
return /\w/.test(ch) || ch > "\x80" &&
|
5371 |
+
(ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));
|
5372 |
+
}
|
5373 |
+
|
5374 |
+
function isEmpty(obj) {
|
5375 |
+
for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false;
|
5376 |
+
return true;
|
5377 |
+
}
|
5378 |
+
|
5379 |
+
var isExtendingChar = /[\u0300-\u036F\u0483-\u0487\u0488-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\uA66F\uA670-\uA672\uA674-\uA67D\uA69F\udc00-\udfff]/;
|
5380 |
+
|
5381 |
+
// DOM UTILITIES
|
5382 |
+
|
5383 |
+
function elt(tag, content, className, style) {
|
5384 |
+
var e = document.createElement(tag);
|
5385 |
+
if (className) e.className = className;
|
5386 |
+
if (style) e.style.cssText = style;
|
5387 |
+
if (typeof content == "string") setTextContent(e, content);
|
5388 |
+
else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);
|
5389 |
+
return e;
|
5390 |
+
}
|
5391 |
+
|
5392 |
+
function removeChildren(e) {
|
5393 |
+
for (var count = e.childNodes.length; count > 0; --count)
|
5394 |
+
e.removeChild(e.firstChild);
|
5395 |
+
return e;
|
5396 |
+
}
|
5397 |
+
|
5398 |
+
function removeChildrenAndAdd(parent, e) {
|
5399 |
+
return removeChildren(parent).appendChild(e);
|
5400 |
+
}
|
5401 |
+
|
5402 |
+
function setTextContent(e, str) {
|
5403 |
+
if (ie_lt9) {
|
5404 |
+
e.innerHTML = "";
|
5405 |
+
e.appendChild(document.createTextNode(str));
|
5406 |
+
} else e.textContent = str;
|
5407 |
+
}
|
5408 |
+
|
5409 |
+
function getRect(node) {
|
5410 |
+
return node.getBoundingClientRect();
|
5411 |
+
}
|
5412 |
+
CodeMirror.replaceGetRect = function(f) { getRect = f; };
|
5413 |
+
|
5414 |
+
// FEATURE DETECTION
|
5415 |
+
|
5416 |
+
// Detect drag-and-drop
|
5417 |
+
var dragAndDrop = function() {
|
5418 |
+
// There is *some* kind of drag-and-drop support in IE6-8, but I
|
5419 |
+
// couldn't get it to work yet.
|
5420 |
+
if (ie_lt9) return false;
|
5421 |
+
var div = elt('div');
|
5422 |
+
return "draggable" in div || "dragDrop" in div;
|
5423 |
+
}();
|
5424 |
+
|
5425 |
+
// For a reason I have yet to figure out, some browsers disallow
|
5426 |
+
// word wrapping between certain characters *only* if a new inline
|
5427 |
+
// element is started between them. This makes it hard to reliably
|
5428 |
+
// measure the position of things, since that requires inserting an
|
5429 |
+
// extra span. This terribly fragile set of tests matches the
|
5430 |
+
// character combinations that suffer from this phenomenon on the
|
5431 |
+
// various browsers.
|
5432 |
+
function spanAffectsWrapping() { return false; }
|
5433 |
+
if (gecko) // Only for "$'"
|
5434 |
+
spanAffectsWrapping = function(str, i) {
|
5435 |
+
return str.charCodeAt(i - 1) == 36 && str.charCodeAt(i) == 39;
|
5436 |
+
};
|
5437 |
+
else if (safari && !/Version\/([6-9]|\d\d)\b/.test(navigator.userAgent))
|
5438 |
+
spanAffectsWrapping = function(str, i) {
|
5439 |
+
return /\-[^ \-?]|\?[^ !\'\"\),.\-\/:;\?\]\}]/.test(str.slice(i - 1, i + 1));
|
5440 |
+
};
|
5441 |
+
else if (webkit && !/Chrome\/(?:29|[3-9]\d|\d\d\d)\./.test(navigator.userAgent))
|
5442 |
+
spanAffectsWrapping = function(str, i) {
|
5443 |
+
if (i > 1 && str.charCodeAt(i - 1) == 45) {
|
5444 |
+
if (/\w/.test(str.charAt(i - 2)) && /[^\-?\.]/.test(str.charAt(i))) return true;
|
5445 |
+
if (i > 2 && /[\d\.,]/.test(str.charAt(i - 2)) && /[\d\.,]/.test(str.charAt(i))) return false;
|
5446 |
+
}
|
5447 |
+
return /[~!#%&*)=+}\]|\"\.>,:;][({[<]|-[^\-?\.\u2010-\u201f\u2026]|\?[\w~`@#$%\^&*(_=+{[|><]|…[\w~`@#$%\^&*(_=+{[><]/.test(str.slice(i - 1, i + 1));
|
5448 |
+
};
|
5449 |
+
|
5450 |
+
var knownScrollbarWidth;
|
5451 |
+
function scrollbarWidth(measure) {
|
5452 |
+
if (knownScrollbarWidth != null) return knownScrollbarWidth;
|
5453 |
+
var test = elt("div", null, null, "width: 50px; height: 50px; overflow-x: scroll");
|
5454 |
+
removeChildrenAndAdd(measure, test);
|
5455 |
+
if (test.offsetWidth)
|
5456 |
+
knownScrollbarWidth = test.offsetHeight - test.clientHeight;
|
5457 |
+
return knownScrollbarWidth || 0;
|
5458 |
+
}
|
5459 |
+
|
5460 |
+
var zwspSupported;
|
5461 |
+
function zeroWidthElement(measure) {
|
5462 |
+
if (zwspSupported == null) {
|
5463 |
+
var test = elt("span", "\u200b");
|
5464 |
+
removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
|
5465 |
+
if (measure.firstChild.offsetHeight != 0)
|
5466 |
+
zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !ie_lt8;
|
5467 |
+
}
|
5468 |
+
if (zwspSupported) return elt("span", "\u200b");
|
5469 |
+
else return elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
|
5470 |
+
}
|
5471 |
+
|
5472 |
+
// See if "".split is the broken IE version, if so, provide an
|
5473 |
+
// alternative way to split lines.
|
5474 |
+
var splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) {
|
5475 |
+
var pos = 0, result = [], l = string.length;
|
5476 |
+
while (pos <= l) {
|
5477 |
+
var nl = string.indexOf("\n", pos);
|
5478 |
+
if (nl == -1) nl = string.length;
|
5479 |
+
var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
|
5480 |
+
var rt = line.indexOf("\r");
|
5481 |
+
if (rt != -1) {
|
5482 |
+
result.push(line.slice(0, rt));
|
5483 |
+
pos += rt + 1;
|
5484 |
+
} else {
|
5485 |
+
result.push(line);
|
5486 |
+
pos = nl + 1;
|
5487 |
+
}
|
5488 |
+
}
|
5489 |
+
return result;
|
5490 |
+
} : function(string){return string.split(/\r\n?|\n/);};
|
5491 |
+
CodeMirror.splitLines = splitLines;
|
5492 |
+
|
5493 |
+
var hasSelection = window.getSelection ? function(te) {
|
5494 |
+
try { return te.selectionStart != te.selectionEnd; }
|
5495 |
+
catch(e) { return false; }
|
5496 |
+
} : function(te) {
|
5497 |
+
try {var range = te.ownerDocument.selection.createRange();}
|
5498 |
+
catch(e) {}
|
5499 |
+
if (!range || range.parentElement() != te) return false;
|
5500 |
+
return range.compareEndPoints("StartToEnd", range) != 0;
|
5501 |
+
};
|
5502 |
+
|
5503 |
+
var hasCopyEvent = (function() {
|
5504 |
+
var e = elt("div");
|
5505 |
+
if ("oncopy" in e) return true;
|
5506 |
+
e.setAttribute("oncopy", "return;");
|
5507 |
+
return typeof e.oncopy == 'function';
|
5508 |
+
})();
|
5509 |
+
|
5510 |
+
// KEY NAMING
|
5511 |
+
|
5512 |
+
var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
|
5513 |
+
19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
|
5514 |
+
36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
|
5515 |
+
46: "Delete", 59: ";", 91: "Mod", 92: "Mod", 93: "Mod", 109: "-", 107: "=", 127: "Delete",
|
5516 |
+
186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
|
5517 |
+
221: "]", 222: "'", 63276: "PageUp", 63277: "PageDown", 63275: "End", 63273: "Home",
|
5518 |
+
63234: "Left", 63232: "Up", 63235: "Right", 63233: "Down", 63302: "Insert", 63272: "Delete"};
|
5519 |
+
CodeMirror.keyNames = keyNames;
|
5520 |
+
(function() {
|
5521 |
+
// Number keys
|
5522 |
+
for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i);
|
5523 |
+
// Alphabetic keys
|
5524 |
+
for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);
|
5525 |
+
// Function keys
|
5526 |
+
for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i;
|
5527 |
+
})();
|
5528 |
+
|
5529 |
+
// BIDI HELPERS
|
5530 |
+
|
5531 |
+
function iterateBidiSections(order, from, to, f) {
|
5532 |
+
if (!order) return f(from, to, "ltr");
|
5533 |
+
var found = false;
|
5534 |
+
for (var i = 0; i < order.length; ++i) {
|
5535 |
+
var part = order[i];
|
5536 |
+
if (part.from < to && part.to > from || from == to && part.to == from) {
|
5537 |
+
f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr");
|
5538 |
+
found = true;
|
5539 |
+
}
|
5540 |
+
}
|
5541 |
+
if (!found) f(from, to, "ltr");
|
5542 |
+
}
|
5543 |
+
|
5544 |
+
function bidiLeft(part) { return part.level % 2 ? part.to : part.from; }
|
5545 |
+
function bidiRight(part) { return part.level % 2 ? part.from : part.to; }
|
5546 |
+
|
5547 |
+
function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; }
|
5548 |
+
function lineRight(line) {
|
5549 |
+
var order = getOrder(line);
|
5550 |
+
if (!order) return line.text.length;
|
5551 |
+
return bidiRight(lst(order));
|
5552 |
+
}
|
5553 |
+
|
5554 |
+
function lineStart(cm, lineN) {
|
5555 |
+
var line = getLine(cm.doc, lineN);
|
5556 |
+
var visual = visualLine(cm.doc, line);
|
5557 |
+
if (visual != line) lineN = lineNo(visual);
|
5558 |
+
var order = getOrder(visual);
|
5559 |
+
var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual);
|
5560 |
+
return Pos(lineN, ch);
|
5561 |
+
}
|
5562 |
+
function lineEnd(cm, lineN) {
|
5563 |
+
var merged, line;
|
5564 |
+
while (merged = collapsedSpanAtEnd(line = getLine(cm.doc, lineN)))
|
5565 |
+
lineN = merged.find().to.line;
|
5566 |
+
var order = getOrder(line);
|
5567 |
+
var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line);
|
5568 |
+
return Pos(lineN, ch);
|
5569 |
+
}
|
5570 |
+
|
5571 |
+
function compareBidiLevel(order, a, b) {
|
5572 |
+
var linedir = order[0].level;
|
5573 |
+
if (a == linedir) return true;
|
5574 |
+
if (b == linedir) return false;
|
5575 |
+
return a < b;
|
5576 |
+
}
|
5577 |
+
var bidiOther;
|
5578 |
+
function getBidiPartAt(order, pos) {
|
5579 |
+
for (var i = 0, found; i < order.length; ++i) {
|
5580 |
+
var cur = order[i];
|
5581 |
+
if (cur.from < pos && cur.to > pos) { bidiOther = null; return i; }
|
5582 |
+
if (cur.from == pos || cur.to == pos) {
|
5583 |
+
if (found == null) {
|
5584 |
+
found = i;
|
5585 |
+
} else if (compareBidiLevel(order, cur.level, order[found].level)) {
|
5586 |
+
bidiOther = found;
|
5587 |
+
return i;
|
5588 |
+
} else {
|
5589 |
+
bidiOther = i;
|
5590 |
+
return found;
|
5591 |
+
}
|
5592 |
+
}
|
5593 |
+
}
|
5594 |
+
bidiOther = null;
|
5595 |
+
return found;
|
5596 |
+
}
|
5597 |
+
|
5598 |
+
function moveInLine(line, pos, dir, byUnit) {
|
5599 |
+
if (!byUnit) return pos + dir;
|
5600 |
+
do pos += dir;
|
5601 |
+
while (pos > 0 && isExtendingChar.test(line.text.charAt(pos)));
|
5602 |
+
return pos;
|
5603 |
+
}
|
5604 |
+
|
5605 |
+
// This is somewhat involved. It is needed in order to move
|
5606 |
+
// 'visually' through bi-directional text -- i.e., pressing left
|
5607 |
+
// should make the cursor go left, even when in RTL text. The
|
5608 |
+
// tricky part is the 'jumps', where RTL and LTR text touch each
|
5609 |
+
// other. This often requires the cursor offset to move more than
|
5610 |
+
// one unit, in order to visually move one unit.
|
5611 |
+
function moveVisually(line, start, dir, byUnit) {
|
5612 |
+
var bidi = getOrder(line);
|
5613 |
+
if (!bidi) return moveLogically(line, start, dir, byUnit);
|
5614 |
+
var pos = getBidiPartAt(bidi, start), part = bidi[pos];
|
5615 |
+
var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit);
|
5616 |
+
|
5617 |
+
for (;;) {
|
5618 |
+
if (target > part.from && target < part.to) return target;
|
5619 |
+
if (target == part.from || target == part.to) {
|
5620 |
+
if (getBidiPartAt(bidi, target) == pos) return target;
|
5621 |
+
part = bidi[pos += dir];
|
5622 |
+
return (dir > 0) == part.level % 2 ? part.to : part.from;
|
5623 |
+
} else {
|
5624 |
+
part = bidi[pos += dir];
|
5625 |
+
if (!part) return null;
|
5626 |
+
if ((dir > 0) == part.level % 2)
|
5627 |
+
target = moveInLine(line, part.to, -1, byUnit);
|
5628 |
+
else
|
5629 |
+
target = moveInLine(line, part.from, 1, byUnit);
|
5630 |
+
}
|
5631 |
+
}
|
5632 |
+
}
|
5633 |
+
|
5634 |
+
function moveLogically(line, start, dir, byUnit) {
|
5635 |
+
var target = start + dir;
|
5636 |
+
if (byUnit) while (target > 0 && isExtendingChar.test(line.text.charAt(target))) target += dir;
|
5637 |
+
return target < 0 || target > line.text.length ? null : target;
|
5638 |
+
}
|
5639 |
+
|
5640 |
+
// Bidirectional ordering algorithm
|
5641 |
+
// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
|
5642 |
+
// that this (partially) implements.
|
5643 |
+
|
5644 |
+
// One-char codes used for character types:
|
5645 |
+
// L (L): Left-to-Right
|
5646 |
+
// R (R): Right-to-Left
|
5647 |
+
// r (AL): Right-to-Left Arabic
|
5648 |
+
// 1 (EN): European Number
|
5649 |
+
// + (ES): European Number Separator
|
5650 |
+
// % (ET): European Number Terminator
|
5651 |
+
// n (AN): Arabic Number
|
5652 |
+
// , (CS): Common Number Separator
|
5653 |
+
// m (NSM): Non-Spacing Mark
|
5654 |
+
// b (BN): Boundary Neutral
|
5655 |
+
// s (B): Paragraph Separator
|
5656 |
+
// t (S): Segment Separator
|
5657 |
+
// w (WS): Whitespace
|
5658 |
+
// N (ON): Other Neutrals
|
5659 |
+
|
5660 |
+
// Returns null if characters are ordered as they appear
|
5661 |
+
// (left-to-right), or an array of sections ({from, to, level}
|
5662 |
+
// objects) in the order in which they occur visually.
|
5663 |
+
var bidiOrdering = (function() {
|
5664 |
+
// Character types for codepoints 0 to 0xff
|
5665 |
+
var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL";
|
5666 |
+
// Character types for codepoints 0x600 to 0x6ff
|
5667 |
+
var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmmrrrrrrrrrrrrrrrrrr";
|
5668 |
+
function charType(code) {
|
5669 |
+
if (code <= 0xff) return lowTypes.charAt(code);
|
5670 |
+
else if (0x590 <= code && code <= 0x5f4) return "R";
|
5671 |
+
else if (0x600 <= code && code <= 0x6ff) return arabicTypes.charAt(code - 0x600);
|
5672 |
+
else if (0x700 <= code && code <= 0x8ac) return "r";
|
5673 |
+
else return "L";
|
5674 |
+
}
|
5675 |
+
|
5676 |
+
var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
|
5677 |
+
var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;
|
5678 |
+
// Browsers seem to always treat the boundaries of block elements as being L.
|
5679 |
+
var outerType = "L";
|
5680 |
+
|
5681 |
+
return function(str) {
|
5682 |
+
if (!bidiRE.test(str)) return false;
|
5683 |
+
var len = str.length, types = [];
|
5684 |
+
for (var i = 0, type; i < len; ++i)
|
5685 |
+
types.push(type = charType(str.charCodeAt(i)));
|
5686 |
+
|
5687 |
+
// W1. Examine each non-spacing mark (NSM) in the level run, and
|
5688 |
+
// change the type of the NSM to the type of the previous
|
5689 |
+
// character. If the NSM is at the start of the level run, it will
|
5690 |
+
// get the type of sor.
|
5691 |
+
for (var i = 0, prev = outerType; i < len; ++i) {
|
5692 |
+
var type = types[i];
|
5693 |
+
if (type == "m") types[i] = prev;
|
5694 |
+
else prev = type;
|
5695 |
+
}
|
5696 |
+
|
5697 |
+
// W2. Search backwards from each instance of a European number
|
5698 |
+
// until the first strong type (R, L, AL, or sor) is found. If an
|
5699 |
+
// AL is found, change the type of the European number to Arabic
|
5700 |
+
// number.
|
5701 |
+
// W3. Change all ALs to R.
|
5702 |
+
for (var i = 0, cur = outerType; i < len; ++i) {
|
5703 |
+
var type = types[i];
|
5704 |
+
if (type == "1" && cur == "r") types[i] = "n";
|
5705 |
+
else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; }
|
5706 |
+
}
|
5707 |
+
|
5708 |
+
// W4. A single European separator between two European numbers
|
5709 |
+
// changes to a European number. A single common separator between
|
5710 |
+
// two numbers of the same type changes to that type.
|
5711 |
+
for (var i = 1, prev = types[0]; i < len - 1; ++i) {
|
5712 |
+
var type = types[i];
|
5713 |
+
if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1";
|
5714 |
+
else if (type == "," && prev == types[i+1] &&
|
5715 |
+
(prev == "1" || prev == "n")) types[i] = prev;
|
5716 |
+
prev = type;
|
5717 |
+
}
|
5718 |
+
|
5719 |
+
// W5. A sequence of European terminators adjacent to European
|
5720 |
+
// numbers changes to all European numbers.
|
5721 |
+
// W6. Otherwise, separators and terminators change to Other
|
5722 |
+
// Neutral.
|
5723 |
+
for (var i = 0; i < len; ++i) {
|
5724 |
+
var type = types[i];
|
5725 |
+
if (type == ",") types[i] = "N";
|
5726 |
+
else if (type == "%") {
|
5727 |
+
for (var end = i + 1; end < len && types[end] == "%"; ++end) {}
|
5728 |
+
var replace = (i && types[i-1] == "!") || (end < len - 1 && types[end] == "1") ? "1" : "N";
|
5729 |
+
for (var j = i; j < end; ++j) types[j] = replace;
|
5730 |
+
i = end - 1;
|
5731 |
+
}
|
5732 |
+
}
|
5733 |
+
|
5734 |
+
// W7. Search backwards from each instance of a European number
|
5735 |
+
// until the first strong type (R, L, or sor) is found. If an L is
|
5736 |
+
// found, then change the type of the European number to L.
|
5737 |
+
for (var i = 0, cur = outerType; i < len; ++i) {
|
5738 |
+
var type = types[i];
|
5739 |
+
if (cur == "L" && type == "1") types[i] = "L";
|
5740 |
+
else if (isStrong.test(type)) cur = type;
|
5741 |
+
}
|
5742 |
+
|
5743 |
+
// N1. A sequence of neutrals takes the direction of the
|
5744 |
+
// surrounding strong text if the text on both sides has the same
|
5745 |
+
// direction. European and Arabic numbers act as if they were R in
|
5746 |
+
// terms of their influence on neutrals. Start-of-level-run (sor)
|
5747 |
+
// and end-of-level-run (eor) are used at level run boundaries.
|
5748 |
+
// N2. Any remaining neutrals take the embedding direction.
|
5749 |
+
for (var i = 0; i < len; ++i) {
|
5750 |
+
if (isNeutral.test(types[i])) {
|
5751 |
+
for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {}
|
5752 |
+
var before = (i ? types[i-1] : outerType) == "L";
|
5753 |
+
var after = (end < len - 1 ? types[end] : outerType) == "L";
|
5754 |
+
var replace = before || after ? "L" : "R";
|
5755 |
+
for (var j = i; j < end; ++j) types[j] = replace;
|
5756 |
+
i = end - 1;
|
5757 |
+
}
|
5758 |
+
}
|
5759 |
+
|
5760 |
+
// Here we depart from the documented algorithm, in order to avoid
|
5761 |
+
// building up an actual levels array. Since there are only three
|
5762 |
+
// levels (0, 1, 2) in an implementation that doesn't take
|
5763 |
+
// explicit embedding into account, we can build up the order on
|
5764 |
+
// the fly, without following the level-based algorithm.
|
5765 |
+
var order = [], m;
|
5766 |
+
for (var i = 0; i < len;) {
|
5767 |
+
if (countsAsLeft.test(types[i])) {
|
5768 |
+
var start = i;
|
5769 |
+
for (++i; i < len && countsAsLeft.test(types[i]); ++i) {}
|
5770 |
+
order.push({from: start, to: i, level: 0});
|
5771 |
+
} else {
|
5772 |
+
var pos = i, at = order.length;
|
5773 |
+
for (++i; i < len && types[i] != "L"; ++i) {}
|
5774 |
+
for (var j = pos; j < i;) {
|
5775 |
+
if (countsAsNum.test(types[j])) {
|
5776 |
+
if (pos < j) order.splice(at, 0, {from: pos, to: j, level: 1});
|
5777 |
+
var nstart = j;
|
5778 |
+
for (++j; j < i && countsAsNum.test(types[j]); ++j) {}
|
5779 |
+
order.splice(at, 0, {from: nstart, to: j, level: 2});
|
5780 |
+
pos = j;
|
5781 |
+
} else ++j;
|
5782 |
+
}
|
5783 |
+
if (pos < i) order.splice(at, 0, {from: pos, to: i, level: 1});
|
5784 |
+
}
|
5785 |
+
}
|
5786 |
+
if (order[0].level == 1 && (m = str.match(/^\s+/))) {
|
5787 |
+
order[0].from = m[0].length;
|
5788 |
+
order.unshift({from: 0, to: m[0].length, level: 0});
|
5789 |
+
}
|
5790 |
+
if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
|
5791 |
+
lst(order).to -= m[0].length;
|
5792 |
+
order.push({from: len - m[0].length, to: len, level: 0});
|
5793 |
+
}
|
5794 |
+
if (order[0].level != lst(order).level)
|
5795 |
+
order.push({from: len, to: len, level: order[0].level});
|
5796 |
+
|
5797 |
+
return order;
|
5798 |
+
};
|
5799 |
+
})();
|
5800 |
+
|
5801 |
+
// THE END
|
5802 |
+
|
5803 |
+
CodeMirror.version = "3.15.0";
|
5804 |
+
|
5805 |
+
return CodeMirror;
|
5806 |
+
})();
|
plugin-fw/assets/js/jquery-tiptip/jquery.tipTip 2.js
ADDED
@@ -0,0 +1,191 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*
|
2 |
+
* TipTip
|
3 |
+
* Copyright 2010 Drew Wilson
|
4 |
+
* www.drewwilson.com
|
5 |
+
* code.drewwilson.com/entry/tiptip-jquery-plugin
|
6 |
+
*
|
7 |
+
* Version 1.3 - Updated: Mar. 23, 2010
|
8 |
+
*
|
9 |
+
* This Plug-In will create a custom tooltip to replace the default
|
10 |
+
* browser tooltip. It is extremely lightweight and very smart in
|
11 |
+
* that it detects the edges of the browser window and will make sure
|
12 |
+
* the tooltip stays within the current window size. As a result the
|
13 |
+
* tooltip will adjust itself to be displayed above, below, to the left
|
14 |
+
* or to the right depending on what is necessary to stay within the
|
15 |
+
* browser window. It is completely customizable as well via CSS.
|
16 |
+
*
|
17 |
+
* This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses:
|
18 |
+
* http://www.opensource.org/licenses/mit-license.php
|
19 |
+
* http://www.gnu.org/licenses/gpl.html
|
20 |
+
*/
|
21 |
+
|
22 |
+
(function($){
|
23 |
+
$.fn.tipTip = function(options) {
|
24 |
+
var defaults = {
|
25 |
+
activation: "hover",
|
26 |
+
keepAlive: false,
|
27 |
+
maxWidth: "200px",
|
28 |
+
edgeOffset: 3,
|
29 |
+
defaultPosition: "bottom",
|
30 |
+
delay: 400,
|
31 |
+
fadeIn: 200,
|
32 |
+
fadeOut: 200,
|
33 |
+
attribute: "title",
|
34 |
+
content: false, // HTML or String to fill TipTIp with
|
35 |
+
enter: function(){},
|
36 |
+
exit: function(){}
|
37 |
+
};
|
38 |
+
var opts = $.extend(defaults, options);
|
39 |
+
|
40 |
+
// Setup tip tip elements and render them to the DOM
|
41 |
+
if($("#tiptip_holder").length <= 0){
|
42 |
+
var tiptip_holder = $('<div id="tiptip_holder" style="max-width:'+ opts.maxWidth +';"></div>');
|
43 |
+
var tiptip_content = $('<div id="tiptip_content"></div>');
|
44 |
+
var tiptip_arrow = $('<div id="tiptip_arrow"></div>');
|
45 |
+
$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('<div id="tiptip_arrow_inner"></div>')));
|
46 |
+
} else {
|
47 |
+
var tiptip_holder = $("#tiptip_holder");
|
48 |
+
var tiptip_content = $("#tiptip_content");
|
49 |
+
var tiptip_arrow = $("#tiptip_arrow");
|
50 |
+
}
|
51 |
+
|
52 |
+
return this.each(function(){
|
53 |
+
var org_elem = $(this);
|
54 |
+
if(opts.content){
|
55 |
+
var org_title = opts.content;
|
56 |
+
} else {
|
57 |
+
var org_title = org_elem.attr(opts.attribute);
|
58 |
+
}
|
59 |
+
if(org_title != ""){
|
60 |
+
if(!opts.content){
|
61 |
+
org_elem.removeAttr(opts.attribute); //remove original Attribute
|
62 |
+
}
|
63 |
+
var timeout = false;
|
64 |
+
|
65 |
+
if(opts.activation == "hover"){
|
66 |
+
org_elem.hover(function(){
|
67 |
+
active_tiptip();
|
68 |
+
}, function(){
|
69 |
+
if(!opts.keepAlive || !tiptip_holder.is(':hover')){
|
70 |
+
deactive_tiptip();
|
71 |
+
}
|
72 |
+
});
|
73 |
+
if(opts.keepAlive){
|
74 |
+
tiptip_holder.hover(function(){}, function(){
|
75 |
+
deactive_tiptip();
|
76 |
+
});
|
77 |
+
}
|
78 |
+
} else if(opts.activation == "focus"){
|
79 |
+
org_elem.focus(function(){
|
80 |
+
active_tiptip();
|
81 |
+
}).blur(function(){
|
82 |
+
deactive_tiptip();
|
83 |
+
});
|
84 |
+
} else if(opts.activation == "click"){
|
85 |
+
org_elem.click(function(){
|
86 |
+
active_tiptip();
|
87 |
+
return false;
|
88 |
+
}).hover(function(){},function(){
|
89 |
+
if(!opts.keepAlive){
|
90 |
+
deactive_tiptip();
|
91 |
+
}
|
92 |
+
});
|
93 |
+
if(opts.keepAlive){
|
94 |
+
tiptip_holder.hover(function(){}, function(){
|
95 |
+
deactive_tiptip();
|
96 |
+
});
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
function active_tiptip(){
|
101 |
+
opts.enter.call(this);
|
102 |
+
tiptip_content.html(org_title);
|
103 |
+
tiptip_holder.hide().removeAttr("class").css("margin","0");
|
104 |
+
tiptip_arrow.removeAttr("style");
|
105 |
+
|
106 |
+
var top = parseInt(org_elem.offset()['top']);
|
107 |
+
var left = parseInt(org_elem.offset()['left']);
|
108 |
+
var org_width = parseInt(org_elem.outerWidth());
|
109 |
+
var org_height = parseInt(org_elem.outerHeight());
|
110 |
+
var tip_w = tiptip_holder.outerWidth();
|
111 |
+
var tip_h = tiptip_holder.outerHeight();
|
112 |
+
var w_compare = Math.round((org_width - tip_w) / 2);
|
113 |
+
var h_compare = Math.round((org_height - tip_h) / 2);
|
114 |
+
var marg_left = Math.round(left + w_compare);
|
115 |
+
var marg_top = Math.round(top + org_height + opts.edgeOffset);
|
116 |
+
var t_class = "";
|
117 |
+
var arrow_top = "";
|
118 |
+
var arrow_left = Math.round(tip_w - 12) / 2;
|
119 |
+
|
120 |
+
if(opts.defaultPosition == "bottom"){
|
121 |
+
t_class = "_bottom";
|
122 |
+
} else if(opts.defaultPosition == "top"){
|
123 |
+
t_class = "_top";
|
124 |
+
} else if(opts.defaultPosition == "left"){
|
125 |
+
t_class = "_left";
|
126 |
+
} else if(opts.defaultPosition == "right"){
|
127 |
+
t_class = "_right";
|
128 |
+
}
|
129 |
+
|
130 |
+
var right_compare = (w_compare + left) < parseInt($(window).scrollLeft());
|
131 |
+
var left_compare = (tip_w + left) > parseInt($(window).width());
|
132 |
+
|
133 |
+
if((right_compare && w_compare < 0) || (t_class == "_right" && !left_compare) || (t_class == "_left" && left < (tip_w + opts.edgeOffset + 5))){
|
134 |
+
t_class = "_right";
|
135 |
+
arrow_top = Math.round(tip_h - 13) / 2;
|
136 |
+
arrow_left = -12;
|
137 |
+
marg_left = Math.round(left + org_width + opts.edgeOffset);
|
138 |
+
marg_top = Math.round(top + h_compare);
|
139 |
+
} else if((left_compare && w_compare < 0) || (t_class == "_left" && !right_compare)){
|
140 |
+
t_class = "_left";
|
141 |
+
arrow_top = Math.round(tip_h - 13) / 2;
|
142 |
+
arrow_left = Math.round(tip_w);
|
143 |
+
marg_left = Math.round(left - (tip_w + opts.edgeOffset + 5));
|
144 |
+
marg_top = Math.round(top + h_compare);
|
145 |
+
}
|
146 |
+
|
147 |
+
var top_compare = (top + org_height + opts.edgeOffset + tip_h + 8) > parseInt($(window).height() + $(window).scrollTop());
|
148 |
+
var bottom_compare = ((top + org_height) - (opts.edgeOffset + tip_h + 8)) < 0;
|
149 |
+
|
150 |
+
if(top_compare || (t_class == "_bottom" && top_compare) || (t_class == "_top" && !bottom_compare)){
|
151 |
+
if(t_class == "_top" || t_class == "_bottom"){
|
152 |
+
t_class = "_top";
|
153 |
+
} else {
|
154 |
+
t_class = t_class+"_top";
|
155 |
+
}
|
156 |
+
arrow_top = tip_h;
|
157 |
+
marg_top = Math.round(top - (tip_h + 5 + opts.edgeOffset));
|
158 |
+
} else if(bottom_compare | (t_class == "_top" && bottom_compare) || (t_class == "_bottom" && !top_compare)){
|
159 |
+
if(t_class == "_top" || t_class == "_bottom"){
|
160 |
+
t_class = "_bottom";
|
161 |
+
} else {
|
162 |
+
t_class = t_class+"_bottom";
|
163 |
+
}
|
164 |
+
arrow_top = -12;
|
165 |
+
marg_top = Math.round(top + org_height + opts.edgeOffset);
|
166 |
+
}
|
167 |
+
|
168 |
+
if(t_class == "_right_top" || t_class == "_left_top"){
|
169 |
+
marg_top = marg_top + 5;
|
170 |
+
} else if(t_class == "_right_bottom" || t_class == "_left_bottom"){
|
171 |
+
marg_top = marg_top - 5;
|
172 |
+
}
|
173 |
+
if(t_class == "_left_top" || t_class == "_left_bottom"){
|
174 |
+
marg_left = marg_left + 5;
|
175 |
+
}
|
176 |
+
tiptip_arrow.css({"margin-left": arrow_left+"px", "margin-top": arrow_top+"px"});
|
177 |
+
tiptip_holder.css({"margin-left": marg_left+"px", "margin-top": marg_top+"px"}).attr("class","tip"+t_class);
|
178 |
+
|
179 |
+
if (timeout){ clearTimeout(timeout); }
|
180 |
+
timeout = setTimeout(function(){ tiptip_holder.stop(true,true).fadeIn(opts.fadeIn); }, opts.delay);
|
181 |
+
}
|
182 |
+
|
183 |
+
function deactive_tiptip(){
|
184 |
+
opts.exit.call(this);
|
185 |
+
if (timeout){ clearTimeout(timeout); }
|
186 |
+
tiptip_holder.fadeOut(opts.fadeOut);
|
187 |
+
}
|
188 |
+
}
|
189 |
+
});
|
190 |
+
}
|
191 |
+
})(jQuery);
|
plugin-fw/assets/js/select2/select2.min 2.js
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/*!
|
2 |
+
* Select2 4.0.3
|
3 |
+
* https://select2.github.io
|
4 |
+
*
|
5 |
+
* Released under the MIT license
|
6 |
+
* https://github.com/select2/select2/blob/master/LICENSE.md
|
7 |
+
*/
|
8 |
+
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e("object"==typeof exports?require("jquery"):jQuery)}(function(e){var t=function(){if(e&&e.fn&&e.fn.select2&&e.fn.select2.amd)t=e.fn.select2.amd;var t;return function(){if(!t||!t.requirejs){t?n=t:t={};/**
|
9 |
+
* @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.
|
10 |
+
* Available via the MIT or new BSD license.
|
11 |
+
* see: http://github.com/jrburke/almond for details
|
12 |
+
*/
|
13 |
+
var e,n,i;!function(t){function r(e,t){return $.call(e,t)}function s(e,t){var n,i,r,s,o,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e&&"."===e.charAt(0))if(t){for(o=(e=e.split("/")).length-1,y.nodeIdCompat&&b.test(e[o])&&(e[o]=e[o].replace(b,"")),e=h.slice(0,h.length-1).concat(e),u=0;u<e.length;u+=1)if("."===(p=e[u]))e.splice(u,1),u-=1;else if(".."===p){if(1===u&&(".."===e[2]||".."===e[0]))break;u>0&&(e.splice(u-1,2),u-=2)}e=e.join("/")}else 0===e.indexOf("./")&&(e=e.substring(2));if((h||g)&&f){for(u=(n=e.split("/")).length;u>0;u-=1){if(i=n.slice(0,u).join("/"),h)for(d=h.length;d>0;d-=1)if((r=f[h.slice(0,d).join("/")])&&(r=r[i])){s=r,a=u;break}if(s)break;!l&&g&&g[i]&&(l=g[i],c=u)}!s&&l&&(s=l,a=c),s&&(n.splice(0,a,s),e=n.join("/"))}return e}function o(e,n){return function(){var i=w.call(arguments,0);return"string"!=typeof i[0]&&1===i.length&&i.push(null),h.apply(t,i.concat([e,n]))}}function a(e){return function(t){return s(t,e)}}function l(e){return function(t){m[e]=t}}function c(e){if(r(v,e)){var n=v[e];delete v[e],_[e]=!0,p.apply(t,n)}if(!r(m,e)&&!r(_,e))throw new Error("No "+e);return m[e]}function u(e){var t,n=e?e.indexOf("!"):-1;return n>-1&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function d(e){return function(){return y&&y.config&&y.config[e]||{}}}var p,h,f,g,m={},v={},y={},_={},$=Object.prototype.hasOwnProperty,w=[].slice,b=/\.js$/;f=function(e,t){var n,i=u(e),r=i[0];return e=i[1],r&&(n=c(r=s(r,t))),r?e=n&&n.normalize?n.normalize(e,a(t)):s(e,t):(r=(i=u(e=s(e,t)))[0],e=i[1],r&&(n=c(r))),{f:r?r+"!"+e:e,n:e,pr:r,p:n}},g={require:function(e){return o(e)},exports:function(e){var t=m[e];return void 0!==t?t:m[e]={}},module:function(e){return{id:e,uri:"",exports:m[e],config:d(e)}}},p=function(e,n,i,s){var a,u,d,p,h,y,$=[],w=typeof i;if(s=s||e,"undefined"===w||"function"===w){for(n=!n.length&&i.length?["require","exports","module"]:n,h=0;h<n.length;h+=1)if(p=f(n[h],s),"require"===(u=p.f))$[h]=g.require(e);else if("exports"===u)$[h]=g.exports(e),y=!0;else if("module"===u)a=$[h]=g.module(e);else if(r(m,u)||r(v,u)||r(_,u))$[h]=c(u);else{if(!p.p)throw new Error(e+" missing "+u);p.p.load(p.n,o(s,!0),l(u),{}),$[h]=m[u]}d=i?i.apply(m[e],$):undefined,e&&(a&&a.exports!==t&&a.exports!==m[e]?m[e]=a.exports:d===t&&y||(m[e]=d))}else e&&(m[e]=i)},e=n=h=function(e,n,i,r,s){if("string"==typeof e)return g[e]?g[e](n):c(f(e,n).f);if(!e.splice){if((y=e).deps&&h(y.deps,y.callback),!n)return;n.splice?(e=n,n=i,i=null):e=t}return n=n||function(){},"function"==typeof i&&(i=r,r=s),r?p(t,e,n,i):setTimeout(function(){p(t,e,n,i)},4),h},h.config=function(e){return h(e)},e._defined=m,(i=function(e,t,n){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(n=t,t=[]),r(m,e)||r(v,e)||(v[e]=[e,t,n])}).amd={jQuery:!0}}(),t.requirejs=e,t.require=n,t.define=i}}(),t.define("almond",function(){}),t.define("jquery",[],function(){var t=e||$;return null==t&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),t}),t.define("select2/utils",["jquery"],function(e){function t(e){var t=e.prototype,n=[];for(var i in t)"function"==typeof t[i]&&"constructor"!==i&&n.push(i);return n}var n={};n.Extend=function(e,t){function n(){this.constructor=e}var i={}.hasOwnProperty;for(var r in t)i.call(t,r)&&(e[r]=t[r]);return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e},n.Decorate=function(e,n){function i(){var t=Array.prototype.unshift,i=n.prototype.constructor.length,r=e.prototype.constructor;i>0&&(t.call(arguments,e.prototype.constructor),r=n.prototype.constructor),r.apply(this,arguments)}var r=t(n),s=t(e);n.displayName=e.displayName,i.prototype=new function(){this.constructor=i};for(var o=0;o<s.length;o++){var a=s[o];i.prototype[a]=e.prototype[a]}for(var l=0;l<r.length;l++){var c=r[l];i.prototype[c]=function(e){var t=function(){};e in i.prototype&&(t=i.prototype[e]);var r=n.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),r.apply(this,arguments)}}(c)}return i};var i=function(){this.listeners={}};return i.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},i.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),n[0]._type=e,e in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},i.prototype.invoke=function(e,t){for(var n=0,i=e.length;n<i;n++)e[n].apply(this,t)},n.Observable=i,n.generateChars=function(e){for(var t="",n=0;n<e;n++)t+=Math.floor(36*Math.random()).toString(36);return t},n.bind=function(e,t){return function(){e.apply(t,arguments)}},n._convertData=function(e){for(var t in e){var n=t.split("-"),i=e;if(1!==n.length){for(var r=0;r<n.length;r++){var s=n[r];(s=s.substring(0,1).toLowerCase()+s.substring(1))in i||(i[s]={}),r==n.length-1&&(i[s]=e[t]),i=i[s]}delete e[t]}}return e},n.hasScroll=function(t,n){var i=e(n),r=n.style.overflowX,s=n.style.overflowY;return(r!==s||"hidden"!==s&&"visible"!==s)&&("scroll"===r||"scroll"===s||(i.innerHeight()<n.scrollHeight||i.innerWidth()<n.scrollWidth))},n.escapeMarkup=function(e){var t={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},n.appendMany=function(t,n){if("1.7"===e.fn.jquery.substr(0,3)){var i=e();e.map(n,function(e){i=i.add(e)}),n=i}t.append(n)},n}),t.define("select2/results",["jquery","./utils"],function(e,t){function n(e,t,i){this.$element=e,this.data=i,this.options=t,n.__super__.constructor.call(this)}return t.Extend(n,t.Observable),n.prototype.render=function(){var t=e('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&t.attr("aria-multiselectable","true"),this.$results=t,t},n.prototype.clear=function(){this.$results.empty()},n.prototype.displayMessage=function(t){var n=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var i=e('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),r=this.options.get("translations").get(t.message);i.append(n(r(t.args))),i[0].className+=" select2-results__message",this.$results.append(i)},n.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},n.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<e.results.length;n++){var i=e.results[n],r=this.option(i);t.push(r)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"})},n.prototype.position=function(e,t){t.find(".select2-results").append(e)},n.prototype.sort=function(e){return this.options.get("sorter")(e)},n.prototype.highlightFirstItem=function(){var e=this.$results.find(".select2-results__option[aria-selected]"),t=e.filter("[aria-selected=true]");t.length>0?t.first().trigger("mouseenter"):e.first().trigger("mouseenter"),this.ensureHighlightVisible()},n.prototype.setClasses=function(){var t=this;this.data.current(function(n){var i=e.map(n,function(e){return e.id.toString()});t.$results.find(".select2-results__option[aria-selected]").each(function(){var t=e(this),n=e.data(this,"data"),r=""+n.id;null!=n.element&&n.element.selected||null==n.element&&e.inArray(r,i)>-1?t.attr("aria-selected","true"):t.attr("aria-selected","false")})})},n.prototype.showLoading=function(e){this.hideLoading();var t={disabled:!0,loading:!0,text:this.options.get("translations").get("searching")(e)},n=this.option(t);n.className+=" loading-results",this.$results.prepend(n)},n.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},n.prototype.option=function(t){var n=document.createElement("li");n.className="select2-results__option";var i={role:"treeitem","aria-selected":"false"};t.disabled&&(delete i["aria-selected"],i["aria-disabled"]="true"),null==t.id&&delete i["aria-selected"],null!=t._resultId&&(n.id=t._resultId),t.title&&(n.title=t.title),t.children&&(i.role="group",i["aria-label"]=t.text,delete i["aria-selected"]);for(var r in i){var s=i[r];n.setAttribute(r,s)}if(t.children){var o=e(n),a=document.createElement("strong");a.className="select2-results__group";e(a);this.template(t,a);for(var l=[],c=0;c<t.children.length;c++){var u=t.children[c],d=this.option(u);l.push(d)}var p=e("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});p.append(l),o.append(a),o.append(p)}else this.template(t,n);return e.data(n,"data",t),n},n.prototype.bind=function(t,n){var i=this,r=t.id+"-results";this.$results.attr("id",r),t.on("results:all",function(e){i.clear(),i.append(e.data),t.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),t.on("results:append",function(e){i.append(e.data),t.isOpen()&&i.setClasses()}),t.on("query",function(e){i.hideMessages(),i.showLoading(e)}),t.on("select",function(){t.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(i.setClasses(),i.highlightFirstItem())}),t.on("open",function(){i.$results.attr("aria-expanded","true"),i.$results.attr("aria-hidden","false"),i.setClasses(),i.ensureHighlightVisible()}),t.on("close",function(){i.$results.attr("aria-expanded","false"),i.$results.attr("aria-hidden","true"),i.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=i.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=i.getHighlightedResults();if(0!==e.length){var t=e.data("data");"true"==e.attr("aria-selected")?i.trigger("close",{}):i.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=i.getHighlightedResults(),t=i.$results.find("[aria-selected]"),n=t.index(e);if(0!==n){var r=n-1;0===e.length&&(r=0);var s=t.eq(r);s.trigger("mouseenter");var o=i.$results.offset().top,a=s.offset().top,l=i.$results.scrollTop()+(a-o);0===r?i.$results.scrollTop(0):a-o<0&&i.$results.scrollTop(l)}}),t.on("results:next",function(){var e=i.getHighlightedResults(),t=i.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var r=t.eq(n);r.trigger("mouseenter");var s=i.$results.offset().top+i.$results.outerHeight(!1),o=r.offset().top+r.outerHeight(!1),a=i.$results.scrollTop()+o-s;0===n?i.$results.scrollTop(0):o>s&&i.$results.scrollTop(a)}}),t.on("results:focus",function(e){e.element.addClass("select2-results__option--highlighted")}),t.on("results:message",function(e){i.displayMessage(e)}),e.fn.mousewheel&&this.$results.on("mousewheel",function(e){var t=i.$results.scrollTop(),n=i.$results.get(0).scrollHeight-t+e.deltaY,r=e.deltaY>0&&t-e.deltaY<=0,s=e.deltaY<0&&n<=i.$results.height();r?(i.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):s&&(i.$results.scrollTop(i.$results.get(0).scrollHeight-i.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(t){var n=e(this),r=n.data("data");"true"!==n.attr("aria-selected")?i.trigger("select",{originalEvent:t,data:r}):i.options.get("multiple")?i.trigger("unselect",{originalEvent:t,data:r}):i.trigger("close",{})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(t){var n=e(this).data("data");i.getHighlightedResults().removeClass("select2-results__option--highlighted"),i.trigger("results:focus",{data:n,element:e(this)})})},n.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},n.prototype.destroy=function(){this.$results.remove()},n.prototype.ensureHighlightVisible=function(){var e=this.getHighlightedResults();if(0!==e.length){var t=this.$results.find("[aria-selected]").index(e),n=this.$results.offset().top,i=e.offset().top,r=this.$results.scrollTop()+(i-n),s=i-n;r-=2*e.outerHeight(!1),t<=2?this.$results.scrollTop(0):(s>this.$results.outerHeight()||s<0)&&this.$results.scrollTop(r)}},n.prototype.template=function(t,n){var i=this.options.get("templateResult"),r=this.options.get("escapeMarkup"),s=i(t,n);null==s?n.style.display="none":"string"==typeof s?n.innerHTML=r(s):e(n).append(s)},n}),t.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}}),t.define("select2/selection/base",["jquery","../utils","../keys"],function(e,t,n){function i(e,t){this.$element=e,this.options=t,i.__super__.constructor.call(this)}return t.Extend(i,t.Observable),i.prototype.render=function(){var t=e('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),t.attr("title",this.$element.attr("title")),t.attr("tabindex",this._tabindex),this.$selection=t,t},i.prototype.bind=function(e,t){var i=this,r=(e.id,e.id+"-results");this.container=e,this.$selection.on("focus",function(e){i.trigger("focus",e)}),this.$selection.on("blur",function(e){i._handleBlur(e)}),this.$selection.on("keydown",function(e){i.trigger("keypress",e),e.which===n.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){i.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){i.update(e.data)}),e.on("open",function(){i.$selection.attr("aria-expanded","true"),i.$selection.attr("aria-owns",r),i._attachCloseHandler(e)}),e.on("close",function(){i.$selection.attr("aria-expanded","false"),i.$selection.removeAttr("aria-activedescendant"),i.$selection.removeAttr("aria-owns"),i.$selection.focus(),i._detachCloseHandler(e)}),e.on("enable",function(){i.$selection.attr("tabindex",i._tabindex)}),e.on("disable",function(){i.$selection.attr("tabindex","-1")})},i.prototype._handleBlur=function(t){var n=this;window.setTimeout(function(){document.activeElement==n.$selection[0]||e.contains(n.$selection[0],document.activeElement)||n.trigger("blur",t)},1)},i.prototype._attachCloseHandler=function(t){e(document.body).on("mousedown.select2."+t.id,function(t){var n=e(t.target).closest(".select2");e(".select2.select2-container--open").each(function(){var t=e(this);this!=n[0]&&t.data("element").select2("close")})})},i.prototype._detachCloseHandler=function(t){e(document.body).off("mousedown.select2."+t.id)},i.prototype.position=function(e,t){t.find(".selection").append(e)},i.prototype.destroy=function(){this._detachCloseHandler(this.container)},i.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},i}),t.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),e},r.prototype.bind=function(e,t){var n=this;r.__super__.bind.apply(this,arguments);var i=e.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",i),this.$selection.attr("aria-labelledby",i),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){}),e.on("focus",function(t){e.isOpen()||n.$selection.focus()}),e.on("selection:update",function(e){n.update(e.data)})},r.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},r.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},r.prototype.selectionContainer=function(){return e("<span></span>")},r.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),i=this.display(t,n);n.empty().append(i),n.prop("title",t.title||t.text)}else this.clear()},r}),t.define("select2/selection/multiple",["jquery","./base","../utils"],function(e,t,n){function i(e,t){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--multiple"),e.html('<ul class="select2-selection__rendered"></ul>'),e},i.prototype.bind=function(t,n){var r=this;i.__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(t){if(!r.options.get("disabled")){var n=e(this).parent().data("data");r.trigger("unselect",{originalEvent:t,data:n})}})},i.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},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('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">×</span></li>')},i.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],i=0;i<e.length;i++){var r=e[i],s=this.selectionContainer(),o=this.display(r,s);s.append(o),s.prop("title",r.title||r.text),s.data("data",r),t.push(s)}var a=this.$selection.find(".select2-selection__rendered");n.appendMany(a,t)}},i}),t.define("select2/selection/placeholder",["../utils"],function(e){function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n)}return t.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},t.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();return n.html(this.display(t)),n.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),n},t.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(t.length>1||n)return e.call(this,t);this.clear();var i=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(i)},t}),t.define("select2/selection/allowClear",["jquery","../keys"],function(e,t){function n(){}return n.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),null==this.placeholder&&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(e){i._handleClear(e)}),t.on("keypress",function(e){i._handleKeyboardClear(e,t)})},n.prototype._handleClear=function(e,t){if(!this.options.get("disabled")){var n=this.$selection.find(".select2-selection__clear");if(0!==n.length){t.stopPropagation();for(var i=n.data("data"),r=0;r<i.length;r++){var s={data:i[r]};if(this.trigger("unselect",s),s.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},n.prototype._handleKeyboardClear=function(e,n,i){i.isOpen()||n.which!=t.DELETE&&n.which!=t.BACKSPACE||this._handleClear(n)},n.prototype.update=function(t,n){if(t.call(this,n),!(this.$selection.find(".select2-selection__placeholder").length>0||0===n.length)){var i=e('<span class="select2-selection__clear">×</span>');i.data("data",n),this.$selection.find(".select2-selection__rendered").prepend(i)}},n}),t.define("select2/selection/search",["jquery","../utils","../keys"],function(e,t,n){function i(e,t,n){e.call(this,t,n)}return i.prototype.render=function(t){var n=e('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=n,this.$search=n.find("input");var i=t.call(this);return this._transferTabIndex(),i},i.prototype.bind=function(e,t,i){var r=this;e.call(this,t,i),t.on("open",function(){r.$search.trigger("focus")}),t.on("close",function(){r.$search.val(""),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){r.$search.attr("aria-activedescendant",e.id)}),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===n.BACKSPACE&&""===r.$search.val()){var t=r.$searchContainer.prev(".select2-selection__choice");if(t.length>0){var i=t.data("data");r.searchRemoveChoice(i),e.preventDefault()}}});var s=document.documentMode,o=s&&s<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(e){o?r.$selection.off("input.search input.searchcheck"):r.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(e){if(o&&"input"===e.type)r.$selection.off("input.search input.searchcheck");else{var t=e.which;t!=n.SHIFT&&t!=n.CTRL&&t!=n.ALT&&t!=n.TAB&&r.handleSearch(e)}})},i.prototype._transferTabIndex=function(e){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},i.prototype.createPlaceholder=function(e,t){this.$search.attr("placeholder",t.text)},i.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),e.call(this,t),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.focus()},i.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var e=this.$search.val();this.trigger("query",{term:e})}this._keyUpPrevented=!1},i.prototype.searchRemoveChoice=function(e,t){this.trigger("unselect",{data:t}),this.$search.val(t.text),this.handleSearch()},i.prototype.resizeSearch=function(){this.$search.css("width","25px");var e="";e=""!==this.$search.attr("placeholder")?this.$selection.find(".select2-selection__rendered").innerWidth():.75*(this.$search.val().length+1)+"em",this.$search.css("width",e)},i}),t.define("select2/selection/eventRelay",["jquery"],function(e){function t(){}return t.prototype.bind=function(t,n,i){var r=this,s=["open","opening","close","closing","select","selecting","unselect","unselecting"],o=["opening","closing","selecting","unselecting"];t.call(this,n,i),n.on("*",function(t,n){if(-1!==e.inArray(t,s)){n=n||{};var i=e.Event("select2:"+t,{params:n});r.$element.trigger(i),-1!==e.inArray(t,o)&&(n.prevented=i.isDefaultPrevented())}})},t}),t.define("select2/translation",["jquery","require"],function(e,t){function n(e){this.dict=e||{}}return n.prototype.all=function(){return this.dict},n.prototype.get=function(e){return this.dict[e]},n.prototype.extend=function(t){this.dict=e.extend({},t.all(),this.dict)},n._cache={},n.loadPath=function(e){if(!(e in n._cache)){var i=t(e);n._cache[e]=i}return new n(n._cache[e])},n}),t.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"}}),t.define("select2/data/base",["../utils"],function(e){function t(e,n){t.__super__.constructor.call(this)}return e.Extend(t,e.Observable),t.prototype.current=function(e){throw new Error("The `current` method must be defined in child classes.")},t.prototype.query=function(e,t){throw new Error("The `query` method must be defined in child classes.")},t.prototype.bind=function(e,t){},t.prototype.destroy=function(){},t.prototype.generateResultId=function(t,n){var i=t.id+"-result-";return i+=e.generateChars(4),null!=n.id?i+="-"+n.id.toString():i+="-"+e.generateChars(4),i},t}),t.define("select2/data/select",["./base","../utils","jquery"],function(e,t,n){function i(e,t){this.$element=e,this.options=t,i.__super__.constructor.call(this)}return t.Extend(i,e),i.prototype.current=function(e){var t=[],i=this;this.$element.find(":selected").each(function(){var e=n(this),r=i.item(e);t.push(r)}),e(t)},i.prototype.select=function(e){var t=this;if(e.selected=!0,n(e.element).is("option"))return e.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(i){var r=[];(e=[e]).push.apply(e,i);for(var s=0;s<e.length;s++){var o=e[s].id;-1===n.inArray(o,r)&&r.push(o)}t.$element.val(r),t.$element.trigger("change")});else{var i=e.id;this.$element.val(i),this.$element.trigger("change")}},i.prototype.unselect=function(e){var t=this;if(this.$element.prop("multiple")){if(e.selected=!1,n(e.element).is("option"))return e.element.selected=!1,void this.$element.trigger("change");this.current(function(i){for(var r=[],s=0;s<i.length;s++){var o=i[s].id;o!==e.id&&-1===n.inArray(o,r)&&r.push(o)}t.$element.val(r),t.$element.trigger("change")})}},i.prototype.bind=function(e,t){var n=this;this.container=e,e.on("select",function(e){n.select(e.data)}),e.on("unselect",function(e){n.unselect(e.data)})},i.prototype.destroy=function(){this.$element.find("*").each(function(){n.removeData(this,"data")})},i.prototype.query=function(e,t){var i=[],r=this;this.$element.children().each(function(){var t=n(this);if(t.is("option")||t.is("optgroup")){var s=r.item(t),o=r.matches(e,s);null!==o&&i.push(o)}}),t({results:i})},i.prototype.addOptions=function(e){t.appendMany(this.$element,e)},i.prototype.option=function(e){var t;e.children?(t=document.createElement("optgroup")).label=e.text:(t=document.createElement("option")).textContent!==undefined?t.textContent=e.text:t.innerText=e.text,e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);var i=n(t),r=this._normalizeItem(e);return r.element=t,n.data(t,"data",r),i},i.prototype.item=function(e){var t={};if(null!=(t=n.data(e[0],"data")))return t;if(e.is("option"))t={id:e.val(),text:e.text(),disabled:e.prop("disabled"),selected:e.prop("selected"),title:e.prop("title")};else if(e.is("optgroup")){t={text:e.prop("label"),children:[],title:e.prop("title")};for(var i=e.children("option"),r=[],s=0;s<i.length;s++){var o=n(i[s]),a=this.item(o);r.push(a)}t.children=r}return t=this._normalizeItem(t),t.element=e[0],n.data(e[0],"data",t),t},i.prototype._normalizeItem=function(e){n.isPlainObject(e)||(e={id:e,text:e});var t={selected:!1,disabled:!1};return null!=(e=n.extend({},{text:""},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),n.extend({},t,e)},i.prototype.matches=function(e,t){return this.options.get("matcher")(e,t)},i}),t.define("select2/data/array",["./select","../utils","jquery"],function(e,t,n){function i(e,t){var n=t.get("data")||[];i.__super__.constructor.call(this,e,t),this.addOptions(this.convertToOptions(n))}return t.Extend(i,e),i.prototype.select=function(e){var t=this.$element.find("option").filter(function(t,n){return n.value==e.id.toString()});0===t.length&&(t=this.option(e),this.addOptions(t)),i.__super__.select.call(this,e)},i.prototype.convertToOptions=function(e){for(var i=this,r=this.$element.find("option"),s=r.map(function(){return i.item(n(this)).id}).get(),o=[],a=0;a<e.length;a++){var l=this._normalizeItem(e[a]);if(n.inArray(l.id,s)>=0){var c=r.filter(function(e){return function(){return n(this).val()==e.id}}(l)),u=this.item(c),d=n.extend(!0,{},l,u),p=this.option(d);c.replaceWith(p)}else{var h=this.option(l);if(l.children){var f=this.convertToOptions(l.children);t.appendMany(h,f)}o.push(h)}}return o},i}),t.define("select2/data/ajax",["./array","../utils","jquery"],function(e,t,n){function i(e,t){this.ajaxOptions=this._applyDefaults(t.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),i.__super__.constructor.call(this,e,t)}return t.Extend(i,e),i.prototype._applyDefaults=function(e){var t={data:function(e){return n.extend({},e,{q:e.term})},transport:function(e,t,i){var r=n.ajax(e);return r.then(t),r.fail(i),r}};return n.extend({},t,e,!0)},i.prototype.processResults=function(e){return e},i.prototype.query=function(e,t){function i(){var i=s.transport(s,function(i){var s=r.processResults(i,e);r.options.get("debug")&&window.console&&console.error&&(s&&s.results&&n.isArray(s.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),t(s)},function(){i.status&&"0"===i.status||r.trigger("results:message",{message:"errorLoading"})});r._request=i}var r=this;null!=this._request&&(n.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var s=n.extend({type:"GET"},this.ajaxOptions);"function"==typeof s.url&&(s.url=s.url.call(this.$element,e)),"function"==typeof s.data&&(s.data=s.data.call(this.$element,e)),this.ajaxOptions.delay&&null!=e.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(i,this.ajaxOptions.delay)):i()},i}),t.define("select2/data/tags",["jquery"],function(e){function t(t,n,i){var r=i.get("tags"),s=i.get("createTag");s!==undefined&&(this.createTag=s);var o=i.get("insertTag");if(o!==undefined&&(this.insertTag=o),t.call(this,n,i),e.isArray(r))for(var a=0;a<r.length;a++){var l=r[a],c=this._normalizeItem(l),u=this.option(c);this.$element.append(u)}}return t.prototype.query=function(e,t,n){function i(e,s){for(var o=e.results,a=0;a<o.length;a++){var l=o[a],c=null!=l.children&&!i({results:l.children},!0);if(l.text===t.term||c)return!s&&(e.data=o,void n(e))}if(s)return!0;var u=r.createTag(t);if(null!=u){var d=r.option(u);d.attr("data-select2-tag",!0),r.addOptions([d]),r.insertTag(o,u)}e.results=o,n(e)}var r=this;this._removeOldTags(),null!=t.term&&null==t.page?e.call(this,t,i):e.call(this,t,n)},t.prototype.createTag=function(t,n){var i=e.trim(n.term);return""===i?null:{id:i,text:i}},t.prototype.insertTag=function(e,t,n){t.unshift(n)},t.prototype._removeOldTags=function(t){this._lastTag;this.$element.find("option[data-select2-tag]").each(function(){this.selected||e(this).remove()})},t}),t.define("select2/data/tokenizer",["jquery"],function(e){function t(e,t,n){var i=n.get("tokenizer");i!==undefined&&(this.tokenizer=i),e.call(this,t,n)}return t.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(".select2-search__field")},t.prototype.query=function(t,n,i){function r(e){s.trigger("select",{data:e})}var s=this;n.term=n.term||"";var o=this.tokenizer(n,this.options,function(t){var n=s._normalizeItem(t);if(!s.$element.find("option").filter(function(){return e(this).val()===n.id}).length){var i=s.option(n);i.attr("data-select2-tag",!0),s._removeOldTags(),s.addOptions([i])}r(n)});o.term!==n.term&&(this.$search.length&&(this.$search.val(o.term),this.$search.focus()),n.term=o.term),t.call(this,n,i)},t.prototype.tokenizer=function(t,n,i,r){for(var s=i.get("tokenSeparators")||[],o=n.term,a=0,l=this.createTag||function(e){return{id:e.term,text:e.term}};a<o.length;){var c=o[a];if(-1!==e.inArray(c,s)){var u=o.substr(0,a),d=l(e.extend({},n,{term:u}));null!=d?(r(d),o=o.substr(a+1)||"",a=0):a++}else a++}return{term:o}},t}),t.define("select2/data/minimumInputLength",[],function(){function e(e,t,n){this.minimumInputLength=n.get("minimumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",t.term.length<this.minimumInputLength?this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),t.define("select2/data/maximumInputLength",[],function(){function e(e,t,n){this.maximumInputLength=n.get("maximumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",this.maximumInputLength>0&&t.term.length>this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),t.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){var i=this;this.current(function(r){var s=null!=r?r.length:0;i.maximumSelectionLength>0&&s>=i.maximumSelectionLength?i.trigger("results:message",{message:"maximumSelected",args:{maximum:i.maximumSelectionLength}}):e.call(i,t,n)})},e}),t.define("select2/dropdown",["jquery","./utils"],function(e,t){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return t.Extend(n,t.Observable),n.prototype.render=function(){var t=e('<span class="select2-dropdown"><span class="select2-results"></span></span>');return t.attr("dir",this.options.get("dir")),this.$dropdown=t,t},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),t.define("select2/dropdown/search",["jquery","../utils"],function(e,t){function n(){}return n.prototype.render=function(t){var n=t.call(this),i=e('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=i,this.$search=i.find("input"),n.prepend(i),n},n.prototype.bind=function(t,n,i){var r=this;t.call(this,n,i),this.$search.on("keydown",function(e){r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(t){e(this).off("keyup")}),this.$search.on("keyup input",function(e){r.handleSearch(e)}),n.on("open",function(){r.$search.attr("tabindex",0),r.$search.focus(),window.setTimeout(function(){r.$search.focus()},0)}),n.on("close",function(){r.$search.attr("tabindex",-1),r.$search.val("")}),n.on("focus",function(){n.isOpen()&&r.$search.focus()}),n.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"))})},n.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},n.prototype.showSearch=function(e,t){return!0},n}),t.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,i)}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),i=t.length-1;i>=0;i--){var r=t[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},e}),t.define("select2/dropdown/infiniteScroll",["jquery"],function(e){function t(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return t.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&this.$results.append(this.$loadingMore)},t.prototype.bind=function(t,n,i){var r=this;t.call(this,n,i),n.on("query",function(e){r.lastParams=e,r.loading=!0}),n.on("query:append",function(e){r.lastParams=e,r.loading=!0}),this.$results.on("scroll",function(){var t=e.contains(document.documentElement,r.$loadingMore[0]);!r.loading&&t&&r.$results.offset().top+r.$results.outerHeight(!1)+50>=r.$loadingMore.offset().top+r.$loadingMore.outerHeight(!1)&&r.loadMore()})},t.prototype.loadMore=function(){this.loading=!0;var t=e.extend({},{page:1},this.lastParams);t.page++,this.trigger("query:append",t)},t.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},t.prototype.createLoadingMore=function(){var t=e('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),n=this.options.get("translations").get("loadingMore");return t.html(n(this.lastParams)),t},t}),t.define("select2/dropdown/attachBody",["jquery","../utils"],function(e,t){function n(t,n,i){this.$dropdownParent=i.get("dropdownParent")||e(document.body),t.call(this,n,i)}return n.prototype.bind=function(e,t,n){var i=this,r=!1;e.call(this,t,n),t.on("open",function(){i._showDropdown(),i._attachPositioningHandler(t),r||(r=!0,t.on("results:all",function(){i._positionDropdown(),i._resizeDropdown()}),t.on("results:append",function(){i._positionDropdown(),i._resizeDropdown()}))}),t.on("close",function(){i._hideDropdown(),i._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},n.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},n.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},n.prototype.render=function(t){var n=e("<span></span>"),i=t.call(this);return n.append(i),this.$dropdownContainer=n,n},n.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},n.prototype._attachPositioningHandler=function(n,i){var r=this,s="scroll.select2."+i.id,o="resize.select2."+i.id,a="orientationchange.select2."+i.id,l=this.$container.parents().filter(t.hasScroll);l.each(function(){e(this).data("select2-scroll-position",{x:e(this).scrollLeft(),y:e(this).scrollTop()})}),l.on(s,function(t){var n=e(this).data("select2-scroll-position");e(this).scrollTop(n.y)}),e(window).on(s+" "+o+" "+a,function(e){r._positionDropdown(),r._resizeDropdown()})},n.prototype._detachPositioningHandler=function(n,i){var r="scroll.select2."+i.id,s="resize.select2."+i.id,o="orientationchange.select2."+i.id;this.$container.parents().filter(t.hasScroll).off(r),e(window).off(r+" "+s+" "+o)},n.prototype._positionDropdown=function(){var t=e(window),n=this.$dropdown.hasClass("select2-dropdown--above"),i=this.$dropdown.hasClass("select2-dropdown--below"),r=null,s=this.$container.offset();s.bottom=s.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=s.top,o.bottom=s.top+o.height;var a={height:this.$dropdown.outerHeight(!1)},l={top:t.scrollTop(),bottom:t.scrollTop()+t.height()},c=l.top<s.top-a.height,u=l.bottom>s.bottom+a.height,d={left:s.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h=p.offset();d.top-=h.top,d.left-=h.left,n||i||(r="below"),u||!c||n?!c&&u&&n&&(r="below"):r="above",("above"==r||n&&"below"!==r)&&(d.top=o.top-h.top-a.height),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)},n.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)},n.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},n}),t.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(t){for(var n=0,i=0;i<t.length;i++){var r=t[i];r.children?n+=e(r.children):n++}return n}function t(e,t,n,i){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=Infinity),e.call(this,t,n,i)}return t.prototype.showSearch=function(t,n){return!(e(n.data.results)<this.minimumResultsForSearch)&&t.call(this,n)},t}),t.define("select2/dropdown/selectOnClose",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("close",function(e){i._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if("select"===n._type||"unselect"===n._type)return}var i=this.getHighlightedResults();if(!(i.length<1)){var r=i.data("data");null!=r.element&&r.element.selected||null==r.element&&r.selected||this.trigger("select",{data:r})}},e}),t.define("select2/dropdown/closeOnSelect",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("select",function(e){i._selectTriggered(e)}),t.on("unselect",function(e){i._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&n.ctrlKey||this.trigger("close",{originalEvent:n,originalSelect2Event:t})},e}),t.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return 1!=t&&(n+="s"),n},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return 1!=e.maximum&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),t.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(e,t,n,i,r,s,o,a,l,c,u,d,p,h,f,g,m,v,y,_,$,w,b,A,x,E,C,O,S){function T(){this.reset()}return T.prototype.apply=function(d){if(null==(d=e.extend(!0,{},this.defaults,d)).dataAdapter){if(null!=d.ajax?d.dataAdapter=f:null!=d.data?d.dataAdapter=h:d.dataAdapter=p,d.minimumInputLength>0&&(d.dataAdapter=c.Decorate(d.dataAdapter,v)),d.maximumInputLength>0&&(d.dataAdapter=c.Decorate(d.dataAdapter,y)),d.maximumSelectionLength>0&&(d.dataAdapter=c.Decorate(d.dataAdapter,_)),d.tags&&(d.dataAdapter=c.Decorate(d.dataAdapter,g)),null==d.tokenSeparators&&null==d.tokenizer||(d.dataAdapter=c.Decorate(d.dataAdapter,m)),null!=d.query){var S=t(d.amdBase+"compat/query");d.dataAdapter=c.Decorate(d.dataAdapter,S)}if(null!=d.initSelection){var T=t(d.amdBase+"compat/initSelection");d.dataAdapter=c.Decorate(d.dataAdapter,T)}}if(null==d.resultsAdapter&&(d.resultsAdapter=n,null!=d.ajax&&(d.resultsAdapter=c.Decorate(d.resultsAdapter,A)),null!=d.placeholder&&(d.resultsAdapter=c.Decorate(d.resultsAdapter,b)),d.selectOnClose&&(d.resultsAdapter=c.Decorate(d.resultsAdapter,C))),null==d.dropdownAdapter){if(d.multiple)d.dropdownAdapter=$;else{var D=c.Decorate($,w);d.dropdownAdapter=D}if(0!==d.minimumResultsForSearch&&(d.dropdownAdapter=c.Decorate(d.dropdownAdapter,E)),d.closeOnSelect&&(d.dropdownAdapter=c.Decorate(d.dropdownAdapter,O)),null!=d.dropdownCssClass||null!=d.dropdownCss||null!=d.adaptDropdownCssClass){var q=t(d.amdBase+"compat/dropdownCss");d.dropdownAdapter=c.Decorate(d.dropdownAdapter,q)}d.dropdownAdapter=c.Decorate(d.dropdownAdapter,x)}if(null==d.selectionAdapter){if(d.multiple?d.selectionAdapter=r:d.selectionAdapter=i,null!=d.placeholder&&(d.selectionAdapter=c.Decorate(d.selectionAdapter,s)),d.allowClear&&(d.selectionAdapter=c.Decorate(d.selectionAdapter,o)),d.multiple&&(d.selectionAdapter=c.Decorate(d.selectionAdapter,a)),null!=d.containerCssClass||null!=d.containerCss||null!=d.adaptContainerCssClass){var L=t(d.amdBase+"compat/containerCss");d.selectionAdapter=c.Decorate(d.selectionAdapter,L)}d.selectionAdapter=c.Decorate(d.selectionAdapter,l)}if("string"==typeof d.language)if(d.language.indexOf("-")>0){var j=d.language.split("-")[0];d.language=[d.language,j]}else d.language=[d.language];if(e.isArray(d.language)){var P=new u;d.language.push("en");for(var k=d.language,I=0;I<k.length;I++){var R=k[I],M={};try{M=u.loadPath(R)}catch(z){try{R=this.defaults.amdLanguageBase+R,M=u.loadPath(R)}catch(N){d.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+R+'" could not be automatically loaded. A fallback will be used instead.');continue}}P.extend(M)}d.translations=P}else{var U=u.loadPath(this.defaults.amdLanguageBase+"en"),H=new u(d.language);H.extend(U),d.translations=H}return d},T.prototype.reset=function(){function t(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return d[e]||e})}function n(i,r){if(""===e.trim(i.term))return r;if(r.children&&r.children.length>0){for(var s=e.extend(!0,{},r),o=r.children.length-1;o>=0;o--)null==n(i,r.children[o])&&s.children.splice(o,1);return s.children.length>0?s:n(i,s)}var a=t(r.text).toUpperCase(),l=t(i.term).toUpperCase();return a.indexOf(l)>-1?r:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:c.escapeMarkup,language:S,matcher:n,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:"default",width:"resolve"}},T.prototype.set=function(t,n){var i={};i[e.camelCase(t)]=n;var r=c._convertData(i);e.extend(this.defaults,r)},new T}),t.define("select2/options",["require","jquery","./defaults","./utils"],function(e,t,n,i){function r(t,r){if(this.options=t,null!=r&&this.fromElement(r),this.options=n.apply(this.options),r&&r.is("input")){var s=e(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=i.Decorate(this.options.dataAdapter,s)}}return r.prototype.fromElement=function(e){var n=["select2"];null==this.options.multiple&&(this.options.multiple=e.prop("multiple")),null==this.options.disabled&&(this.options.disabled=e.prop("disabled")),null==this.options.language&&(e.prop("lang")?this.options.language=e.prop("lang").toLowerCase():e.closest("[lang]").prop("lang")&&(this.options.language=e.closest("[lang]").prop("lang"))),null==this.options.dir&&(e.prop("dir")?this.options.dir=e.prop("dir"):e.closest("[dir]").prop("dir")?this.options.dir=e.closest("[dir]").prop("dir"):this.options.dir="ltr"),e.prop("disabled",this.options.disabled),e.prop("multiple",this.options.multiple),e.data("select2Tags")&&(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.'),e.data("data",e.data("select2Tags")),e.data("tags",!0)),e.data("ajaxUrl")&&(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",e.data("ajaxUrl")),e.data("ajax--url",e.data("ajaxUrl")));var r={};r=t.fn.jquery&&"1."==t.fn.jquery.substr(0,2)&&e[0].dataset?t.extend(!0,{},e[0].dataset,e.data()):e.data();var s=t.extend(!0,{},r);s=i._convertData(s);for(var o in s)t.inArray(o,n)>-1||(t.isPlainObject(this.options[o])?t.extend(this.options[o],s[o]):this.options[o]=s[o]);return this},r.prototype.get=function(e){return this.options[e]},r.prototype.set=function(e,t){this.options[e]=t},r}),t.define("select2/core",["jquery","./options","./utils","./keys"],function(e,t,n,i){var r=function(e,n){null!=e.data("select2")&&e.data("select2").destroy(),this.$element=e,this.id=this._generateId(e),n=n||{},this.options=new t(n,e),r.__super__.constructor.call(this);var i=e.attr("tabindex")||0;e.data("old-tabindex",i),e.attr("tabindex","-1");var s=this.options.get("dataAdapter");this.dataAdapter=new s(e,this.options);var o=this.render();this._placeContainer(o);var a=this.options.get("selectionAdapter");this.selection=new a(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,o);var l=this.options.get("dropdownAdapter");this.dropdown=new l(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,o);var c=this.options.get("resultsAdapter");this.results=new c(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var u=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){u.trigger("selection:update",{data:e})}),e.addClass("select2-hidden-accessible"),e.attr("aria-hidden","true"),this._syncAttributes(),e.data("select2",this)};return n.Extend(r,n.Observable),r.prototype._generateId=function(e){var t="";return t=null!=e.attr("id")?e.attr("id"):null!=e.attr("name")?e.attr("name")+"-"+n.generateChars(2):n.generateChars(4),t=t.replace(/(:|\.|\[|\]|,)/g,""),t="select2-"+t},r.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get("width"));null!=t&&e.css("width",t)},r.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==t){var i=this._resolveWidth(e,"style");return null!=i?i:this._resolveWidth(e,"element")}if("element"==t){var r=e.outerWidth(!1);return r<=0?"auto":r+"px"}if("style"==t){var s=e.attr("style");if("string"!=typeof s)return null;for(var o=s.split(";"),a=0,l=o.length;a<l;a+=1){var c=o[a].replace(/\s/g,"").match(n);if(null!==c&&c.length>=1)return c[1]}return null}return t},r.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)},r.prototype._registerDomEvents=function(){var t=this;this.$element.on("change.select2",function(){t.dataAdapter.current(function(e){t.trigger("selection:update",{data:e})})}),this.$element.on("focus.select2",function(e){t.trigger("focus",e)}),this._syncA=n.bind(this._syncAttributes,this),this._syncS=n.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var i=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=i?(this._observer=new i(function(n){e.each(n,t._syncA),e.each(n,t._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",t._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",t._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",t._syncS,!1))},r.prototype._registerDataEvents=function(){var e=this;this.dataAdapter.on("*",function(t,n){e.trigger(t,n)})},r.prototype._registerSelectionEvents=function(){var t=this,n=["toggle","focus"];this.selection.on("toggle",function(){t.toggleDropdown()}),this.selection.on("focus",function(e){t.focus(e)}),this.selection.on("*",function(i,r){-1===e.inArray(i,n)&&t.trigger(i,r)})},r.prototype._registerDropdownEvents=function(){var e=this;this.dropdown.on("*",function(t,n){e.trigger(t,n)})},r.prototype._registerResultsEvents=function(){var e=this;this.results.on("*",function(t,n){e.trigger(t,n)})},r.prototype._registerEvents=function(){var e=this;this.on("open",function(){e.$container.addClass("select2-container--open")}),this.on("close",function(){e.$container.removeClass("select2-container--open")}),this.on("enable",function(){e.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){e.$container.addClass("select2-container--disabled")}),this.on("blur",function(){e.$container.removeClass("select2-container--focus")}),this.on("query",function(t){e.isOpen()||e.trigger("open",{}),this.dataAdapter.query(t,function(n){e.trigger("results:all",{data:n,query:t})})}),this.on("query:append",function(t){this.dataAdapter.query(t,function(n){e.trigger("results:append",{data:n,query:t})})}),this.on("keypress",function(t){var n=t.which;e.isOpen()?n===i.ESC||n===i.TAB||n===i.UP&&t.altKey?(e.close(),t.preventDefault()):n===i.ENTER?(e.trigger("results:select",{}),t.preventDefault()):n===i.SPACE&&t.ctrlKey?(e.trigger("results:toggle",{}),t.preventDefault()):n===i.UP?(e.trigger("results:previous",{}),t.preventDefault()):n===i.DOWN&&(e.trigger("results:next",{}),t.preventDefault()):(n===i.ENTER||n===i.SPACE||n===i.DOWN&&t.altKey)&&(e.open(),t.preventDefault())})},r.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},r.prototype._syncSubtree=function(e,t){var n=!1,i=this;if(!e||!e.target||"OPTION"===e.target.nodeName||"OPTGROUP"===e.target.nodeName){if(t)if(t.addedNodes&&t.addedNodes.length>0)for(var r=0;r<t.addedNodes.length;r++)t.addedNodes[r].selected&&(n=!0);else t.removedNodes&&t.removedNodes.length>0&&(n=!0);else n=!0;n&&this.dataAdapter.current(function(e){i.trigger("selection:update",{data:e})})}},r.prototype.trigger=function(e,t){var n=r.__super__.trigger,i={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(t===undefined&&(t={}),e in i){var s=i[e],o={prevented:!1,name:e,args:t};if(n.call(this,s,o),o.prevented)return void(t.prevented=!0)}n.call(this,e,t)},r.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},r.prototype.open=function(){this.isOpen()||this.trigger("query",{})},r.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},r.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},r.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},r.prototype.focus=function(e){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},r.prototype.enable=function(e){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.'),null!=e&&0!==e.length||(e=[!0]);var t=!e[0];this.$element.prop("disabled",t)},r.prototype.data=function(){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 e=[];return this.dataAdapter.current(function(t){e=t}),e},r.prototype.val=function(t){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.'),null==t||0===t.length)return this.$element.val();var n=t[0];e.isArray(n)&&(n=e.map(n,function(e){return e.toString()})),this.$element.val(n).trigger("change")},r.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),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},r.prototype.render=function(){var t=e('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return t.attr("dir",this.options.get("dir")),this.$container=t,this.$container.addClass("select2-container--"+this.options.get("theme")),t.data("element",this.$element),t},r}),t.define("jquery-mousewheel",["jquery"],function(e){return e}),t.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(e,t,n,i){if(null==e.fn.select2){var r=["open","close","destroy"];e.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var i=e.extend(!0,{},t);new n(e(this),i)}),this;if("string"==typeof t){var i,s=Array.prototype.slice.call(arguments,1);return this.each(function(){var n=e(this).data("select2");null==n&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),i=n[t].apply(n,s)}),e.inArray(t,r)>-1?this:i}throw new Error("Invalid arguments for Select2: "+t)}}return null==e.fn.select2.defaults&&(e.fn.select2.defaults=i),n}),{define:t.define,require:t.require}}(),n=t.require("jquery.select2");return e.fn.select2.amd=t,n});
|
plugin-fw/assets/js/yith-enhanced-select.js
CHANGED
@@ -1,198 +1,227 @@
|
|
1 |
-
/* global yith_framework_enhanced_select_params */
|
2 |
|
3 |
jQuery( function ( $ ) {
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
} );
|
1 |
+
/* global yith_framework_enhanced_select_params, ajaxurl */
|
2 |
|
3 |
jQuery( function ( $ ) {
|
4 |
+
"use strict";
|
5 |
+
|
6 |
+
var getEnhancedSelectLanguage = function () {
|
7 |
+
return {
|
8 |
+
inputTooShort: function ( args ) {
|
9 |
+
var remainingChars = args.minimum - args.input.length;
|
10 |
+
|
11 |
+
if ( 1 === remainingChars ) {
|
12 |
+
return yith_framework_enhanced_select_params.i18n.input_too_short_1;
|
13 |
+
}
|
14 |
+
|
15 |
+
return yith_framework_enhanced_select_params.i18n.input_too_short_n.replace( '%s', remainingChars );
|
16 |
+
},
|
17 |
+
errorLoading : function () {
|
18 |
+
return yith_framework_enhanced_select_params.i18n.searching;
|
19 |
+
},
|
20 |
+
loadingMore : function () {
|
21 |
+
return yith_framework_enhanced_select_params.i18n.load_more;
|
22 |
+
},
|
23 |
+
noResults : function () {
|
24 |
+
return yith_framework_enhanced_select_params.i18n.no_matches;
|
25 |
+
},
|
26 |
+
searching : function () {
|
27 |
+
return yith_framework_enhanced_select_params.i18n.searching;
|
28 |
+
}
|
29 |
+
};
|
30 |
+
};
|
31 |
+
|
32 |
+
$( document.body )
|
33 |
+
.on( 'yith-framework-enhanced-select-init', function () {
|
34 |
+
// Post Search
|
35 |
+
$( '.yith-post-search' ).filter( ':not(.enhanced)' ).each( function () {
|
36 |
+
var default_data = {
|
37 |
+
action : 'yith_plugin_fw_json_search_posts',
|
38 |
+
security : yith_framework_enhanced_select_params.search_posts_nonce,
|
39 |
+
post_type: 'post'
|
40 |
+
},
|
41 |
+
current_data = $.extend( default_data, $( this ).data() ),
|
42 |
+
select2_args = {
|
43 |
+
allowClear : $( this ).data( 'allow_clear' ) ? true : false,
|
44 |
+
placeholder : $( this ).data( 'placeholder' ),
|
45 |
+
minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '3',
|
46 |
+
language : getEnhancedSelectLanguage(),
|
47 |
+
escapeMarkup : function ( m ) {
|
48 |
+
return m;
|
49 |
+
},
|
50 |
+
ajax : {
|
51 |
+
url : ajaxurl,
|
52 |
+
dataType : 'json',
|
53 |
+
quietMillis : 250,
|
54 |
+
data : function ( params ) {
|
55 |
+
var default_data_to_return = {
|
56 |
+
term: params.term
|
57 |
+
};
|
58 |
+
|
59 |
+
return $.extend( default_data_to_return, current_data );
|
60 |
+
},
|
61 |
+
processResults: function ( data ) {
|
62 |
+
var terms = [];
|
63 |
+
if ( data ) {
|
64 |
+
$.each( data, function ( id, text ) {
|
65 |
+
terms.push( { id: id, text: text } );
|
66 |
+
} );
|
67 |
+
}
|
68 |
+
return {
|
69 |
+
results: terms
|
70 |
+
};
|
71 |
+
},
|
72 |
+
cache : true
|
73 |
+
}
|
74 |
+
};
|
75 |
+
|
76 |
+
$( this ).select2( select2_args ).addClass( 'enhanced' );
|
77 |
+
|
78 |
+
if ( $( this ).data( 'sortable' ) ) {
|
79 |
+
var $select = $( this );
|
80 |
+
var $list = $( this ).next( '.select2-container' ).find( 'ul.select2-selection__rendered' );
|
81 |
+
|
82 |
+
$list.sortable( {
|
83 |
+
placeholder : 'ui-state-highlight select2-selection__choice',
|
84 |
+
forcePlaceholderSize: true,
|
85 |
+
items : 'li:not(.select2-search__field)',
|
86 |
+
tolerance : 'pointer',
|
87 |
+
stop : function () {
|
88 |
+
$( $list.find( '.select2-selection__choice' ).get().reverse() ).each( function () {
|
89 |
+
var id = $( this ).data( 'data' ).id;
|
90 |
+
var option = $select.find( 'option[value="' + id + '"]' )[ 0 ];
|
91 |
+
$select.prepend( option );
|
92 |
+
} );
|
93 |
+
}
|
94 |
+
} );
|
95 |
+
}
|
96 |
+
} );
|
97 |
+
|
98 |
+
// Customer Search
|
99 |
+
$( '.yith-customer-search' ).filter( ':not(.enhanced)' ).each( function () {
|
100 |
+
var default_data = {
|
101 |
+
action : 'woocommerce_json_search_customers',
|
102 |
+
security: yith_framework_enhanced_select_params.search_customers_nonce
|
103 |
+
},
|
104 |
+
current_data = $.extend( default_data, $( this ).data() ),
|
105 |
+
select2_args = {
|
106 |
+
allowClear : $( this ).data( 'allow_clear' ) ? true : false,
|
107 |
+
placeholder : $( this ).data( 'placeholder' ),
|
108 |
+
minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '3',
|
109 |
+
language : getEnhancedSelectLanguage(),
|
110 |
+
escapeMarkup : function ( m ) {
|
111 |
+
return m;
|
112 |
+
},
|
113 |
+
ajax : {
|
114 |
+
url : ajaxurl,
|
115 |
+
dataType : 'json',
|
116 |
+
quietMillis : 250,
|
117 |
+
data : function ( params ) {
|
118 |
+
var default_data_to_return = {
|
119 |
+
term: params.term
|
120 |
+
};
|
121 |
+
|
122 |
+
return $.extend( default_data_to_return, current_data );
|
123 |
+
},
|
124 |
+
processResults: function ( data ) {
|
125 |
+
var terms = [];
|
126 |
+
if ( data ) {
|
127 |
+
$.each( data, function ( id, text ) {
|
128 |
+
terms.push( { id: id, text: text } );
|
129 |
+
} );
|
130 |
+
}
|
131 |
+
return {
|
132 |
+
results: terms
|
133 |
+
};
|
134 |
+
},
|
135 |
+
cache : true
|
136 |
+
}
|
137 |
+
};
|
138 |
+
|
139 |
+
$( this ).select2( select2_args ).addClass( 'enhanced' );
|
140 |
+
|
141 |
+
if ( $( this ).data( 'sortable' ) ) {
|
142 |
+
var $select = $( this );
|
143 |
+
var $list = $( this ).next( '.select2-container' ).find( 'ul.select2-selection__rendered' );
|
144 |
+
|
145 |
+
$list.sortable( {
|
146 |
+
placeholder : 'ui-state-highlight select2-selection__choice',
|
147 |
+
forcePlaceholderSize: true,
|
148 |
+
items : 'li:not(.select2-search__field)',
|
149 |
+
tolerance : 'pointer',
|
150 |
+
stop : function () {
|
151 |
+
$( $list.find( '.select2-selection__choice' ).get().reverse() ).each( function () {
|
152 |
+
var id = $( this ).data( 'data' ).id;
|
153 |
+
var option = $select.find( 'option[value="' + id + '"]' )[ 0 ];
|
154 |
+
$select.prepend( option );
|
155 |
+
} );
|
156 |
+
}
|
157 |
+
} );
|
158 |
+
}
|
159 |
+
} );
|
160 |
+
|
161 |
+
// TERM SEARCH
|
162 |
+
$( '.yith-term-search' ).filter( ':not(.enhanced)' ).each( function () {
|
163 |
+
var default_data = {
|
164 |
+
action : 'yith_plugin_fw_json_search_terms',
|
165 |
+
security: yith_framework_enhanced_select_params.search_terms_nonce,
|
166 |
+
taxonomy: 'category'
|
167 |
+
},
|
168 |
+
current_data = $.extend( default_data, $( this ).data() ),
|
169 |
+
select2_args = {
|
170 |
+
allowClear : $( this ).data( 'allow_clear' ) ? true : false,
|
171 |
+
placeholder : $( this ).data( 'placeholder' ),
|
172 |
+
minimumInputLength: $( this ).data( 'minimum_input_length' ) ? $( this ).data( 'minimum_input_length' ) : '3',
|
173 |
+
language : getEnhancedSelectLanguage(),
|
174 |
+
escapeMarkup : function ( m ) {
|
175 |
+
return m;
|
176 |
+
},
|
177 |
+
ajax : {
|
178 |
+
url : ajaxurl,
|
179 |
+
dataType : 'json',
|
180 |
+
quietMillis : 250,
|
181 |
+
data : function ( params ) {
|
182 |
+
var default_data_to_return = {
|
183 |
+
term: params.term
|
184 |
+
};
|
185 |
+
|
186 |
+
return $.extend( default_data_to_return, current_data );
|
187 |
+
},
|
188 |
+
processResults: function ( data ) {
|
189 |
+
var terms = [];
|
190 |
+
if ( data ) {
|
191 |
+
$.each( data, function ( id, text ) {
|
192 |
+
terms.push( { id: id, text: text } );
|
193 |
+
} );
|
194 |
+
}
|
195 |
+
return {
|
196 |
+
results: terms
|
197 |
+
};
|
198 |
+
},
|
199 |
+
cache : true
|
200 |
+
}
|
201 |
+
};
|
202 |
+
|
203 |
+
$( this ).select2( select2_args ).addClass( 'enhanced' );
|
204 |
+
|
205 |
+
if ( $( this ).data( 'sortable' ) ) {
|
206 |
+
var $select = $( this );
|
207 |
+
var $list = $( this ).next( '.select2-container' ).find( 'ul.select2-selection__rendered' );
|
208 |
+
|
209 |
+
$list.sortable( {
|
210 |
+
placeholder : 'ui-state-highlight select2-selection__choice',
|
211 |
+
forcePlaceholderSize: true,
|
212 |
+
items : 'li:not(.select2-search__field)',
|
213 |
+
tolerance : 'pointer',
|
214 |
+
stop : function () {
|
215 |
+
$( $list.find( '.select2-selection__choice' ).get().reverse() ).each( function () {
|
216 |
+
var id = $( this ).data( 'data' ).id;
|
217 |
+
var option = $select.find( 'option[value="' + id + '"]' )[ 0 ];
|
218 |
+
$select.prepend( option );
|
219 |
+
} );
|
220 |
+
}
|
221 |
+
} );
|
222 |
+
}
|
223 |
+
} );
|
224 |
+
|
225 |
+
} ).trigger( 'yith-framework-enhanced-select-init' );
|
226 |
+
|
227 |
} );
|
plugin-fw/bin/clean-language-files 2.js
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* jshint ignore: start */
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
*
|
6 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
7 |
+
*/
|
8 |
+
|
9 |
+
const fs = require( 'fs' );
|
10 |
+
const glob = require( 'glob' );
|
11 |
+
const chalk = require( 'chalk' );
|
12 |
+
|
13 |
+
const DELETED = chalk.reset.inverse.bold.green( ' DELETED ' );
|
14 |
+
const ERROR = chalk.reset.inverse.bold.red( ' ERROR ' );
|
15 |
+
|
16 |
+
console.log( chalk.green( '\nCleaning language files...' ) );
|
17 |
+
glob( "languages/*.po~", function ( er, files ) {
|
18 |
+
|
19 |
+
if ( files.length ) {
|
20 |
+
console.log( `Processing ${files.length} files:` );
|
21 |
+
|
22 |
+
files.forEach( ( file ) => {
|
23 |
+
fs.unlink( file, ( err ) => {
|
24 |
+
if ( err ) {
|
25 |
+
console.log( chalk.bold( ` - ${file} ` ) + ERROR );
|
26 |
+
console.error( err );
|
27 |
+
return;
|
28 |
+
}
|
29 |
+
console.log( chalk.bold( ` - ${file} ` ) + DELETED );
|
30 |
+
} );
|
31 |
+
} );
|
32 |
+
} else {
|
33 |
+
console.log( `No file to clean.\n` );
|
34 |
+
}
|
35 |
+
|
36 |
+
} );
|
plugin-fw/bin/clean-language-files.js
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* jshint ignore: start */
|
2 |
+
|
3 |
+
/**
|
4 |
+
*
|
5 |
+
*
|
6 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
7 |
+
*/
|
8 |
+
|
9 |
+
const fs = require( 'fs' );
|
10 |
+
const glob = require( 'glob' );
|
11 |
+
const chalk = require( 'chalk' );
|
12 |
+
|
13 |
+
const DELETED = chalk.reset.inverse.bold.green( ' DELETED ' );
|
14 |
+
const ERROR = chalk.reset.inverse.bold.red( ' ERROR ' );
|
15 |
+
|
16 |
+
console.log( chalk.green( '\nCleaning language files...' ) );
|
17 |
+
glob( "languages/*.po~", function ( er, files ) {
|
18 |
+
|
19 |
+
if ( files.length ) {
|
20 |
+
console.log( `Processing ${files.length} files:` );
|
21 |
+
|
22 |
+
files.forEach( ( file ) => {
|
23 |
+
fs.unlink( file, ( err ) => {
|
24 |
+
if ( err ) {
|
25 |
+
console.log( chalk.bold( ` - ${file} ` ) + ERROR );
|
26 |
+
console.error( err );
|
27 |
+
return;
|
28 |
+
}
|
29 |
+
console.log( chalk.bold( ` - ${file} ` ) + DELETED );
|
30 |
+
} );
|
31 |
+
} );
|
32 |
+
} else {
|
33 |
+
console.log( `No file to clean.\n` );
|
34 |
+
}
|
35 |
+
|
36 |
+
} );
|
plugin-fw/bin/download-translations-config.json
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"projectPath": "https://translate.yithemes.com/gp/projects/yith-framework/",
|
3 |
+
"textDomain": "yith-plugin-fw",
|
4 |
+
"destFolder": "languages/",
|
5 |
+
"languages": [
|
6 |
+
{
|
7 |
+
"id": "es",
|
8 |
+
"name": "Spanish",
|
9 |
+
"slug": "es_ES"
|
10 |
+
},
|
11 |
+
{
|
12 |
+
"id": "it",
|
13 |
+
"name": "Italian",
|
14 |
+
"slug": "it_IT"
|
15 |
+
},
|
16 |
+
{
|
17 |
+
"id": "nl",
|
18 |
+
"name": "Dutch",
|
19 |
+
"slug": "nl_NL"
|
20 |
+
},
|
21 |
+
{
|
22 |
+
"id": "el",
|
23 |
+
"name": "Greek",
|
24 |
+
"slug": "el"
|
25 |
+
},
|
26 |
+
{
|
27 |
+
"id": "ru",
|
28 |
+
"name": "Russian",
|
29 |
+
"slug": "ru_RU"
|
30 |
+
},
|
31 |
+
{
|
32 |
+
"id": "zh",
|
33 |
+
"name": "Chinese (China)",
|
34 |
+
"slug": "zh_CN"
|
35 |
+
}
|
36 |
+
]
|
37 |
+
}
|
plugin-fw/bin/download-translations.js
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* jshint ignore: start */
|
2 |
+
|
3 |
+
/**
|
4 |
+
* This script download translations from https://translate.yithemes.com/
|
5 |
+
*
|
6 |
+
* @version 1.1.0
|
7 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
8 |
+
*/
|
9 |
+
|
10 |
+
const fs = require( 'fs' );
|
11 |
+
const path = require( 'path' );
|
12 |
+
const axios = require( 'axios' );
|
13 |
+
const chalk = require( 'chalk' );
|
14 |
+
const options = require( './download-translations-config' );
|
15 |
+
|
16 |
+
const SPACE = '\t';
|
17 |
+
const DONE = chalk.reset.inverse.bold.green( ' DONE ' );
|
18 |
+
const ERROR = chalk.reset.inverse.bold.red( ' ERROR ' );
|
19 |
+
|
20 |
+
async function download( url, dest ) {
|
21 |
+
const destPath = path.resolve( dest );
|
22 |
+
const writer = fs.createWriteStream( destPath );
|
23 |
+
|
24 |
+
const response = await axios( {
|
25 |
+
url,
|
26 |
+
method : 'GET',
|
27 |
+
responseType: 'stream'
|
28 |
+
} );
|
29 |
+
|
30 |
+
response.data.pipe( writer );
|
31 |
+
|
32 |
+
return new Promise( ( resolve, reject ) => {
|
33 |
+
writer.on( 'finish', resolve );
|
34 |
+
writer.on( 'error', reject );
|
35 |
+
} )
|
36 |
+
}
|
37 |
+
|
38 |
+
const downloadLanguage = function ( language ) {
|
39 |
+
const languageName = language.name || language.id;
|
40 |
+
const source = options.projectPath + language.id + "/default/export-translations/";
|
41 |
+
const fileName = options.textDomain + '-' + language.slug + '.po';
|
42 |
+
const dest = options.destFolder + fileName;
|
43 |
+
const message = ' - ' + chalk.bold( languageName ) + SPACE;
|
44 |
+
|
45 |
+
download( source, dest ).then( () => {
|
46 |
+
console.log( message + DONE );
|
47 |
+
} ).catch( ( err ) => {
|
48 |
+
console.log( message + ERROR );
|
49 |
+
throw err;
|
50 |
+
} );
|
51 |
+
};
|
52 |
+
|
53 |
+
console.log( chalk.green( '\nDownloading Transations from translate.yithemes.com...' ) );
|
54 |
+
|
55 |
+
options.languages.forEach( ( language ) => {
|
56 |
+
downloadLanguage( language );
|
57 |
+
} );
|
plugin-fw/composer 2.json
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "yith/plugin-fw",
|
3 |
+
"description": "YITH Plugin Framework",
|
4 |
+
"type": "wordpress-plugin",
|
5 |
+
"license": "GPL-3.0-or-later",
|
6 |
+
"prefer-stable": true,
|
7 |
+
"minimum-stability": "dev",
|
8 |
+
"require-dev": {
|
9 |
+
"wp-coding-standards/wpcs": "^2.2",
|
10 |
+
"squizlabs/php_codesniffer": "^3.5",
|
11 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.1"
|
12 |
+
},
|
13 |
+
"scripts": {
|
14 |
+
"phpcs": [
|
15 |
+
"phpcs -s -p"
|
16 |
+
],
|
17 |
+
"phpcs-pre-commit": [
|
18 |
+
"phpcs -s -p -n"
|
19 |
+
],
|
20 |
+
"phpcbf": [
|
21 |
+
"phpcbf -p --standard=WordPress"
|
22 |
+
]
|
23 |
+
}
|
24 |
+
}
|
plugin-fw/composer.json
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "yith/plugin-fw",
|
3 |
+
"description": "YITH Plugin Framework",
|
4 |
+
"type": "wordpress-plugin",
|
5 |
+
"license": "GPL-3.0-or-later",
|
6 |
+
"prefer-stable": true,
|
7 |
+
"minimum-stability": "dev",
|
8 |
+
"require-dev": {
|
9 |
+
"wp-coding-standards/wpcs": "^2.2",
|
10 |
+
"squizlabs/php_codesniffer": "^3.5",
|
11 |
+
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.1"
|
12 |
+
},
|
13 |
+
"scripts": {
|
14 |
+
"phpcs": [
|
15 |
+
"phpcs -s -p"
|
16 |
+
],
|
17 |
+
"phpcs-pre-commit": [
|
18 |
+
"phpcs -s -p -n"
|
19 |
+
],
|
20 |
+
"phpcbf": [
|
21 |
+
"phpcbf -p --standard=WordPress"
|
22 |
+
]
|
23 |
+
},
|
24 |
+
"config": {
|
25 |
+
"allow-plugins": {
|
26 |
+
"dealerdirect/phpcodesniffer-composer-installer": true
|
27 |
+
}
|
28 |
+
}
|
29 |
+
}
|
plugin-fw/dist/gutenberg/index.asset 2.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php return array('dependencies' => array('lodash', 'react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-polyfill', 'wp-url'), 'version' => '38c85839447dbb33cdd5faa58bc6e790');
|
plugin-fw/dist/gutenberg/style-index 2.css
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
.block-editor-yith-plugin-fw-shortcode-block.block-editor-yith-plugin-fw-shortcode-block--empty-html,.block-editor-yith-plugin-fw-shortcode-block.block-editor-yith-plugin-fw-shortcode-block--first-loading,.block-editor-yith-plugin-fw-shortcode-block.block-editor-yith-plugin-fw-shortcode-block--shortcode{border:1px solid #1e1e1e;border-radius:4px;padding:1em 1em 1.2em}.block-editor-yith-plugin-fw-shortcode-block.block-editor-yith-plugin-fw-shortcode-block--shortcode .block-editor-yith-plugin-fw-shortcode-block__content{border:1px solid #ddd;border-radius:4px;color:#1e1e1e;font-family:Menlo,Consolas,monaco,monospace;font-size:13px;padding:.8em 1em}.block-editor-yith-plugin-fw-shortcode-block{min-height:30px;position:relative}.block-editor-yith-plugin-fw-shortcode-block .block-editor-yith-plugin-fw-shortcode-block__spinner-wrap{left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%)}.block-editor-yith-plugin-fw-shortcode-block.block-editor-yith-plugin-fw-shortcode-block--empty-html.block-editor-yith-plugin-fw-shortcode-block--no-message .block-editor-yith-plugin-fw-shortcode-block__title,.block-editor-yith-plugin-fw-shortcode-block.block-editor-yith-plugin-fw-shortcode-block--first-loading .block-editor-yith-plugin-fw-shortcode-block__title{margin-bottom:0}.block-editor-yith-plugin-fw-shortcode-block.block-editor-yith-plugin-fw-shortcode-block--empty-html .block-editor-yith-plugin-fw-shortcode-block__message{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-style:italic}.block-editor-yith-plugin-fw-shortcode-block.block-editor-yith-plugin-fw-shortcode-block--empty-html .block-editor-yith-plugin-fw-shortcode-block__content{display:none}
|
2 |
+
.block-editor-yith-color-palette-control .block-editor-yith-color-palette-control__color-indicator{margin-bottom:12px}.block-editor-yith-color-palette-control .component-color-indicator{vertical-align:text-bottom}
|
3 |
+
.yith-fw-components__multiple-select .yith-fw-components__multiple-select__input-container{border:1px solid #757575;border-radius:2px;padding:5px}.yith-fw-components__multiple-select .yith-fw-components__multiple-select__input-container .yith-fw-components__multiple-select__input{background:inherit;border:0;box-shadow:none;color:#1e1e1e;min-height:24px;width:100%}.yith-fw-components__multiple-select .yith-fw-components__multiple-select__input-container .yith-fw-components__multiple-select__input::-moz-placeholder{color:inherit;opacity:.6}.yith-fw-components__multiple-select .yith-fw-components__multiple-select__input-container .yith-fw-components__multiple-select__input:-ms-input-placeholder{color:inherit;opacity:.6}.yith-fw-components__multiple-select .yith-fw-components__multiple-select__input-container .yith-fw-components__multiple-select__input::placeholder{color:inherit;opacity:.6}.yith-fw-components__multiple-select .yith-fw-components__multiple-select__item{align-items:center;background:#f1f1f1;border-radius:3px;display:inline-block;margin:0 5px 5px 0;max-width:100%;padding:4px 25px 4px 10px;position:relative}.yith-fw-components__multiple-select .yith-fw-components__multiple-select__item .yith-fw-components__multiple-select__item__remove{cursor:pointer;font-size:14px;height:auto;padding:5px;position:absolute;right:3px;top:50%;transform:translateY(-50%);width:auto}.yith-fw-components__multiple-select .yith-fw-components__multiple-select__item .yith-fw-components__multiple-select__item__remove:hover{color:#c50c0c}.yith-fw-components__multiple-select__popover .components-popover__content{border:0;overflow:visible}.yith-fw-components__multiple-select__popover .yith-fw-components__multiple-select__suggestions{border-radius:5px;box-shadow:0 5px 5px -3px rgba(0,0,0,.2),0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12);display:flex;flex-direction:column;max-height:200px;overflow:hidden;overflow-y:auto;padding-top:5px}.yith-fw-components__multiple-select__popover .yith-fw-components__multiple-select__suggestions.no-results{padding-top:0}.yith-fw-components__multiple-select__popover .yith-fw-components__multiple-select__suggestions .yith-fw-components__multiple-select__suggestions__message{line-height:1.5em;overflow-wrap:break-word;padding:8px 15px}.yith-fw-components__multiple-select__popover .yith-fw-components__multiple-select__suggestions .yith-fw-components__multiple-select__suggestion{align-items:center;cursor:pointer;display:flex;justify-content:space-between;line-height:1.5em;min-height:40px;padding:8px 15px}.yith-fw-components__multiple-select__popover .yith-fw-components__multiple-select__suggestions .yith-fw-components__multiple-select__suggestion.selected{background:rgba(25,118,210,.08)}.yith-fw-components__multiple-select__popover .yith-fw-components__multiple-select__suggestions .yith-fw-components__multiple-select__suggestion:hover{background:rgba(0,0,0,.04)}.yith-fw-components__multiple-select__popover .yith-fw-components__multiple-select__suggestions .yith-fw-components__multiple-select__suggestion.selected:hover{background:rgba(25,118,210,.12)}.yith-fw-components__multiple-select__popover .yith-fw-components__multiple-select__suggestions .yith-fw-components__multiple-select__suggestion__remove{background:transparent;border-radius:50%;box-shadow:0 0 0 10px transparent;font-size:13px;font-weight:600;height:23px;padding:5px;transition:all .3s ease-in-out;width:23px}.yith-fw-components__multiple-select__popover .yith-fw-components__multiple-select__suggestions .yith-fw-components__multiple-select__suggestion__remove:hover{background:rgba(0,0,0,.06);box-shadow:0 0 0 3px rgba(0,0,0,.06);color:#c50c0c}.yith-fw-components__multiple-select__popover ::-webkit-scrollbar-track{background-color:transparent;-webkit-box-shadow:none}.yith-fw-components__multiple-select__popover ::-webkit-scrollbar{background-color:rgba(94,88,154,.04);width:10px}.yith-fw-components__multiple-select__popover ::-webkit-scrollbar-thumb{background-color:#b1b4bf;border-radius:10px}
|
plugin-fw/docker-compose 2.yml
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
version: '3.7'
|
2 |
+
|
3 |
+
services:
|
4 |
+
|
5 |
+
mysql:
|
6 |
+
image: "mariadb:latest"
|
7 |
+
environment:
|
8 |
+
MYSQL_DATABASE: "yith_plugin_fw_tests"
|
9 |
+
MYSQL_ROOT_PASSWORD: "password"
|
10 |
+
ports:
|
11 |
+
- "3306"
|
12 |
+
networks:
|
13 |
+
- yithdevnet
|
14 |
+
volumes:
|
15 |
+
- ./tools/local-env/mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql
|
16 |
+
- mysql:/var/lib/mysql
|
17 |
+
|
18 |
+
##
|
19 |
+
# The WP CLI container.
|
20 |
+
##
|
21 |
+
cli:
|
22 |
+
image: wordpress:cli-php7.4
|
23 |
+
environment:
|
24 |
+
APACHE_RUN_USER: "www-data"
|
25 |
+
APACHE_RUN_GROUP: "www-data"
|
26 |
+
depends_on:
|
27 |
+
- mysql
|
28 |
+
|
29 |
+
networks:
|
30 |
+
- yithdevnet
|
31 |
+
|
32 |
+
volumes:
|
33 |
+
- html:/var/www/html
|
34 |
+
- ./tools/local-env/install-wp-tests.sh:/var/www/html/install-wp-tests.sh
|
35 |
+
|
36 |
+
# The init directive ensures the command runs with a PID > 1, so Ctrl+C works correctly.
|
37 |
+
init: true
|
38 |
+
|
39 |
+
##
|
40 |
+
# The PHPUnit container.
|
41 |
+
##
|
42 |
+
phpunit:
|
43 |
+
build:
|
44 |
+
context: ./tools/local-env/docker/phpunit
|
45 |
+
|
46 |
+
networks:
|
47 |
+
- yithdevnet
|
48 |
+
|
49 |
+
volumes:
|
50 |
+
- ./tools/local-env/phpunit-config.ini:/usr/local/etc/php/conf.d/phpunit-config.ini
|
51 |
+
- ./tools/local-env/install-wp-tests.sh:/var/www/html/install-wp-tests.sh
|
52 |
+
- ./tools/local-env/yith-plugin-fw-loader.php:/var/www/html/wp-content/plugins/yith-plugin-fw-loader/yith-plugin-fw-loader.php
|
53 |
+
- .:/var/www/html/wp-content/plugins/yith-plugin-fw-loader/plugin-fw
|
54 |
+
- ../../woocommerce:/var/www/html/wp-content/plugins/woocommerce
|
55 |
+
- html:/var/www/html
|
56 |
+
- phpunit-uploads:/var/www/html/wp-content/uploads
|
57 |
+
- testsuite:/tmp
|
58 |
+
|
59 |
+
# The init directive ensures the command runs with a PID > 1, so Ctrl+C works correctly.
|
60 |
+
init: true
|
61 |
+
|
62 |
+
depends_on:
|
63 |
+
- mysql
|
64 |
+
|
65 |
+
volumes:
|
66 |
+
# So that sites aren't wiped every time containers are restarted, MySQL uses a persistent volume.
|
67 |
+
mysql: {}
|
68 |
+
# Using a volume for the uploads directory improves PHPUnit performance.
|
69 |
+
phpunit-uploads: {}
|
70 |
+
html: {}
|
71 |
+
testsuite: {}
|
72 |
+
|
73 |
+
networks:
|
74 |
+
# Creating our own network allows us to connect between containers using their service name.
|
75 |
+
yithdevnet:
|
76 |
+
driver: bridge
|
plugin-fw/docker-compose.yml
ADDED
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
version: '3.7'
|
2 |
+
|
3 |
+
services:
|
4 |
+
|
5 |
+
mysql:
|
6 |
+
image: "mariadb:latest"
|
7 |
+
environment:
|
8 |
+
MYSQL_DATABASE: "yith_plugin_fw_tests"
|
9 |
+
MYSQL_ROOT_PASSWORD: "password"
|
10 |
+
ports:
|
11 |
+
- "3306"
|
12 |
+
networks:
|
13 |
+
- yithdevnet
|
14 |
+
volumes:
|
15 |
+
- ./tools/local-env/mysql-init.sql:/docker-entrypoint-initdb.d/mysql-init.sql
|
16 |
+
- mysql:/var/lib/mysql
|
17 |
+
|
18 |
+
##
|
19 |
+
# The WP CLI container.
|
20 |
+
##
|
21 |
+
cli:
|
22 |
+
image: wordpress:cli-php7.4
|
23 |
+
environment:
|
24 |
+
APACHE_RUN_USER: "www-data"
|
25 |
+
APACHE_RUN_GROUP: "www-data"
|
26 |
+
depends_on:
|
27 |
+
- mysql
|
28 |
+
|
29 |
+
networks:
|
30 |
+
- yithdevnet
|
31 |
+
|
32 |
+
volumes:
|
33 |
+
- html:/var/www/html
|
34 |
+
- ./tools/local-env/install-wp-tests.sh:/var/www/html/install-wp-tests.sh
|
35 |
+
|
36 |
+
# The init directive ensures the command runs with a PID > 1, so Ctrl+C works correctly.
|
37 |
+
init: true
|
38 |
+
|
39 |
+
##
|
40 |
+
# The PHPUnit container.
|
41 |
+
##
|
42 |
+
phpunit:
|
43 |
+
build:
|
44 |
+
context: ./tools/local-env/docker/phpunit
|
45 |
+
|
46 |
+
networks:
|
47 |
+
- yithdevnet
|
48 |
+
|
49 |
+
volumes:
|
50 |
+
- ./tools/local-env/phpunit-config.ini:/usr/local/etc/php/conf.d/phpunit-config.ini
|
51 |
+
- ./tools/local-env/install-wp-tests.sh:/var/www/html/install-wp-tests.sh
|
52 |
+
- ./tools/local-env/yith-plugin-fw-loader.php:/var/www/html/wp-content/plugins/yith-plugin-fw-loader/yith-plugin-fw-loader.php
|
53 |
+
- .:/var/www/html/wp-content/plugins/yith-plugin-fw-loader/plugin-fw
|
54 |
+
- ../../woocommerce:/var/www/html/wp-content/plugins/woocommerce
|
55 |
+
- html:/var/www/html
|
56 |
+
- phpunit-uploads:/var/www/html/wp-content/uploads
|
57 |
+
- testsuite:/tmp
|
58 |
+
|
59 |
+
# The init directive ensures the command runs with a PID > 1, so Ctrl+C works correctly.
|
60 |
+
init: true
|
61 |
+
|
62 |
+
depends_on:
|
63 |
+
- mysql
|
64 |
+
|
65 |
+
volumes:
|
66 |
+
# So that sites aren't wiped every time containers are restarted, MySQL uses a persistent volume.
|
67 |
+
mysql: {}
|
68 |
+
# Using a volume for the uploads directory improves PHPUnit performance.
|
69 |
+
phpunit-uploads: {}
|
70 |
+
html: {}
|
71 |
+
testsuite: {}
|
72 |
+
|
73 |
+
networks:
|
74 |
+
# Creating our own network allows us to connect between containers using their service name.
|
75 |
+
yithdevnet:
|
76 |
+
driver: bridge
|
plugin-fw/includes/builders/elementor/class-yith-elementor 2.php
ADDED
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Elementor Class.
|
4 |
+
*
|
5 |
+
* @class YITH_Elementor
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
* @since 3.6.0
|
8 |
+
*/
|
9 |
+
|
10 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
11 |
+
|
12 |
+
if ( ! class_exists( 'YITH_Elementor' ) ) {
|
13 |
+
/**
|
14 |
+
* YITH_Elementor class.
|
15 |
+
*
|
16 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
17 |
+
*/
|
18 |
+
class YITH_Elementor {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* The single instance of the class.
|
22 |
+
*
|
23 |
+
* @var YITH_Elementor
|
24 |
+
*/
|
25 |
+
private static $instance;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* The registered widgets.
|
29 |
+
*
|
30 |
+
* @var array
|
31 |
+
*/
|
32 |
+
private $widgets = array();
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Singleton implementation.
|
36 |
+
*
|
37 |
+
* @return YITH_Elementor
|
38 |
+
*/
|
39 |
+
public static function instance() {
|
40 |
+
return ! is_null( self::$instance ) ? self::$instance : self::$instance = new self();
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* YITH_Elementor constructor.
|
45 |
+
*/
|
46 |
+
private function __construct() {
|
47 |
+
if ( defined( 'ELEMENTOR_VERSION' ) && version_compare( ELEMENTOR_VERSION, '3.0.0', '>=' ) ) {
|
48 |
+
add_action( 'elementor/widgets/widgets_registered', array( $this, 'register_widgets' ) );
|
49 |
+
add_action( 'elementor/elements/categories_registered', array( $this, 'add_yith_category' ) );
|
50 |
+
|
51 |
+
add_action( 'elementor/editor/after_enqueue_styles', array( $this, 'enqueue_styles' ) );
|
52 |
+
add_action( 'elementor/frontend/after_enqueue_styles', array( $this, 'enqueue_styles' ) );
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Register Elementor widget
|
58 |
+
*
|
59 |
+
* @param string $widget_name The widget name.
|
60 |
+
* @param array $widget_options The widget options.
|
61 |
+
*/
|
62 |
+
public function register_widget( $widget_name, $widget_options ) {
|
63 |
+
if ( ! isset( $widget_options['name'] ) ) {
|
64 |
+
$widget_options['name'] = $widget_name;
|
65 |
+
}
|
66 |
+
$this->widgets[ $widget_name ] = $widget_options;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Let's start with Elementor
|
71 |
+
*
|
72 |
+
* @deprecated 3.7.2
|
73 |
+
*/
|
74 |
+
public function init() {
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Load files
|
79 |
+
*/
|
80 |
+
private function load_files() {
|
81 |
+
require_once 'class-yith-elementor-widget.php';
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Register Elementor Widgets
|
86 |
+
*/
|
87 |
+
public function register_widgets() {
|
88 |
+
if ( $this->widgets ) {
|
89 |
+
$this->load_files();
|
90 |
+
}
|
91 |
+
|
92 |
+
foreach ( $this->widgets as $widget ) {
|
93 |
+
\Elementor\Plugin::instance()->widgets_manager->register_widget_type( new YITH_Elementor_Widget( array(), array( 'yith_data' => $widget ) ) );
|
94 |
+
}
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Add "YITH" category for Elementor widgets
|
99 |
+
*
|
100 |
+
* @param Elementor\Elements_Manager $elements_manager Elements Manager.
|
101 |
+
*/
|
102 |
+
public function add_yith_category( $elements_manager ) {
|
103 |
+
// If the category is empty, it'll be automatically hidden by Elementor.
|
104 |
+
$elements_manager->add_category(
|
105 |
+
'yith',
|
106 |
+
array(
|
107 |
+
'title' => 'YITH',
|
108 |
+
'icon' => 'fa fa-plug',
|
109 |
+
'active' => false,
|
110 |
+
)
|
111 |
+
);
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Enqueue styles in elementor
|
116 |
+
*/
|
117 |
+
public function enqueue_styles() {
|
118 |
+
if ( $this->widgets ) {
|
119 |
+
if ( \Elementor\Plugin::$instance->preview->is_preview_mode() || \Elementor\Plugin::$instance->editor->is_edit_mode() ) {
|
120 |
+
wp_enqueue_style( 'yith-plugin-fw-icon-font' );
|
121 |
+
wp_enqueue_style( 'yith-plugin-fw-elementor' );
|
122 |
+
}
|
123 |
+
}
|
124 |
+
}
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
YITH_Elementor::instance();
|
plugin-fw/includes/builders/elementor/class-yith-elementor-widget 2.php
ADDED
@@ -0,0 +1,480 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Elementor Widget Skeleton Class.
|
4 |
+
*
|
5 |
+
* @class YITH_Elementor_Widget
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
* @since 3.6.0
|
8 |
+
*/
|
9 |
+
|
10 |
+
use Elementor\Controls_Manager;
|
11 |
+
use Elementor\Plugin;
|
12 |
+
use Elementor\Widget_Base;
|
13 |
+
|
14 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
15 |
+
|
16 |
+
if ( ! class_exists( 'YITH_Elementor_Widget' ) ) {
|
17 |
+
/**
|
18 |
+
* YITH_Elementor_Widget class.
|
19 |
+
*
|
20 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
21 |
+
*/
|
22 |
+
class YITH_Elementor_Widget extends Widget_Base {
|
23 |
+
|
24 |
+
/**
|
25 |
+
* YITH Data.
|
26 |
+
*
|
27 |
+
* @var array
|
28 |
+
*/
|
29 |
+
protected $yith_data = array();
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Widget constructor.
|
33 |
+
*
|
34 |
+
* @param array $data Widget data. Default is an empty array.
|
35 |
+
* @param array|null $args Optional. Widget default arguments. Default is null.
|
36 |
+
*
|
37 |
+
* @throws Exception If arguments are missing when initializing a full widget instance.
|
38 |
+
*/
|
39 |
+
public function __construct( $data = array(), $args = null ) {
|
40 |
+
$this->yith_data = $args['yith_data'];
|
41 |
+
$this->init_yith_data();
|
42 |
+
|
43 |
+
parent::__construct( $data, $args );
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Retrieve an YITH prop.
|
48 |
+
*
|
49 |
+
* @param string $prop The prop.
|
50 |
+
* @param bool|string|array $default Default value.
|
51 |
+
*
|
52 |
+
* @return mixed|string
|
53 |
+
*/
|
54 |
+
public function get_yith_prop( $prop, $default = null ) {
|
55 |
+
if ( is_null( $default ) ) {
|
56 |
+
$defaults = $this->get_yith_data_defaults();
|
57 |
+
$default = array_key_exists( $prop, $defaults ) ? $defaults[ $prop ] : false;
|
58 |
+
}
|
59 |
+
|
60 |
+
return array_key_exists( $prop, $this->yith_data ) ? $this->yith_data[ $prop ] : $default;
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Get element name.
|
65 |
+
*
|
66 |
+
* @return string
|
67 |
+
*/
|
68 |
+
public function get_name() {
|
69 |
+
return $this->get_yith_prop( 'name', '' );
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Get the element title.
|
74 |
+
*
|
75 |
+
* @return string
|
76 |
+
*/
|
77 |
+
public function get_title() {
|
78 |
+
return $this->get_yith_prop( 'title', '' );
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Get the element icon.
|
83 |
+
*
|
84 |
+
* @return string
|
85 |
+
*/
|
86 |
+
public function get_icon() {
|
87 |
+
return $this->get_yith_prop( 'icon', 'yith-icon yith-icon-yith' );
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Get widget categories.
|
92 |
+
*
|
93 |
+
* @return array Widget categories.
|
94 |
+
*/
|
95 |
+
public function get_categories() {
|
96 |
+
return array( 'yith' ) + (array) $this->get_yith_prop( 'categories', array() );
|
97 |
+
}
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Register the widget controls.
|
101 |
+
*/
|
102 |
+
public function register_controls() {
|
103 |
+
$options = $this->get_yith_prop( 'options' );
|
104 |
+
$description = $this->get_yith_prop( 'description' );
|
105 |
+
|
106 |
+
if ( $options ) {
|
107 |
+
$this->start_controls_section(
|
108 |
+
'options',
|
109 |
+
array(
|
110 |
+
'label' => $this->get_yith_prop( 'section_title' ),
|
111 |
+
'tab' => Controls_Manager::TAB_CONTENT,
|
112 |
+
)
|
113 |
+
);
|
114 |
+
|
115 |
+
if ( $description ) {
|
116 |
+
$this->add_control(
|
117 |
+
'description',
|
118 |
+
array(
|
119 |
+
'type' => Controls_Manager::RAW_HTML,
|
120 |
+
'raw' => $description,
|
121 |
+
'content_classes' => 'yith-plugin-fw-elementor-widget-description',
|
122 |
+
)
|
123 |
+
);
|
124 |
+
}
|
125 |
+
|
126 |
+
foreach ( $options as $option ) {
|
127 |
+
if ( ! isset( $option['type'] ) ) {
|
128 |
+
continue;
|
129 |
+
}
|
130 |
+
|
131 |
+
$this->add_control( $option['yith_key'], $option );
|
132 |
+
}
|
133 |
+
|
134 |
+
$this->end_controls_section();
|
135 |
+
} elseif ( $description ) {
|
136 |
+
$this->start_controls_section(
|
137 |
+
'options',
|
138 |
+
array(
|
139 |
+
'label' => $this->get_title(),
|
140 |
+
'tab' => Controls_Manager::TAB_CONTENT,
|
141 |
+
)
|
142 |
+
);
|
143 |
+
$this->add_control(
|
144 |
+
'description',
|
145 |
+
array(
|
146 |
+
'type' => Controls_Manager::RAW_HTML,
|
147 |
+
'raw' => $description,
|
148 |
+
'content_classes' => 'yith-plugin-fw-elementor-widget-description',
|
149 |
+
)
|
150 |
+
);
|
151 |
+
|
152 |
+
$this->end_controls_section();
|
153 |
+
}
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Render the content of the widget
|
158 |
+
*/
|
159 |
+
protected function render() {
|
160 |
+
$settings = $this->get_settings_for_display();
|
161 |
+
$option_values = $this->get_yith_option_values();
|
162 |
+
$options = $this->get_yith_prop( 'options' );
|
163 |
+
$shortcode_name = $this->get_yith_prop( 'shortcode_name' );
|
164 |
+
$do_shortcode = ! ! $this->get_yith_prop( 'do_shortcode' );
|
165 |
+
$render_cb = $this->get_yith_prop( 'render_cb' );
|
166 |
+
$editor_render_cb = $this->get_yith_prop( 'editor_render_cb' );
|
167 |
+
$empty_message = $this->get_yith_prop( 'empty_message', '' );
|
168 |
+
|
169 |
+
if ( Plugin::$instance->editor->is_edit_mode() && $editor_render_cb && is_callable( $editor_render_cb ) ) {
|
170 |
+
echo call_user_func( $editor_render_cb, $option_values ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
171 |
+
} elseif ( $render_cb && is_callable( $render_cb ) ) {
|
172 |
+
echo call_user_func( $render_cb, $option_values ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
173 |
+
} else {
|
174 |
+
$shortcode_attrs = array();
|
175 |
+
|
176 |
+
foreach ( $options as $option ) {
|
177 |
+
$display_key = $option['yith_display_key'];
|
178 |
+
$value = isset( $option_values[ $display_key ] ) ? $option_values[ $display_key ] : null;
|
179 |
+
$show = $this->is_control_visible( $option, $settings );
|
180 |
+
|
181 |
+
if ( $show && ! is_null( $value ) && '' !== $value ) {
|
182 |
+
$value = is_array( $value ) ? implode( ',', $value ) : $value;
|
183 |
+
$shortcode_value = ! empty( $option['remove_quotes'] ) ? $value : ( '"' . $value . '"' );
|
184 |
+
$shortcode_attrs[] = $display_key . '=' . $shortcode_value;
|
185 |
+
}
|
186 |
+
}
|
187 |
+
|
188 |
+
$shortcode_attrs = implode( ' ', $shortcode_attrs );
|
189 |
+
$shortcode = "[{$shortcode_name} {$shortcode_attrs}]";
|
190 |
+
|
191 |
+
if ( Plugin::$instance->editor->is_edit_mode() ) {
|
192 |
+
$html = esc_html( $shortcode );
|
193 |
+
if ( $do_shortcode ) {
|
194 |
+
do_action( 'yith_plugin_fw_elementor_editor_before_do_shortcode', $shortcode, $this );
|
195 |
+
$html = do_shortcode( apply_filters( 'yith_plugin_fw_elementor_editor_shortcode', $shortcode, $this ) );
|
196 |
+
do_action( 'yith_plugin_fw_elementor_editor_after_do_shortcode', $shortcode, $this );
|
197 |
+
}
|
198 |
+
$type = $do_shortcode ? 'html' : 'shortcode';
|
199 |
+
$html_to_show = $html;
|
200 |
+
$message = '';
|
201 |
+
|
202 |
+
if ( $do_shortcode && $empty_message && ! $html ) {
|
203 |
+
$type = 'empty-html';
|
204 |
+
$html_to_show = esc_html( $shortcode );
|
205 |
+
$message = $empty_message;
|
206 |
+
}
|
207 |
+
|
208 |
+
$show_title = in_array( $type, array( 'shortcode', 'empty-html' ), true );
|
209 |
+
$show_content = 'empty-html' !== $type;
|
210 |
+
?>
|
211 |
+
<div class="yith-plugin-fw-elementor-shortcode-widget yith-plugin-fw-elementor-shortcode-widget--<?php echo esc_attr( $type ); ?>">
|
212 |
+
<?php if ( $show_title ) : ?>
|
213 |
+
<div class="yith-plugin-fw-elementor-shortcode-widget__title">
|
214 |
+
<?php echo esc_html( $this->get_title() ); ?>
|
215 |
+
</div>
|
216 |
+
<?php endif; ?>
|
217 |
+
<?php if ( $message ) : ?>
|
218 |
+
<div class="yith-plugin-fw-elementor-shortcode-widget__message">
|
219 |
+
<?php echo wp_kses_post( $message ); ?>
|
220 |
+
</div>
|
221 |
+
<?php endif; ?>
|
222 |
+
<?php if ( $show_content ) : ?>
|
223 |
+
<div class="yith-plugin-fw-elementor-shortcode-widget__content">
|
224 |
+
<?php echo $html_to_show; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
|
225 |
+
</div>
|
226 |
+
<?php endif; ?>
|
227 |
+
</div>
|
228 |
+
<?php
|
229 |
+
} else {
|
230 |
+
do_action( 'yith_plugin_fw_elementor_before_do_shortcode', $shortcode, $this );
|
231 |
+
echo do_shortcode( apply_filters( 'yith_plugin_fw_elementor_shortcode', $shortcode, $this ) );
|
232 |
+
do_action( 'yith_plugin_fw_elementor_after_do_shortcode', $shortcode, $this );
|
233 |
+
}
|
234 |
+
}
|
235 |
+
}
|
236 |
+
|
237 |
+
/**
|
238 |
+
* Retrieve the YITH Data defaults.
|
239 |
+
*
|
240 |
+
* @return array
|
241 |
+
*/
|
242 |
+
public function get_yith_data_defaults() {
|
243 |
+
return array(
|
244 |
+
'map_from_gutenberg' => false,
|
245 |
+
'shortcode_name' => '',
|
246 |
+
'do_shortcode' => true,
|
247 |
+
'render_cb' => false,
|
248 |
+
'editor_render_cb' => false,
|
249 |
+
'options' => array(),
|
250 |
+
'section_title' => sprintf(
|
251 |
+
// translators: %s it the Elementor Widget title.
|
252 |
+
_x( '%s - Options', 'Elementor Widget - section title', 'yith-plugin-fw' ),
|
253 |
+
$this->get_title()
|
254 |
+
),
|
255 |
+
);
|
256 |
+
}
|
257 |
+
|
258 |
+
/**
|
259 |
+
* Retrieve YITH options with their values.
|
260 |
+
*/
|
261 |
+
protected function get_yith_option_values() {
|
262 |
+
$settings = $this->get_settings_for_display();
|
263 |
+
$map_from_gutenberg = $this->get_yith_prop( 'map_from_gutenberg' );
|
264 |
+
$options = $this->get_yith_prop( 'options' );
|
265 |
+
$option_values = array();
|
266 |
+
|
267 |
+
foreach ( $options as $option ) {
|
268 |
+
$value = isset( $option['default'] ) ? $option['default'] : null;
|
269 |
+
$key = $option['yith_key'];
|
270 |
+
$display_key = $option['yith_display_key'];
|
271 |
+
|
272 |
+
if ( isset( $settings[ $key ] ) ) {
|
273 |
+
$value = $settings[ $key ];
|
274 |
+
}
|
275 |
+
|
276 |
+
if ( isset( $option['type'] ) && Controls_Manager::SWITCHER === $option['type'] ) {
|
277 |
+
$yes_no_values = isset( $option['yes_no_values'] ) ? $option['yes_no_values'] : ! $map_from_gutenberg;
|
278 |
+
if ( false === $yes_no_values ) {
|
279 |
+
$yes_no_values = array( 'true', 'false' );
|
280 |
+
} elseif ( ! is_array( $yes_no_values ) || 2 !== count( $yes_no_values ) ) {
|
281 |
+
$yes_no_values = array( 'yes', 'no' );
|
282 |
+
}
|
283 |
+
|
284 |
+
$value = 'yes' === $value ? $yes_no_values[0] : $yes_no_values[1];
|
285 |
+
}
|
286 |
+
|
287 |
+
$option_values[ $display_key ] = $value;
|
288 |
+
}
|
289 |
+
|
290 |
+
return $option_values;
|
291 |
+
}
|
292 |
+
|
293 |
+
/**
|
294 |
+
* YITH Data Initialization.
|
295 |
+
*/
|
296 |
+
protected function init_yith_data() {
|
297 |
+
$data = wp_parse_args( $this->yith_data, $this->get_yith_data_defaults() );
|
298 |
+
|
299 |
+
if ( ! ! $data['map_from_gutenberg'] ) {
|
300 |
+
$data = $this->override_elementor_specific_data( $data );
|
301 |
+
|
302 |
+
if ( ! $data['options'] && ! empty( $data['attributes'] ) && is_array( $data['attributes'] ) ) {
|
303 |
+
$data['options'] = $data['attributes'];
|
304 |
+
unset( $data['attributes'] );
|
305 |
+
}
|
306 |
+
|
307 |
+
if ( $data['options'] ) {
|
308 |
+
$data['options'] = array_map( array( $this, 'map_option_from_gutenberg' ), $data['options'] );
|
309 |
+
}
|
310 |
+
}
|
311 |
+
|
312 |
+
$data['options'] = $this->validate_yith_options( $data['options'] );
|
313 |
+
|
314 |
+
$this->yith_data = $data;
|
315 |
+
}
|
316 |
+
|
317 |
+
/**
|
318 |
+
* Validate field types
|
319 |
+
*
|
320 |
+
* @param array $options The options.
|
321 |
+
*
|
322 |
+
* @return array|false The validate option array; false if the type is not set.
|
323 |
+
*/
|
324 |
+
protected function validate_yith_options( $options ) {
|
325 |
+
foreach ( $options as $key => &$option ) {
|
326 |
+
if ( ! isset( $option['type'] ) ) {
|
327 |
+
unset( $options[ $key ] );
|
328 |
+
continue;
|
329 |
+
}
|
330 |
+
|
331 |
+
// Let's fix the option type.
|
332 |
+
if ( in_array( $option['type'], array( 'toggle', 'onoff', 'checkbox' ), true ) ) {
|
333 |
+
$option['type'] = Controls_Manager::SWITCHER;
|
334 |
+
|
335 |
+
if ( isset( $option['default'] ) && is_bool( $option['default'] ) ) {
|
336 |
+
$option['default'] = yith_plugin_fw_is_true( $option['default'] ) ? 'yes' : 'no';
|
337 |
+
}
|
338 |
+
} elseif ( in_array( $option['type'], array( 'radio' ), true ) ) {
|
339 |
+
$option['type'] = Controls_Manager::SELECT;
|
340 |
+
} elseif ( in_array( $option['type'], array( 'color', 'colorpicker', 'color-palette' ), true ) ) {
|
341 |
+
$option['type'] = Controls_Manager::COLOR;
|
342 |
+
} elseif ( in_array( $option['type'], array( 'select' ), true ) && ! empty( $option['multiple'] ) ) {
|
343 |
+
$option['type'] = Controls_Manager::SELECT2;
|
344 |
+
}
|
345 |
+
|
346 |
+
// Set the key, used to store the option, and the display_key, used in the render method.
|
347 |
+
$option['yith_key'] = $this->maybe_prefix_yith_key( $key );
|
348 |
+
if ( ! isset( $option['yith_display_key'] ) ) {
|
349 |
+
$option['yith_display_key'] = $key;
|
350 |
+
}
|
351 |
+
|
352 |
+
// Auto-set the block_label to display label in a separate line.
|
353 |
+
if ( ! isset( $option['label_block'] ) ) {
|
354 |
+
$option['label_block'] = true;
|
355 |
+
}
|
356 |
+
}
|
357 |
+
|
358 |
+
return $options;
|
359 |
+
}
|
360 |
+
|
361 |
+
/**
|
362 |
+
* Override Elementor specific data if exists.
|
363 |
+
* This allows setting/overriding specific values for Elementor.
|
364 |
+
*
|
365 |
+
* @param array $data The data array.
|
366 |
+
*
|
367 |
+
* @return array
|
368 |
+
*/
|
369 |
+
protected function override_elementor_specific_data( $data ) {
|
370 |
+
$elementor_data = array_filter(
|
371 |
+
$data,
|
372 |
+
function ( $key ) {
|
373 |
+
return 'elementor_' === substr( $key, 0, 10 );
|
374 |
+
},
|
375 |
+
ARRAY_FILTER_USE_KEY
|
376 |
+
);
|
377 |
+
|
378 |
+
$elementor_data = array_combine(
|
379 |
+
array_map(
|
380 |
+
function ( $key ) {
|
381 |
+
return substr( $key, 10 );
|
382 |
+
},
|
383 |
+
array_keys( $elementor_data )
|
384 |
+
),
|
385 |
+
array_values( $elementor_data )
|
386 |
+
);
|
387 |
+
|
388 |
+
$data = array_merge( $data, $elementor_data );
|
389 |
+
|
390 |
+
return $data;
|
391 |
+
}
|
392 |
+
|
393 |
+
/**
|
394 |
+
* Map an option from Gutenberg
|
395 |
+
*
|
396 |
+
* @param array $option The option array.
|
397 |
+
*
|
398 |
+
* @return array
|
399 |
+
*/
|
400 |
+
protected function map_option_from_gutenberg( $option ) {
|
401 |
+
$option = $this->override_elementor_specific_data( $option );
|
402 |
+
$type = isset( $option['type'] ) ? $option['type'] : false;
|
403 |
+
|
404 |
+
if ( ! empty( $option['deps'] ) && ! isset( $option['condition'] ) ) {
|
405 |
+
if ( isset( $option['deps']['id'], $option['deps']['value'] ) ) {
|
406 |
+
$deps = array(
|
407 |
+
array(
|
408 |
+
'id' => $option['deps']['id'],
|
409 |
+
'value' => $option['deps']['value'],
|
410 |
+
),
|
411 |
+
);
|
412 |
+
} else {
|
413 |
+
$deps = $option['deps'];
|
414 |
+
}
|
415 |
+
|
416 |
+
$option['condition'] = array();
|
417 |
+
|
418 |
+
foreach ( $deps as $dep ) {
|
419 |
+
if ( isset( $dep['id'], $dep['value'] ) ) {
|
420 |
+
$dep_value = $dep['value'];
|
421 |
+
$dep_id = $dep['id'];
|
422 |
+
if ( in_array( $type, array( 'toggle', 'onoff', 'checkbox' ), true ) ) {
|
423 |
+
$dep_value = yith_plugin_fw_is_true( $dep_value ) ? 'yes' : 'no';
|
424 |
+
}
|
425 |
+
$option['condition'][ $dep_id ] = $dep_value;
|
426 |
+
}
|
427 |
+
}
|
428 |
+
|
429 |
+
unset( $option['deps'] );
|
430 |
+
}
|
431 |
+
|
432 |
+
switch ( $type ) {
|
433 |
+
case 'color':
|
434 |
+
case 'colorpicker':
|
435 |
+
if ( ! isset( $option['alpha'] ) ) {
|
436 |
+
$option['alpha'] = isset( $option['disableAlpha'] ) ? ! $option['disableAlpha'] : false;
|
437 |
+
}
|
438 |
+
|
439 |
+
break;
|
440 |
+
case 'color-palette':
|
441 |
+
$option['alpha'] = false;
|
442 |
+
break;
|
443 |
+
}
|
444 |
+
|
445 |
+
if ( isset( $option['help'] ) && ! isset( $option['description'] ) ) {
|
446 |
+
$option['description'] = $option['help'];
|
447 |
+
unset( $option['help'] );
|
448 |
+
}
|
449 |
+
|
450 |
+
return $option;
|
451 |
+
}
|
452 |
+
|
453 |
+
/**
|
454 |
+
* Return the YITH key prefix.
|
455 |
+
*
|
456 |
+
* @return string
|
457 |
+
*/
|
458 |
+
public function get_yith_key_prefix() {
|
459 |
+
return '_yith_';
|
460 |
+
}
|
461 |
+
|
462 |
+
/**
|
463 |
+
* Add YITH prefix to a specific key.
|
464 |
+
*
|
465 |
+
* @param string $key The key to be prefixed.
|
466 |
+
*
|
467 |
+
* @return string
|
468 |
+
*/
|
469 |
+
public function maybe_prefix_yith_key( $key ) {
|
470 |
+
$reserved_keys = array( 'id', 'elType', 'settings', 'elements', 'isInner' );
|
471 |
+
if ( in_array( $key, $reserved_keys, true ) ) {
|
472 |
+
$prefix = $this->get_yith_key_prefix();
|
473 |
+
|
474 |
+
$key = substr( $key, 0, strlen( $prefix ) ) === $prefix ? $key : ( $prefix . $key );
|
475 |
+
}
|
476 |
+
|
477 |
+
return $key;
|
478 |
+
}
|
479 |
+
}
|
480 |
+
}
|
plugin-fw/includes/builders/gutenberg/class-yith-gutenberg 2.php
ADDED
@@ -0,0 +1,360 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Gutenberg Class
|
4 |
+
* handle Gutenberg blocks and shortcodes.
|
5 |
+
*
|
6 |
+
* @class YITH_Gutenberg
|
7 |
+
* @package YITH\PluginFramework\Classes
|
8 |
+
*/
|
9 |
+
|
10 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
11 |
+
|
12 |
+
if ( ! class_exists( 'YITH_Gutenberg' ) ) {
|
13 |
+
/**
|
14 |
+
* YITH_Gutenberg class.
|
15 |
+
*
|
16 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
17 |
+
*/
|
18 |
+
class YITH_Gutenberg {
|
19 |
+
/**
|
20 |
+
* The single instance of the class.
|
21 |
+
*
|
22 |
+
* @var YITH_Gutenberg
|
23 |
+
*/
|
24 |
+
private static $instance;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Registered blocks
|
28 |
+
*
|
29 |
+
* @var array
|
30 |
+
*/
|
31 |
+
private $registered_blocks = array();
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Blocks to register
|
35 |
+
*
|
36 |
+
* @var array
|
37 |
+
*/
|
38 |
+
private $to_register_blocks = array();
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Blocks args
|
42 |
+
*
|
43 |
+
* @var array
|
44 |
+
*/
|
45 |
+
private $blocks_args = array();
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Block category slug
|
49 |
+
*
|
50 |
+
* @var string
|
51 |
+
*/
|
52 |
+
private $category_slug = 'yith-blocks';
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Singleton implementation.
|
56 |
+
*
|
57 |
+
* @return YITH_Gutenberg
|
58 |
+
*/
|
59 |
+
public static function instance() {
|
60 |
+
return ! is_null( self::$instance ) ? self::$instance : self::$instance = new self();
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* YITH_Gutenberg constructor.
|
65 |
+
*/
|
66 |
+
private function __construct() {
|
67 |
+
add_action( 'init', array( $this, 'init' ) );
|
68 |
+
add_action( 'init', array( $this, 'register_blocks' ), 30 );
|
69 |
+
add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_block_editor_assets' ) );
|
70 |
+
add_action( 'wp_ajax_yith_plugin_fw_gutenberg_do_shortcode', array( $this, 'do_shortcode' ) );
|
71 |
+
add_action( 'wc_ajax_yith_plugin_fw_gutenberg_do_shortcode', array( $this, 'do_shortcode' ) );
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Initialization
|
76 |
+
*/
|
77 |
+
public function init() {
|
78 |
+
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Enqueue scripts for gutenberg
|
83 |
+
*/
|
84 |
+
public function enqueue_block_editor_assets() {
|
85 |
+
$ajax_url = function_exists( 'WC' ) ? add_query_arg( 'wc-ajax', 'yith_plugin_fw_gutenberg_do_shortcode', trailingslashit( site_url() ) ) : admin_url( 'admin-ajax.php' );
|
86 |
+
$gutenberg = array(
|
87 |
+
'ajaxurl' => $ajax_url,
|
88 |
+
'ajaxNonce' => wp_create_nonce( 'gutenberg-ajax-action' ),
|
89 |
+
);
|
90 |
+
$asset_file = include YIT_CORE_PLUGIN_PATH . '/dist/gutenberg/index.asset.php';
|
91 |
+
|
92 |
+
$gutenberg_assets_url = YIT_CORE_PLUGIN_URL . '/dist/gutenberg';
|
93 |
+
|
94 |
+
wp_register_script(
|
95 |
+
'yith-gutenberg',
|
96 |
+
$gutenberg_assets_url . '/index.js',
|
97 |
+
$asset_file['dependencies'],
|
98 |
+
$asset_file['version'],
|
99 |
+
true
|
100 |
+
);
|
101 |
+
|
102 |
+
wp_localize_script( 'yith-gutenberg', 'yith_gutenberg_ajax', $gutenberg ); // Deprecated! Kept for backward compatibility.
|
103 |
+
wp_localize_script( 'yith-gutenberg', 'yith_gutenberg', $this->blocks_args ); // Deprecated! Kept for backward compatibility.
|
104 |
+
|
105 |
+
wp_localize_script( 'yith-gutenberg', 'yithGutenberg', $gutenberg );
|
106 |
+
wp_localize_script( 'yith-gutenberg', 'yithGutenbergBlocks', $this->blocks_args );
|
107 |
+
|
108 |
+
wp_enqueue_script( 'yith-gutenberg' );
|
109 |
+
wp_enqueue_style( 'yith-gutenberg', $gutenberg_assets_url . '/style-index.css', array( 'yith-plugin-fw-icon-font' ), yith_plugin_fw_get_version() );
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Add blocks to gutenberg editor.
|
114 |
+
*/
|
115 |
+
public function register_blocks() {
|
116 |
+
$block_args = array();
|
117 |
+
foreach ( $this->to_register_blocks as $block => $args ) {
|
118 |
+
if ( isset( $args['style'] ) ) {
|
119 |
+
$block_args['style'] = $args['style'];
|
120 |
+
}
|
121 |
+
|
122 |
+
if ( isset( $args['script'] ) ) {
|
123 |
+
$block_args['script'] = $args['script'];
|
124 |
+
}
|
125 |
+
|
126 |
+
if ( register_block_type( "yith/{$block}", $block_args ) ) {
|
127 |
+
$this->registered_blocks[] = $block;
|
128 |
+
}
|
129 |
+
}
|
130 |
+
|
131 |
+
if ( ! empty( $this->registered_blocks ) ) {
|
132 |
+
global $wp_version;
|
133 |
+
|
134 |
+
$categories_hook = version_compare( $wp_version, '5.8-beta', '>=' ) ? 'block_categories_all' : 'block_categories';
|
135 |
+
add_filter( $categories_hook, array( $this, 'block_category' ), 10, 1 );
|
136 |
+
}
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Add block category
|
141 |
+
*
|
142 |
+
* @param array $categories The block categories.
|
143 |
+
*
|
144 |
+
* @return array The block categories.
|
145 |
+
*/
|
146 |
+
public function block_category( $categories ) {
|
147 |
+
return array_merge(
|
148 |
+
$categories,
|
149 |
+
array(
|
150 |
+
array(
|
151 |
+
'slug' => 'yith-blocks',
|
152 |
+
'title' => _x( 'YITH', '[gutenberg]: Category Name', 'yith-plugin-fw' ),
|
153 |
+
),
|
154 |
+
)
|
155 |
+
);
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Add new blocks to Gutenberg
|
160 |
+
*
|
161 |
+
* @param string|array $blocks The blocks to be added.
|
162 |
+
*
|
163 |
+
* @return bool True if the blocks was successfully added, false otherwise.
|
164 |
+
*/
|
165 |
+
public function add_blocks( $blocks ) {
|
166 |
+
$added = false;
|
167 |
+
if ( ! empty( $blocks ) ) {
|
168 |
+
$added = true;
|
169 |
+
if ( is_array( $blocks ) ) {
|
170 |
+
$this->to_register_blocks = array_merge( $this->to_register_blocks, $blocks );
|
171 |
+
} else {
|
172 |
+
$this->to_register_blocks[] = $blocks;
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
return $added;
|
177 |
+
}
|
178 |
+
|
179 |
+
/**
|
180 |
+
* Return an array with the registered blocks
|
181 |
+
*
|
182 |
+
* @return array
|
183 |
+
*/
|
184 |
+
public function get_registered_blocks() {
|
185 |
+
return $this->registered_blocks;
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Return an array with the blocks to register
|
190 |
+
*
|
191 |
+
* @return array
|
192 |
+
*/
|
193 |
+
public function get_to_register_blocks() {
|
194 |
+
return $this->to_register_blocks;
|
195 |
+
}
|
196 |
+
|
197 |
+
/**
|
198 |
+
* Return an array with the block(s) arguments
|
199 |
+
*
|
200 |
+
* @param string $block_key The block key.
|
201 |
+
*
|
202 |
+
* @return array|false
|
203 |
+
*/
|
204 |
+
public function get_block_args( $block_key = 'all' ) {
|
205 |
+
if ( 'all' === $block_key ) {
|
206 |
+
return $this->blocks_args;
|
207 |
+
} elseif ( isset( $this->blocks_args[ $block_key ] ) ) {
|
208 |
+
return $this->blocks_args[ $block_key ];
|
209 |
+
}
|
210 |
+
|
211 |
+
return false;
|
212 |
+
}
|
213 |
+
|
214 |
+
/**
|
215 |
+
* Retrieve the default category slug
|
216 |
+
*
|
217 |
+
* @return string
|
218 |
+
*/
|
219 |
+
public function get_default_blocks_category_slug() {
|
220 |
+
return $this->category_slug;
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Set the block arguments
|
225 |
+
*
|
226 |
+
* @param array $args The block arguments.
|
227 |
+
*/
|
228 |
+
public function set_block_args( $args ) {
|
229 |
+
foreach ( $args as $block => $block_args ) {
|
230 |
+
|
231 |
+
// Add Default Keywords.
|
232 |
+
$default_keywords = array( 'yith' );
|
233 |
+
if ( ! empty( $block_args['shortcode_name'] ) ) {
|
234 |
+
$default_keywords[] = $block_args['shortcode_name'];
|
235 |
+
}
|
236 |
+
|
237 |
+
$args[ $block ]['keywords'] = ! empty( $args[ $block ]['keywords'] ) ? array_merge( $args[ $block ]['keywords'], $default_keywords ) : $default_keywords;
|
238 |
+
|
239 |
+
if ( count( $args[ $block ]['keywords'] ) > 3 ) {
|
240 |
+
$args[ $block ]['keywords'] = array_slice( $args[ $block ]['keywords'], 0, 3 );
|
241 |
+
}
|
242 |
+
|
243 |
+
if ( empty( $block_args['category'] ) ) {
|
244 |
+
// Add the YITH block category.
|
245 |
+
$args[ $block ]['category'] = $this->get_default_blocks_category_slug();
|
246 |
+
}
|
247 |
+
|
248 |
+
$args[ $block ]['do_shortcode'] = isset( $block_args['do_shortcode'] ) ? ! ! $block_args['do_shortcode'] : true;
|
249 |
+
|
250 |
+
if ( isset( $block_args['attributes'] ) ) {
|
251 |
+
foreach ( $block_args['attributes'] as $attr_name => $attributes ) {
|
252 |
+
|
253 |
+
if ( ! empty( $attributes['options'] ) && is_array( $attributes['options'] ) ) {
|
254 |
+
$options = array();
|
255 |
+
foreach ( $attributes['options'] as $v => $l ) {
|
256 |
+
// Prepare options array for react component.
|
257 |
+
$options[] = array(
|
258 |
+
'label' => $l,
|
259 |
+
'value' => $v,
|
260 |
+
);
|
261 |
+
}
|
262 |
+
$args[ $block ]['attributes'][ $attr_name ]['options'] = $options;
|
263 |
+
}
|
264 |
+
|
265 |
+
if ( empty( $attributes['remove_quotes'] ) ) {
|
266 |
+
$args[ $block ]['attributes'][ $attr_name ]['remove_quotes'] = false;
|
267 |
+
}
|
268 |
+
|
269 |
+
// Special Requirements for Block Type.
|
270 |
+
if ( ! empty( $attributes['type'] ) ) {
|
271 |
+
$args[ $block ]['attributes'][ $attr_name ]['controlType'] = $attributes['type'];
|
272 |
+
$args[ $block ]['attributes'][ $attr_name ]['type'] = 'string';
|
273 |
+
|
274 |
+
switch ( $attributes['type'] ) {
|
275 |
+
case 'select':
|
276 |
+
// Add default value for multiple.
|
277 |
+
if ( ! isset( $attributes['multiple'] ) ) {
|
278 |
+
$args[ $block ]['attributes'][ $attr_name ]['multiple'] = false;
|
279 |
+
}
|
280 |
+
|
281 |
+
if ( ! empty( $attributes['multiple'] ) ) {
|
282 |
+
$args[ $block ]['attributes'][ $attr_name ]['type'] = 'array';
|
283 |
+
}
|
284 |
+
break;
|
285 |
+
|
286 |
+
case 'color':
|
287 |
+
case 'colorpicker':
|
288 |
+
if ( ! isset( $attributes['disableAlpha'] ) ) {
|
289 |
+
// Disable alpha gradient for color picker.
|
290 |
+
$args[ $block ]['attributes'][ $attr_name ]['disableAlpha'] = true;
|
291 |
+
}
|
292 |
+
break;
|
293 |
+
|
294 |
+
case 'number':
|
295 |
+
$args[ $block ]['attributes'][ $attr_name ]['type'] = 'integer';
|
296 |
+
break;
|
297 |
+
|
298 |
+
case 'toggle':
|
299 |
+
case 'checkbox':
|
300 |
+
$args[ $block ]['attributes'][ $attr_name ]['type'] = 'boolean';
|
301 |
+
break;
|
302 |
+
}
|
303 |
+
}
|
304 |
+
}
|
305 |
+
}
|
306 |
+
}
|
307 |
+
|
308 |
+
$this->blocks_args = array_merge( $this->blocks_args, $args );
|
309 |
+
}
|
310 |
+
|
311 |
+
/**
|
312 |
+
* Get a do_shortcode in ajax call to show block preview
|
313 |
+
**/
|
314 |
+
public function do_shortcode() {
|
315 |
+
check_ajax_referer( 'gutenberg-ajax-action', 'security' );
|
316 |
+
|
317 |
+
$post_id = absint( $_REQUEST['context']['postId'] ?? 0 );
|
318 |
+
$admin_page = sanitize_text_field( wp_unslash( $_REQUEST['context']['adminPage'] ?? '' ) );
|
319 |
+
$has_access = ( in_array( $admin_page, array( 'widgets-php', 'site-editor-php' ), true ) && current_user_can( 'edit_theme_options' ) );
|
320 |
+
$has_access = $has_access || $post_id && current_user_can( 'edit_post', $post_id );
|
321 |
+
|
322 |
+
if ( $has_access ) {
|
323 |
+
$current_action = current_action();
|
324 |
+
$shortcode = ! empty( $_REQUEST['shortcode'] ) ? wp_unslash( $_REQUEST['shortcode'] ) : ''; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
|
325 |
+
|
326 |
+
if ( ! apply_filters( 'yith_plugin_fw_gutenberg_skip_shortcode_sanitize', false ) ) {
|
327 |
+
$shortcode = sanitize_text_field( stripslashes( $shortcode ) );
|
328 |
+
}
|
329 |
+
|
330 |
+
ob_start();
|
331 |
+
|
332 |
+
do_action( 'yith_plugin_fw_gutenberg_before_do_shortcode', $shortcode, $current_action );
|
333 |
+
echo do_shortcode( apply_filters( 'yith_plugin_fw_gutenberg_shortcode', $shortcode, $current_action ) );
|
334 |
+
do_action( 'yith_plugin_fw_gutenberg_after_do_shortcode', $shortcode, $current_action );
|
335 |
+
|
336 |
+
$html = ob_get_clean();
|
337 |
+
|
338 |
+
wp_send_json(
|
339 |
+
array(
|
340 |
+
'html' => $html,
|
341 |
+
)
|
342 |
+
);
|
343 |
+
|
344 |
+
}
|
345 |
+
}
|
346 |
+
}
|
347 |
+
}
|
348 |
+
|
349 |
+
if ( ! function_exists( 'YITH_Gutenberg' ) ) {
|
350 |
+
/**
|
351 |
+
* Single instance of YITH_Gutenberg
|
352 |
+
*
|
353 |
+
* @return YITH_Gutenberg
|
354 |
+
*/
|
355 |
+
function YITH_Gutenberg() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
|
356 |
+
return YITH_Gutenberg::instance();
|
357 |
+
}
|
358 |
+
}
|
359 |
+
|
360 |
+
YITH_Gutenberg();
|
plugin-fw/includes/builders/gutenberg/src/common/actions-to-jquery-events 2.js
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Actions to jQuery events
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* WordPress dependencies
|
7 |
+
*/
|
8 |
+
import { addAction } from '@wordpress/hooks';
|
9 |
+
|
10 |
+
const actions = [
|
11 |
+
{ key: 'yith_plugin_fw_gutenberg_before_do_shortcode', delay: 0 },
|
12 |
+
{ key: 'yith_plugin_fw_gutenberg_success_do_shortcode', delay: 200 },
|
13 |
+
{ key: 'yith_plugin_fw_gutenberg_after_do_shortcode', delay: 200 }
|
14 |
+
];
|
15 |
+
|
16 |
+
for ( const action of actions ) {
|
17 |
+
addAction(
|
18 |
+
action.key,
|
19 |
+
'yith-plugin-fw/jquery-events',
|
20 |
+
( ...params ) => {
|
21 |
+
if ( 'jQuery' in window ) {
|
22 |
+
if ( action.delay ) {
|
23 |
+
setTimeout( () => {
|
24 |
+
jQuery( document ).trigger( action.key, Object.values( params ) );
|
25 |
+
}, action.delay );
|
26 |
+
} else {
|
27 |
+
jQuery( document ).trigger( action.key, Object.values( params ) );
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
);
|
32 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/common/actions-to-jquery-events.js
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Actions to jQuery events
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* WordPress dependencies
|
7 |
+
*/
|
8 |
+
import { addAction } from '@wordpress/hooks';
|
9 |
+
|
10 |
+
const actions = [
|
11 |
+
{ key: 'yith_plugin_fw_gutenberg_before_do_shortcode', delay: 0 },
|
12 |
+
{ key: 'yith_plugin_fw_gutenberg_success_do_shortcode', delay: 200 },
|
13 |
+
{ key: 'yith_plugin_fw_gutenberg_after_do_shortcode', delay: 200 }
|
14 |
+
];
|
15 |
+
|
16 |
+
for ( const action of actions ) {
|
17 |
+
addAction(
|
18 |
+
action.key,
|
19 |
+
'yith-plugin-fw/jquery-events',
|
20 |
+
( ...params ) => {
|
21 |
+
if ( 'jQuery' in window ) {
|
22 |
+
if ( action.delay ) {
|
23 |
+
setTimeout( () => {
|
24 |
+
jQuery( document ).trigger( action.key, Object.values( params ) );
|
25 |
+
}, action.delay );
|
26 |
+
} else {
|
27 |
+
jQuery( document ).trigger( action.key, Object.values( params ) );
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
);
|
32 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/common/ajaxFetch 2.js
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Ajax Fetch
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* WordPress dependencies
|
7 |
+
*/
|
8 |
+
import { addQueryArgs } from '@wordpress/url';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Check status of ajax call
|
12 |
+
* @param response
|
13 |
+
* @returns {*}
|
14 |
+
*/
|
15 |
+
function ajaxCheckStatus( response ) {
|
16 |
+
if ( response.status >= 200 && response.status < 300 ) {
|
17 |
+
return response;
|
18 |
+
}
|
19 |
+
|
20 |
+
throw response;
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Parse the response of the ajax call
|
25 |
+
* @param response
|
26 |
+
* @returns {*}
|
27 |
+
*/
|
28 |
+
function parseResponse( response ) {
|
29 |
+
return response.json ? response.json() : response.text();
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Fetch using WordPress Ajax
|
34 |
+
*
|
35 |
+
* @param {object} data The data to use in the ajax call.
|
36 |
+
* @param {string} url The ajax URL.
|
37 |
+
* @returns {Promise<Response>}
|
38 |
+
*/
|
39 |
+
export const ajaxFetch = ( data, url = yithGutenberg.ajaxurl ) => {
|
40 |
+
data.security = data.security ?? yithGutenberg.ajaxNonce;
|
41 |
+
url = addQueryArgs( url, data );
|
42 |
+
return fetch( url ).then( ajaxCheckStatus ).then( parseResponse );
|
43 |
+
};
|
plugin-fw/includes/builders/gutenberg/src/common/ajaxFetch.js
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Ajax Fetch
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* WordPress dependencies
|
7 |
+
*/
|
8 |
+
import { addQueryArgs } from '@wordpress/url';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Check status of ajax call
|
12 |
+
* @param response
|
13 |
+
* @returns {*}
|
14 |
+
*/
|
15 |
+
function ajaxCheckStatus( response ) {
|
16 |
+
if ( response.status >= 200 && response.status < 300 ) {
|
17 |
+
return response;
|
18 |
+
}
|
19 |
+
|
20 |
+
throw response;
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Parse the response of the ajax call
|
25 |
+
* @param response
|
26 |
+
* @returns {*}
|
27 |
+
*/
|
28 |
+
function parseResponse( response ) {
|
29 |
+
return response.json ? response.json() : response.text();
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Fetch using WordPress Ajax
|
34 |
+
*
|
35 |
+
* @param {object} data The data to use in the ajax call.
|
36 |
+
* @param {string} url The ajax URL.
|
37 |
+
* @returns {Promise<Response>}
|
38 |
+
*/
|
39 |
+
export const ajaxFetch = ( data, url = yithGutenberg.ajaxurl ) => {
|
40 |
+
data.security = data.security ?? yithGutenberg.ajaxNonce;
|
41 |
+
url = addQueryArgs( url, data );
|
42 |
+
return fetch( url ).then( ajaxCheckStatus ).then( parseResponse );
|
43 |
+
};
|
plugin-fw/includes/builders/gutenberg/src/common/checkForDeps 2.js
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Check for dependencies
|
3 |
+
*
|
4 |
+
* @param {object} attributeArgs Attribute arguments.
|
5 |
+
* @param {object} attributes The attributes.
|
6 |
+
* @returns {boolean}
|
7 |
+
*/
|
8 |
+
|
9 |
+
import _ from 'lodash';
|
10 |
+
|
11 |
+
const checkForSingleDep = ( attributes, dep, controlType ) => {
|
12 |
+
let show = true;
|
13 |
+
|
14 |
+
if ( dep && dep.id && 'value' in dep ) {
|
15 |
+
let depValue = dep.value;
|
16 |
+
if ( ['toggle', 'checkbox'].includes( controlType ) ) {
|
17 |
+
depValue = true === depValue || 'yes' === depValue || 1 === depValue;
|
18 |
+
}
|
19 |
+
depValue = _.isArray( depValue ) ? depValue : [depValue];
|
20 |
+
|
21 |
+
show = typeof attributes[ dep.id ] !== 'undefined' && depValue.includes( attributes[ dep.id ] );
|
22 |
+
}
|
23 |
+
|
24 |
+
return show;
|
25 |
+
};
|
26 |
+
|
27 |
+
export const checkForDeps = ( attributeArgs, attributes ) => {
|
28 |
+
const { controlType } = attributeArgs;
|
29 |
+
let show = true;
|
30 |
+
|
31 |
+
if ( attributeArgs.deps ) {
|
32 |
+
if ( _.isArray( attributeArgs.deps ) ) {
|
33 |
+
for ( let i in attributeArgs.deps ) {
|
34 |
+
const singleDep = attributeArgs.deps[ i ];
|
35 |
+
show = checkForSingleDep( attributes, singleDep, controlType );
|
36 |
+
if ( !show ) {
|
37 |
+
break;
|
38 |
+
}
|
39 |
+
}
|
40 |
+
} else {
|
41 |
+
show = checkForSingleDep( attributes, attributeArgs.deps, controlType );
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
return show;
|
46 |
+
};
|
plugin-fw/includes/builders/gutenberg/src/common/checkForDeps.js
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Check for dependencies
|
3 |
+
*
|
4 |
+
* @param {object} attributeArgs Attribute arguments.
|
5 |
+
* @param {object} attributes The attributes.
|
6 |
+
* @returns {boolean}
|
7 |
+
*/
|
8 |
+
|
9 |
+
import _ from 'lodash';
|
10 |
+
|
11 |
+
const checkForSingleDep = ( attributes, dep, controlType ) => {
|
12 |
+
let show = true;
|
13 |
+
|
14 |
+
if ( dep && dep.id && 'value' in dep ) {
|
15 |
+
let depValue = dep.value;
|
16 |
+
if ( ['toggle', 'checkbox'].includes( controlType ) ) {
|
17 |
+
depValue = true === depValue || 'yes' === depValue || 1 === depValue;
|
18 |
+
}
|
19 |
+
depValue = _.isArray( depValue ) ? depValue : [depValue];
|
20 |
+
|
21 |
+
show = typeof attributes[ dep.id ] !== 'undefined' && depValue.includes( attributes[ dep.id ] );
|
22 |
+
}
|
23 |
+
|
24 |
+
return show;
|
25 |
+
};
|
26 |
+
|
27 |
+
export const checkForDeps = ( attributeArgs, attributes ) => {
|
28 |
+
const { controlType } = attributeArgs;
|
29 |
+
let show = true;
|
30 |
+
|
31 |
+
if ( attributeArgs.deps ) {
|
32 |
+
if ( _.isArray( attributeArgs.deps ) ) {
|
33 |
+
for ( let i in attributeArgs.deps ) {
|
34 |
+
const singleDep = attributeArgs.deps[ i ];
|
35 |
+
show = checkForSingleDep( attributes, singleDep, controlType );
|
36 |
+
if ( !show ) {
|
37 |
+
break;
|
38 |
+
}
|
39 |
+
}
|
40 |
+
} else {
|
41 |
+
show = checkForSingleDep( attributes, attributeArgs.deps, controlType );
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
return show;
|
46 |
+
};
|
plugin-fw/includes/builders/gutenberg/src/common/generateShortcode 2.js
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Internal dependencies
|
3 |
+
*/
|
4 |
+
import { checkForDeps } from './checkForDeps';
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Generate the shortcode
|
8 |
+
*
|
9 |
+
* @param {object} blockArgs The block arguments.
|
10 |
+
* @param {object} attributes The attributes
|
11 |
+
* @returns {string}
|
12 |
+
*/
|
13 |
+
export const generateShortcode = ( blockArgs, attributes ) => {
|
14 |
+
let theShortcode = '';
|
15 |
+
let callback = false;
|
16 |
+
|
17 |
+
if ( typeof blockArgs.callback !== 'undefined' ) {
|
18 |
+
if ( jQuery && blockArgs.callback in jQuery.fn ) {
|
19 |
+
callback = jQuery.fn[ blockArgs.callback ];
|
20 |
+
} else if ( blockArgs.callback in window ) {
|
21 |
+
callback = window[ blockArgs.callback ];
|
22 |
+
}
|
23 |
+
}
|
24 |
+
|
25 |
+
if ( typeof callback === 'function' ) {
|
26 |
+
theShortcode = callback( attributes, blockArgs );
|
27 |
+
} else {
|
28 |
+
const shortcodeAttrs = blockArgs.attributes ? Object.entries( blockArgs.attributes ).map( ( [attributeName, attributeArgs] ) => {
|
29 |
+
const show = checkForDeps( attributeArgs, attributes );
|
30 |
+
const value = attributes[ attributeName ];
|
31 |
+
|
32 |
+
if ( show && typeof value !== 'undefined' ) {
|
33 |
+
const shortcodeValue = !!attributeArgs.remove_quotes ? value : `"${value}"`;
|
34 |
+
return attributeName + '=' + shortcodeValue;
|
35 |
+
}
|
36 |
+
} ) : [];
|
37 |
+
|
38 |
+
const shortcodeAttrsText = shortcodeAttrs.length ? ( ' ' + shortcodeAttrs.join( ' ' ) ) : '';
|
39 |
+
theShortcode = `[${blockArgs.shortcode_name}${shortcodeAttrsText}]`;
|
40 |
+
}
|
41 |
+
return theShortcode;
|
42 |
+
};
|
plugin-fw/includes/builders/gutenberg/src/common/generateShortcode.js
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Internal dependencies
|
3 |
+
*/
|
4 |
+
import { checkForDeps } from './checkForDeps';
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Generate the shortcode
|
8 |
+
*
|
9 |
+
* @param {object} blockArgs The block arguments.
|
10 |
+
* @param {object} attributes The attributes
|
11 |
+
* @returns {string}
|
12 |
+
*/
|
13 |
+
export const generateShortcode = ( blockArgs, attributes ) => {
|
14 |
+
let theShortcode = '';
|
15 |
+
let callback = false;
|
16 |
+
|
17 |
+
if ( typeof blockArgs.callback !== 'undefined' ) {
|
18 |
+
if ( jQuery && blockArgs.callback in jQuery.fn ) {
|
19 |
+
callback = jQuery.fn[ blockArgs.callback ];
|
20 |
+
} else if ( blockArgs.callback in window ) {
|
21 |
+
callback = window[ blockArgs.callback ];
|
22 |
+
}
|
23 |
+
}
|
24 |
+
|
25 |
+
if ( typeof callback === 'function' ) {
|
26 |
+
theShortcode = callback( attributes, blockArgs );
|
27 |
+
} else {
|
28 |
+
const shortcodeAttrs = blockArgs.attributes ? Object.entries( blockArgs.attributes ).map( ( [attributeName, attributeArgs] ) => {
|
29 |
+
const show = checkForDeps( attributeArgs, attributes );
|
30 |
+
const value = attributes[ attributeName ];
|
31 |
+
|
32 |
+
if ( show && typeof value !== 'undefined' ) {
|
33 |
+
const shortcodeValue = !!attributeArgs.remove_quotes ? value : `"${value}"`;
|
34 |
+
return attributeName + '=' + shortcodeValue;
|
35 |
+
}
|
36 |
+
} ) : [];
|
37 |
+
|
38 |
+
const shortcodeAttrsText = shortcodeAttrs.length ? ( ' ' + shortcodeAttrs.join( ' ' ) ) : '';
|
39 |
+
theShortcode = `[${blockArgs.shortcode_name}${shortcodeAttrsText}]`;
|
40 |
+
}
|
41 |
+
return theShortcode;
|
42 |
+
};
|
plugin-fw/includes/builders/gutenberg/src/common/icons 2.js
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* SVG Icons
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* The YITH Logo Icon
|
7 |
+
* @type {JSX.Element}
|
8 |
+
*/
|
9 |
+
export const yith_icon = <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" width="22" height="22" role="img" aria-hidden="true" focusable="false">
|
10 |
+
<path width="22" height="22"
|
11 |
+
d="M 18.24 7.628 C 17.291 8.284 16.076 8.971 14.587 9.688 C 15.344 7.186 15.765 4.851 15.849 2.684 C 15.912 0.939 15.133 0.045 13.514 0.003 C 11.558 -0.06 10.275 1.033 9.665 3.284 C 10.007 3.137 10.359 3.063 10.723 3.063 C 11.021 3.063 11.267 3.184 11.459 3.426 C 11.651 3.668 11.736 3.947 11.715 4.262 C 11.695 5.082 11.276 5.961 10.46 6.896 C 9.644 7.833 8.918 8.3 8.282 8.3 C 7.837 8.3 7.625 7.922 7.646 7.165 C 7.667 6.765 7.804 5.955 8.056 4.735 C 8.287 3.579 8.403 2.801 8.403 2.401 C 8.403 1.707 8.224 1.144 7.867 0.713 C 7.509 0.282 6.994 0.098 6.321 0.161 C 5.858 0.203 5.175 0.624 4.27 1.422 C 3.596 2.035 2.923 2.644 2.25 3.254 L 2.976 4.106 C 3.564 3.664 3.922 3.443 4.048 3.443 C 4.448 3.443 4.637 3.717 4.617 4.263 C 4.617 4.306 4.427 4.968 4.049 6.251 C 3.671 7.534 3.471 8.491 3.449 9.122 C 3.407 9.985 3.565 10.647 3.924 11.109 C 4.367 11.677 5.106 11.919 6.142 11.835 C 7.366 11.751 8.591 11.298 9.816 10.479 C 10.323 10.142 10.808 9.753 11.273 9.311 C 11.105 10.153 10.905 10.868 10.673 11.457 C 8.402 12.487 6.762 13.37 5.752 14.107 C 4.321 15.137 3.554 16.241 3.449 17.419 C 3.259 19.459 4.29 20.479 6.541 20.479 C 8.055 20.479 9.517 19.554 10.926 17.703 C 12.125 16.126 13.166 14.022 14.049 11.394 C 15.578 10.635 16.87 9.892 17.928 9.164 C 17.894 9.409 18.319 7.308 18.24 7.628 Z M 7.393 16.095 C 7.056 16.095 6.898 15.947 6.919 15.653 C 6.961 15.106 7.908 14.38 9.759 13.476 C 8.791 15.221 8.002 16.095 7.393 16.095 Z"/>
|
12 |
+
</svg>;
|
plugin-fw/includes/builders/gutenberg/src/common/icons.js
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* SVG Icons
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* The YITH Logo Icon
|
7 |
+
* @type {JSX.Element}
|
8 |
+
*/
|
9 |
+
export const yith_icon = <svg viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg" width="22" height="22" role="img" aria-hidden="true" focusable="false">
|
10 |
+
<path width="22" height="22"
|
11 |
+
d="M 18.24 7.628 C 17.291 8.284 16.076 8.971 14.587 9.688 C 15.344 7.186 15.765 4.851 15.849 2.684 C 15.912 0.939 15.133 0.045 13.514 0.003 C 11.558 -0.06 10.275 1.033 9.665 3.284 C 10.007 3.137 10.359 3.063 10.723 3.063 C 11.021 3.063 11.267 3.184 11.459 3.426 C 11.651 3.668 11.736 3.947 11.715 4.262 C 11.695 5.082 11.276 5.961 10.46 6.896 C 9.644 7.833 8.918 8.3 8.282 8.3 C 7.837 8.3 7.625 7.922 7.646 7.165 C 7.667 6.765 7.804 5.955 8.056 4.735 C 8.287 3.579 8.403 2.801 8.403 2.401 C 8.403 1.707 8.224 1.144 7.867 0.713 C 7.509 0.282 6.994 0.098 6.321 0.161 C 5.858 0.203 5.175 0.624 4.27 1.422 C 3.596 2.035 2.923 2.644 2.25 3.254 L 2.976 4.106 C 3.564 3.664 3.922 3.443 4.048 3.443 C 4.448 3.443 4.637 3.717 4.617 4.263 C 4.617 4.306 4.427 4.968 4.049 6.251 C 3.671 7.534 3.471 8.491 3.449 9.122 C 3.407 9.985 3.565 10.647 3.924 11.109 C 4.367 11.677 5.106 11.919 6.142 11.835 C 7.366 11.751 8.591 11.298 9.816 10.479 C 10.323 10.142 10.808 9.753 11.273 9.311 C 11.105 10.153 10.905 10.868 10.673 11.457 C 8.402 12.487 6.762 13.37 5.752 14.107 C 4.321 15.137 3.554 16.241 3.449 17.419 C 3.259 19.459 4.29 20.479 6.541 20.479 C 8.055 20.479 9.517 19.554 10.926 17.703 C 12.125 16.126 13.166 14.022 14.049 11.394 C 15.578 10.635 16.87 9.892 17.928 9.164 C 17.894 9.409 18.319 7.308 18.24 7.628 Z M 7.393 16.095 C 7.056 16.095 6.898 15.947 6.919 15.653 C 6.961 15.106 7.908 14.38 9.759 13.476 C 8.791 15.221 8.002 16.095 7.393 16.095 Z"/>
|
12 |
+
</svg>;
|
plugin-fw/includes/builders/gutenberg/src/common/index 2.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
export * from './ajaxFetch';
|
2 |
+
export * from './icons';
|
3 |
+
export * from './generateShortcode';
|
4 |
+
export * from './checkForDeps';
|
plugin-fw/includes/builders/gutenberg/src/common/index.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
export * from './ajaxFetch';
|
2 |
+
export * from './icons';
|
3 |
+
export * from './generateShortcode';
|
4 |
+
export * from './checkForDeps';
|
plugin-fw/includes/builders/gutenberg/src/components/color-palette-control/index 2.js
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Color Palette Component
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* External dependencies
|
7 |
+
*/
|
8 |
+
import React from 'react';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* WordPress dependencies
|
12 |
+
*/
|
13 |
+
import { BaseControl, ColorIndicator, ColorPalette } from '@wordpress/components';
|
14 |
+
import { useSetting } from '@wordpress/block-editor';
|
15 |
+
import { useInstanceId } from '@wordpress/compose';
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Internal dependencies
|
19 |
+
*/
|
20 |
+
import './style.scss';
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Visual Label Element
|
24 |
+
*
|
25 |
+
* @param {string} label The label.
|
26 |
+
* @param {string} colorValue The color.
|
27 |
+
* @returns {JSX.Element}
|
28 |
+
* @constructor
|
29 |
+
*/
|
30 |
+
function VisualLabel( {
|
31 |
+
label,
|
32 |
+
colorValue
|
33 |
+
} ) {
|
34 |
+
|
35 |
+
return (
|
36 |
+
<>
|
37 |
+
{label}
|
38 |
+
{!!colorValue && (
|
39 |
+
<ColorIndicator colorValue={colorValue}/>
|
40 |
+
)}
|
41 |
+
</>
|
42 |
+
);
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Color Palette Control
|
47 |
+
*
|
48 |
+
* @param {string} className The CSS class name.
|
49 |
+
* @param {string} label The label.
|
50 |
+
* @param {function} onChange The function callback fired on value change.
|
51 |
+
* @param {string} value The initial value.
|
52 |
+
* @param {string} help The help message.
|
53 |
+
* @param {array} palette Array of palette colors.
|
54 |
+
* @param {bool} clearable Set true to allow clear.
|
55 |
+
* @returns {JSX.Element}
|
56 |
+
* @constructor
|
57 |
+
*/
|
58 |
+
export default function ColorPaletteControl( {
|
59 |
+
className,
|
60 |
+
label,
|
61 |
+
onChange,
|
62 |
+
value,
|
63 |
+
help,
|
64 |
+
palette,
|
65 |
+
clearable
|
66 |
+
} ) {
|
67 |
+
|
68 |
+
palette = !!palette ? palette : useSetting( 'color.palette' );
|
69 |
+
|
70 |
+
const instanceId = useInstanceId( ColorPaletteControl );
|
71 |
+
const id = `inspector-yith-color-palette-control-${instanceId}`;
|
72 |
+
|
73 |
+
return (
|
74 |
+
<BaseControl
|
75 |
+
id={id}
|
76 |
+
className={`block-editor-yith-color-palette-control ${className}`}
|
77 |
+
help={help}
|
78 |
+
>
|
79 |
+
<fieldset>
|
80 |
+
<legend>
|
81 |
+
<div className="block-editor-yith-color-palette-control__color-indicator">
|
82 |
+
<BaseControl.VisualLabel>
|
83 |
+
<VisualLabel colorValue={value} label={label}/>
|
84 |
+
</BaseControl.VisualLabel>
|
85 |
+
</div>
|
86 |
+
</legend>
|
87 |
+
|
88 |
+
<ColorPalette
|
89 |
+
value={value}
|
90 |
+
onChange={onChange}
|
91 |
+
colors={palette}
|
92 |
+
clearable={clearable}
|
93 |
+
/>
|
94 |
+
</fieldset>
|
95 |
+
</BaseControl> );
|
96 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/color-palette-control/index.js
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Color Palette Component
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* External dependencies
|
7 |
+
*/
|
8 |
+
import React from 'react';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* WordPress dependencies
|
12 |
+
*/
|
13 |
+
import { BaseControl, ColorIndicator, ColorPalette } from '@wordpress/components';
|
14 |
+
import { useSetting } from '@wordpress/block-editor';
|
15 |
+
import { useInstanceId } from '@wordpress/compose';
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Internal dependencies
|
19 |
+
*/
|
20 |
+
import './style.scss';
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Visual Label Element
|
24 |
+
*
|
25 |
+
* @param {string} label The label.
|
26 |
+
* @param {string} colorValue The color.
|
27 |
+
* @returns {JSX.Element}
|
28 |
+
* @constructor
|
29 |
+
*/
|
30 |
+
function VisualLabel( {
|
31 |
+
label,
|
32 |
+
colorValue
|
33 |
+
} ) {
|
34 |
+
|
35 |
+
return (
|
36 |
+
<>
|
37 |
+
{label}
|
38 |
+
{!!colorValue && (
|
39 |
+
<ColorIndicator colorValue={colorValue}/>
|
40 |
+
)}
|
41 |
+
</>
|
42 |
+
);
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Color Palette Control
|
47 |
+
*
|
48 |
+
* @param {string} className The CSS class name.
|
49 |
+
* @param {string} label The label.
|
50 |
+
* @param {function} onChange The function callback fired on value change.
|
51 |
+
* @param {string} value The initial value.
|
52 |
+
* @param {string} help The help message.
|
53 |
+
* @param {array} palette Array of palette colors.
|
54 |
+
* @param {bool} clearable Set true to allow clear.
|
55 |
+
* @returns {JSX.Element}
|
56 |
+
* @constructor
|
57 |
+
*/
|
58 |
+
export default function ColorPaletteControl( {
|
59 |
+
className,
|
60 |
+
label,
|
61 |
+
onChange,
|
62 |
+
value,
|
63 |
+
help,
|
64 |
+
palette,
|
65 |
+
clearable
|
66 |
+
} ) {
|
67 |
+
|
68 |
+
palette = !!palette ? palette : useSetting( 'color.palette' );
|
69 |
+
|
70 |
+
const instanceId = useInstanceId( ColorPaletteControl );
|
71 |
+
const id = `inspector-yith-color-palette-control-${instanceId}`;
|
72 |
+
|
73 |
+
return (
|
74 |
+
<BaseControl
|
75 |
+
id={id}
|
76 |
+
className={`block-editor-yith-color-palette-control ${className}`}
|
77 |
+
help={help}
|
78 |
+
>
|
79 |
+
<fieldset>
|
80 |
+
<legend>
|
81 |
+
<div className="block-editor-yith-color-palette-control__color-indicator">
|
82 |
+
<BaseControl.VisualLabel>
|
83 |
+
<VisualLabel colorValue={value} label={label}/>
|
84 |
+
</BaseControl.VisualLabel>
|
85 |
+
</div>
|
86 |
+
</legend>
|
87 |
+
|
88 |
+
<ColorPalette
|
89 |
+
value={value}
|
90 |
+
onChange={onChange}
|
91 |
+
colors={palette}
|
92 |
+
clearable={clearable}
|
93 |
+
/>
|
94 |
+
</fieldset>
|
95 |
+
</BaseControl> );
|
96 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/color-palette-control/style 2.scss
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.block-editor-yith-color-palette-control {
|
2 |
+
.block-editor-yith-color-palette-control__color-indicator {
|
3 |
+
margin-bottom: 12px;
|
4 |
+
}
|
5 |
+
|
6 |
+
.component-color-indicator{
|
7 |
+
vertical-align: text-bottom;
|
8 |
+
}
|
9 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/color-palette-control/style.scss
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.block-editor-yith-color-palette-control {
|
2 |
+
.block-editor-yith-color-palette-control__color-indicator {
|
3 |
+
margin-bottom: 12px;
|
4 |
+
}
|
5 |
+
|
6 |
+
.component-color-indicator{
|
7 |
+
vertical-align: text-bottom;
|
8 |
+
}
|
9 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/color-picker-control/index 2.js
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Color Picker Component
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* External dependencies
|
7 |
+
*/
|
8 |
+
import React from 'react';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* WordPress dependencies
|
12 |
+
*/
|
13 |
+
import { BaseControl, ColorPicker } from '@wordpress/components';
|
14 |
+
import { useInstanceId } from '@wordpress/compose';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Color Picker Control
|
18 |
+
*
|
19 |
+
* @param {string} className The CSS class name.
|
20 |
+
* @param {string} label The label.
|
21 |
+
* @param {function} onChange The function callback fired on value change.
|
22 |
+
* @param {string} value The initial value.
|
23 |
+
* @param {string} help The help message.
|
24 |
+
* @param {bool} disableAlpha Set true to disable the alpha
|
25 |
+
* @returns {ColorPickerControl}
|
26 |
+
* @constructor
|
27 |
+
*/
|
28 |
+
export default function ColorPickerControl( {
|
29 |
+
className,
|
30 |
+
label,
|
31 |
+
onChange,
|
32 |
+
value,
|
33 |
+
help,
|
34 |
+
disableAlpha,
|
35 |
+
} ) {
|
36 |
+
|
37 |
+
const instanceId = useInstanceId( ColorPickerControl );
|
38 |
+
const id = `inspector-yith-color-picker-control-${instanceId}`;
|
39 |
+
|
40 |
+
return (
|
41 |
+
<BaseControl
|
42 |
+
id={id}
|
43 |
+
label={label}
|
44 |
+
className={`block-editor-yith-color-control ${className}`}
|
45 |
+
help={help}
|
46 |
+
>
|
47 |
+
<ColorPicker
|
48 |
+
color={value}
|
49 |
+
disableAlpha={disableAlpha}
|
50 |
+
onChangeComplete={onChange}
|
51 |
+
/>
|
52 |
+
</BaseControl> );
|
53 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/color-picker-control/index.js
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Color Picker Component
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* External dependencies
|
7 |
+
*/
|
8 |
+
import React from 'react';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* WordPress dependencies
|
12 |
+
*/
|
13 |
+
import { BaseControl, ColorPicker } from '@wordpress/components';
|
14 |
+
import { useInstanceId } from '@wordpress/compose';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Color Picker Control
|
18 |
+
*
|
19 |
+
* @param {string} className The CSS class name.
|
20 |
+
* @param {string} label The label.
|
21 |
+
* @param {function} onChange The function callback fired on value change.
|
22 |
+
* @param {string} value The initial value.
|
23 |
+
* @param {string} help The help message.
|
24 |
+
* @param {bool} disableAlpha Set true to disable the alpha
|
25 |
+
* @returns {ColorPickerControl}
|
26 |
+
* @constructor
|
27 |
+
*/
|
28 |
+
export default function ColorPickerControl( {
|
29 |
+
className,
|
30 |
+
label,
|
31 |
+
onChange,
|
32 |
+
value,
|
33 |
+
help,
|
34 |
+
disableAlpha,
|
35 |
+
} ) {
|
36 |
+
|
37 |
+
const instanceId = useInstanceId( ColorPickerControl );
|
38 |
+
const id = `inspector-yith-color-picker-control-${instanceId}`;
|
39 |
+
|
40 |
+
return (
|
41 |
+
<BaseControl
|
42 |
+
id={id}
|
43 |
+
label={label}
|
44 |
+
className={`block-editor-yith-color-control ${className}`}
|
45 |
+
help={help}
|
46 |
+
>
|
47 |
+
<ColorPicker
|
48 |
+
color={value}
|
49 |
+
disableAlpha={disableAlpha}
|
50 |
+
onChangeComplete={onChange}
|
51 |
+
/>
|
52 |
+
</BaseControl> );
|
53 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/multiple-select-control/index 2.js
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import React from 'react';
|
5 |
+
|
6 |
+
/**
|
7 |
+
* WordPress dependencies
|
8 |
+
*/
|
9 |
+
import { BaseControl } from '@wordpress/components';
|
10 |
+
import { useInstanceId } from '@wordpress/compose';
|
11 |
+
import MultipleSelect from './multiple-select';
|
12 |
+
|
13 |
+
import './style.scss';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Color Picker Control
|
17 |
+
*
|
18 |
+
* @param {string} className The CSS class name.
|
19 |
+
* @param {string} label The label.
|
20 |
+
* @param {function} onChange The function callback fired on value change.
|
21 |
+
* @param {string} value The initial value.
|
22 |
+
* @param {string} help The help message.
|
23 |
+
* @param {bool} disableAlpha Set true to disable the alpha
|
24 |
+
* @returns {MultipleSelectControl}
|
25 |
+
* @constructor
|
26 |
+
*/
|
27 |
+
export default function MultipleSelectControl(
|
28 |
+
{
|
29 |
+
className,
|
30 |
+
label,
|
31 |
+
onChange,
|
32 |
+
value,
|
33 |
+
help,
|
34 |
+
options,
|
35 |
+
messages
|
36 |
+
}
|
37 |
+
) {
|
38 |
+
|
39 |
+
const instanceId = useInstanceId( MultipleSelectControl );
|
40 |
+
const id = `inspector-yith-multiple-select-control-${instanceId}`;
|
41 |
+
|
42 |
+
return <BaseControl
|
43 |
+
id={id}
|
44 |
+
label={label}
|
45 |
+
className={`block-editor-yith-multiple-select-control ${className}`}
|
46 |
+
help={help}
|
47 |
+
>
|
48 |
+
<MultipleSelect
|
49 |
+
id={id}
|
50 |
+
value={value}
|
51 |
+
options={options}
|
52 |
+
onChange={onChange}
|
53 |
+
messages={messages}
|
54 |
+
/>
|
55 |
+
</BaseControl>
|
56 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/multiple-select-control/index.js
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* External dependencies
|
3 |
+
*/
|
4 |
+
import React from 'react';
|
5 |
+
|
6 |
+
/**
|
7 |
+
* WordPress dependencies
|
8 |
+
*/
|
9 |
+
import { BaseControl } from '@wordpress/components';
|
10 |
+
import { useInstanceId } from '@wordpress/compose';
|
11 |
+
import MultipleSelect from './multiple-select';
|
12 |
+
|
13 |
+
import './style.scss';
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Color Picker Control
|
17 |
+
*
|
18 |
+
* @param {string} className The CSS class name.
|
19 |
+
* @param {string} label The label.
|
20 |
+
* @param {function} onChange The function callback fired on value change.
|
21 |
+
* @param {string} value The initial value.
|
22 |
+
* @param {string} help The help message.
|
23 |
+
* @param {bool} disableAlpha Set true to disable the alpha
|
24 |
+
* @returns {MultipleSelectControl}
|
25 |
+
* @constructor
|
26 |
+
*/
|
27 |
+
export default function MultipleSelectControl(
|
28 |
+
{
|
29 |
+
className,
|
30 |
+
label,
|
31 |
+
onChange,
|
32 |
+
value,
|
33 |
+
help,
|
34 |
+
options,
|
35 |
+
messages
|
36 |
+
}
|
37 |
+
) {
|
38 |
+
|
39 |
+
const instanceId = useInstanceId( MultipleSelectControl );
|
40 |
+
const id = `inspector-yith-multiple-select-control-${instanceId}`;
|
41 |
+
|
42 |
+
return <BaseControl
|
43 |
+
id={id}
|
44 |
+
label={label}
|
45 |
+
className={`block-editor-yith-multiple-select-control ${className}`}
|
46 |
+
help={help}
|
47 |
+
>
|
48 |
+
<MultipleSelect
|
49 |
+
id={id}
|
50 |
+
value={value}
|
51 |
+
options={options}
|
52 |
+
onChange={onChange}
|
53 |
+
messages={messages}
|
54 |
+
/>
|
55 |
+
</BaseControl>
|
56 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/multiple-select-control/multiple-select.js
ADDED
@@ -0,0 +1,186 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import classNames from 'classnames';
|
2 |
+
import noop from 'lodash';
|
3 |
+
import PropTypes from 'prop-types';
|
4 |
+
import { useState, useEffect, useRef, useMemo } from 'react';
|
5 |
+
|
6 |
+
import { __, sprintf } from '@wordpress/i18n';
|
7 |
+
import { useInstanceId } from '@wordpress/compose';
|
8 |
+
import { Popover } from '@wordpress/components';
|
9 |
+
|
10 |
+
import MultipleSelectControl from './index';
|
11 |
+
|
12 |
+
const defaultMessages = {
|
13 |
+
noItems : __( 'No items found.', 'yith-plugin-fw' ),
|
14 |
+
noResults: __( 'No results for "%s"', 'yith-plugin-fw' ),
|
15 |
+
search : __( 'Search for items...', 'yith-plugin-fw' )
|
16 |
+
};
|
17 |
+
|
18 |
+
function useUniqueId( idProp ) {
|
19 |
+
const instanceId = useInstanceId( MultipleSelectControl );
|
20 |
+
const id = `inspector-yith-multiple-select-control-${instanceId}`;
|
21 |
+
|
22 |
+
return idProp || id;
|
23 |
+
}
|
24 |
+
|
25 |
+
export default function MultipleSelect( { id: idProp, value, options, onChange, messages: messagesProp } ) {
|
26 |
+
const [search, setSearch] = useState( '' );
|
27 |
+
const [showSuggesions, setShowSuggestions] = useState( false );
|
28 |
+
const [width, setWidth] = useState( 248 );
|
29 |
+
const messages = { ...defaultMessages, ...messagesProp };
|
30 |
+
const wrapperRef = useRef();
|
31 |
+
const inputRef = useRef();
|
32 |
+
const inputContainerRef = useRef();
|
33 |
+
const popoverRef = useRef();
|
34 |
+
const suggestionsRef = useRef();
|
35 |
+
|
36 |
+
const classes = classNames(
|
37 |
+
'yith-fw-components__multiple-select'
|
38 |
+
);
|
39 |
+
|
40 |
+
const allowedValues = useMemo( () => options.map( _ => _.value ), [options] );
|
41 |
+
const validValues = useMemo( () => value.filter( _ => allowedValues.includes( _ ) ), [value, allowedValues] );
|
42 |
+
const filteredOptions = useMemo( () => options.filter( ( _ ) => _.label.toLowerCase().indexOf( search.toLowerCase() ) >= 0 ), [options, search] );
|
43 |
+
const selected = useMemo( () => options.filter( ( _ ) => validValues.includes( _.value ) ), [options, validValues] );
|
44 |
+
|
45 |
+
const addItem = itemValue => {
|
46 |
+
onChange( [...validValues, itemValue] );
|
47 |
+
setSearch( '' );
|
48 |
+
};
|
49 |
+
const removeItem = ( itemValue ) => {
|
50 |
+
const newSelected = [...validValues].filter( _ => _ !== itemValue );
|
51 |
+
onChange( newSelected );
|
52 |
+
};
|
53 |
+
const focusInput = () => !!inputRef.current && inputRef.current.focus();
|
54 |
+
|
55 |
+
const handleClickOutside = e => {
|
56 |
+
const isWrapperClick = wrapperRef?.current && wrapperRef.current.contains( e.target );
|
57 |
+
const isPopoverClick = popoverRef?.current && popoverRef.current.contains( e.target );
|
58 |
+
if ( !isWrapperClick && !isPopoverClick ) {
|
59 |
+
setShowSuggestions( false );
|
60 |
+
}
|
61 |
+
};
|
62 |
+
|
63 |
+
const handleInputContainerClick = e => {
|
64 |
+
const isInputContainerClick = inputContainerRef?.current && inputContainerRef.current === e.target;
|
65 |
+
if ( isInputContainerClick ) {
|
66 |
+
focusInput();
|
67 |
+
}
|
68 |
+
};
|
69 |
+
|
70 |
+
useEffect( () => {
|
71 |
+
document.addEventListener( 'mousedown', handleClickOutside );
|
72 |
+
return () => document.removeEventListener( 'mousedown', handleClickOutside );
|
73 |
+
} );
|
74 |
+
|
75 |
+
useEffect( () => {
|
76 |
+
const refresh = () => {
|
77 |
+
if ( !wrapperRef.current ) {
|
78 |
+
return;
|
79 |
+
}
|
80 |
+
|
81 |
+
const width = wrapperRef.current.getBoundingClientRect()?.width;
|
82 |
+
setWidth( width );
|
83 |
+
};
|
84 |
+
|
85 |
+
refresh();
|
86 |
+
}, [] );
|
87 |
+
|
88 |
+
return <div className={classes} ref={wrapperRef}>
|
89 |
+
<div className="yith-fw-components__multiple-select__input-container" ref={inputContainerRef} onClick={handleInputContainerClick}>
|
90 |
+
{selected.map( item => {
|
91 |
+
return <span key={item.value} className="yith-fw-components__multiple-select__item">
|
92 |
+
<span className="yith-fw-components__multiple-select__item__label">{item.label}</span>
|
93 |
+
<i
|
94 |
+
className="yith-fw-components__multiple-select__item__remove yith-icon-close-alt"
|
95 |
+
onClick={() => {
|
96 |
+
removeItem( item.value );
|
97 |
+
setShowSuggestions( false );
|
98 |
+
}}
|
99 |
+
/>
|
100 |
+
</span>
|
101 |
+
} )}
|
102 |
+
<input
|
103 |
+
className="yith-fw-components__multiple-select__input"
|
104 |
+
id={useUniqueId( idProp )}
|
105 |
+
ref={inputRef}
|
106 |
+
type="text"
|
107 |
+
autoComplete="off"
|
108 |
+
placeholder={messages.search}
|
109 |
+
onFocus={() => setShowSuggestions( true )}
|
110 |
+
value={search}
|
111 |
+
onChange={( e ) => setSearch( e.target.value )}
|
112 |
+
/>
|
113 |
+
</div>
|
114 |
+
{showSuggesions && <Popover
|
115 |
+
className="yith-fw-components__multiple-select__popover"
|
116 |
+
position="bottom"
|
117 |
+
offset={20}
|
118 |
+
anchorRef={wrapperRef?.current ?? undefined}
|
119 |
+
anchorRect={wrapperRef?.current && wrapperRef?.current.getBoundingClientRect()}
|
120 |
+
focusOnMount={false}
|
121 |
+
ref={popoverRef}
|
122 |
+
>
|
123 |
+
<div
|
124 |
+
className={classNames( 'yith-fw-components__multiple-select__suggestions', !filteredOptions.length && 'no-results' )}
|
125 |
+
ref={suggestionsRef}
|
126 |
+
style={{ width }}
|
127 |
+
>
|
128 |
+
{!!options.length && !!filteredOptions.length ?
|
129 |
+
(
|
130 |
+
filteredOptions.map(
|
131 |
+
item => {
|
132 |
+
const isSelected = validValues.includes( item.value );
|
133 |
+
|
134 |
+
return <div
|
135 |
+
key={item.value}
|
136 |
+
className={classNames( 'yith-fw-components__multiple-select__suggestion', isSelected && 'selected' )}
|
137 |
+
onClick={() => {
|
138 |
+
if ( !isSelected ) {
|
139 |
+
addItem( item.value );
|
140 |
+
focusInput();
|
141 |
+
}
|
142 |
+
}}
|
143 |
+
>
|
144 |
+
<div className="yith-fw-components__multiple-select__suggestion__label">{item.label}</div>
|
145 |
+
{isSelected && <i
|
146 |
+
className="yith-fw-components__multiple-select__suggestion__remove yith-icon yith-icon-close-alt"
|
147 |
+
onClick={() => {
|
148 |
+
removeItem( item.value );
|
149 |
+
focusInput();
|
150 |
+
}}/>}
|
151 |
+
</div>
|
152 |
+
}
|
153 |
+
)
|
154 |
+
) :
|
155 |
+
<div className="yith-fw-components__multiple-select__suggestions__message">
|
156 |
+
{!options.length || !search ? messages.noItems : sprintf( messages.noResults, search )}
|
157 |
+
</div>
|
158 |
+
}
|
159 |
+
</div>
|
160 |
+
</Popover>}
|
161 |
+
</div>
|
162 |
+
}
|
163 |
+
|
164 |
+
MultipleSelect.propTypes = {
|
165 |
+
id : PropTypes.string,
|
166 |
+
className: PropTypes.string,
|
167 |
+
value : PropTypes.array,
|
168 |
+
options : PropTypes.arrayOf(
|
169 |
+
PropTypes.shape(
|
170 |
+
{
|
171 |
+
label: PropTypes.string,
|
172 |
+
value: PropTypes.oneOfType( [PropTypes.string, PropTypes.number] )
|
173 |
+
}
|
174 |
+
)
|
175 |
+
),
|
176 |
+
onChange : PropTypes.func
|
177 |
+
|
178 |
+
};
|
179 |
+
|
180 |
+
MultipleSelect.defaultProps = {
|
181 |
+
id : '',
|
182 |
+
value : [],
|
183 |
+
className: '',
|
184 |
+
options : [],
|
185 |
+
onChange : noop
|
186 |
+
};
|
plugin-fw/includes/builders/gutenberg/src/components/multiple-select-control/style.scss
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.yith-fw-components__multiple-select {
|
2 |
+
.yith-fw-components__multiple-select__input-container {
|
3 |
+
border-radius : 2px;
|
4 |
+
border : 1px solid #757575;
|
5 |
+
padding : 5px;
|
6 |
+
|
7 |
+
.yith-fw-components__multiple-select__input {
|
8 |
+
border : 0;
|
9 |
+
min-height : 24px;
|
10 |
+
width : 100%;
|
11 |
+
background : inherit;
|
12 |
+
color : #1e1e1e;
|
13 |
+
box-shadow : none;
|
14 |
+
|
15 |
+
&::placeholder {
|
16 |
+
opacity : .6;
|
17 |
+
color : inherit;
|
18 |
+
}
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
.yith-fw-components__multiple-select__item {
|
23 |
+
border-radius : 3px;
|
24 |
+
background : #f1f1f1;
|
25 |
+
display : inline-block;
|
26 |
+
padding : 4px 25px 4px 10px;
|
27 |
+
margin : 0 5px 5px 0;
|
28 |
+
max-width : 100%;
|
29 |
+
align-items : center;
|
30 |
+
position : relative;
|
31 |
+
|
32 |
+
.yith-fw-components__multiple-select__item__label {
|
33 |
+
|
34 |
+
}
|
35 |
+
|
36 |
+
.yith-fw-components__multiple-select__item__remove {
|
37 |
+
font-size : 14px;
|
38 |
+
cursor : pointer;
|
39 |
+
position : absolute;
|
40 |
+
top : 50%;
|
41 |
+
right : 3px;
|
42 |
+
transform : translateY(-50%);
|
43 |
+
padding : 5px;
|
44 |
+
width : auto;
|
45 |
+
height : auto;
|
46 |
+
|
47 |
+
&:hover {
|
48 |
+
color : #c50c0c;
|
49 |
+
}
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
.yith-fw-components__multiple-select__popover {
|
55 |
+
.components-popover__content {
|
56 |
+
border : 0;
|
57 |
+
overflow : visible;
|
58 |
+
}
|
59 |
+
|
60 |
+
.yith-fw-components__multiple-select__suggestions {
|
61 |
+
display : flex;
|
62 |
+
flex-direction : column;
|
63 |
+
overflow : hidden;
|
64 |
+
overflow-y : auto;
|
65 |
+
padding-top : 5px;
|
66 |
+
max-height : 200px;
|
67 |
+
border-radius : 5px;
|
68 |
+
box-shadow : rgb(0 0 0 / 20%) 0px 5px 5px -3px, rgb(0 0 0 / 14%) 0px 8px 10px 1px, rgb(0 0 0 / 12%) 0px 3px 14px 2px;
|
69 |
+
|
70 |
+
&.no-results {
|
71 |
+
padding-top : 0;
|
72 |
+
}
|
73 |
+
|
74 |
+
.yith-fw-components__multiple-select__suggestions__message {
|
75 |
+
padding : 8px 15px;
|
76 |
+
line-height : 1.5em;
|
77 |
+
overflow-wrap : break-word;
|
78 |
+
}
|
79 |
+
|
80 |
+
.yith-fw-components__multiple-select__suggestion {
|
81 |
+
padding : 8px 15px;
|
82 |
+
min-height : 40px;
|
83 |
+
cursor : pointer;
|
84 |
+
line-height : 1.5em;
|
85 |
+
display : flex;
|
86 |
+
align-items : center;
|
87 |
+
justify-content : space-between;
|
88 |
+
|
89 |
+
&.selected {
|
90 |
+
background : rgba(25, 118, 210, 0.08);
|
91 |
+
}
|
92 |
+
|
93 |
+
&:hover {
|
94 |
+
background : rgba(0, 0, 0, 0.04);
|
95 |
+
}
|
96 |
+
|
97 |
+
&.selected:hover {
|
98 |
+
background : rgba(25, 118, 210, 0.12);
|
99 |
+
}
|
100 |
+
}
|
101 |
+
|
102 |
+
.yith-fw-components__multiple-select__suggestion__remove {
|
103 |
+
font-size : 13px;
|
104 |
+
font-weight : 600;
|
105 |
+
padding : 5px;
|
106 |
+
height : 23px;
|
107 |
+
width : 23px;
|
108 |
+
background : rgba(0, 0, 0, 0);
|
109 |
+
box-shadow : 0 0 0 10px rgba(0, 0, 0, 0);
|
110 |
+
border-radius : 50%;
|
111 |
+
transition : all .3s ease-in-out;
|
112 |
+
|
113 |
+
&:hover {
|
114 |
+
color : #c50c0c;
|
115 |
+
background : rgba(0, 0, 0, .06);
|
116 |
+
box-shadow : 0 0 0 3px rgba(0, 0, 0, .06);
|
117 |
+
}
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
::-webkit-scrollbar-track {
|
122 |
+
-webkit-box-shadow : none;
|
123 |
+
background-color : transparent;
|
124 |
+
}
|
125 |
+
|
126 |
+
::-webkit-scrollbar {
|
127 |
+
width : 10px;
|
128 |
+
background-color : rgba(94, 88, 154, 0.04);
|
129 |
+
}
|
130 |
+
|
131 |
+
::-webkit-scrollbar-thumb {
|
132 |
+
background-color : #b1b4bf;
|
133 |
+
border-radius : 10px;
|
134 |
+
}
|
135 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/shortcode/index 2.js
ADDED
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Shortcode Component
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* External dependencies
|
7 |
+
*/
|
8 |
+
import React, { Component } from 'react';
|
9 |
+
import { isEqual } from 'lodash';
|
10 |
+
|
11 |
+
/**
|
12 |
+
* WordPress dependencies
|
13 |
+
*/
|
14 |
+
import { RawHTML } from '@wordpress/element';
|
15 |
+
import { Spinner } from '@wordpress/components';
|
16 |
+
import { doAction, addAction } from '@wordpress/hooks';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Internal dependencies
|
20 |
+
*/
|
21 |
+
import { ajaxFetch, generateShortcode, yith_icon } from '../../common';
|
22 |
+
import md5 from 'md5';
|
23 |
+
import './style.scss';
|
24 |
+
|
25 |
+
const BEFORE_DO_SHORTCODE_ACTION = 'yith_plugin_fw_gutenberg_before_do_shortcode';
|
26 |
+
const SUCCESS_DO_SHORTCODE_ACTION = 'yith_plugin_fw_gutenberg_success_do_shortcode';
|
27 |
+
const AFTER_DO_SHORTCODE_ACTION = 'yith_plugin_fw_gutenberg_after_do_shortcode';
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Shortcode Component
|
31 |
+
*/
|
32 |
+
export class Shortcode extends Component {
|
33 |
+
constructor() {
|
34 |
+
super( ...arguments );
|
35 |
+
|
36 |
+
this.state = {
|
37 |
+
html : '',
|
38 |
+
shortcode : '',
|
39 |
+
shortcodeHash: '',
|
40 |
+
ajaxUpdated : false,
|
41 |
+
ajaxSuccess : false,
|
42 |
+
ajaxResponse : false,
|
43 |
+
loading : false,
|
44 |
+
firstLoading : true
|
45 |
+
};
|
46 |
+
|
47 |
+
this.ajaxTimeout = false;
|
48 |
+
}
|
49 |
+
|
50 |
+
componentDidMount() {
|
51 |
+
this.updateShortcode();
|
52 |
+
}
|
53 |
+
|
54 |
+
componentDidUpdate( prevProps, prevState, snapshot ) {
|
55 |
+
const { shortcode, shortcodeHash, ajaxSuccess, ajaxResponse, ajaxUpdated } = this.state;
|
56 |
+
|
57 |
+
if ( !isEqual( prevProps, this.props ) ) {
|
58 |
+
this.updateShortcode();
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
if ( this.props.blockArgs.do_shortcode && ajaxUpdated ) {
|
63 |
+
|
64 |
+
if ( ajaxSuccess ) {
|
65 |
+
doAction( SUCCESS_DO_SHORTCODE_ACTION, shortcode, shortcodeHash, ajaxResponse );
|
66 |
+
}
|
67 |
+
|
68 |
+
doAction( AFTER_DO_SHORTCODE_ACTION, shortcode, shortcodeHash, ajaxResponse );
|
69 |
+
|
70 |
+
this.setState( { ajaxUpdated: false } );
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
updateShortcode() {
|
75 |
+
const { attributes, blockArgs } = this.props;
|
76 |
+
|
77 |
+
this.setState( { loading: true, ajaxSuccess: false, ajaxResponse: false } );
|
78 |
+
|
79 |
+
const shortcode = generateShortcode( blockArgs, attributes );
|
80 |
+
const shortcodeHash = md5( shortcode );
|
81 |
+
|
82 |
+
if ( blockArgs.do_shortcode ) {
|
83 |
+
!!this.ajaxTimeout && clearTimeout( this.ajaxTimeout );
|
84 |
+
|
85 |
+
doAction( BEFORE_DO_SHORTCODE_ACTION, shortcode, shortcodeHash );
|
86 |
+
|
87 |
+
this.ajaxTimeout = setTimeout( () => {
|
88 |
+
const ajaxData = {
|
89 |
+
action : 'yith_plugin_fw_gutenberg_do_shortcode',
|
90 |
+
shortcode: shortcode,
|
91 |
+
context : { ...( this.props.context ?? {} ), adminPage: window?.adminpage ?? '' }
|
92 |
+
};
|
93 |
+
|
94 |
+
ajaxFetch( ajaxData ).then( response => {
|
95 |
+
this.setState( { loading: false, firstLoading: false, html: response.html, shortcode, shortcodeHash, ajaxSuccess: true, ajaxUpdated: true, ajaxResponse: response } );
|
96 |
+
} )
|
97 |
+
.catch( error => {
|
98 |
+
console.log( { error } );
|
99 |
+
} );
|
100 |
+
}, 300 );
|
101 |
+
} else {
|
102 |
+
this.setState( { loading: false, firstLoading: false, html: shortcode, shortcode, shortcodeHash } );
|
103 |
+
}
|
104 |
+
}
|
105 |
+
|
106 |
+
render() {
|
107 |
+
const { html, loading, firstLoading, shortcode, shortcodeHash } = this.state;
|
108 |
+
const { blockArgs } = this.props;
|
109 |
+
const { do_shortcode, title, empty_message } = blockArgs;
|
110 |
+
|
111 |
+
const mainClass = 'block-editor-yith-plugin-fw-shortcode-block';
|
112 |
+
|
113 |
+
let wrapperClasses = [mainClass];
|
114 |
+
let type = do_shortcode ? 'html' : 'shortcode';
|
115 |
+
let htmlToShow = html;
|
116 |
+
let message = '';
|
117 |
+
|
118 |
+
if ( firstLoading && loading ) {
|
119 |
+
type = 'first-loading';
|
120 |
+
} else if ( do_shortcode && !html ) {
|
121 |
+
type = 'empty-html';
|
122 |
+
htmlToShow = shortcode;
|
123 |
+
if ( !loading && empty_message ) {
|
124 |
+
message = empty_message;
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
const showTitle = ['first-loading', 'empty-html', 'shortcode'].includes( type );
|
129 |
+
const showContent = !['first-loading', 'empty-html'].includes( type );
|
130 |
+
const showMessage = !!message;
|
131 |
+
|
132 |
+
wrapperClasses.push( `${mainClass}--${type}` );
|
133 |
+
wrapperClasses.push( showMessage ? `${mainClass}--has-message` : `${mainClass}--no-message` );
|
134 |
+
wrapperClasses.push( `yith_block_${shortcodeHash}` );
|
135 |
+
|
136 |
+
return (
|
137 |
+
<>
|
138 |
+
<div className={wrapperClasses.join( ' ' )}>
|
139 |
+
{!!loading ? <div className={`${mainClass}__spinner-wrap`}><Spinner/></div> : ''}
|
140 |
+
{showTitle &&
|
141 |
+
<div className={`${mainClass}__title components-placeholder__label`}>{yith_icon}{title}</div>
|
142 |
+
}
|
143 |
+
{showMessage &&
|
144 |
+
<RawHTML className={`${mainClass}__message`}>{message}</RawHTML>
|
145 |
+
}
|
146 |
+
{showContent &&
|
147 |
+
<RawHTML className={`${mainClass}__content`}>{htmlToShow}</RawHTML>
|
148 |
+
}
|
149 |
+
</div>
|
150 |
+
</>
|
151 |
+
)
|
152 |
+
}
|
153 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/shortcode/index.js
ADDED
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Shortcode Component
|
3 |
+
*/
|
4 |
+
|
5 |
+
/**
|
6 |
+
* External dependencies
|
7 |
+
*/
|
8 |
+
import React, { Component } from 'react';
|
9 |
+
import { isEqual } from 'lodash';
|
10 |
+
|
11 |
+
/**
|
12 |
+
* WordPress dependencies
|
13 |
+
*/
|
14 |
+
import { RawHTML } from '@wordpress/element';
|
15 |
+
import { Spinner } from '@wordpress/components';
|
16 |
+
import { doAction, addAction } from '@wordpress/hooks';
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Internal dependencies
|
20 |
+
*/
|
21 |
+
import { ajaxFetch, generateShortcode, yith_icon } from '../../common';
|
22 |
+
import md5 from 'md5';
|
23 |
+
import './style.scss';
|
24 |
+
|
25 |
+
const BEFORE_DO_SHORTCODE_ACTION = 'yith_plugin_fw_gutenberg_before_do_shortcode';
|
26 |
+
const SUCCESS_DO_SHORTCODE_ACTION = 'yith_plugin_fw_gutenberg_success_do_shortcode';
|
27 |
+
const AFTER_DO_SHORTCODE_ACTION = 'yith_plugin_fw_gutenberg_after_do_shortcode';
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Shortcode Component
|
31 |
+
*/
|
32 |
+
export class Shortcode extends Component {
|
33 |
+
constructor() {
|
34 |
+
super( ...arguments );
|
35 |
+
|
36 |
+
this.state = {
|
37 |
+
html : '',
|
38 |
+
shortcode : '',
|
39 |
+
shortcodeHash: '',
|
40 |
+
ajaxUpdated : false,
|
41 |
+
ajaxSuccess : false,
|
42 |
+
ajaxResponse : false,
|
43 |
+
loading : false,
|
44 |
+
firstLoading : true
|
45 |
+
};
|
46 |
+
|
47 |
+
this.ajaxTimeout = false;
|
48 |
+
}
|
49 |
+
|
50 |
+
componentDidMount() {
|
51 |
+
this.updateShortcode();
|
52 |
+
}
|
53 |
+
|
54 |
+
componentDidUpdate( prevProps, prevState, snapshot ) {
|
55 |
+
const { shortcode, shortcodeHash, ajaxSuccess, ajaxResponse, ajaxUpdated } = this.state;
|
56 |
+
|
57 |
+
if ( !isEqual( prevProps, this.props ) ) {
|
58 |
+
this.updateShortcode();
|
59 |
+
}
|
60 |
+
|
61 |
+
|
62 |
+
if ( this.props.blockArgs.do_shortcode && ajaxUpdated ) {
|
63 |
+
|
64 |
+
if ( ajaxSuccess ) {
|
65 |
+
doAction( SUCCESS_DO_SHORTCODE_ACTION, shortcode, shortcodeHash, ajaxResponse );
|
66 |
+
}
|
67 |
+
|
68 |
+
doAction( AFTER_DO_SHORTCODE_ACTION, shortcode, shortcodeHash, ajaxResponse );
|
69 |
+
|
70 |
+
this.setState( { ajaxUpdated: false } );
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
updateShortcode() {
|
75 |
+
const { attributes, blockArgs } = this.props;
|
76 |
+
|
77 |
+
this.setState( { loading: true, ajaxSuccess: false, ajaxResponse: false } );
|
78 |
+
|
79 |
+
const shortcode = generateShortcode( blockArgs, attributes );
|
80 |
+
const shortcodeHash = md5( shortcode );
|
81 |
+
|
82 |
+
if ( blockArgs.do_shortcode ) {
|
83 |
+
!!this.ajaxTimeout && clearTimeout( this.ajaxTimeout );
|
84 |
+
|
85 |
+
doAction( BEFORE_DO_SHORTCODE_ACTION, shortcode, shortcodeHash );
|
86 |
+
|
87 |
+
this.ajaxTimeout = setTimeout( () => {
|
88 |
+
const ajaxData = {
|
89 |
+
action : 'yith_plugin_fw_gutenberg_do_shortcode',
|
90 |
+
shortcode: shortcode,
|
91 |
+
context : { ...( this.props.context ?? {} ), adminPage: window?.adminpage ?? '' }
|
92 |
+
};
|
93 |
+
|
94 |
+
ajaxFetch( ajaxData ).then( response => {
|
95 |
+
this.setState( { loading: false, firstLoading: false, html: response.html, shortcode, shortcodeHash, ajaxSuccess: true, ajaxUpdated: true, ajaxResponse: response } );
|
96 |
+
} )
|
97 |
+
.catch( error => {
|
98 |
+
console.log( { error } );
|
99 |
+
} );
|
100 |
+
}, 300 );
|
101 |
+
} else {
|
102 |
+
this.setState( { loading: false, firstLoading: false, html: shortcode, shortcode, shortcodeHash } );
|
103 |
+
}
|
104 |
+
}
|
105 |
+
|
106 |
+
render() {
|
107 |
+
const { html, loading, firstLoading, shortcode, shortcodeHash } = this.state;
|
108 |
+
const { blockArgs } = this.props;
|
109 |
+
const { do_shortcode, title, empty_message } = blockArgs;
|
110 |
+
|
111 |
+
const mainClass = 'block-editor-yith-plugin-fw-shortcode-block';
|
112 |
+
|
113 |
+
let wrapperClasses = [mainClass];
|
114 |
+
let type = do_shortcode ? 'html' : 'shortcode';
|
115 |
+
let htmlToShow = html;
|
116 |
+
let message = '';
|
117 |
+
|
118 |
+
if ( firstLoading && loading ) {
|
119 |
+
type = 'first-loading';
|
120 |
+
} else if ( do_shortcode && !html ) {
|
121 |
+
type = 'empty-html';
|
122 |
+
htmlToShow = shortcode;
|
123 |
+
if ( !loading && empty_message ) {
|
124 |
+
message = empty_message;
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
const showTitle = ['first-loading', 'empty-html', 'shortcode'].includes( type );
|
129 |
+
const showContent = !['first-loading', 'empty-html'].includes( type );
|
130 |
+
const showMessage = !!message;
|
131 |
+
|
132 |
+
wrapperClasses.push( `${mainClass}--${type}` );
|
133 |
+
wrapperClasses.push( showMessage ? `${mainClass}--has-message` : `${mainClass}--no-message` );
|
134 |
+
wrapperClasses.push( `yith_block_${shortcodeHash}` );
|
135 |
+
|
136 |
+
return (
|
137 |
+
<>
|
138 |
+
<div className={wrapperClasses.join( ' ' )}>
|
139 |
+
{!!loading ? <div className={`${mainClass}__spinner-wrap`}><Spinner/></div> : ''}
|
140 |
+
{showTitle &&
|
141 |
+
<div className={`${mainClass}__title components-placeholder__label`}>{yith_icon}{title}</div>
|
142 |
+
}
|
143 |
+
{showMessage &&
|
144 |
+
<RawHTML className={`${mainClass}__message`}>{message}</RawHTML>
|
145 |
+
}
|
146 |
+
{showContent &&
|
147 |
+
<RawHTML className={`${mainClass}__content`}>{htmlToShow}</RawHTML>
|
148 |
+
}
|
149 |
+
</div>
|
150 |
+
</>
|
151 |
+
)
|
152 |
+
}
|
153 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/shortcode/style 2.scss
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
%bordered-block {
|
2 |
+
padding: 1em 1em 1.2em;
|
3 |
+
border: 1px solid #1e1e1e;
|
4 |
+
border-radius: 4px;
|
5 |
+
}
|
6 |
+
|
7 |
+
%shortcode-box {
|
8 |
+
font-family: Menlo, Consolas, monaco, monospace;
|
9 |
+
color: #1e1e1e;
|
10 |
+
font-size: 13px;
|
11 |
+
padding: 0.8em 1em;
|
12 |
+
border: 1px solid #ddd;
|
13 |
+
border-radius: 4px;
|
14 |
+
}
|
15 |
+
|
16 |
+
.block-editor-yith-plugin-fw-shortcode-block {
|
17 |
+
position: relative;
|
18 |
+
min-height: 30px;
|
19 |
+
|
20 |
+
.block-editor-yith-plugin-fw-shortcode-block__spinner-wrap {
|
21 |
+
position: absolute;
|
22 |
+
top: 50%;
|
23 |
+
left: 50%;
|
24 |
+
transform: translateX(-50%) translateY(-50%);
|
25 |
+
}
|
26 |
+
|
27 |
+
&.block-editor-yith-plugin-fw-shortcode-block--first-loading{
|
28 |
+
@extend %bordered-block;
|
29 |
+
|
30 |
+
.block-editor-yith-plugin-fw-shortcode-block__title {
|
31 |
+
margin-bottom: 0;
|
32 |
+
}
|
33 |
+
}
|
34 |
+
|
35 |
+
&.block-editor-yith-plugin-fw-shortcode-block--shortcode {
|
36 |
+
|
37 |
+
@extend %bordered-block;
|
38 |
+
|
39 |
+
.block-editor-yith-plugin-fw-shortcode-block__content {
|
40 |
+
@extend %shortcode-box;
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
&.block-editor-yith-plugin-fw-shortcode-block--empty-html {
|
45 |
+
|
46 |
+
@extend %bordered-block;
|
47 |
+
|
48 |
+
&.block-editor-yith-plugin-fw-shortcode-block--no-message {
|
49 |
+
.block-editor-yith-plugin-fw-shortcode-block__title {
|
50 |
+
margin-bottom: 0;
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
.block-editor-yith-plugin-fw-shortcode-block__message {
|
55 |
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
|
56 |
+
font-style: italic;
|
57 |
+
font-size: 13px;
|
58 |
+
}
|
59 |
+
|
60 |
+
.block-editor-yith-plugin-fw-shortcode-block__content {
|
61 |
+
display: none;
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/components/shortcode/style.scss
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
%bordered-block {
|
2 |
+
padding: 1em 1em 1.2em;
|
3 |
+
border: 1px solid #1e1e1e;
|
4 |
+
border-radius: 4px;
|
5 |
+
}
|
6 |
+
|
7 |
+
%shortcode-box {
|
8 |
+
font-family: Menlo, Consolas, monaco, monospace;
|
9 |
+
color: #1e1e1e;
|
10 |
+
font-size: 13px;
|
11 |
+
padding: 0.8em 1em;
|
12 |
+
border: 1px solid #ddd;
|
13 |
+
border-radius: 4px;
|
14 |
+
}
|
15 |
+
|
16 |
+
.block-editor-yith-plugin-fw-shortcode-block {
|
17 |
+
position: relative;
|
18 |
+
min-height: 30px;
|
19 |
+
|
20 |
+
.block-editor-yith-plugin-fw-shortcode-block__spinner-wrap {
|
21 |
+
position: absolute;
|
22 |
+
top: 50%;
|
23 |
+
left: 50%;
|
24 |
+
transform: translateX(-50%) translateY(-50%);
|
25 |
+
}
|
26 |
+
|
27 |
+
&.block-editor-yith-plugin-fw-shortcode-block--first-loading{
|
28 |
+
@extend %bordered-block;
|
29 |
+
|
30 |
+
.block-editor-yith-plugin-fw-shortcode-block__title {
|
31 |
+
margin-bottom: 0;
|
32 |
+
}
|
33 |
+
}
|
34 |
+
|
35 |
+
&.block-editor-yith-plugin-fw-shortcode-block--shortcode {
|
36 |
+
|
37 |
+
@extend %bordered-block;
|
38 |
+
|
39 |
+
.block-editor-yith-plugin-fw-shortcode-block__content {
|
40 |
+
@extend %shortcode-box;
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
&.block-editor-yith-plugin-fw-shortcode-block--empty-html {
|
45 |
+
|
46 |
+
@extend %bordered-block;
|
47 |
+
|
48 |
+
&.block-editor-yith-plugin-fw-shortcode-block--no-message {
|
49 |
+
.block-editor-yith-plugin-fw-shortcode-block__title {
|
50 |
+
margin-bottom: 0;
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
.block-editor-yith-plugin-fw-shortcode-block__message {
|
55 |
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
|
56 |
+
font-style: italic;
|
57 |
+
font-size: 13px;
|
58 |
+
}
|
59 |
+
|
60 |
+
.block-editor-yith-plugin-fw-shortcode-block__content {
|
61 |
+
display: none;
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/edit 2.js
ADDED
@@ -0,0 +1,234 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Handle YITH Gutenberg Blocks Edit
|
3 |
+
*
|
4 |
+
* @var {Object} yithGutenbergBlocks The Gutenberg blocks object.
|
5 |
+
*/
|
6 |
+
|
7 |
+
/**
|
8 |
+
* External dependencies
|
9 |
+
*/
|
10 |
+
import React from 'react';
|
11 |
+
|
12 |
+
/**
|
13 |
+
* WordPress dependencies
|
14 |
+
*/
|
15 |
+
import {
|
16 |
+
PanelBody,
|
17 |
+
ToggleControl,
|
18 |
+
SelectControl,
|
19 |
+
TextControl,
|
20 |
+
TextareaControl,
|
21 |
+
CheckboxControl,
|
22 |
+
RangeControl,
|
23 |
+
RadioControl
|
24 |
+
} from '@wordpress/components';
|
25 |
+
import { InspectorControls } from '@wordpress/block-editor';
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Internal dependencies
|
29 |
+
*/
|
30 |
+
import { Shortcode } from './components/shortcode';
|
31 |
+
import { checkForDeps } from './common';
|
32 |
+
import ColorPickerControl from './components/color-picker-control';
|
33 |
+
import ColorPaletteControl from './components/color-palette-control';
|
34 |
+
import MultipleSelectControl from './components/multiple-select-control';
|
35 |
+
import classNames from 'classnames';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Retrieve an help message from arguments.
|
39 |
+
*
|
40 |
+
* @param {Object} args The arguments.
|
41 |
+
* @param {bool} value The value.
|
42 |
+
* @returns {string}
|
43 |
+
*/
|
44 |
+
const getHelpMessage = ( args, value ) => {
|
45 |
+
let helpMessage = '';
|
46 |
+
if ( args.helps && args.helps.checked && args.helps.unchecked ) {
|
47 |
+
helpMessage = !!value ? args.helps.checked : args.helps.unchecked;
|
48 |
+
} else if ( args.help ) {
|
49 |
+
helpMessage = args.help;
|
50 |
+
}
|
51 |
+
return helpMessage;
|
52 |
+
};
|
53 |
+
|
54 |
+
const ComponentControl = ( { attributeName, attributeArgs, attributes, onChange, blockName } ) => {
|
55 |
+
const { controlType, label, wrapper_class } = attributeArgs;
|
56 |
+
const value = attributes[ attributeName ];
|
57 |
+
const helpMessage = getHelpMessage( attributeArgs, value );
|
58 |
+
const show = checkForDeps( attributeArgs, attributes );
|
59 |
+
const wrapperClass = classNames(
|
60 |
+
`${blockName}__${attributeName}-field-wrapper`,
|
61 |
+
wrapper_class
|
62 |
+
);
|
63 |
+
|
64 |
+
let componentControl = false;
|
65 |
+
if ( show ) {
|
66 |
+
switch ( controlType ) {
|
67 |
+
case 'select':
|
68 |
+
if ( !attributeArgs.multiple ) {
|
69 |
+
componentControl = <SelectControl
|
70 |
+
className={wrapperClass}
|
71 |
+
value={value}
|
72 |
+
label={label}
|
73 |
+
options={attributeArgs?.options ?? []}
|
74 |
+
help={helpMessage}
|
75 |
+
onChange={onChange}
|
76 |
+
/>;
|
77 |
+
} else {
|
78 |
+
componentControl = <MultipleSelectControl
|
79 |
+
className={wrapperClass}
|
80 |
+
value={value}
|
81 |
+
label={label}
|
82 |
+
options={attributeArgs?.options ?? []}
|
83 |
+
help={helpMessage}
|
84 |
+
onChange={onChange}
|
85 |
+
messages={attributeArgs?.messages ?? {}}
|
86 |
+
/>;
|
87 |
+
}
|
88 |
+
break;
|
89 |
+
|
90 |
+
case 'text':
|
91 |
+
componentControl = <TextControl
|
92 |
+
className={wrapperClass}
|
93 |
+
key={attributeName}
|
94 |
+
value={value}
|
95 |
+
label={label}
|
96 |
+
help={helpMessage}
|
97 |
+
onChange={onChange}
|
98 |
+
/>;
|
99 |
+
break;
|
100 |
+
|
101 |
+
case 'textarea':
|
102 |
+
componentControl = <TextareaControl
|
103 |
+
className={wrapperClass}
|
104 |
+
key={attributeName}
|
105 |
+
value={value}
|
106 |
+
label={label}
|
107 |
+
help={helpMessage}
|
108 |
+
onChange={onChange}
|
109 |
+
/>;
|
110 |
+
break;
|
111 |
+
|
112 |
+
case 'toggle':
|
113 |
+
componentControl = <ToggleControl
|
114 |
+
className={wrapperClass}
|
115 |
+
key={attributeName}
|
116 |
+
label={label}
|
117 |
+
help={helpMessage}
|
118 |
+
checked={value}
|
119 |
+
onChange={onChange}
|
120 |
+
/>;
|
121 |
+
break;
|
122 |
+
|
123 |
+
case 'checkbox':
|
124 |
+
componentControl = <CheckboxControl
|
125 |
+
className={wrapperClass}
|
126 |
+
key={attributeName}
|
127 |
+
label={label}
|
128 |
+
help={helpMessage}
|
129 |
+
checked={value}
|
130 |
+
onChange={onChange}
|
131 |
+
/>;
|
132 |
+
break;
|
133 |
+
|
134 |
+
case 'number':
|
135 |
+
case 'range':
|
136 |
+
componentControl = <RangeControl
|
137 |
+
className={wrapperClass}
|
138 |
+
key={attributeName}
|
139 |
+
value={value}
|
140 |
+
label={label}
|
141 |
+
help={helpMessage}
|
142 |
+
min={attributeArgs?.min}
|
143 |
+
max={attributeArgs?.max}
|
144 |
+
onChange={onChange}
|
145 |
+
/>;
|
146 |
+
break;
|
147 |
+
|
148 |
+
case 'color':
|
149 |
+
case 'colorpicker':
|
150 |
+
componentControl = <ColorPickerControl
|
151 |
+
className={wrapperClass}
|
152 |
+
key={attributeName}
|
153 |
+
label={label}
|
154 |
+
help={helpMessage}
|
155 |
+
value={value}
|
156 |
+
disableAlpha={attributeArgs?.disableAlpha ?? false}
|
157 |
+
onChange={onChange}/>;
|
158 |
+
break;
|
159 |
+
|
160 |
+
case 'color-palette':
|
161 |
+
componentControl = <ColorPaletteControl
|
162 |
+
className={wrapperClass}
|
163 |
+
key={attributeName}
|
164 |
+
label={label}
|
165 |
+
help={helpMessage}
|
166 |
+
value={value}
|
167 |
+
clearable={attributeArgs?.clearable ?? false}
|
168 |
+
onChange={onChange}/>;
|
169 |
+
break;
|
170 |
+
|
171 |
+
case 'radio':
|
172 |
+
componentControl = <RadioControl
|
173 |
+
key={attributeName}
|
174 |
+
label={label}
|
175 |
+
options={attributeArgs?.options ?? []}
|
176 |
+
selected={value}
|
177 |
+
help={helpMessage}
|
178 |
+
onChange={onChange}
|
179 |
+
/>;
|
180 |
+
break;
|
181 |
+
default:
|
182 |
+
componentControl = false;
|
183 |
+
}
|
184 |
+
}
|
185 |
+
return componentControl;
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Create edit function.
|
190 |
+
*
|
191 |
+
* @param {string} blockName The block name.
|
192 |
+
* @param {Object} blockArgs The block arguments.
|
193 |
+
* @returns {function({attributes?: *, className: *, setAttributes: *})}
|
194 |
+
*/
|
195 |
+
export const createEditFunction = ( blockName, blockArgs ) => {
|
196 |
+
return function ( { context, attributes, className, setAttributes } ) {
|
197 |
+
|
198 |
+
const onChangeHandler = ( updatedValue, attributeName, controlType ) => {
|
199 |
+
if ( ['colorpicker', 'color'].includes( controlType ) ) {
|
200 |
+
if ( 'rgb' in updatedValue && 'hex' in updatedValue ) {
|
201 |
+
const { r, g, b, a } = updatedValue.rgb;
|
202 |
+
updatedValue = a < 1 ? `rgba(${r}, ${g}, ${b}, ${a})` : updatedValue.hex;
|
203 |
+
} else {
|
204 |
+
updatedValue = updatedValue.color.getAlpha() < 1 ? updatedValue.color.toRgbString() : updatedValue.color.toHexString();
|
205 |
+
}
|
206 |
+
}
|
207 |
+
|
208 |
+
setAttributes( { [ attributeName ]: updatedValue } );
|
209 |
+
}
|
210 |
+
|
211 |
+
return (
|
212 |
+
<>
|
213 |
+
{!!blockArgs.attributes &&
|
214 |
+
<InspectorControls>
|
215 |
+
<PanelBody>
|
216 |
+
{Object.entries( blockArgs.attributes ).map( ( [attributeName, attributeArgs] ) => {
|
217 |
+
const { controlType } = attributeArgs;
|
218 |
+
return <ComponentControl
|
219 |
+
key={attributeName}
|
220 |
+
attributeArgs={attributeArgs}
|
221 |
+
attributeName={attributeName}
|
222 |
+
attributes={attributes}
|
223 |
+
blockName={blockName}
|
224 |
+
onChange={_ => onChangeHandler( _, attributeName, controlType )}
|
225 |
+
/>
|
226 |
+
} )}
|
227 |
+
</PanelBody>
|
228 |
+
</InspectorControls>
|
229 |
+
}
|
230 |
+
<Shortcode attributes={attributes} blockArgs={blockArgs} context={context}/>
|
231 |
+
</>
|
232 |
+
);
|
233 |
+
}
|
234 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/edit.js
ADDED
@@ -0,0 +1,234 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Handle YITH Gutenberg Blocks Edit
|
3 |
+
*
|
4 |
+
* @var {Object} yithGutenbergBlocks The Gutenberg blocks object.
|
5 |
+
*/
|
6 |
+
|
7 |
+
/**
|
8 |
+
* External dependencies
|
9 |
+
*/
|
10 |
+
import React from 'react';
|
11 |
+
|
12 |
+
/**
|
13 |
+
* WordPress dependencies
|
14 |
+
*/
|
15 |
+
import {
|
16 |
+
PanelBody,
|
17 |
+
ToggleControl,
|
18 |
+
SelectControl,
|
19 |
+
TextControl,
|
20 |
+
TextareaControl,
|
21 |
+
CheckboxControl,
|
22 |
+
RangeControl,
|
23 |
+
RadioControl
|
24 |
+
} from '@wordpress/components';
|
25 |
+
import { InspectorControls } from '@wordpress/block-editor';
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Internal dependencies
|
29 |
+
*/
|
30 |
+
import { Shortcode } from './components/shortcode';
|
31 |
+
import { checkForDeps } from './common';
|
32 |
+
import ColorPickerControl from './components/color-picker-control';
|
33 |
+
import ColorPaletteControl from './components/color-palette-control';
|
34 |
+
import MultipleSelectControl from './components/multiple-select-control';
|
35 |
+
import classNames from 'classnames';
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Retrieve an help message from arguments.
|
39 |
+
*
|
40 |
+
* @param {Object} args The arguments.
|
41 |
+
* @param {bool} value The value.
|
42 |
+
* @returns {string}
|
43 |
+
*/
|
44 |
+
const getHelpMessage = ( args, value ) => {
|
45 |
+
let helpMessage = '';
|
46 |
+
if ( args.helps && args.helps.checked && args.helps.unchecked ) {
|
47 |
+
helpMessage = !!value ? args.helps.checked : args.helps.unchecked;
|
48 |
+
} else if ( args.help ) {
|
49 |
+
helpMessage = args.help;
|
50 |
+
}
|
51 |
+
return helpMessage;
|
52 |
+
};
|
53 |
+
|
54 |
+
const ComponentControl = ( { attributeName, attributeArgs, attributes, onChange, blockName } ) => {
|
55 |
+
const { controlType, label, wrapper_class } = attributeArgs;
|
56 |
+
const value = attributes[ attributeName ];
|
57 |
+
const helpMessage = getHelpMessage( attributeArgs, value );
|
58 |
+
const show = checkForDeps( attributeArgs, attributes );
|
59 |
+
const wrapperClass = classNames(
|
60 |
+
`${blockName}__${attributeName}-field-wrapper`,
|
61 |
+
wrapper_class
|
62 |
+
);
|
63 |
+
|
64 |
+
let componentControl = false;
|
65 |
+
if ( show ) {
|
66 |
+
switch ( controlType ) {
|
67 |
+
case 'select':
|
68 |
+
if ( !attributeArgs.multiple ) {
|
69 |
+
componentControl = <SelectControl
|
70 |
+
className={wrapperClass}
|
71 |
+
value={value}
|
72 |
+
label={label}
|
73 |
+
options={attributeArgs?.options ?? []}
|
74 |
+
help={helpMessage}
|
75 |
+
onChange={onChange}
|
76 |
+
/>;
|
77 |
+
} else {
|
78 |
+
componentControl = <MultipleSelectControl
|
79 |
+
className={wrapperClass}
|
80 |
+
value={value}
|
81 |
+
label={label}
|
82 |
+
options={attributeArgs?.options ?? []}
|
83 |
+
help={helpMessage}
|
84 |
+
onChange={onChange}
|
85 |
+
messages={attributeArgs?.messages ?? {}}
|
86 |
+
/>;
|
87 |
+
}
|
88 |
+
break;
|
89 |
+
|
90 |
+
case 'text':
|
91 |
+
componentControl = <TextControl
|
92 |
+
className={wrapperClass}
|
93 |
+
key={attributeName}
|
94 |
+
value={value}
|
95 |
+
label={label}
|
96 |
+
help={helpMessage}
|
97 |
+
onChange={onChange}
|
98 |
+
/>;
|
99 |
+
break;
|
100 |
+
|
101 |
+
case 'textarea':
|
102 |
+
componentControl = <TextareaControl
|
103 |
+
className={wrapperClass}
|
104 |
+
key={attributeName}
|
105 |
+
value={value}
|
106 |
+
label={label}
|
107 |
+
help={helpMessage}
|
108 |
+
onChange={onChange}
|
109 |
+
/>;
|
110 |
+
break;
|
111 |
+
|
112 |
+
case 'toggle':
|
113 |
+
componentControl = <ToggleControl
|
114 |
+
className={wrapperClass}
|
115 |
+
key={attributeName}
|
116 |
+
label={label}
|
117 |
+
help={helpMessage}
|
118 |
+
checked={value}
|
119 |
+
onChange={onChange}
|
120 |
+
/>;
|
121 |
+
break;
|
122 |
+
|
123 |
+
case 'checkbox':
|
124 |
+
componentControl = <CheckboxControl
|
125 |
+
className={wrapperClass}
|
126 |
+
key={attributeName}
|
127 |
+
label={label}
|
128 |
+
help={helpMessage}
|
129 |
+
checked={value}
|
130 |
+
onChange={onChange}
|
131 |
+
/>;
|
132 |
+
break;
|
133 |
+
|
134 |
+
case 'number':
|
135 |
+
case 'range':
|
136 |
+
componentControl = <RangeControl
|
137 |
+
className={wrapperClass}
|
138 |
+
key={attributeName}
|
139 |
+
value={value}
|
140 |
+
label={label}
|
141 |
+
help={helpMessage}
|
142 |
+
min={attributeArgs?.min}
|
143 |
+
max={attributeArgs?.max}
|
144 |
+
onChange={onChange}
|
145 |
+
/>;
|
146 |
+
break;
|
147 |
+
|
148 |
+
case 'color':
|
149 |
+
case 'colorpicker':
|
150 |
+
componentControl = <ColorPickerControl
|
151 |
+
className={wrapperClass}
|
152 |
+
key={attributeName}
|
153 |
+
label={label}
|
154 |
+
help={helpMessage}
|
155 |
+
value={value}
|
156 |
+
disableAlpha={attributeArgs?.disableAlpha ?? false}
|
157 |
+
onChange={onChange}/>;
|
158 |
+
break;
|
159 |
+
|
160 |
+
case 'color-palette':
|
161 |
+
componentControl = <ColorPaletteControl
|
162 |
+
className={wrapperClass}
|
163 |
+
key={attributeName}
|
164 |
+
label={label}
|
165 |
+
help={helpMessage}
|
166 |
+
value={value}
|
167 |
+
clearable={attributeArgs?.clearable ?? false}
|
168 |
+
onChange={onChange}/>;
|
169 |
+
break;
|
170 |
+
|
171 |
+
case 'radio':
|
172 |
+
componentControl = <RadioControl
|
173 |
+
key={attributeName}
|
174 |
+
label={label}
|
175 |
+
options={attributeArgs?.options ?? []}
|
176 |
+
selected={value}
|
177 |
+
help={helpMessage}
|
178 |
+
onChange={onChange}
|
179 |
+
/>;
|
180 |
+
break;
|
181 |
+
default:
|
182 |
+
componentControl = false;
|
183 |
+
}
|
184 |
+
}
|
185 |
+
return componentControl;
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Create edit function.
|
190 |
+
*
|
191 |
+
* @param {string} blockName The block name.
|
192 |
+
* @param {Object} blockArgs The block arguments.
|
193 |
+
* @returns {function({attributes?: *, className: *, setAttributes: *})}
|
194 |
+
*/
|
195 |
+
export const createEditFunction = ( blockName, blockArgs ) => {
|
196 |
+
return function ( { context, attributes, className, setAttributes } ) {
|
197 |
+
|
198 |
+
const onChangeHandler = ( updatedValue, attributeName, controlType ) => {
|
199 |
+
if ( ['colorpicker', 'color'].includes( controlType ) ) {
|
200 |
+
if ( 'rgb' in updatedValue && 'hex' in updatedValue ) {
|
201 |
+
const { r, g, b, a } = updatedValue.rgb;
|
202 |
+
updatedValue = a < 1 ? `rgba(${r}, ${g}, ${b}, ${a})` : updatedValue.hex;
|
203 |
+
} else {
|
204 |
+
updatedValue = updatedValue.color.getAlpha() < 1 ? updatedValue.color.toRgbString() : updatedValue.color.toHexString();
|
205 |
+
}
|
206 |
+
}
|
207 |
+
|
208 |
+
setAttributes( { [ attributeName ]: updatedValue } );
|
209 |
+
}
|
210 |
+
|
211 |
+
return (
|
212 |
+
<>
|
213 |
+
{!!blockArgs.attributes &&
|
214 |
+
<InspectorControls>
|
215 |
+
<PanelBody>
|
216 |
+
{Object.entries( blockArgs.attributes ).map( ( [attributeName, attributeArgs] ) => {
|
217 |
+
const { controlType } = attributeArgs;
|
218 |
+
return <ComponentControl
|
219 |
+
key={attributeName}
|
220 |
+
attributeArgs={attributeArgs}
|
221 |
+
attributeName={attributeName}
|
222 |
+
attributes={attributes}
|
223 |
+
blockName={blockName}
|
224 |
+
onChange={_ => onChangeHandler( _, attributeName, controlType )}
|
225 |
+
/>
|
226 |
+
} )}
|
227 |
+
</PanelBody>
|
228 |
+
</InspectorControls>
|
229 |
+
}
|
230 |
+
<Shortcode attributes={attributes} blockArgs={blockArgs} context={context}/>
|
231 |
+
</>
|
232 |
+
);
|
233 |
+
}
|
234 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/index 2.js
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Handle YITH Gutenberg Blocks
|
3 |
+
*
|
4 |
+
* @var {Object} yithGutenbergBlocks The Gutenberg blocks object.
|
5 |
+
*/
|
6 |
+
|
7 |
+
/**
|
8 |
+
* External dependencies
|
9 |
+
*/
|
10 |
+
import React from 'react';
|
11 |
+
import md5 from 'md5';
|
12 |
+
|
13 |
+
/**
|
14 |
+
* WordPress dependencies
|
15 |
+
*/
|
16 |
+
import { registerBlockType } from '@wordpress/blocks';
|
17 |
+
import { RawHTML } from '@wordpress/element';
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Internal dependencies
|
21 |
+
*/
|
22 |
+
import { yith_icon, generateShortcode } from './common';
|
23 |
+
import { createEditFunction } from './edit';
|
24 |
+
import './common/actions-to-jquery-events';
|
25 |
+
|
26 |
+
for ( const [blockName, blockArgs] of Object.entries( yithGutenbergBlocks ) ) {
|
27 |
+
registerBlockType( 'yith/' + blockName, {
|
28 |
+
title : blockArgs.title,
|
29 |
+
description: blockArgs.description,
|
30 |
+
category : blockArgs.category,
|
31 |
+
attributes : blockArgs.attributes,
|
32 |
+
icon : typeof blockArgs.icon !== 'undefined' ? blockArgs.icon : yith_icon,
|
33 |
+
keywords : blockArgs.keywords,
|
34 |
+
edit : createEditFunction( blockName, blockArgs ),
|
35 |
+
usesContext: [
|
36 |
+
'postId',
|
37 |
+
],
|
38 |
+
save : ( { attributes } ) => {
|
39 |
+
return generateShortcode( blockArgs, attributes );
|
40 |
+
},
|
41 |
+
deprecated : [
|
42 |
+
{
|
43 |
+
attributes: blockArgs.attributes,
|
44 |
+
save : ( { attributes } ) => {
|
45 |
+
const shortcode = generateShortcode( blockArgs, attributes );
|
46 |
+
const blockHash = md5( shortcode );
|
47 |
+
const shortcodeSpan = '<span class="yith_block_' + blockHash + '">' + shortcode + '</span>';
|
48 |
+
|
49 |
+
return (
|
50 |
+
<RawHTML>{shortcodeSpan}</RawHTML>
|
51 |
+
)
|
52 |
+
}
|
53 |
+
}
|
54 |
+
]
|
55 |
+
} );
|
56 |
+
}
|
plugin-fw/includes/builders/gutenberg/src/index.js
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* Handle YITH Gutenberg Blocks
|
3 |
+
*
|
4 |
+
* @var {Object} yithGutenbergBlocks The Gutenberg blocks object.
|
5 |
+
*/
|
6 |
+
|
7 |
+
/**
|
8 |
+
* External dependencies
|
9 |
+
*/
|
10 |
+
import React from 'react';
|
11 |
+
import md5 from 'md5';
|
12 |
+
|
13 |
+
/**
|
14 |
+
* WordPress dependencies
|
15 |
+
*/
|
16 |
+
import { registerBlockType } from '@wordpress/blocks';
|
17 |
+
import { RawHTML } from '@wordpress/element';
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Internal dependencies
|
21 |
+
*/
|
22 |
+
import { yith_icon, generateShortcode } from './common';
|
23 |
+
import { createEditFunction } from './edit';
|
24 |
+
import './common/actions-to-jquery-events';
|
25 |
+
|
26 |
+
for ( const [blockName, blockArgs] of Object.entries( yithGutenbergBlocks ) ) {
|
27 |
+
registerBlockType( 'yith/' + blockName, {
|
28 |
+
title : blockArgs.title,
|
29 |
+
description: blockArgs.description,
|
30 |
+
category : blockArgs.category,
|
31 |
+
attributes : blockArgs.attributes,
|
32 |
+
icon : typeof blockArgs.icon !== 'undefined' ? blockArgs.icon : yith_icon,
|
33 |
+
keywords : blockArgs.keywords,
|
34 |
+
edit : createEditFunction( blockName, blockArgs ),
|
35 |
+
usesContext: [
|
36 |
+
'postId',
|
37 |
+
],
|
38 |
+
save : ( { attributes } ) => {
|
39 |
+
return generateShortcode( blockArgs, attributes );
|
40 |
+
},
|
41 |
+
deprecated : [
|
42 |
+
{
|
43 |
+
attributes: blockArgs.attributes,
|
44 |
+
save : ( { attributes } ) => {
|
45 |
+
const shortcode = generateShortcode( blockArgs, attributes );
|
46 |
+
const blockHash = md5( shortcode );
|
47 |
+
const shortcodeSpan = '<span class="yith_block_' + blockHash + '">' + shortcode + '</span>';
|
48 |
+
|
49 |
+
return (
|
50 |
+
<RawHTML>{shortcodeSpan}</RawHTML>
|
51 |
+
)
|
52 |
+
}
|
53 |
+
}
|
54 |
+
]
|
55 |
+
} );
|
56 |
+
}
|
plugin-fw/includes/class-yit-assets.php
CHANGED
@@ -116,6 +116,13 @@ if ( ! class_exists( 'YIT_Assets' ) ) {
|
|
116 |
'search_terms_nonce' => wp_create_nonce( 'search-terms' ),
|
117 |
'search_customers_nonce' => wp_create_nonce( 'search-customers' ),
|
118 |
'search_pages_nonce' => wp_create_nonce( 'search-pages' ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
)
|
120 |
);
|
121 |
|
116 |
'search_terms_nonce' => wp_create_nonce( 'search-terms' ),
|
117 |
'search_customers_nonce' => wp_create_nonce( 'search-customers' ),
|
118 |
'search_pages_nonce' => wp_create_nonce( 'search-pages' ),
|
119 |
+
'i18n' => array(
|
120 |
+
'no_matches' => _x( 'No matches found', 'Enhanced select', 'yith-plugin-fw' ),
|
121 |
+
'input_too_short_1' => _x( 'Please enter 1 or more characters', 'Enhanced select', 'yith-plugin-fw' ),
|
122 |
+
// translators: %s is the number of characters.
|
123 |
+
'input_too_short_n' => _x( 'Please enter %s or more characters', 'Enhanced select', 'yith-plugin-fw' ),
|
124 |
+
'searching' => _x( 'Searching…', 'Enhanced select', 'yith-plugin-fw' ),
|
125 |
+
),
|
126 |
)
|
127 |
);
|
128 |
|
plugin-fw/includes/class-yit-cpt-unlimited 2.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Custom-Post-Type Unlimited Class.
|
4 |
+
* Deprecated! Kept only to prevent fatal errors if someone is using it.
|
5 |
+
*
|
6 |
+
* @class YIT_CPT_Unlimited
|
7 |
+
* @package YITH\PluginFramework\Classes
|
8 |
+
* @deprecated 3.5 | This will be removed, so please don't use it
|
9 |
+
*/
|
10 |
+
|
11 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
12 |
+
|
13 |
+
if ( ! class_exists( 'YIT_CPT_Unlimited' ) ) {
|
14 |
+
|
15 |
+
/**
|
16 |
+
* Class YIT_CPT_Unlimited
|
17 |
+
*
|
18 |
+
* @deprecated 3.5 | This will be removed, so please don't use it
|
19 |
+
*/
|
20 |
+
class YIT_CPT_Unlimited {
|
21 |
+
|
22 |
+
/**
|
23 |
+
* YIT_CPT_Unlimited constructor.
|
24 |
+
*
|
25 |
+
* @param array $args Configuration arguments of post type.
|
26 |
+
*/
|
27 |
+
public function __construct( $args = array() ) {
|
28 |
+
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Avoid issues when calling a non-defined method
|
33 |
+
*
|
34 |
+
* @param string $name Name of the missing method.
|
35 |
+
* @param array $arguments Arguments.
|
36 |
+
*
|
37 |
+
* @return bool
|
38 |
+
*/
|
39 |
+
public function __call( $name, $arguments ) {
|
40 |
+
return false;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Avoid issues when calling a non-defined attribute
|
45 |
+
*
|
46 |
+
* @param string $key Name of the missing attribute.
|
47 |
+
*
|
48 |
+
* @return bool
|
49 |
+
*/
|
50 |
+
public function __get( $key ) {
|
51 |
+
return false;
|
52 |
+
}
|
53 |
+
}
|
54 |
+
}
|
plugin-fw/includes/class-yit-icons 2.php
ADDED
@@ -0,0 +1,1237 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Icons Class.
|
4 |
+
*
|
5 |
+
* @class YIT_Icons
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
10 |
+
|
11 |
+
if ( ! class_exists( 'YIT_Icons' ) ) {
|
12 |
+
/**
|
13 |
+
* YIT_Icons class.
|
14 |
+
*
|
15 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
16 |
+
*/
|
17 |
+
class YIT_Icons {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The single instance of the class.
|
21 |
+
*
|
22 |
+
* @var YIT_Icons
|
23 |
+
*/
|
24 |
+
private static $instance;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Array of data
|
28 |
+
*
|
29 |
+
* @var array
|
30 |
+
*/
|
31 |
+
private $data
|
32 |
+
= array(
|
33 |
+
'font_awesome_version' => '4.7.0',
|
34 |
+
'icons' => array(
|
35 |
+
'FontAwesome' => array(
|
36 |
+
'\f000' => 'glass',
|
37 |
+
'\f001' => 'music',
|
38 |
+
'\f002' => 'search',
|
39 |
+
'\f003' => 'envelope-o',
|
40 |
+
'\f004' => 'heart',
|
41 |
+
'\f005' => 'star',
|
42 |
+
'\f006' => 'star-o',
|
43 |
+
'\f007' => 'user',
|
44 |
+
'\f008' => 'film',
|
45 |
+
'\f009' => 'th-large',
|
46 |
+
'\f00a' => 'th',
|
47 |
+
'\f00b' => 'th-list',
|
48 |
+
'\f00c' => 'check',
|
49 |
+
'\f00d' => 'times',
|
50 |
+
'\f00e' => 'search-plus',
|
51 |
+
'\f010' => 'search-minus',
|
52 |
+
'\f011' => 'power-off',
|
53 |
+
'\f012' => 'signal',
|
54 |
+
'\f013' => 'cog',
|
55 |
+
'\f014' => 'trash-o',
|
56 |
+
'\f015' => 'home',
|
57 |
+
'\f016' => 'file-o',
|
58 |
+
'\f017' => 'clock-o',
|
59 |
+
'\f018' => 'road',
|
60 |
+
'\f019' => 'download',
|
61 |
+
'\f01a' => 'arrow-circle-o-down',
|
62 |
+
'\f01b' => 'arrow-circle-o-up',
|
63 |
+
'\f01c' => 'inbox',
|
64 |
+
'\f01d' => 'play-circle-o',
|
65 |
+
'\f01e' => 'repeat',
|
66 |
+
'\f021' => 'refresh',
|
67 |
+
'\f022' => 'list-alt',
|
68 |
+
'\f023' => 'lock',
|
69 |
+
'\f024' => 'flag',
|
70 |
+
'\f025' => 'headphones',
|
71 |
+
'\f026' => 'volume-off',
|
72 |
+
'\f027' => 'volume-down',
|
73 |
+
'\f028' => 'volume-up',
|
74 |
+
'\f029' => 'qrcode',
|
75 |
+
'\f02a' => 'barcode',
|
76 |
+
'\f02b' => 'tag',
|
77 |
+
'\f02c' => 'tags',
|
78 |
+
'\f02d' => 'book',
|
79 |
+
'\f02e' => 'bookmark',
|
80 |
+
'\f02f' => 'print',
|
81 |
+
'\f030' => 'camera',
|
82 |
+
'\f031' => 'font',
|
83 |
+
'\f032' => 'bold',
|
84 |
+
'\f033' => 'italic',
|
85 |
+
'\f034' => 'text-height',
|
86 |
+
'\f035' => 'text-width',
|
87 |
+
'\f036' => 'align-left',
|
88 |
+
'\f037' => 'align-center',
|
89 |
+
'\f038' => 'align-right',
|
90 |
+
'\f039' => 'align-justify',
|
91 |
+
'\f03a' => 'list',
|
92 |
+
'\f03b' => 'outdent',
|
93 |
+
'\f03c' => 'indent',
|
94 |
+
'\f03d' => 'video-camera',
|
95 |
+
'\f03e' => 'picture-o',
|
96 |
+
'\f040' => 'pencil',
|
97 |
+
'\f041' => 'map-marker',
|
98 |
+
'\f042' => 'adjust',
|
99 |
+
'\f043' => 'tint',
|
100 |
+
'\f044' => 'pencil-square-o',
|
101 |
+
'\f045' => 'share-square-o',
|
102 |
+
'\f046' => 'check-square-o',
|
103 |
+
'\f047' => 'arrows',
|
104 |
+
'\f048' => 'step-backward',
|
105 |
+
'\f049' => 'fast-backward',
|
106 |
+
'\f04a' => 'backward',
|
107 |
+
'\f04b' => 'play',
|
108 |
+
'\f04c' => 'pause',
|
109 |
+
'\f04d' => 'stop',
|
110 |
+
'\f04e' => 'forward',
|
111 |
+
'\f050' => 'fast-forward',
|
112 |
+
'\f051' => 'step-forward',
|
113 |
+
'\f052' => 'eject',
|
114 |
+
'\f053' => 'chevron-left',
|
115 |
+
'\f054' => 'chevron-right',
|
116 |
+
'\f055' => 'plus-circle',
|
117 |
+
'\f056' => 'minus-circle',
|
118 |
+
'\f057' => 'times-circle',
|
119 |
+
'\f058' => 'check-circle',
|
120 |
+
'\f059' => 'question-circle',
|
121 |
+
'\f05a' => 'info-circle',
|
122 |
+
'\f05b' => 'crosshairs',
|
123 |
+
'\f05c' => 'times-circle-o',
|
124 |
+
'\f05d' => 'check-circle-o',
|
125 |
+
'\f05e' => 'ban',
|
126 |
+
'\f060' => 'arrow-left',
|
127 |
+
'\f061' => 'arrow-right',
|
128 |
+
'\f062' => 'arrow-up',
|
129 |
+
'\f063' => 'arrow-down',
|
130 |
+
'\f064' => 'share',
|
131 |
+
'\f065' => 'expand',
|
132 |
+
'\f066' => 'compress',
|
133 |
+
'\f067' => 'plus',
|
134 |
+
'\f068' => 'minus',
|
135 |
+
'\f069' => 'asterisk',
|
136 |
+
'\f06a' => 'exclamation-circle',
|
137 |
+
'\f06b' => 'gift',
|
138 |
+
'\f06c' => 'leaf',
|
139 |
+
'\f06d' => 'fire',
|
140 |
+
'\f06e' => 'eye',
|
141 |
+
'\f070' => 'eye-slash',
|
142 |
+
'\f071' => 'exclamation-triangle',
|
143 |
+
'\f072' => 'plane',
|
144 |
+
'\f073' => 'calendar',
|
145 |
+
'\f074' => 'random',
|
146 |
+
'\f075' => 'comment',
|
147 |
+
'\f076' => 'magnet',
|
148 |
+
'\f077' => 'chevron-up',
|
149 |
+
'\f078' => 'chevron-down',
|
150 |
+
'\f079' => 'retweet',
|
151 |
+
'\f07a' => 'shopping-cart',
|
152 |
+
'\f07b' => 'folder',
|
153 |
+
'\f07c' => 'folder-open',
|
154 |
+
'\f07d' => 'arrows-v',
|
155 |
+
'\f07e' => 'arrows-h',
|
156 |
+
'\f080' => 'bar-chart',
|
157 |
+
'\f081' => 'twitter-square',
|
158 |
+
'\f082' => 'facebook-square',
|
159 |
+
'\f083' => 'camera-retro',
|
160 |
+
'\f084' => 'key',
|
161 |
+
'\f085' => 'cogs',
|
162 |
+
'\f086' => 'comments',
|
163 |
+
'\f087' => 'thumbs-o-up',
|
164 |
+
'\f088' => 'thumbs-o-down',
|
165 |
+
'\f089' => 'star-half',
|
166 |
+
'\f08a' => 'heart-o',
|
167 |
+
'\f08b' => 'sign-out',
|
168 |
+
'\f08c' => 'linkedin-square',
|
169 |
+
'\f08d' => 'thumb-tack',
|
170 |
+
'\f08e' => 'external-link',
|
171 |
+
'\f090' => 'sign-in',
|
172 |
+
'\f091' => 'trophy',
|
173 |
+
'\f092' => 'github-square',
|
174 |
+
'\f093' => 'upload',
|
175 |
+
'\f094' => 'lemon-o',
|
176 |
+
'\f095' => 'phone',
|
177 |
+
'\f096' => 'square-o',
|
178 |
+
'\f097' => 'bookmark-o',
|
179 |
+
'\f098' => 'phone-square',
|
180 |
+
'\f099' => 'twitter',
|
181 |
+
'\f09a' => 'facebook',
|
182 |
+
'\f09b' => 'github',
|
183 |
+
'\f09c' => 'unlock',
|
184 |
+
'\f09d' => 'credit-card',
|
185 |
+
'\f09e' => 'rss',
|
186 |
+
'\f0a0' => 'hdd-o',
|
187 |
+
'\f0a1' => 'bullhorn',
|
188 |
+
'\f0a2' => 'bell-o',
|
189 |
+
'\f0a3' => 'certificate',
|
190 |
+
'\f0a4' => 'hand-o-right',
|
191 |
+
'\f0a5' => 'hand-o-left',
|
192 |
+
'\f0a6' => 'hand-o-up',
|
193 |
+
'\f0a7' => 'hand-o-down',
|
194 |
+
'\f0a8' => 'arrow-circle-left',
|
195 |
+
'\f0a9' => 'arrow-circle-right',
|
196 |
+
'\f0aa' => 'arrow-circle-up',
|
197 |
+
'\f0ab' => 'arrow-circle-down',
|
198 |
+
'\f0ac' => 'globe',
|
199 |
+
'\f0ad' => 'wrench',
|
200 |
+
'\f0ae' => 'tasks',
|
201 |
+
'\f0b0' => 'filter',
|
202 |
+
'\f0b1' => 'briefcase',
|
203 |
+
'\f0b2' => 'arrows-alt',
|
204 |
+
'\f0c0' => 'users',
|
205 |
+
'\f0c1' => 'link',
|
206 |
+
'\f0c2' => 'cloud',
|
207 |
+
'\f0c3' => 'flask',
|
208 |
+
'\f0c4' => 'scissors',
|
209 |
+
'\f0c5' => 'files-o',
|
210 |
+
'\f0c6' => 'paperclip',
|
211 |
+
'\f0c7' => 'floppy-o',
|
212 |
+
'\f0c8' => 'square',
|
213 |
+
'\f0c9' => 'bars',
|
214 |
+
'\f0ca' => 'list-ul',
|
215 |
+
'\f0cb' => 'list-ol',
|
216 |
+
'\f0cc' => 'strikethrough',
|
217 |
+
'\f0cd' => 'underline',
|
218 |
+
'\f0ce' => 'table',
|
219 |
+
'\f0d0' => 'magic',
|
220 |
+
'\f0d1' => 'truck',
|
221 |
+
'\f0d2' => 'pinterest',
|
222 |
+
'\f0d3' => 'pinterest-square',
|
223 |
+
'\f0d4' => 'google-plus-square',
|
224 |
+
'\f0d5' => 'google-plus',
|
225 |
+
'\f0d6' => 'money',
|
226 |
+
'\f0d7' => 'caret-down',
|
227 |
+
'\f0d8' => 'caret-up',
|
228 |
+
'\f0d9' => 'caret-left',
|
229 |
+
'\f0da' => 'caret-right',
|
230 |
+
'\f0db' => 'columns',
|
231 |
+
'\f0dc' => 'sort',
|
232 |
+
'\f0dd' => 'sort-desc',
|
233 |
+
'\f0de' => 'sort-asc',
|
234 |
+
'\f0e0' => 'envelope',
|
235 |
+
'\f0e1' => 'linkedin',
|
236 |
+
'\f0e2' => 'undo',
|
237 |
+
'\f0e3' => 'gavel',
|
238 |
+
'\f0e4' => 'tachometer',
|
239 |
+
'\f0e5' => 'comment-o',
|
240 |
+
'\f0e6' => 'comments-o',
|
241 |
+
'\f0e7' => 'bolt',
|
242 |
+
'\f0e8' => 'sitemap',
|
243 |
+
'\f0e9' => 'umbrella',
|
244 |
+
'\f0ea' => 'clipboard',
|
245 |
+
'\f0eb' => 'lightbulb-o',
|
246 |
+
'\f0ec' => 'exchange',
|
247 |
+
'\f0ed' => 'cloud-download',
|
248 |
+
'\f0ee' => 'cloud-upload',
|
249 |
+
'\f0f0' => 'user-md',
|
250 |
+
'\f0f1' => 'stethoscope',
|
251 |
+
'\f0f2' => 'suitcase',
|
252 |
+
'\f0f3' => 'bell',
|
253 |
+
'\f0f4' => 'coffee',
|
254 |
+
'\f0f5' => 'cutlery',
|
255 |
+
'\f0f6' => 'file-text-o',
|
256 |
+
'\f0f7' => 'building-o',
|
257 |
+
'\f0f8' => 'hospital-o',
|
258 |
+
'\f0f9' => 'ambulance',
|
259 |
+
'\f0fa' => 'medkit',
|
260 |
+
'\f0fb' => 'fighter-jet',
|
261 |
+
'\f0fc' => 'beer',
|
262 |
+
'\f0fd' => 'h-square',
|
263 |
+
'\f0fe' => 'plus-square',
|
264 |
+
'\f100' => 'angle-double-left',
|
265 |
+
'\f101' => 'angle-double-right',
|
266 |
+
'\f102' => 'angle-double-up',
|
267 |
+
'\f103' => 'angle-double-down',
|
268 |
+
'\f104' => 'angle-left',
|
269 |
+
'\f105' => 'angle-right',
|
270 |
+
'\f106' => 'angle-up',
|
271 |
+
'\f107' => 'angle-down',
|
272 |
+
'\f108' => 'desktop',
|
273 |
+
'\f109' => 'laptop',
|
274 |
+
'\f10a' => 'tablet',
|
275 |
+
'\f10b' => 'mobile',
|
276 |
+
'\f10c' => 'circle-o',
|
277 |
+
'\f10d' => 'quote-left',
|
278 |
+
'\f10e' => 'quote-right',
|
279 |
+
'\f110' => 'spinner',
|
280 |
+
'\f111' => 'circle',
|
281 |
+
'\f112' => 'reply',
|
282 |
+
'\f113' => 'github-alt',
|
283 |
+
'\f114' => 'folder-o',
|
284 |
+
'\f115' => 'folder-open-o',
|
285 |
+
'\f118' => 'smile-o',
|
286 |
+
'\f119' => 'frown-o',
|
287 |
+
'\f11a' => 'meh-o',
|
288 |
+
'\f11b' => 'gamepad',
|
289 |
+
'\f11c' => 'keyboard-o',
|
290 |
+
'\f11d' => 'flag-o',
|
291 |
+
'\f11e' => 'flag-checkered',
|
292 |
+
'\f120' => 'terminal',
|
293 |
+
'\f121' => 'code',
|
294 |
+
'\f122' => 'reply-all',
|
295 |
+
'\f123' => 'star-half-o',
|
296 |
+
'\f124' => 'location-arrow',
|
297 |
+
'\f125' => 'crop',
|
298 |
+
'\f126' => 'code-fork',
|
299 |
+
'\f127' => 'chain-broken',
|
300 |
+
'\f128' => 'question',
|
301 |
+
'\f129' => 'info',
|
302 |
+
'\f12a' => 'exclamation',
|
303 |
+
'\f12b' => 'superscript',
|
304 |
+
'\f12c' => 'subscript',
|
305 |
+
'\f12d' => 'eraser',
|
306 |
+
'\f12e' => 'puzzle-piece',
|
307 |
+
'\f130' => 'microphone',
|
308 |
+
'\f131' => 'microphone-slash',
|
309 |
+
'\f132' => 'shield',
|
310 |
+
'\f133' => 'calendar-o',
|
311 |
+
'\f134' => 'fire-extinguisher',
|
312 |
+
'\f135' => 'rocket',
|
313 |
+
'\f136' => 'maxcdn',
|
314 |
+
'\f137' => 'chevron-circle-left',
|
315 |
+
'\f138' => 'chevron-circle-right',
|
316 |
+
'\f139' => 'chevron-circle-up',
|
317 |
+
'\f13a' => 'chevron-circle-down',
|
318 |
+
'\f13b' => 'html5',
|
319 |
+
'\f13c' => 'css3',
|
320 |
+
'\f13d' => 'anchor',
|
321 |
+
'\f13e' => 'unlock-alt',
|
322 |
+
'\f140' => 'bullseye',
|
323 |
+
'\f141' => 'ellipsis-h',
|
324 |
+
'\f142' => 'ellipsis-v',
|
325 |
+
'\f143' => 'rss-square',
|
326 |
+
'\f144' => 'play-circle',
|
327 |
+
'\f145' => 'ticket',
|
328 |
+
'\f146' => 'minus-square',
|
329 |
+
'\f147' => 'minus-square-o',
|
330 |
+
'\f148' => 'level-up',
|
331 |
+
'\f149' => 'level-down',
|
332 |
+
'\f14a' => 'check-square',
|
333 |
+
'\f14b' => 'pencil-square',
|
334 |
+
'\f14c' => 'external-link-square',
|
335 |
+
'\f14d' => 'share-square',
|
336 |
+
'\f14e' => 'compass',
|
337 |
+
'\f150' => 'caret-square-o-down',
|
338 |
+
'\f151' => 'caret-square-o-up',
|
339 |
+
'\f152' => 'caret-square-o-right',
|
340 |
+
'\f153' => 'eur',
|
341 |
+
'\f154' => 'gbp',
|
342 |
+
'\f155' => 'usd',
|
343 |
+
'\f156' => 'inr',
|
344 |
+
'\f157' => 'jpy',
|
345 |
+
'\f158' => 'rub',
|
346 |
+
'\f159' => 'krw',
|
347 |
+
'\f15a' => 'btc',
|
348 |
+
'\f15b' => 'file',
|
349 |
+
'\f15c' => 'file-text',
|
350 |
+
'\f15d' => 'sort-alpha-asc',
|
351 |
+
'\f15e' => 'sort-alpha-desc',
|
352 |
+
'\f160' => 'sort-amount-asc',
|
353 |
+
'\f161' => 'sort-amount-desc',
|
354 |
+
'\f162' => 'sort-numeric-asc',
|
355 |
+
'\f163' => 'sort-numeric-desc',
|
356 |
+
'\f164' => 'thumbs-up',
|
357 |
+
'\f165' => 'thumbs-down',
|
358 |
+
'\f166' => 'youtube-square',
|
359 |
+
'\f167' => 'youtube',
|
360 |
+
'\f168' => 'xing',
|
361 |
+
'\f169' => 'xing-square',
|
362 |
+
'\f16a' => 'youtube-play',
|
363 |
+
'\f16b' => 'dropbox',
|
364 |
+
'\f16c' => 'stack-overflow',
|
365 |
+
'\f16d' => 'instagram',
|
366 |
+
'\f16e' => 'flickr',
|
367 |
+
'\f170' => 'adn',
|
368 |
+
'\f171' => 'bitbucket',
|
369 |
+
'\f172' => 'bitbucket-square',
|
370 |
+
'\f173' => 'tumblr',
|
371 |
+
'\f174' => 'tumblr-square',
|
372 |
+
'\f175' => 'long-arrow-down',
|
373 |
+
'\f176' => 'long-arrow-up',
|
374 |
+
'\f177' => 'long-arrow-left',
|
375 |
+
'\f178' => 'long-arrow-right',
|
376 |
+
'\f179' => 'apple',
|
377 |
+
'\f17a' => 'windows',
|
378 |
+
'\f17b' => 'android',
|
379 |
+
'\f17c' => 'linux',
|
380 |
+
'\f17d' => 'dribbble',
|
381 |
+
'\f17e' => 'skype',
|
382 |
+
'\f180' => 'foursquare',
|
383 |
+
'\f181' => 'trello',
|
384 |
+
'\f182' => 'female',
|
385 |
+
'\f183' => 'male',
|
386 |
+
'\f184' => 'gratipay',
|
387 |
+
'\f185' => 'sun-o',
|
388 |
+
'\f186' => 'moon-o',
|
389 |
+
'\f187' => 'archive',
|
390 |
+
'\f188' => 'bug',
|
391 |
+
'\f189' => 'vk',
|
392 |
+
'\f18a' => 'weibo',
|
393 |
+
'\f18b' => 'renren',
|
394 |
+
'\f18c' => 'pagelines',
|
395 |
+
'\f18d' => 'stack-exchange',
|
396 |
+
'\f18e' => 'arrow-circle-o-right',
|
397 |
+
'\f190' => 'arrow-circle-o-left',
|
398 |
+
'\f191' => 'caret-square-o-left',
|
399 |
+
'\f192' => 'dot-circle-o',
|
400 |
+
'\f193' => 'wheelchair',
|
401 |
+
'\f194' => 'vimeo-square',
|
402 |
+
'\f195' => 'try',
|
403 |
+
'\f196' => 'plus-square-o',
|
404 |
+
'\f197' => 'space-shuttle',
|
405 |
+
'\f198' => 'slack',
|
406 |
+
'\f199' => 'envelope-square',
|
407 |
+
'\f19a' => 'wordpress',
|
408 |
+
'\f19b' => 'openid',
|
409 |
+
'\f19c' => 'university',
|
410 |
+
'\f19d' => 'graduation-cap',
|
411 |
+
'\f19e' => 'yahoo',
|
412 |
+
'\f1a0' => 'google',
|
413 |
+
'\f1a1' => 'reddit',
|
414 |
+
'\f1a2' => 'reddit-square',
|
415 |
+
'\f1a3' => 'stumbleupon-circle',
|
416 |
+
'\f1a4' => 'stumbleupon',
|
417 |
+
'\f1a5' => 'delicious',
|
418 |
+
'\f1a6' => 'digg',
|
419 |
+
'\f1a7' => 'pied-piper-pp',
|
420 |
+
'\f1a8' => 'pied-piper-alt',
|
421 |
+
'\f1a9' => 'drupal',
|
422 |
+
'\f1aa' => 'joomla',
|
423 |
+
'\f1ab' => 'language',
|
424 |
+
'\f1ac' => 'fax',
|
425 |
+
'\f1ad' => 'building',
|
426 |
+
'\f1ae' => 'child',
|
427 |
+
'\f1b0' => 'paw',
|
428 |
+
'\f1b1' => 'spoon',
|
429 |
+
'\f1b2' => 'cube',
|
430 |
+
'\f1b3' => 'cubes',
|
431 |
+
'\f1b4' => 'behance',
|
432 |
+
'\f1b5' => 'behance-square',
|
433 |
+
'\f1b6' => 'steam',
|
434 |
+
'\f1b7' => 'steam-square',
|
435 |
+
'\f1b8' => 'recycle',
|
436 |
+
'\f1b9' => 'car',
|
437 |
+
'\f1ba' => 'taxi',
|
438 |
+
'\f1bb' => 'tree',
|
439 |
+
'\f1bc' => 'spotify',
|
440 |
+
'\f1bd' => 'deviantart',
|
441 |
+
'\f1be' => 'soundcloud',
|
442 |
+
'\f1c0' => 'database',
|
443 |
+
'\f1c1' => 'file-pdf-o',
|
444 |
+
'\f1c2' => 'file-word-o',
|
445 |
+
'\f1c3' => 'file-excel-o',
|
446 |
+
'\f1c4' => 'file-powerpoint-o',
|
447 |
+
'\f1c5' => 'file-image-o',
|
448 |
+
'\f1c6' => 'file-archive-o',
|
449 |
+
'\f1c7' => 'file-audio-o',
|
450 |
+
'\f1c8' => 'file-video-o',
|
451 |
+
'\f1c9' => 'file-code-o',
|
452 |
+
'\f1ca' => 'vine',
|
453 |
+
'\f1cb' => 'codepen',
|
454 |
+
'\f1cc' => 'jsfiddle',
|
455 |
+
'\f1cd' => 'life-ring',
|
456 |
+
'\f1ce' => 'circle-o-notch',
|
457 |
+
'\f1d0' => 'rebel',
|
458 |
+
'\f1d1' => 'empire',
|
459 |
+
'\f1d2' => 'git-square',
|
460 |
+
'\f1d3' => 'git',
|
461 |
+
'\f1d4' => 'hacker-news',
|
462 |
+
'\f1d5' => 'tencent-weibo',
|
463 |
+
'\f1d6' => 'qq',
|
464 |
+
'\f1d7' => 'weixin',
|
465 |
+
'\f1d8' => 'paper-plane',
|
466 |
+
'\f1d9' => 'paper-plane-o',
|
467 |
+
'\f1da' => 'history',
|
468 |
+
'\f1db' => 'circle-thin',
|
469 |
+
'\f1dc' => 'header',
|
470 |
+
'\f1dd' => 'paragraph',
|
471 |
+
'\f1de' => 'sliders',
|
472 |
+
'\f1e0' => 'share-alt',
|
473 |
+
'\f1e1' => 'share-alt-square',
|
474 |
+
'\f1e2' => 'bomb',
|
475 |
+
'\f1e3' => 'futbol-o',
|
476 |
+
'\f1e4' => 'tty',
|
477 |
+
'\f1e5' => 'binoculars',
|
478 |
+
'\f1e6' => 'plug',
|
479 |
+
'\f1e7' => 'slideshare',
|
480 |
+
'\f1e8' => 'twitch',
|
481 |
+
'\f1e9' => 'yelp',
|
482 |
+
'\f1ea' => 'newspaper-o',
|
483 |
+
'\f1eb' => 'wifi',
|
484 |
+
'\f1ec' => 'calculator',
|
485 |
+
'\f1ed' => 'paypal',
|
486 |
+
'\f1ee' => 'google-wallet',
|
487 |
+
'\f1f0' => 'cc-visa',
|
488 |
+
'\f1f1' => 'cc-mastercard',
|
489 |
+
'\f1f2' => 'cc-discover',
|
490 |
+
'\f1f3' => 'cc-amex',
|
491 |
+
'\f1f4' => 'cc-paypal',
|
492 |
+
'\f1f5' => 'cc-stripe',
|
493 |
+
'\f1f6' => 'bell-slash',
|
494 |
+
'\f1f7' => 'bell-slash-o',
|
495 |
+
'\f1f8' => 'trash',
|
496 |
+
'\f1f9' => 'copyright',
|
497 |
+
'\f1fa' => 'at',
|
498 |
+
'\f1fb' => 'eyedropper',
|
499 |
+
'\f1fc' => 'paint-brush',
|
500 |
+
'\f1fd' => 'birthday-cake',
|
501 |
+
'\f1fe' => 'area-chart',
|
502 |
+
'\f200' => 'pie-chart',
|
503 |
+
'\f201' => 'line-chart',
|
504 |
+
'\f202' => 'lastfm',
|
505 |
+
'\f203' => 'lastfm-square',
|
506 |
+
'\f204' => 'toggle-off',
|
507 |
+
'\f205' => 'toggle-on',
|
508 |
+
'\f206' => 'bicycle',
|
509 |
+
'\f207' => 'bus',
|
510 |
+
'\f208' => 'ioxhost',
|
511 |
+
'\f209' => 'angellist',
|
512 |
+
'\f20a' => 'cc',
|
513 |
+
'\f20b' => 'ils',
|
514 |
+
'\f20c' => 'meanpath',
|
515 |
+
'\f20d' => 'buysellads',
|
516 |
+
'\f20e' => 'connectdevelop',
|
517 |
+
'\f210' => 'dashcube',
|
518 |
+
'\f211' => 'forumbee',
|
519 |
+
'\f212' => 'leanpub',
|
520 |
+
'\f213' => 'sellsy',
|
521 |
+
'\f214' => 'shirtsinbulk',
|
522 |
+
'\f215' => 'simplybuilt',
|
523 |
+
'\f216' => 'skyatlas',
|
524 |
+
'\f217' => 'cart-plus',
|
525 |
+
'\f218' => 'cart-arrow-down',
|
526 |
+
'\f219' => 'diamond',
|
527 |
+
'\f21a' => 'ship',
|
528 |
+
'\f21b' => 'user-secret',
|
529 |
+
'\f21c' => 'motorcycle',
|
530 |
+
'\f21d' => 'street-view',
|
531 |
+
'\f21e' => 'heartbeat',
|
532 |
+
'\f221' => 'venus',
|
533 |
+
'\f222' => 'mars',
|
534 |
+
'\f223' => 'mercury',
|
535 |
+
'\f224' => 'transgender',
|
536 |
+
'\f225' => 'transgender-alt',
|
537 |
+
'\f226' => 'venus-double',
|
538 |
+
'\f227' => 'mars-double',
|
539 |
+
'\f228' => 'venus-mars',
|
540 |
+
'\f229' => 'mars-stroke',
|
541 |
+
'\f22a' => 'mars-stroke-v',
|
542 |
+
'\f22b' => 'mars-stroke-h',
|
543 |
+
'\f22c' => 'neuter',
|
544 |
+
'\f22d' => 'genderless',
|
545 |
+
'\f230' => 'facebook-official',
|
546 |
+
'\f231' => 'pinterest-p',
|
547 |
+
'\f232' => 'whatsapp',
|
548 |
+
'\f233' => 'server',
|
549 |
+
'\f234' => 'user-plus',
|
550 |
+
'\f235' => 'user-times',
|
551 |
+
'\f236' => 'bed',
|
552 |
+
'\f237' => 'viacoin',
|
553 |
+
'\f238' => 'train',
|
554 |
+
'\f239' => 'subway',
|
555 |
+
'\f23a' => 'medium',
|
556 |
+
'\f23b' => 'y-combinator',
|
557 |
+
'\f23c' => 'optin-monster',
|
558 |
+
'\f23d' => 'opencart',
|
559 |
+
'\f23e' => 'expeditedssl',
|
560 |
+
'\f240' => 'battery-full',
|
561 |
+
'\f241' => 'battery-three-quarters',
|
562 |
+
'\f242' => 'battery-half',
|
563 |
+
'\f243' => 'battery-quarter',
|
564 |
+
'\f244' => 'battery-empty',
|
565 |
+
'\f245' => 'mouse-pointer',
|
566 |
+
'\f246' => 'i-cursor',
|
567 |
+
'\f247' => 'object-group',
|
568 |
+
'\f248' => 'object-ungroup',
|
569 |
+
'\f249' => 'sticky-note',
|
570 |
+
'\f24a' => 'sticky-note-o',
|
571 |
+
'\f24b' => 'cc-jcb',
|
572 |
+
'\f24c' => 'cc-diners-club',
|
573 |
+
'\f24d' => 'clone',
|
574 |
+
'\f24e' => 'balance-scale',
|
575 |
+
'\f250' => 'hourglass-o',
|
576 |
+
'\f251' => 'hourglass-start',
|
577 |
+
'\f252' => 'hourglass-half',
|
578 |
+
'\f253' => 'hourglass-end',
|
579 |
+
'\f254' => 'hourglass',
|
580 |
+
'\f255' => 'hand-rock-o',
|
581 |
+
'\f256' => 'hand-paper-o',
|
582 |
+
'\f257' => 'hand-scissors-o',
|
583 |
+
'\f258' => 'hand-lizard-o',
|
584 |
+
'\f259' => 'hand-spock-o',
|
585 |
+
'\f25a' => 'hand-pointer-o',
|
586 |
+
'\f25b' => 'hand-peace-o',
|
587 |
+
'\f25c' => 'trademark',
|
588 |
+
'\f25d' => 'registered',
|
589 |
+
'\f25e' => 'creative-commons',
|
590 |
+
'\f260' => 'gg',
|
591 |
+
'\f261' => 'gg-circle',
|
592 |
+
'\f262' => 'tripadvisor',
|
593 |
+
'\f263' => 'odnoklassniki',
|
594 |
+
'\f264' => 'odnoklassniki-square',
|
595 |
+
'\f265' => 'get-pocket',
|
596 |
+
'\f266' => 'wikipedia-w',
|
597 |
+
'\f267' => 'safari',
|
598 |
+
'\f268' => 'chrome',
|
599 |
+
'\f269' => 'firefox',
|
600 |
+
'\f26a' => 'opera',
|
601 |
+
'\f26b' => 'internet-explorer',
|
602 |
+
'\f26c' => 'television',
|
603 |
+
'\f26d' => 'contao',
|
604 |
+
'\f26e' => '500px',
|
605 |
+
'\f270' => 'amazon',
|
606 |
+
'\f271' => 'calendar-plus-o',
|
607 |
+
'\f272' => 'calendar-minus-o',
|
608 |
+
'\f273' => 'calendar-times-o',
|
609 |
+
'\f274' => 'calendar-check-o',
|
610 |
+
'\f275' => 'industry',
|
611 |
+
'\f276' => 'map-pin',
|
612 |
+
'\f277' => 'map-signs',
|
613 |
+
'\f278' => 'map-o',
|
614 |
+
'\f279' => 'map',
|
615 |
+
'\f27a' => 'commenting',
|
616 |
+
'\f27b' => 'commenting-o',
|
617 |
+
'\f27c' => 'houzz',
|
618 |
+
'\f27d' => 'vimeo',
|
619 |
+
'\f27e' => 'black-tie',
|
620 |
+
'\f280' => 'fonticons',
|
621 |
+
'\f281' => 'reddit-alien',
|
622 |
+
'\f282' => 'edge',
|
623 |
+
'\f283' => 'credit-card-alt',
|
624 |
+
'\f284' => 'codiepie',
|
625 |
+
'\f285' => 'modx',
|
626 |
+
'\f286' => 'fort-awesome',
|
627 |
+
'\f287' => 'usb',
|
628 |
+
'\f288' => 'product-hunt',
|
629 |
+
'\f289' => 'mixcloud',
|
630 |
+
'\f28a' => 'scribd',
|
631 |
+
'\f28b' => 'pause-circle',
|
632 |
+
'\f28c' => 'pause-circle-o',
|
633 |
+
'\f28d' => 'stop-circle',
|
634 |
+
'\f28e' => 'stop-circle-o',
|
635 |
+
'\f290' => 'shopping-bag',
|
636 |
+
'\f291' => 'shopping-basket',
|
637 |
+
'\f292' => 'hashtag',
|
638 |
+
'\f293' => 'bluetooth',
|
639 |
+
'\f294' => 'bluetooth-b',
|
640 |
+
'\f295' => 'percent',
|
641 |
+
'\f296' => 'gitlab',
|
642 |
+
'\f297' => 'wpbeginner',
|
643 |
+
'\f298' => 'wpforms',
|
644 |
+
'\f299' => 'envira',
|
645 |
+
'\f29a' => 'universal-access',
|
646 |
+
'\f29b' => 'wheelchair-alt',
|
647 |
+
'\f29c' => 'question-circle-o',
|
648 |
+
'\f29d' => 'blind',
|
649 |
+
'\f29e' => 'audio-description',
|
650 |
+
'\f2a0' => 'volume-control-phone',
|
651 |
+
'\f2a1' => 'braille',
|
652 |
+
'\f2a2' => 'assistive-listening-systems',
|
653 |
+
'\f2a3' => 'american-sign-language-interpreting',
|
654 |
+
'\f2a4' => 'deaf',
|
655 |
+
'\f2a5' => 'glide',
|
656 |
+
'\f2a6' => 'glide-g',
|
657 |
+
'\f2a7' => 'sign-language',
|
658 |
+
'\f2a8' => 'low-vision',
|
659 |
+
'\f2a9' => 'viadeo',
|
660 |
+
'\f2aa' => 'viadeo-square',
|
661 |
+
'\f2ab' => 'snapchat',
|
662 |
+
'\f2ac' => 'snapchat-ghost',
|
663 |
+
'\f2ad' => 'snapchat-square',
|
664 |
+
'\f2ae' => 'pied-piper',
|
665 |
+
'\f2b0' => 'first-order',
|
666 |
+
'\f2b1' => 'yoast',
|
667 |
+
'\f2b2' => 'themeisle',
|
668 |
+
'\f2b3' => 'google-plus-official',
|
669 |
+
'\f2b4' => 'font-awesome',
|
670 |
+
'\f2b5' => 'handshake-o',
|
671 |
+
'\f2b6' => 'envelope-open',
|
672 |
+
'\f2b7' => 'envelope-open-o',
|
673 |
+
'\f2b8' => 'linode',
|
674 |
+
'\f2b9' => 'address-book',
|
675 |
+
'\f2ba' => 'address-book-o',
|
676 |
+
'\f2bb' => 'address-card',
|
677 |
+
'\f2bc' => 'address-card-o',
|
678 |
+
'\f2bd' => 'user-circle',
|
679 |
+
'\f2be' => 'user-circle-o',
|
680 |
+
'\f2c0' => 'user-o',
|
681 |
+
'\f2c1' => 'id-badge',
|
682 |
+
'\f2c2' => 'id-card',
|
683 |
+
'\f2c3' => 'id-card-o',
|
684 |
+
'\f2c4' => 'quora',
|
685 |
+
'\f2c5' => 'free-code-camp',
|
686 |
+
'\f2c6' => 'telegram',
|
687 |
+
'\f2c7' => 'thermometer-full',
|
688 |
+
'\f2c8' => 'thermometer-three-quarters',
|
689 |
+
'\f2c9' => 'thermometer-half',
|
690 |
+
'\f2ca' => 'thermometer-quarter',
|
691 |
+
'\f2cb' => 'thermometer-empty',
|
692 |
+
'\f2cc' => 'shower',
|
693 |
+
'\f2cd' => 'bath',
|
694 |
+
'\f2ce' => 'podcast',
|
695 |
+
'\f2d0' => 'window-maximize',
|
696 |
+
'\f2d1' => 'window-minimize',
|
697 |
+
'\f2d2' => 'window-restore',
|
698 |
+
'\f2d3' => 'window-close',
|
699 |
+
'\f2d4' => 'window-close-o',
|
700 |
+
'\f2d5' => 'bandcamp',
|
701 |
+
'\f2d6' => 'grav',
|
702 |
+
'\f2d7' => 'etsy',
|
703 |
+
'\f2d8' => 'imdb',
|
704 |
+
'\f2d9' => 'ravelry',
|
705 |
+
'\f2da' => 'eercast',
|
706 |
+
'\f2db' => 'microchip',
|
707 |
+
'\f2dc' => 'snowflake-o',
|
708 |
+
'\f2dd' => 'superpowers',
|
709 |
+
'\f2de' => 'wpexplorer',
|
710 |
+
'\f2e0' => 'meetup',
|
711 |
+
),
|
712 |
+
'Dashicons' => array(
|
713 |
+
'\f100' => 'admin-appearance',
|
714 |
+
'\f101' => 'admin-comments',
|
715 |
+
'\f102' => 'admin-home',
|
716 |
+
'\f104' => 'admin-media',
|
717 |
+
'\f105' => 'admin-page',
|
718 |
+
'\f106' => 'admin-plugins',
|
719 |
+
'\f107' => 'admin-tools',
|
720 |
+
'\f108' => 'admin-settings',
|
721 |
+
'\f110' => 'admin-users',
|
722 |
+
'\f111' => 'admin-generic',
|
723 |
+
'\f112' => 'admin-network',
|
724 |
+
'\f115' => 'welcome-view-site',
|
725 |
+
'\f116' => 'welcome-widgets-menus',
|
726 |
+
'\f117' => 'welcome-comments',
|
727 |
+
'\f118' => 'welcome-learn-more',
|
728 |
+
'\f120' => 'wordpress',
|
729 |
+
'\f122' => 'format-quote',
|
730 |
+
'\f123' => 'format-aside',
|
731 |
+
'\f125' => 'format-chat',
|
732 |
+
'\f126' => 'format-video',
|
733 |
+
'\f127' => 'format-audio',
|
734 |
+
'\f128' => 'format-image',
|
735 |
+
'\f130' => 'format-status',
|
736 |
+
'\f132' => 'plus',
|
737 |
+
'\f133' => 'welcome-add-page',
|
738 |
+
'\f134' => 'align-center',
|
739 |
+
'\f135' => 'align-left',
|
740 |
+
'\f136' => 'align-right',
|
741 |
+
'\f138' => 'align-none',
|
742 |
+
'\f139' => 'arrow-right',
|
743 |
+
'\f140' => 'arrow-down',
|
744 |
+
'\f141' => 'arrow-left',
|
745 |
+
'\f142' => 'arrow-up',
|
746 |
+
'\f145' => 'calendar',
|
747 |
+
'\f147' => 'yes',
|
748 |
+
'\f148' => 'admin-collapse',
|
749 |
+
'\f153' => 'dismiss',
|
750 |
+
'\f154' => 'star-empty',
|
751 |
+
'\f155' => 'star-filled',
|
752 |
+
'\f156' => 'sort',
|
753 |
+
'\f157' => 'pressthis',
|
754 |
+
'\f158' => 'no',
|
755 |
+
'\f159' => 'marker',
|
756 |
+
'\f160' => 'lock',
|
757 |
+
'\f161' => 'format-gallery',
|
758 |
+
'\f163' => 'list-view',
|
759 |
+
'\f165' => 'image-crop',
|
760 |
+
'\f166' => 'image-rotate-left',
|
761 |
+
'\f167' => 'image-rotate-right',
|
762 |
+
'\f168' => 'image-flip-vertical',
|
763 |
+
'\f169' => 'image-flip-horizontal',
|
764 |
+
'\f171' => 'undo',
|
765 |
+
'\f172' => 'redo',
|
766 |
+
'\f173' => 'post-status',
|
767 |
+
'\f174' => 'cart',
|
768 |
+
'\f175' => 'feedback',
|
769 |
+
'\f176' => 'cloud',
|
770 |
+
'\f177' => 'visibility',
|
771 |
+
'\f178' => 'vault',
|
772 |
+
'\f179' => 'search',
|
773 |
+
'\f180' => 'screenoptions',
|
774 |
+
'\f181' => 'slides',
|
775 |
+
'\f183' => 'analytics',
|
776 |
+
'\f184' => 'chart-pie',
|
777 |
+
'\f185' => 'chart-bar',
|
778 |
+
'\f200' => 'editor-bold',
|
779 |
+
'\f201' => 'editor-italic',
|
780 |
+
'\f203' => 'editor-ul',
|
781 |
+
'\f204' => 'editor-ol',
|
782 |
+
'\f205' => 'editor-quote',
|
783 |
+
'\f206' => 'editor-alignleft',
|
784 |
+
'\f207' => 'editor-aligncenter',
|
785 |
+
'\f208' => 'editor-alignright',
|
786 |
+
'\f209' => 'editor-insertmore',
|
787 |
+
'\f210' => 'editor-spellcheck',
|
788 |
+
'\f212' => 'editor-kitchensink',
|
789 |
+
'\f213' => 'editor-underline',
|
790 |
+
'\f214' => 'editor-justify',
|
791 |
+
'\f215' => 'editor-textcolor',
|
792 |
+
'\f216' => 'editor-paste-word',
|
793 |
+
'\f217' => 'editor-paste-text',
|
794 |
+
'\f218' => 'editor-removeformatting',
|
795 |
+
'\f219' => 'editor-video',
|
796 |
+
'\f220' => 'editor-customchar',
|
797 |
+
'\f221' => 'editor-outdent',
|
798 |
+
'\f222' => 'editor-indent',
|
799 |
+
'\f223' => 'editor-help',
|
800 |
+
'\f224' => 'editor-strikethrough',
|
801 |
+
'\f225' => 'editor-unlink',
|
802 |
+
'\f226' => 'dashboard',
|
803 |
+
'\f227' => 'flag',
|
804 |
+
'\f229' => 'leftright',
|
805 |
+
'\f230' => 'location',
|
806 |
+
'\f231' => 'location-alt',
|
807 |
+
'\f232' => 'images-alt',
|
808 |
+
'\f233' => 'images-alt2',
|
809 |
+
'\f234' => 'video-alt',
|
810 |
+
'\f235' => 'video-alt2',
|
811 |
+
'\f236' => 'video-alt3',
|
812 |
+
'\f237' => 'share1',
|
813 |
+
'\f238' => 'chart-line',
|
814 |
+
'\f239' => 'chart-area',
|
815 |
+
'\f240' => 'share-alt',
|
816 |
+
'\f242' => 'share-alt2',
|
817 |
+
'\f301' => 'twitter',
|
818 |
+
'\f303' => 'rss',
|
819 |
+
'\f304' => 'facebook',
|
820 |
+
'\f305' => 'facebook-alt',
|
821 |
+
'\f306' => 'camera',
|
822 |
+
'\f307' => 'groups',
|
823 |
+
'\f308' => 'hammer',
|
824 |
+
'\f309' => 'art',
|
825 |
+
'\f310' => 'migrate',
|
826 |
+
'\f311' => 'performance',
|
827 |
+
'\f312' => 'products',
|
828 |
+
'\f313' => 'awards',
|
829 |
+
'\f314' => 'forms',
|
830 |
+
'\f316' => 'download',
|
831 |
+
'\f317' => 'upload',
|
832 |
+
'\f318' => 'category',
|
833 |
+
'\f319' => 'admin-site',
|
834 |
+
'\f320' => 'editor-rtl',
|
835 |
+
'\f321' => 'backup',
|
836 |
+
'\f322' => 'portfolio',
|
837 |
+
'\f323' => 'tag',
|
838 |
+
'\f324' => 'wordpress-alt',
|
839 |
+
'\f325' => 'networking',
|
840 |
+
'\f326' => 'translation',
|
841 |
+
'\f328' => 'smiley',
|
842 |
+
'\f330' => 'book',
|
843 |
+
'\f331' => 'book-alt',
|
844 |
+
'\f332' => 'shield',
|
845 |
+
'\f333' => 'menu',
|
846 |
+
'\f334' => 'shield-alt',
|
847 |
+
'\f335' => 'no-alt',
|
848 |
+
'\f336' => 'id',
|
849 |
+
'\f337' => 'id-alt',
|
850 |
+
'\f338' => 'businessman',
|
851 |
+
'\f339' => 'lightbulb',
|
852 |
+
'\f340' => 'arrow-left-alt',
|
853 |
+
'\f341' => 'arrow-left-alt2',
|
854 |
+
'\f342' => 'arrow-up-alt',
|
855 |
+
'\f343' => 'arrow-up-alt2',
|
856 |
+
'\f344' => 'arrow-right-alt',
|
857 |
+
'\f345' => 'arrow-right-alt2',
|
858 |
+
'\f346' => 'arrow-down-alt',
|
859 |
+
'\f347' => 'arrow-down-alt2',
|
860 |
+
'\f348' => 'info',
|
861 |
+
'\f459' => 'star-half',
|
862 |
+
'\f460' => 'minus',
|
863 |
+
'\f462' => 'googleplus',
|
864 |
+
'\f463' => 'update',
|
865 |
+
'\f464' => 'edit',
|
866 |
+
'\f465' => 'email',
|
867 |
+
'\f466' => 'email-alt',
|
868 |
+
'\f468' => 'sos',
|
869 |
+
'\f469' => 'clock',
|
870 |
+
'\f470' => 'smartphone',
|
871 |
+
'\f471' => 'tablet',
|
872 |
+
'\f472' => 'desktop',
|
873 |
+
'\f473' => 'testimonial',
|
874 |
+
'\f474' => 'editor-break',
|
875 |
+
'\f475' => 'editor-code',
|
876 |
+
'\f476' => 'editor-paragraph',
|
877 |
+
'\f478' => 'text',
|
878 |
+
'\f479' => 'tagcloud',
|
879 |
+
'\f480' => 'archive',
|
880 |
+
'\f481' => 'clipboard',
|
881 |
+
'\f482' => 'microphone',
|
882 |
+
'\f483' => 'universal-access',
|
883 |
+
'\f484' => 'nametag',
|
884 |
+
'\f486' => 'tickets',
|
885 |
+
'\f487' => 'heart',
|
886 |
+
'\f488' => 'megaphone',
|
887 |
+
'\f489' => 'schedule',
|
888 |
+
'\f490' => 'media-video',
|
889 |
+
'\f491' => 'media-text',
|
890 |
+
'\f492' => 'playlist-audio',
|
891 |
+
'\f493' => 'playlist-video',
|
892 |
+
'\f495' => 'media-spreadsheet',
|
893 |
+
'\f496' => 'media-interactive',
|
894 |
+
'\f497' => 'media-document',
|
895 |
+
'\f498' => 'media-default',
|
896 |
+
'\f499' => 'media-code',
|
897 |
+
'\f500' => 'media-audio',
|
898 |
+
'\f501' => 'media-archive',
|
899 |
+
'\f502' => 'plus-alt',
|
900 |
+
'\f503' => 'randomize',
|
901 |
+
'\f504' => 'external',
|
902 |
+
'\f506' => 'editor-contract',
|
903 |
+
'\f507' => 'universal-access-alt',
|
904 |
+
'\f508' => 'calendar-alt',
|
905 |
+
'\f509' => 'grid-view',
|
906 |
+
'\f510' => 'index-card',
|
907 |
+
'\f511' => 'carrot',
|
908 |
+
'\f512' => 'building',
|
909 |
+
'\f513' => 'store',
|
910 |
+
'\f514' => 'album',
|
911 |
+
'\f515' => 'controls-repeat',
|
912 |
+
'\f516' => 'controls-skipback',
|
913 |
+
'\f517' => 'controls-skipforward',
|
914 |
+
'\f518' => 'controls-back',
|
915 |
+
'\f519' => 'controls-forward',
|
916 |
+
'\f520' => 'controls-volumeoff',
|
917 |
+
'\f521' => 'controls-volumeon',
|
918 |
+
'\f522' => 'controls-play',
|
919 |
+
'\f523' => 'controls-pause',
|
920 |
+
'\f524' => 'tickets-alt',
|
921 |
+
'\f525' => 'phone',
|
922 |
+
'\f526' => 'money',
|
923 |
+
'\f527' => 'palmtree',
|
924 |
+
'\f528' => 'unlock',
|
925 |
+
'\f529' => 'thumbs-up',
|
926 |
+
'\f530' => 'hidden',
|
927 |
+
'\f531' => 'image-rotate',
|
928 |
+
'\f533' => 'image-filter',
|
929 |
+
'\f534' => 'warning',
|
930 |
+
'\f535' => 'editor-table',
|
931 |
+
'\f536' => 'filter',
|
932 |
+
'\f537' => 'sticky',
|
933 |
+
'\f538' => 'layout',
|
934 |
+
'\f540' => 'admin-customizer',
|
935 |
+
'\f541' => 'admin-multisite',
|
936 |
+
'\f542' => 'thumbs-down',
|
937 |
+
'\f543' => 'plus-alt2',
|
938 |
+
'\f545' => 'move',
|
939 |
+
'\f546' => 'paperclip',
|
940 |
+
'\f547' => 'laptop',
|
941 |
+
),
|
942 |
+
),
|
943 |
+
);
|
944 |
+
|
945 |
+
|
946 |
+
/**
|
947 |
+
* Singleton implementation.
|
948 |
+
*
|
949 |
+
* @return YIT_Icons
|
950 |
+
*/
|
951 |
+
public static function instance() {
|
952 |
+
return ! is_null( self::$instance ) ? self::$instance : self::$instance = new self();
|
953 |
+
}
|
954 |
+
|
955 |
+
/**
|
956 |
+
* Deprecated singleton implementation.
|
957 |
+
* Kept for backward compatibility.
|
958 |
+
*
|
959 |
+
* @return YIT_Icons
|
960 |
+
* @deprecated 3.5 | use YIT_Icons::get_instance() instead.
|
961 |
+
*/
|
962 |
+
public static function get_instance() {
|
963 |
+
return self::instance();
|
964 |
+
}
|
965 |
+
|
966 |
+
/**
|
967 |
+
* YIT_Icons constructor.
|
968 |
+
*/
|
969 |
+
private function __construct() {
|
970 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 99 );
|
971 |
+
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ), 99 );
|
972 |
+
}
|
973 |
+
|
974 |
+
/**
|
975 |
+
* __get function.
|
976 |
+
*
|
977 |
+
* @param string $key The key.
|
978 |
+
*
|
979 |
+
* @return mixed
|
980 |
+
*/
|
981 |
+
public function __get( $key ) {
|
982 |
+
$value = isset( $this->data[ $key ] ) ? $this->data[ $key ] : false;
|
983 |
+
|
984 |
+
return $value;
|
985 |
+
}
|
986 |
+
|
987 |
+
/**
|
988 |
+
* __isset function.
|
989 |
+
*
|
990 |
+
* @param string $key The key.
|
991 |
+
*
|
992 |
+
* @return bool
|
993 |
+
*/
|
994 |
+
public function __isset( $key ) {
|
995 |
+
return isset( $this->data[ $key ] );
|
996 |
+
}
|
997 |
+
|
998 |
+
/**
|
999 |
+
* Get the icons.
|
1000 |
+
*
|
1001 |
+
* @param string $filter_suffix The filter suffix.
|
1002 |
+
*
|
1003 |
+
* @return false|mixed|void
|
1004 |
+
*/
|
1005 |
+
public function get_icons( $filter_suffix = '' ) {
|
1006 |
+
$icons = $this->icons;
|
1007 |
+
if ( ! empty( $filter_suffix ) ) {
|
1008 |
+
$icons = apply_filters( 'yith_plugin_fw_icons_field_icons_' . sanitize_key( $filter_suffix ), $icons );
|
1009 |
+
}
|
1010 |
+
|
1011 |
+
return $icons;
|
1012 |
+
}
|
1013 |
+
|
1014 |
+
/**
|
1015 |
+
* Get the icon data
|
1016 |
+
*
|
1017 |
+
* @param string $icon_string The icon string.
|
1018 |
+
* @param string $filter_suffix The filter suffix.
|
1019 |
+
*
|
1020 |
+
* @return string
|
1021 |
+
*/
|
1022 |
+
public function get_icon_data( $icon_string, $filter_suffix = '' ) {
|
1023 |
+
return yith_plugin_fw_html_data_to_string( $this->get_icon_data_array( $icon_string, $filter_suffix ) );
|
1024 |
+
}
|
1025 |
+
|
1026 |
+
/**
|
1027 |
+
* Get the icon data array
|
1028 |
+
*
|
1029 |
+
* @param string $icon_string The icon string.
|
1030 |
+
* @param string $filter_suffix The filter suffix.
|
1031 |
+
*
|
1032 |
+
* @return array
|
1033 |
+
*/
|
1034 |
+
public function get_icon_data_array( $icon_string, $filter_suffix = '' ) {
|
1035 |
+
$icon_data = array();
|
1036 |
+
if ( $icon_string ) {
|
1037 |
+
$icon_array = explode( ':', $icon_string );
|
1038 |
+
|
1039 |
+
if ( count( $icon_array ) < 2 ) {
|
1040 |
+
return $icon_data;
|
1041 |
+
}
|
1042 |
+
|
1043 |
+
$font_name = $icon_array[0];
|
1044 |
+
$icon_name = $icon_array[1];
|
1045 |
+
|
1046 |
+
$icons = $this->get_icons( $filter_suffix );
|
1047 |
+
if ( array_key_exists( $font_name, $icons ) ) {
|
1048 |
+
$icon_key = array_search( $icon_name, $icons[ $font_name ], true );
|
1049 |
+
$icon_code = '&#x' . str_replace( '\\', '', $icon_key );
|
1050 |
+
$icon_data = array(
|
1051 |
+
'font' => $font_name,
|
1052 |
+
'name' => $icon_name,
|
1053 |
+
'key' => $icon_key,
|
1054 |
+
'icon' => $icon_code,
|
1055 |
+
);
|
1056 |
+
}
|
1057 |
+
}
|
1058 |
+
|
1059 |
+
return $icon_data;
|
1060 |
+
}
|
1061 |
+
|
1062 |
+
/**
|
1063 |
+
* Retrieves the font awesome array
|
1064 |
+
* the first time retrieves the array by the Font Awesome CSS
|
1065 |
+
* [utility method]
|
1066 |
+
*
|
1067 |
+
* @return array
|
1068 |
+
*/
|
1069 |
+
private function get_font_awesome_array() {
|
1070 |
+
$font_awesome_list = get_option( 'yit_font_awesome_list', array() );
|
1071 |
+
$font_awesome_version = $this->font_awesome_version;
|
1072 |
+
|
1073 |
+
$font_awesome_array = array();
|
1074 |
+
|
1075 |
+
if ( ! empty( $font_awesome_list[ $font_awesome_version ] ) ) {
|
1076 |
+
$font_awesome_array = $font_awesome_list[ $font_awesome_version ];
|
1077 |
+
} else {
|
1078 |
+
// Retrieve the array by the CSS file.
|
1079 |
+
$font_awesome_uri = "https://maxcdn.bootstrapcdn.com/font-awesome/{$font_awesome_version}/css/font-awesome.min.css";
|
1080 |
+
$pattern = '/\.(fa-(?:\w+(?:-)?)+):before{content:"\\\\(....)"}/';
|
1081 |
+
|
1082 |
+
$response = wp_remote_get( $font_awesome_uri );
|
1083 |
+
|
1084 |
+
if ( ! is_wp_error( $response ) && 200 === absint( $response['response']['code'] ) && 'OK' === $response['response']['message'] ) {
|
1085 |
+
$body = $response['body'];
|
1086 |
+
|
1087 |
+
preg_match_all( $pattern, $body, $matches, PREG_SET_ORDER );
|
1088 |
+
foreach ( $matches as $match ) {
|
1089 |
+
$font_awesome_array[ $match[2] ] = $match[1];
|
1090 |
+
}
|
1091 |
+
ksort( $font_awesome_array );
|
1092 |
+
|
1093 |
+
$font_awesome_list[ $font_awesome_version ] = $font_awesome_array;
|
1094 |
+
update_option( 'yit_font_awesome_list', $font_awesome_list );
|
1095 |
+
}
|
1096 |
+
}
|
1097 |
+
|
1098 |
+
return $font_awesome_array;
|
1099 |
+
}
|
1100 |
+
|
1101 |
+
/**
|
1102 |
+
* Retrieves the Dashicons array
|
1103 |
+
* the first time retrieves the array by the Dashicons CSS
|
1104 |
+
* [utility method]
|
1105 |
+
*
|
1106 |
+
* @return array
|
1107 |
+
*/
|
1108 |
+
private function get_dashicons_array() {
|
1109 |
+
$dashicons_list = get_option( 'yit_dashicons_list', array() );
|
1110 |
+
|
1111 |
+
$dashicons_array = array();
|
1112 |
+
if ( ! empty( $dashicons_list ) ) {
|
1113 |
+
$dashicons_array = $dashicons_list;
|
1114 |
+
} else {
|
1115 |
+
// Retrieve the array by the CSS file.
|
1116 |
+
$uri = 'https://s.w.org/wp-includes/css/dashicons.min.css';
|
1117 |
+
$pattern = '/\.dashicons-((?:\w+(?:-)?)+):before{content:"\\\\(....)"/';
|
1118 |
+
$pattern = '/\.dashicons-((?:\w+(?:-)?)+):before.............../';
|
1119 |
+
|
1120 |
+
$response = wp_remote_get( $uri );
|
1121 |
+
|
1122 |
+
if ( ! is_wp_error( $response ) && 200 === absint( $response['response']['code'] ) && 'OK' === $response['response']['message'] ) {
|
1123 |
+
$body = $response['body'];
|
1124 |
+
|
1125 |
+
preg_match_all( $pattern, $body, $matches, PREG_SET_ORDER );
|
1126 |
+
|
1127 |
+
foreach ( $matches as $match ) {
|
1128 |
+
$code = str_replace( '.dashicons-' . $match[1] . ':before{content:"\\', '', $match[0] );
|
1129 |
+
if ( 4 === strlen( $code ) ) {
|
1130 |
+
$dashicons_array[ $code ] = $match[1];
|
1131 |
+
}
|
1132 |
+
}
|
1133 |
+
ksort( $dashicons_array );
|
1134 |
+
}
|
1135 |
+
}
|
1136 |
+
|
1137 |
+
return $dashicons_array;
|
1138 |
+
}
|
1139 |
+
|
1140 |
+
/**
|
1141 |
+
* Enqueue Scripts
|
1142 |
+
*/
|
1143 |
+
public function enqueue_scripts() {
|
1144 |
+
wp_register_style( 'font-awesome', YIT_CORE_PLUGIN_URL . '/assets/fonts/font-awesome/font-awesome.min.css', array(), $this->font_awesome_version );
|
1145 |
+
|
1146 |
+
wp_add_inline_style( 'font-awesome', $this->get_inline_style( 'font-awesome' ) );
|
1147 |
+
|
1148 |
+
wp_add_inline_style( 'dashicons', $this->get_inline_style( 'dashicons' ) );
|
1149 |
+
}
|
1150 |
+
|
1151 |
+
/**
|
1152 |
+
* Return the icon HTML from icon_string passed
|
1153 |
+
*
|
1154 |
+
* @param string|array $icon The icon.
|
1155 |
+
* @param array $args Array of arguments (such as html_tag, class, style, filter_suffix).
|
1156 |
+
*
|
1157 |
+
* @return string
|
1158 |
+
*/
|
1159 |
+
public function get_icon( $icon = '', $args = array() ) {
|
1160 |
+
$icon = is_array( $icon ) && isset( $icon['icon'] ) ? $icon['icon'] : $icon;
|
1161 |
+
$icon_html = '';
|
1162 |
+
if ( $icon ) {
|
1163 |
+
$default_args = array(
|
1164 |
+
'html_tag' => 'span',
|
1165 |
+
'class' => '',
|
1166 |
+
'style' => '',
|
1167 |
+
'filter_suffix' => '',
|
1168 |
+
);
|
1169 |
+
$args = wp_parse_args( $args, $default_args );
|
1170 |
+
|
1171 |
+
// back-ward compatibility: 'filter_icons' argument is deprecated; use 'filter_suffix' instead!
|
1172 |
+
if ( ! empty( $args['filter_icons'] ) && ! $args['filter_suffix'] ) {
|
1173 |
+
$args['filter_suffix'] = $args['filter_icons'];
|
1174 |
+
}
|
1175 |
+
|
1176 |
+
$html_tag = $args['html_tag'];
|
1177 |
+
$class = $args['class'];
|
1178 |
+
$style = $args['style'];
|
1179 |
+
$filter_suffix = $args['filter_suffix'];
|
1180 |
+
|
1181 |
+
$icon_data = $this->get_icon_data( $icon, $filter_suffix );
|
1182 |
+
|
1183 |
+
if ( $icon_data ) {
|
1184 |
+
$icon_html = "<$html_tag class=\"$class\" style=\"$style\" $icon_data></$html_tag>";
|
1185 |
+
}
|
1186 |
+
}
|
1187 |
+
|
1188 |
+
return $icon_html;
|
1189 |
+
}
|
1190 |
+
|
1191 |
+
/**
|
1192 |
+
* Get inline style.
|
1193 |
+
*
|
1194 |
+
* @param string $handle The handle.
|
1195 |
+
*
|
1196 |
+
* @return string
|
1197 |
+
*/
|
1198 |
+
public function get_inline_style( $handle ) {
|
1199 |
+
$css = '';
|
1200 |
+
switch ( $handle ) {
|
1201 |
+
case 'font-awesome':
|
1202 |
+
$css = '[data-font="FontAwesome"]:before {font-family: \'FontAwesome\' !important;content: attr(data-icon) !important;speak: none !important;font-weight: normal !important;font-variant: normal !important;text-transform: none !important;line-height: 1 !important;font-style: normal !important;-webkit-font-smoothing: antialiased !important;-moz-osx-font-smoothing: grayscale !important;}';
|
1203 |
+
break;
|
1204 |
+
case 'dashicons':
|
1205 |
+
$css = '[data-font="Dashicons"]:before {font-family: \'Dashicons\' !important;content: attr(data-icon) !important;speak: none !important;font-weight: normal !important;font-variant: normal !important;text-transform: none !important;line-height: 1 !important;font-style: normal !important;-webkit-font-smoothing: antialiased !important;-moz-osx-font-smoothing: grayscale !important;}';
|
1206 |
+
}
|
1207 |
+
|
1208 |
+
return $css;
|
1209 |
+
}
|
1210 |
+
|
1211 |
+
/**
|
1212 |
+
* Get inline style
|
1213 |
+
* Deprecated for typo
|
1214 |
+
*
|
1215 |
+
* @param string $handle The handle.
|
1216 |
+
*
|
1217 |
+
* @return string
|
1218 |
+
* @deprecated 3.5 | use YIT_Icons::get_inline_style()
|
1219 |
+
*/
|
1220 |
+
public function get_inline_scripts( $handle ) {
|
1221 |
+
return $this->get_inline_style( $handle );
|
1222 |
+
}
|
1223 |
+
|
1224 |
+
}
|
1225 |
+
}
|
1226 |
+
if ( ! function_exists( 'yit_icons' ) ) {
|
1227 |
+
/**
|
1228 |
+
* Return instance of YIT_Icons class.
|
1229 |
+
*
|
1230 |
+
* @return YIT_Icons
|
1231 |
+
*/
|
1232 |
+
function yit_icons() {
|
1233 |
+
return YIT_Icons::instance();
|
1234 |
+
}
|
1235 |
+
}
|
1236 |
+
|
1237 |
+
yit_icons();
|
plugin-fw/includes/class-yit-plugin-licence 2.php
ADDED
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Plugin License Class.
|
4 |
+
*
|
5 |
+
* @class YIT_Plugin_Licence
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
10 |
+
|
11 |
+
if ( ! class_exists( 'YIT_Plugin_Licence' ) ) {
|
12 |
+
/**
|
13 |
+
* YIT_Plugin_Licence class.
|
14 |
+
* Set page to manage products.
|
15 |
+
*
|
16 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
17 |
+
*/
|
18 |
+
class YIT_Plugin_Licence {
|
19 |
+
/**
|
20 |
+
* The single instance of the class.
|
21 |
+
*
|
22 |
+
* @var YIT_Plugin_Licence
|
23 |
+
*/
|
24 |
+
private static $instance;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Singleton implementation.
|
28 |
+
*
|
29 |
+
* @return YIT_Plugin_Licence
|
30 |
+
*/
|
31 |
+
public static function instance() {
|
32 |
+
return ! is_null( self::$instance ) ? self::$instance : self::$instance = new self();
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* YIT_Plugin_Licence constructor.
|
37 |
+
*/
|
38 |
+
private function __construct() {
|
39 |
+
// Silence is golden.
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Premium products registration
|
44 |
+
*
|
45 |
+
* @param string $init The product identifier.
|
46 |
+
* @param string $secret_key The secret key.
|
47 |
+
* @param string $product_id The product id.
|
48 |
+
*
|
49 |
+
* @return void
|
50 |
+
*/
|
51 |
+
public function register( $init, $secret_key, $product_id ) {
|
52 |
+
if ( ! function_exists( 'YITH_Plugin_Licence' ) ) {
|
53 |
+
// Try to load YITH_Plugin_Licence class.
|
54 |
+
yith_plugin_fw_load_update_and_licence_files();
|
55 |
+
}
|
56 |
+
|
57 |
+
if ( function_exists( 'YITH_Plugin_Licence' ) && is_callable( array( YITH_Plugin_Licence(), 'register' ) ) ) {
|
58 |
+
YITH_Plugin_Licence()->register( $init, $secret_key, $product_id );
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Get license activation URL
|
64 |
+
*
|
65 |
+
* @param string $plugin_slug The plugin slug.
|
66 |
+
*
|
67 |
+
* @return string|false
|
68 |
+
* @since 3.0.17
|
69 |
+
*/
|
70 |
+
public static function get_license_activation_url( $plugin_slug = '' ) {
|
71 |
+
return function_exists( 'YITH_Plugin_Licence' ) ? YITH_Plugin_Licence()->get_license_activation_url( $plugin_slug ) : false;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Retrieve the products
|
76 |
+
*
|
77 |
+
* @return array
|
78 |
+
*/
|
79 |
+
public function get_products() {
|
80 |
+
return function_exists( 'YITH_Plugin_Licence' ) ? YITH_Plugin_Licence()->get_products() : array();
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
84 |
+
|
85 |
+
if ( ! function_exists( 'YIT_Plugin_Licence' ) ) {
|
86 |
+
/**
|
87 |
+
* Single instance of YIT_Plugin_Licence
|
88 |
+
*
|
89 |
+
* @return YIT_Plugin_Licence
|
90 |
+
*/
|
91 |
+
function YIT_Plugin_Licence() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
|
92 |
+
return YIT_Plugin_Licence::instance();
|
93 |
+
}
|
94 |
+
}
|
plugin-fw/includes/class-yit-plugin-subpanel 2.php
ADDED
@@ -0,0 +1,153 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Plugin Sub-panel Class.
|
4 |
+
*
|
5 |
+
* @class YIT_Plugin_SubPanel
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
10 |
+
|
11 |
+
if ( ! class_exists( 'YIT_Plugin_SubPanel' ) ) {
|
12 |
+
/**
|
13 |
+
* YIT_Plugin_SubPanel class.
|
14 |
+
*
|
15 |
+
* @author Emanuela Castorina <emanuela.castorina@yithemes.it>
|
16 |
+
*/
|
17 |
+
class YIT_Plugin_SubPanel extends YIT_Plugin_Panel {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Version of the class.
|
21 |
+
*
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
public $version = '1.0.0';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* List of settings parameters.
|
28 |
+
*
|
29 |
+
* @var array
|
30 |
+
*/
|
31 |
+
public $settings = array();
|
32 |
+
|
33 |
+
/**
|
34 |
+
* YIT_Plugin_SubPanel constructor.
|
35 |
+
*
|
36 |
+
* @param array $args The panel arguments.
|
37 |
+
*/
|
38 |
+
public function __construct( $args = array() ) {
|
39 |
+
if ( ! empty( $args ) ) {
|
40 |
+
$this->settings = $args;
|
41 |
+
$this->settings['parent'] = $this->settings['page'];
|
42 |
+
$this->tabs_path_files = $this->get_tabs_path_files();
|
43 |
+
|
44 |
+
add_action( 'admin_init', array( $this, 'register_settings' ) );
|
45 |
+
add_action( 'admin_menu', array( &$this, 'add_setting_page' ) );
|
46 |
+
add_action( 'admin_bar_menu', array( &$this, 'add_admin_bar_menu' ), 100 );
|
47 |
+
add_action( 'admin_init', array( &$this, 'add_fields' ) );
|
48 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Register Settings
|
54 |
+
* Generate wp-admin settings pages by registering your settings and using a few callbacks to control the output
|
55 |
+
*
|
56 |
+
* @author Emanuela Castorina <emanuela.castorina@yithemes.it>
|
57 |
+
*/
|
58 |
+
public function register_settings() {
|
59 |
+
register_setting( 'yit_' . $this->settings['page'] . '_options', 'yit_' . $this->settings['page'] . '_options', array( &$this, 'options_validate' ) );
|
60 |
+
}
|
61 |
+
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Add Setting SubPage
|
65 |
+
* add Setting SubPage to WordPress administrator
|
66 |
+
*
|
67 |
+
* @author Emanuela Castorina <emanuela.castorina@yithemes.it>
|
68 |
+
*/
|
69 |
+
public function add_setting_page() {
|
70 |
+
global $admin_page_hooks;
|
71 |
+
$logo = yith_plugin_fw_get_default_logo();
|
72 |
+
|
73 |
+
$admin_logo = function_exists( 'yit_get_option' ) ? yit_get_option( 'admin-logo-menu' ) : '';
|
74 |
+
|
75 |
+
if ( ! empty( $admin_logo ) ) {
|
76 |
+
$logo = $admin_logo;
|
77 |
+
}
|
78 |
+
|
79 |
+
if ( ! isset( $admin_page_hooks['yith_plugin_panel'] ) ) {
|
80 |
+
$position = apply_filters( 'yit_plugins_menu_item_position', '62.32' );
|
81 |
+
add_menu_page( 'yith_plugin_panel', 'YITH', 'nosuchcapability', 'yith_plugin_panel', null, $logo, $position );
|
82 |
+
// Prevent issues for backward compatibility.
|
83 |
+
$admin_page_hooks['yith_plugin_panel'] = 'yith-plugins'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
|
84 |
+
}
|
85 |
+
|
86 |
+
add_submenu_page( 'yith_plugin_panel', $this->settings['label'], $this->settings['label'], 'manage_options', $this->settings['page'], array( $this, 'yit_panel' ) );
|
87 |
+
remove_submenu_page( 'yith_plugin_panel', 'yith_plugin_panel' );
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Show a tabbed panel to setting page
|
92 |
+
* a callback function called by add_setting_page => add_submenu_page
|
93 |
+
*
|
94 |
+
* @author Emanuela Castorina <emanuela.castorina@yithemes.it>
|
95 |
+
*/
|
96 |
+
public function yit_panel() {
|
97 |
+
$tabs = '';
|
98 |
+
$current_tab = $this->get_current_tab();
|
99 |
+
$yit_options = $this->get_main_array_options();
|
100 |
+
|
101 |
+
foreach ( $this->settings['admin-tabs'] as $tab => $tab_value ) {
|
102 |
+
$active_class = $current_tab === $tab ? ' nav-tab-active' : '';
|
103 |
+
$url = '?page=' . $this->settings['page'] . '&tab=' . $tab;
|
104 |
+
|
105 |
+
$tabs .= '<a class="nav-tab' . esc_attr( $active_class ) . '" href="' . esc_url( $url ) . '">' . wp_kses_post( $tab_value ) . '</a>';
|
106 |
+
}
|
107 |
+
?>
|
108 |
+
<div id="icon-themes" class="icon32"><br/></div>
|
109 |
+
<h2 class="nav-tab-wrapper">
|
110 |
+
<?php echo $tabs; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
|
111 |
+
</h2>
|
112 |
+
<?php
|
113 |
+
$custom_tab_options = $this->get_custom_tab_options( $yit_options, $current_tab );
|
114 |
+
if ( $custom_tab_options ) {
|
115 |
+
$this->print_custom_tab( $custom_tab_options );
|
116 |
+
|
117 |
+
return;
|
118 |
+
}
|
119 |
+
|
120 |
+
$form_method = apply_filters( 'yit_admin_panel_form_method', 'POST', $current_tab );
|
121 |
+
$panel_content_class = apply_filters( 'yit_admin_panel_content_class', 'yit-admin-panel-content-wrap', $current_tab );
|
122 |
+
?>
|
123 |
+
<div id="wrap" class="yith-plugin-fw plugin-option yit-admin-panel-container">
|
124 |
+
<?php $this->message(); ?>
|
125 |
+
<div class="<?php echo esc_attr( $panel_content_class ); ?>">
|
126 |
+
<h2><?php echo wp_kses_post( $this->get_tab_title() ); ?></h2>
|
127 |
+
<?php if ( $this->is_show_form() ) : ?>
|
128 |
+
<form id="yith-plugin-fw-panel" method="<?php echo esc_attr( $form_method ); ?>" action="options.php">
|
129 |
+
<?php do_settings_sections( 'yit' ); ?>
|
130 |
+
<p> </p>
|
131 |
+
<?php settings_fields( 'yit_' . $this->settings['parent'] . '_options' ); ?>
|
132 |
+
<input type="hidden" name="<?php echo esc_attr( $this->get_name_field( 'current_tab' ) ); ?>" value="<?php echo esc_attr( $current_tab ); ?>"/>
|
133 |
+
<input type="submit" class="button-primary" value="<?php esc_attr_e( 'Save Changes', 'yith-plugin-fw' ); ?>" style="float:left;margin-right:10px;"/>
|
134 |
+
<input type="hidden" name="page" value="<?php echo esc_attr( $this->settings['page'] ); ?>"/>
|
135 |
+
<input type="hidden" name="tab" value="<?php echo esc_attr( $this->get_current_tab() ); ?>"/>
|
136 |
+
<input type="hidden" name="sub_tab" value="<?php echo esc_attr( $this->get_current_sub_tab() ); ?>"/>
|
137 |
+
</form>
|
138 |
+
<form method="post">
|
139 |
+
<?php
|
140 |
+
$reset_warning = __( 'If you continue with this action, you will reset all options in this page.', 'yith-plugin-fw' ) . '\n' . __( 'Are you sure?', 'yith-plugin-fw' );
|
141 |
+
?>
|
142 |
+
<input type="hidden" name="yit-action" value="reset"/>
|
143 |
+
<input type="submit" name="yit-reset" class="button-secondary" value="<?php esc_attr_e( 'Reset to default', 'yith-plugin-fw' ); ?>"
|
144 |
+
onclick="return confirm('<?php echo esc_attr( $reset_warning ); ?>');"/>
|
145 |
+
</form>
|
146 |
+
<p> </p>
|
147 |
+
<?php endif ?>
|
148 |
+
</div>
|
149 |
+
</div>
|
150 |
+
<?php
|
151 |
+
}
|
152 |
+
}
|
153 |
+
}
|
plugin-fw/includes/class-yit-pointers 2.php
ADDED
@@ -0,0 +1,380 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Pointers Class.
|
4 |
+
*
|
5 |
+
* @class YIT_Pointers
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
10 |
+
|
11 |
+
if ( ! class_exists( 'YIT_Pointers' ) ) {
|
12 |
+
/**
|
13 |
+
* YIT_Pointers class.
|
14 |
+
* Initializes the pointers.
|
15 |
+
*/
|
16 |
+
class YIT_Pointers {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* The single instance of the class.
|
20 |
+
*
|
21 |
+
* @var YIT_Pointers
|
22 |
+
*/
|
23 |
+
private static $instance;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* The screen IDs.
|
27 |
+
*
|
28 |
+
* @var array
|
29 |
+
*/
|
30 |
+
public $screen_ids = array();
|
31 |
+
|
32 |
+
/**
|
33 |
+
* The pointers.
|
34 |
+
*
|
35 |
+
* @var array
|
36 |
+
*/
|
37 |
+
public $pointers = array();
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Special Screen Ids that require a particular action
|
41 |
+
*
|
42 |
+
* @var array|mixed|void
|
43 |
+
*/
|
44 |
+
public $special_screen = array();
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Default pointers.
|
48 |
+
*
|
49 |
+
* @var array|mixed
|
50 |
+
*/
|
51 |
+
protected $default_pointer = array();
|
52 |
+
|
53 |
+
/**
|
54 |
+
* The default position
|
55 |
+
*
|
56 |
+
* @var string[]
|
57 |
+
*/
|
58 |
+
protected $default_position = array(
|
59 |
+
'edge' => 'left',
|
60 |
+
'align' => 'center',
|
61 |
+
);
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Singleton implementation.
|
65 |
+
*
|
66 |
+
* @return YIT_Pointers
|
67 |
+
*/
|
68 |
+
public static function instance() {
|
69 |
+
return ! is_null( self::$instance ) ? self::$instance : self::$instance = new self();
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Construct
|
74 |
+
*
|
75 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
76 |
+
* @since 1.0
|
77 |
+
*/
|
78 |
+
private function __construct() {
|
79 |
+
|
80 |
+
$title = __( 'Plugins Activated', 'yith-plugin-fw' );
|
81 |
+
$message = __( 'From now on, you can find all plugin options in YITH menu. Plugin customization settings will be available as a new entry in YITH menu.', 'yith-plugin-fw' );
|
82 |
+
$discover_message = sprintf(
|
83 |
+
// translators: 1. YITH site link; 2. WordPress site link.
|
84 |
+
__( 'Discover all our plugins available on: %1$s and %2$s', 'yith-plugin-fw' ),
|
85 |
+
'<a href="https://yithemes.com/product-category/plugins/" target="_blank">yithemes.com</a>',
|
86 |
+
'<a href="https://profiles.wordpress.org/yithemes/" target="_blank">Wordpress.org</a>'
|
87 |
+
);
|
88 |
+
|
89 |
+
$this->default_pointer['plugins'] = array(
|
90 |
+
'screen_id' => 'plugins',
|
91 |
+
'options' => array(
|
92 |
+
'content' => "<h3>{$title}</h3><p>{$message}</p><p>{$discover_message}</p>",
|
93 |
+
),
|
94 |
+
);
|
95 |
+
|
96 |
+
$title = __( 'Plugins Upgraded', 'yith-plugin-fw' );
|
97 |
+
$message = __( 'From now on, you can find the option panel of YITH plugins in YITH menu. Every time one of our plugins is added, a new entry will be added to this menu. For example, after the update, plugin options (such as for YITH WooCommerce Wishlist, YITH WooCommerce Ajax Search, etc.) will be moved from previous location to YITH menu.', 'yith-plugin-fw' );
|
98 |
+
$discover_message = sprintf(
|
99 |
+
// translators: 1. YITH site link; 2. WordPress site link.
|
100 |
+
__( 'Discover all our plugins available on: %1$s and %2$s', 'yith-plugin-fw' ),
|
101 |
+
'<a href="https://yithemes.com/product-category/plugins/" target="_blank">yithemes.com</a>',
|
102 |
+
'<a href="https://profiles.wordpress.org/yithemes/" target="_blank">Wordpress.org</a>'
|
103 |
+
);
|
104 |
+
|
105 |
+
$this->default_pointer['update'] = array(
|
106 |
+
'screen_id' => 'update',
|
107 |
+
'options' => array(
|
108 |
+
'content' => "<h3>{$title}</h3><p>{$message}</p><p>{$discover_message}</p>",
|
109 |
+
),
|
110 |
+
);
|
111 |
+
|
112 |
+
$this->default_pointer = $this->parse_args( $this->default_pointer );
|
113 |
+
|
114 |
+
// DEPRECATED 'yit-pointer-special-screen' filter since 3.5 | use yith_plugin_fw_pointers_special_screens instead.
|
115 |
+
$this->special_screen = apply_filters( 'yit-pointer-special-screen', array( 'plugins', 'update' ) ); //phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
|
116 |
+
$this->special_screen = apply_filters( 'yith_plugin_fw_pointers_special_screens', array( 'plugins', 'update' ) );
|
117 |
+
|
118 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'pointer_load' ) );
|
119 |
+
add_action( 'admin_init', array( $this, 'add_pointers' ), 100 );
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Parse args for the default pointer.
|
124 |
+
*
|
125 |
+
* @param array $args The arguments to be parse.
|
126 |
+
*
|
127 |
+
* @return array
|
128 |
+
*/
|
129 |
+
public function parse_args( $args ) {
|
130 |
+
$default = array(
|
131 |
+
'pointer_id' => 'yith_default_pointer',
|
132 |
+
'target' => '#toplevel_page_yit_plugin_panel',
|
133 |
+
'init' => null,
|
134 |
+
);
|
135 |
+
|
136 |
+
foreach ( $args as $id => $pointer ) {
|
137 |
+
$args[ $id ] = wp_parse_args( $pointer, $default );
|
138 |
+
$args[ $id ]['options']['position'] = $this->default_position;
|
139 |
+
}
|
140 |
+
|
141 |
+
return $args;
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Add pointers
|
146 |
+
*/
|
147 |
+
public function add_pointers() {
|
148 |
+
if ( ! empty( $this->screen_ids ) ) {
|
149 |
+
foreach ( $this->screen_ids as $screen_id ) {
|
150 |
+
add_filter( "yit_pointers-{$screen_id}", array( $this, 'pointers' ) );
|
151 |
+
}
|
152 |
+
}
|
153 |
+
}
|
154 |
+
|
155 |
+
/**
|
156 |
+
* Register pointers.
|
157 |
+
*
|
158 |
+
* @param array $pointers The pointers.
|
159 |
+
*/
|
160 |
+
public function register( $pointers ) {
|
161 |
+
foreach ( $pointers as $id => $pointer ) {
|
162 |
+
$pointer_id = isset( $pointer['pointer_id'] ) ? $pointer['pointer_id'] : false;
|
163 |
+
$target = isset( $pointer['target'] ) ? $pointer['target'] : false;
|
164 |
+
$content = isset( $pointer['content'] ) ? $pointer['content'] : false;
|
165 |
+
$position = isset( $pointer['position'] ) ? $pointer['position'] : false;
|
166 |
+
$screen_id = isset( $pointer['screen_id'] ) ? $pointer['screen_id'] : false;
|
167 |
+
$init = isset( $pointer['init'] ) ? $pointer['init'] : false;
|
168 |
+
|
169 |
+
if ( ! $pointer_id || ! $target || ! $content || ! $position || ! $screen_id ) {
|
170 |
+
continue;
|
171 |
+
}
|
172 |
+
|
173 |
+
if ( ! in_array( $screen_id, $this->screen_ids, true ) ) {
|
174 |
+
$this->screen_ids[] = $screen_id;
|
175 |
+
}
|
176 |
+
|
177 |
+
$this->pointers[ $screen_id ][ $pointer_id ] = array(
|
178 |
+
'target' => $target,
|
179 |
+
'options' => array(
|
180 |
+
'content' => $content,
|
181 |
+
'position' => $position,
|
182 |
+
),
|
183 |
+
'init' => $init,
|
184 |
+
);
|
185 |
+
}
|
186 |
+
}
|
187 |
+
|
188 |
+
/**
|
189 |
+
* Retrieve the registered pointers array where the keys will be the plugin init(s).
|
190 |
+
*
|
191 |
+
* @param string $screen_id The screen ID.
|
192 |
+
*
|
193 |
+
* @return array
|
194 |
+
*/
|
195 |
+
public function get_plugins_init( $screen_id ) {
|
196 |
+
|
197 |
+
$registered = array();
|
198 |
+
|
199 |
+
foreach ( $this->pointers[ $screen_id ] as $pointer_id => $pointer ) {
|
200 |
+
$registered[ $pointer['init'] ] = $pointer_id;
|
201 |
+
}
|
202 |
+
|
203 |
+
return $registered;
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Load the pointer.
|
208 |
+
*
|
209 |
+
* @param bool $deprecated Deprecated param.
|
210 |
+
*/
|
211 |
+
public function pointer_load( $deprecated = false ) {
|
212 |
+
// phpcs:disable WordPress.Security.NonceVerification.Recommended
|
213 |
+
// phpcs:disable WordPress.Security.NonceVerification.Missing
|
214 |
+
|
215 |
+
// Retrieve the pointers for the current screen.
|
216 |
+
$screen = get_current_screen();
|
217 |
+
$pointers = apply_filters( "yit_pointers-{$screen->id}", array() ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
|
218 |
+
|
219 |
+
if ( ! $pointers || ! is_array( $pointers ) ) {
|
220 |
+
return;
|
221 |
+
}
|
222 |
+
|
223 |
+
// Get dismissed pointers.
|
224 |
+
$dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
|
225 |
+
$valid_pointers = array();
|
226 |
+
|
227 |
+
// Show pointers only on plugin activate action.
|
228 |
+
if ( in_array( $screen->id, $this->special_screen, true ) ) {
|
229 |
+
$show = false;
|
230 |
+
$registered = $this->get_plugins_init( $screen->id );
|
231 |
+
$recently_activate = get_option( 'yit_recently_activated', array() );
|
232 |
+
|
233 |
+
// For "plugins" screen.
|
234 |
+
$is_single_activate = isset( $_GET['activate'] ) && 'true' === $_GET['activate'];
|
235 |
+
$is_multi_activate = isset( $_GET['activate-multi'] ) && 'true' === $_GET['activate-multi'];
|
236 |
+
|
237 |
+
/**
|
238 |
+
* For "update" screen
|
239 |
+
* Single plugin update use GET method
|
240 |
+
* Multi update plugins with bulk action send two post args called "action" and "action2"
|
241 |
+
* action refer to first bulk action button (at the top of plugins table)
|
242 |
+
* action2 refer to last bulk action button (at the bottom of plugins table)
|
243 |
+
*/
|
244 |
+
$is_single_upgrade = isset( $_GET['action'] ) && 'upgrade-plugin' === $_GET['action'];
|
245 |
+
$is_multi_upgrade = ( isset( $_POST['action'] ) && 'update-selected' === $_POST['action'] ) || ( isset( $_POST['action2'] ) && 'update-selected' === $_POST['action2'] );
|
246 |
+
|
247 |
+
if ( $is_single_activate || $is_single_upgrade ) {
|
248 |
+
foreach ( $registered as $init => $p_id ) {
|
249 |
+
if ( in_array( $init, $recently_activate, true ) ) {
|
250 |
+
$point_id = $p_id;
|
251 |
+
$pointer = $pointers[ $point_id ];
|
252 |
+
|
253 |
+
if ( ! ( in_array( $point_id, $dismissed, true ) || empty( $pointer ) || empty( $point_id ) || empty( $pointer['target'] ) || empty( $pointer['options'] ) ) ) {
|
254 |
+
$pointer['pointer_id'] = $point_id;
|
255 |
+
$valid_pointers['pointers'][] = $pointer;
|
256 |
+
$show = true;
|
257 |
+
}
|
258 |
+
break;
|
259 |
+
}
|
260 |
+
}
|
261 |
+
} elseif ( $is_multi_activate || $is_multi_upgrade ) {
|
262 |
+
$point_id = array();
|
263 |
+
$screen_id = $screen->id;
|
264 |
+
|
265 |
+
if ( $is_multi_upgrade && isset( $_POST['checked'] ) && ( count( $_POST['checked'] ) > 0 ) ) {
|
266 |
+
$recently_activate = sanitize_file_name( wp_unslash( $_POST['checked'] ) );
|
267 |
+
$screen_id = 'update';
|
268 |
+
$pointers = apply_filters( "yit_pointers-{$screen_id}", array() ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
|
269 |
+
}
|
270 |
+
|
271 |
+
foreach ( $registered as $init => $p_id ) {
|
272 |
+
if ( in_array( $init, $recently_activate, true ) ) {
|
273 |
+
$point_id[] = $p_id;
|
274 |
+
}
|
275 |
+
}
|
276 |
+
|
277 |
+
/**
|
278 |
+
* Bulk Action: Activate Plugins
|
279 |
+
* count( $point_id ) is the number of YITH plugins that have registered specific pointers
|
280 |
+
* case 0 -> No pointers -> Exit
|
281 |
+
* case 1 -> Only one pointers to show -> Use the specific plugin pointer
|
282 |
+
* default -> Two or more plugins need to show a pointer -> use a generic pointers
|
283 |
+
*/
|
284 |
+
switch ( count( $point_id ) ) {
|
285 |
+
case 0:
|
286 |
+
$show = false;
|
287 |
+
break;
|
288 |
+
|
289 |
+
case 1:
|
290 |
+
$point_id = array_pop( $point_id );
|
291 |
+
$pointer = $pointers[ $point_id ];
|
292 |
+
if ( ! ( in_array( $point_id, $dismissed, true ) || empty( $pointer ) || empty( $point_id ) || empty( $pointer['target'] ) || empty( $pointer['options'] ) ) ) {
|
293 |
+
$pointer['pointer_id'] = $point_id;
|
294 |
+
$valid_pointers['pointers'][] = $pointer;
|
295 |
+
$show = true;
|
296 |
+
}
|
297 |
+
break;
|
298 |
+
|
299 |
+
default:
|
300 |
+
$valid_pointers['pointers'][] = $this->default_pointer[ $screen_id ];
|
301 |
+
$show = true;
|
302 |
+
break;
|
303 |
+
}
|
304 |
+
}
|
305 |
+
|
306 |
+
update_option( 'yit_recently_activated', array() );
|
307 |
+
|
308 |
+
if ( ! $show ) {
|
309 |
+
return;
|
310 |
+
}
|
311 |
+
} else {
|
312 |
+
// Check pointers and remove dismissed ones.
|
313 |
+
foreach ( $pointers as $pointer_id => $pointer ) {
|
314 |
+
|
315 |
+
if ( in_array( $pointer_id, $dismissed, true ) || empty( $pointer ) || empty( $pointer_id ) || empty( $pointer['target'] ) || empty( $pointer['options'] ) ) {
|
316 |
+
continue;
|
317 |
+
}
|
318 |
+
|
319 |
+
$pointer['pointer_id'] = $pointer_id;
|
320 |
+
|
321 |
+
$valid_pointers['pointers'][] = $pointer;
|
322 |
+
}
|
323 |
+
}
|
324 |
+
|
325 |
+
if ( empty( $valid_pointers ) ) {
|
326 |
+
return;
|
327 |
+
}
|
328 |
+
|
329 |
+
$script_file = function_exists( 'yit_load_js_file' ) ? yit_load_js_file( 'yit-wp-pointer.js' ) : 'yit-wp-pointer.min.js';
|
330 |
+
|
331 |
+
// Enqueue pointer scripts and styles.
|
332 |
+
wp_enqueue_style( 'wp-pointer' );
|
333 |
+
wp_enqueue_script( 'wp-pointer' );
|
334 |
+
|
335 |
+
wp_enqueue_script( 'yit-wp-pointer', YIT_CORE_PLUGIN_URL . '/assets/js/' . $script_file, array( 'wp-pointer' ), yith_plugin_fw_get_version(), true );
|
336 |
+
wp_localize_script( 'yit-wp-pointer', 'custom_pointer', $valid_pointers );
|
337 |
+
|
338 |
+
// phpcs:enable
|
339 |
+
}
|
340 |
+
|
341 |
+
/**
|
342 |
+
* Filter pointers.
|
343 |
+
*
|
344 |
+
* @param array $pointers The pointers.
|
345 |
+
*
|
346 |
+
* @return array
|
347 |
+
*/
|
348 |
+
public function pointers( $pointers ) {
|
349 |
+
$screen_id = str_replace( 'yit_pointers-', '', current_filter() );
|
350 |
+
$pointers_to_add = $this->get_pointers( $screen_id );
|
351 |
+
|
352 |
+
return ! empty( $pointers_to_add ) ? array_merge( $pointers, $pointers_to_add ) : $pointers;
|
353 |
+
}
|
354 |
+
|
355 |
+
/**
|
356 |
+
* Retrieve pointers for the specified screen ID.
|
357 |
+
*
|
358 |
+
* @param string $screen_id The Screen ID.
|
359 |
+
*
|
360 |
+
* @return array|mixed
|
361 |
+
*/
|
362 |
+
public function get_pointers( $screen_id ) {
|
363 |
+
return isset( $this->pointers[ $screen_id ] ) ? $this->pointers[ $screen_id ] : array();
|
364 |
+
}
|
365 |
+
}
|
366 |
+
}
|
367 |
+
|
368 |
+
if ( ! function_exists( 'YIT_Pointers' ) ) {
|
369 |
+
|
370 |
+
/**
|
371 |
+
* Single instance of YIT_Pointers
|
372 |
+
*
|
373 |
+
* @return YIT_Pointers
|
374 |
+
*/
|
375 |
+
function YIT_Pointers() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
|
376 |
+
return YIT_Pointers::instance();
|
377 |
+
}
|
378 |
+
}
|
379 |
+
|
380 |
+
YIT_Pointers();
|
plugin-fw/includes/class-yit-theme-licence 2.php
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Theme License Class.
|
4 |
+
*
|
5 |
+
* @class YIT_Theme_Licence
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
10 |
+
|
11 |
+
if ( ! class_exists( 'YIT_Theme_Licence' ) ) {
|
12 |
+
/**
|
13 |
+
* YIT_Theme_Licence class.
|
14 |
+
*
|
15 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
16 |
+
*/
|
17 |
+
class YIT_Theme_Licence {
|
18 |
+
/**
|
19 |
+
* The single instance of the class.
|
20 |
+
*
|
21 |
+
* @var YIT_Theme_Licence
|
22 |
+
*/
|
23 |
+
private static $instance;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Singleton implementation.
|
27 |
+
*
|
28 |
+
* @return YIT_Theme_Licence
|
29 |
+
*/
|
30 |
+
public static function instance() {
|
31 |
+
return ! is_null( self::$instance ) ? self::$instance : self::$instance = new self();
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* YIT_Theme_Licence constructor.
|
36 |
+
*/
|
37 |
+
private function __construct() {
|
38 |
+
// Silence is golden.
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Premium products registration.
|
43 |
+
*
|
44 |
+
* @param string $init The product init identifier.
|
45 |
+
* @param string $secret_key The secret key.
|
46 |
+
* @param string $product_id The product ID.
|
47 |
+
*
|
48 |
+
* @return void
|
49 |
+
* @since 1.0
|
50 |
+
* @author Andrea Grillo <andrea.grillo@yithemes.com>
|
51 |
+
*/
|
52 |
+
public function register( $init, $secret_key, $product_id ) {
|
53 |
+
if ( ! function_exists( 'YITH_Theme_Licence' ) ) {
|
54 |
+
// Try to load YITH_Theme_Licence class.
|
55 |
+
yith_plugin_fw_load_update_and_licence_files();
|
56 |
+
}
|
57 |
+
|
58 |
+
if ( function_exists( 'YITH_Theme_Licence' ) && is_callable( array( YITH_Theme_Licence(), 'register' ) ) ) {
|
59 |
+
YITH_Theme_Licence()->register( $init, $secret_key, $product_id );
|
60 |
+
}
|
61 |
+
}
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
if ( ! function_exists( 'YIT_Theme_Licence' ) ) {
|
66 |
+
/**
|
67 |
+
* Single instance of YIT_Theme_Licence
|
68 |
+
*
|
69 |
+
* @return YIT_Theme_Licence
|
70 |
+
*/
|
71 |
+
function YIT_Theme_Licence() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
|
72 |
+
return YIT_Theme_Licence::instance();
|
73 |
+
}
|
74 |
+
}
|
plugin-fw/includes/class-yit-upgrade 2.php
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Upgrade Class
|
4 |
+
* handle notifications and plugin updates.
|
5 |
+
*
|
6 |
+
* @class YIT_Upgrade
|
7 |
+
* @package YITH\PluginFramework\Classes
|
8 |
+
*/
|
9 |
+
|
10 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
11 |
+
|
12 |
+
if ( ! class_exists( 'YIT_Upgrade' ) ) {
|
13 |
+
/**
|
14 |
+
* YIT_Upgrade class.
|
15 |
+
*/
|
16 |
+
class YIT_Upgrade {
|
17 |
+
/**
|
18 |
+
* The single instance of the class.
|
19 |
+
*
|
20 |
+
* @var YIT_Upgrade
|
21 |
+
*/
|
22 |
+
private static $instance;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Singleton implementation.
|
26 |
+
*
|
27 |
+
* @return YIT_Upgrade
|
28 |
+
*/
|
29 |
+
public static function instance() {
|
30 |
+
return ! is_null( self::$instance ) ? self::$instance : self::$instance = new self();
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* YIT_Upgrade constructor.
|
35 |
+
*/
|
36 |
+
private function __construct() {
|
37 |
+
// Silence is golden.
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Premium products registration.
|
42 |
+
*
|
43 |
+
* @param string $plugin_slug The plugin slug.
|
44 |
+
* @param string $plugin_init The plugin init file.
|
45 |
+
*/
|
46 |
+
public function register( $plugin_slug, $plugin_init ) {
|
47 |
+
if ( ! function_exists( 'YITH_Plugin_Upgrade' ) ) {
|
48 |
+
// Try to load YITH_Plugin_Upgrade class.
|
49 |
+
yith_plugin_fw_load_update_and_licence_files();
|
50 |
+
}
|
51 |
+
|
52 |
+
if ( function_exists( 'YITH_Plugin_Upgrade' ) && is_callable( array( YITH_Plugin_Upgrade(), 'register' ) ) ) {
|
53 |
+
YITH_Plugin_Upgrade()->register( $plugin_slug, $plugin_init );
|
54 |
+
}
|
55 |
+
}
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
if ( ! function_exists( 'YIT_Upgrade' ) ) {
|
60 |
+
/**
|
61 |
+
* Single instance of YIT_Upgrade
|
62 |
+
*
|
63 |
+
* @return YIT_Upgrade
|
64 |
+
*/
|
65 |
+
function YIT_Upgrade() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
|
66 |
+
return YIT_Upgrade::instance();
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
YIT_Upgrade();
|
plugin-fw/includes/class-yit-video 2.php
ADDED
@@ -0,0 +1,192 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Video Class
|
4 |
+
* manage videos from youtube, vimeo and other services.
|
5 |
+
*
|
6 |
+
* @class YIT_Video
|
7 |
+
* @package YITH\PluginFramework\Classes
|
8 |
+
*/
|
9 |
+
|
10 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
11 |
+
|
12 |
+
if ( ! class_exists( 'YIT_Video' ) ) {
|
13 |
+
/**
|
14 |
+
* YIT_Video class.
|
15 |
+
*
|
16 |
+
* @deprecated 3.5
|
17 |
+
*/
|
18 |
+
class YIT_Video {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Generate the HTML for a youtube video
|
22 |
+
*
|
23 |
+
* @param array $args Array of arguments to configure the video to generate.
|
24 |
+
*
|
25 |
+
* @return string
|
26 |
+
*/
|
27 |
+
public static function youtube( $args = array() ) {
|
28 |
+
$defaults = array(
|
29 |
+
'id' => '',
|
30 |
+
'url' => '',
|
31 |
+
'width' => 425,
|
32 |
+
'height' => 356,
|
33 |
+
'echo' => false,
|
34 |
+
);
|
35 |
+
$args = wp_parse_args( $args, $defaults );
|
36 |
+
|
37 |
+
$id = $args['id'];
|
38 |
+
$url = $args['url'];
|
39 |
+
$width = $args['width'];
|
40 |
+
$height = $args['height'];
|
41 |
+
$echo = $args['echo'];
|
42 |
+
$html = '';
|
43 |
+
|
44 |
+
// Retrieve the video ID if we have only the URL.
|
45 |
+
if ( ! $id && ! ! $url ) {
|
46 |
+
$id = self::video_id_by_url( $url );
|
47 |
+
}
|
48 |
+
|
49 |
+
if ( $id ) {
|
50 |
+
$id = preg_replace( '/[&|&]feature=([\w\-]*)/', '', $id );
|
51 |
+
$id = preg_replace( '/(youtube|vimeo):/', '', $id );
|
52 |
+
$url = "https://www.youtube.com/embed/{$id}?wmode=transparent";
|
53 |
+
|
54 |
+
$html = '<div class="post_video youtube">' .
|
55 |
+
'<iframe wmode="transparent" width="' . esc_attr( $width ) . '" height="' . esc_attr( $height ) . '" src="' . esc_url( $url ) . '" frameborder="0" allowfullscreen></iframe>' .
|
56 |
+
'</div>';
|
57 |
+
$html = apply_filters( 'yit_video_youtube', $html );
|
58 |
+
}
|
59 |
+
|
60 |
+
if ( $echo ) {
|
61 |
+
echo wp_kses_post( $html );
|
62 |
+
}
|
63 |
+
|
64 |
+
return $html;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Generate the HTML for a vimeo video
|
69 |
+
*
|
70 |
+
* @param array $args Array of arguments to configure the video to generate.
|
71 |
+
*
|
72 |
+
* @return string
|
73 |
+
*/
|
74 |
+
public static function vimeo( $args = array() ) {
|
75 |
+
$defaults = array(
|
76 |
+
'id' => '',
|
77 |
+
'url' => '',
|
78 |
+
'width' => 425,
|
79 |
+
'height' => 356,
|
80 |
+
'echo' => false,
|
81 |
+
);
|
82 |
+
$args = wp_parse_args( $args, $defaults );
|
83 |
+
|
84 |
+
$id = $args['id'];
|
85 |
+
$url = $args['url'];
|
86 |
+
$width = $args['width'];
|
87 |
+
$height = $args['height'];
|
88 |
+
$echo = $args['echo'];
|
89 |
+
$html = '';
|
90 |
+
|
91 |
+
// Retrieve the video ID if we have only the URL.
|
92 |
+
if ( ! $id && ! ! $url ) {
|
93 |
+
$id = self::video_id_by_url( $url );
|
94 |
+
}
|
95 |
+
|
96 |
+
if ( $id ) {
|
97 |
+
$id = preg_replace( '/[&|&]feature=([\w\-]*)/', '', $id );
|
98 |
+
$id = preg_replace( '/(youtube|vimeo):/', '', $id );
|
99 |
+
$protocol = is_ssl() ? 'https' : 'http';
|
100 |
+
$url = "{$protocol}://player.vimeo.com/video/{$id}?title=0&byline=0&portrait=0";
|
101 |
+
|
102 |
+
$html = '<div class="post_video youtube">' .
|
103 |
+
'<iframe wmode="transparent" width="' . esc_attr( $width ) . '" height="' . esc_attr( $height ) . '" src="' . esc_url( $url ) . '" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>' .
|
104 |
+
'</div>';
|
105 |
+
$html = apply_filters( 'yit_video_vimeo', $html );
|
106 |
+
}
|
107 |
+
|
108 |
+
if ( $echo ) {
|
109 |
+
echo wp_kses_post( $html );
|
110 |
+
}
|
111 |
+
|
112 |
+
return $html;
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Retrieve video ID from URL
|
117 |
+
*
|
118 |
+
* @param string $url URL of the video.
|
119 |
+
*
|
120 |
+
* @return bool|string
|
121 |
+
*/
|
122 |
+
public static function video_id_by_url( $url ) {
|
123 |
+
$parsed = wp_parse_url( esc_url( $url ) );
|
124 |
+
$host = isset( $parsed['host'] ) ? $parsed['host'] : false;
|
125 |
+
|
126 |
+
switch ( $host ) {
|
127 |
+
case 'youtube.com':
|
128 |
+
case 'www.youtube.com':
|
129 |
+
case 'youtu.be':
|
130 |
+
case 'www.youtu.be':
|
131 |
+
$id = self::youtube_id_by_url( $url );
|
132 |
+
$video_id = "youtube:$id";
|
133 |
+
break;
|
134 |
+
|
135 |
+
case 'www.vimeo.com':
|
136 |
+
case 'vimeo.com':
|
137 |
+
preg_match( '/http(s)?:\/\/(\w+.)?vimeo\.com\/(.*\/)?([0-9]+)/', $url, $matches );
|
138 |
+
|
139 |
+
$id = trim( $matches[4], '/' );
|
140 |
+
$video_id = "vimeo:$id";
|
141 |
+
break;
|
142 |
+
|
143 |
+
default:
|
144 |
+
$video_id = false;
|
145 |
+
|
146 |
+
}
|
147 |
+
|
148 |
+
return $video_id;
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* Retrieve video ID from URL
|
153 |
+
*
|
154 |
+
* @param string $url URL of the video.
|
155 |
+
*
|
156 |
+
* @return bool|string
|
157 |
+
*/
|
158 |
+
protected static function youtube_id_by_url( $url ) {
|
159 |
+
if ( preg_match( '/http(s)?:\/\/youtu.be/', $url, $matches ) ) {
|
160 |
+
$url = wp_parse_url( $url, PHP_URL_PATH );
|
161 |
+
$url = str_replace( '/', '', $url );
|
162 |
+
|
163 |
+
return $url;
|
164 |
+
|
165 |
+
} elseif ( preg_match( '/watch/', $url, $matches ) ) {
|
166 |
+
$arr = wp_parse_url( $url );
|
167 |
+
$url = str_replace( 'v=', '', $arr['query'] );
|
168 |
+
|
169 |
+
return $url;
|
170 |
+
|
171 |
+
} elseif ( preg_match( '/http(s)?:\/\/(\w+.)?youtube.com\/v/', $url, $matches ) ) {
|
172 |
+
$arr = wp_parse_url( $url );
|
173 |
+
$url = str_replace( '/v/', '', $arr['path'] );
|
174 |
+
|
175 |
+
return $url;
|
176 |
+
|
177 |
+
} elseif ( preg_match( '/http(s)?:\/\/(\w+.)?youtube.com\/embed/', $url, $matches ) ) {
|
178 |
+
$arr = wp_parse_url( $url );
|
179 |
+
$url = str_replace( '/embed/', '', $arr['path'] );
|
180 |
+
|
181 |
+
return $url;
|
182 |
+
|
183 |
+
} elseif ( preg_match( "#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#", $url, $matches ) ) {
|
184 |
+
return $matches[0];
|
185 |
+
|
186 |
+
} else {
|
187 |
+
return false;
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
}
|
192 |
+
}
|
plugin-fw/includes/class-yith-bh-onboarding 2.php
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH BH Onboarding Class
|
4 |
+
*
|
5 |
+
* @class YITH_BH_Onboarding
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
10 |
+
|
11 |
+
if ( ! class_exists( 'YITH_BH_Onboarding' ) ) {
|
12 |
+
/**
|
13 |
+
* Main Class
|
14 |
+
*/
|
15 |
+
class YITH_BH_Onboarding {
|
16 |
+
/**
|
17 |
+
* The single instance of the class.
|
18 |
+
*
|
19 |
+
* @var self
|
20 |
+
*/
|
21 |
+
protected static $instance = null;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get class instance.
|
25 |
+
*
|
26 |
+
* @return self
|
27 |
+
*/
|
28 |
+
public static function get_instance() {
|
29 |
+
return ! is_null( static::$instance ) ? static::$instance : static::$instance = new static();
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Constructor
|
34 |
+
*/
|
35 |
+
protected function __construct() {
|
36 |
+
add_action( 'yith_bh_onboarding', array( $this, 'show_onboarding_content' ), 10, 1 );
|
37 |
+
add_action( 'wp_ajax_yith_bh_onboarding', array( $this, 'save_options' ) );
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Show onboarding content
|
42 |
+
*
|
43 |
+
* @param string $slug Slug of current plugin modal.
|
44 |
+
*/
|
45 |
+
public function show_onboarding_content( $slug ) {
|
46 |
+
|
47 |
+
$options = apply_filters( 'yith_bh_onboarding_' . $slug, array() );
|
48 |
+
|
49 |
+
if ( empty( $options ) || ! isset( $options['tabs'], $options['slug'] ) ) {
|
50 |
+
return;
|
51 |
+
}
|
52 |
+
|
53 |
+
define( 'DOING_YITH_BH_ONBOARDING', true );
|
54 |
+
|
55 |
+
if ( ! wp_script_is( 'yith-plugin-fw-fields', 'registered' ) || ! wp_style_is( 'yith-plugin-fw-fields', 'registered' ) ) {
|
56 |
+
YIT_Assets::instance()->register_styles_and_scripts();
|
57 |
+
}
|
58 |
+
|
59 |
+
if ( isset( $options['enqueue_script'] ) ) {
|
60 |
+
foreach ( $options['enqueue_script'] as $handle ) {
|
61 |
+
wp_enqueue_script( $handle );
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
if ( isset( $options['enqueue_style'] ) ) {
|
66 |
+
foreach ( $options['enqueue_style'] as $handle ) {
|
67 |
+
wp_enqueue_style( $handle );
|
68 |
+
}
|
69 |
+
}
|
70 |
+
|
71 |
+
wp_enqueue_script( 'yith-bh-onboarding' );
|
72 |
+
wp_enqueue_style( 'yith-bh-onboarding' );
|
73 |
+
|
74 |
+
include YIT_CORE_PLUGIN_TEMPLATE_PATH . '/bh-onboarding/onboarding-tabs.php';
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Save options
|
79 |
+
*
|
80 |
+
* @return void
|
81 |
+
*/
|
82 |
+
public function save_options() {
|
83 |
+
check_ajax_referer( 'yith-bh-onboarding-save-options' );
|
84 |
+
if ( ! isset( $_REQUEST['yith-plugin'], $_REQUEST['tab'] ) ) {
|
85 |
+
wp_send_json_error( __( 'It is not possible save the options', 'yith-plugin-fw' ) );
|
86 |
+
}
|
87 |
+
|
88 |
+
$slug = sanitize_text_field( wp_unslash( $_REQUEST['yith-plugin'] ) );
|
89 |
+
$posted = $_REQUEST;
|
90 |
+
// the options are filtered by each plugin.
|
91 |
+
$options = apply_filters( 'yith_bh_onboarding_' . $slug, array() );
|
92 |
+
$tab = $posted['tab'];
|
93 |
+
|
94 |
+
if ( apply_filters( 'yith_bh_onboarding_save_options_' . $slug, isset( $options['tabs'][ $tab ]['options'] ), $posted ) ) {
|
95 |
+
foreach ( $options['tabs'][ $tab ]['options'] as $single_option ) {
|
96 |
+
if ( isset( $posted[ $single_option['id'] ] ) ) {
|
97 |
+
$value = $posted[ $single_option['id'] ] ?? false;
|
98 |
+
$value = YIT_Plugin_Panel_WooCommerce::sanitize_option( $value, $single_option, $value );
|
99 |
+
$value = apply_filters( 'yith_bh_onboarding_save_option_value', $value, $single_option, $slug );
|
100 |
+
update_option( $single_option['id'], $value );
|
101 |
+
}
|
102 |
+
}
|
103 |
+
}
|
104 |
+
|
105 |
+
wp_send_json_success();
|
106 |
+
}
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
YITH_BH_Onboarding::get_instance();
|
plugin-fw/includes/class-yith-dashboard 2.php
ADDED
@@ -0,0 +1,149 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Dashboard Class
|
4 |
+
* handle WordPress Admin Dashboard
|
5 |
+
*
|
6 |
+
* @class YITH_Dashboard
|
7 |
+
* @package YITH\PluginFramework\Classes
|
8 |
+
*/
|
9 |
+
|
10 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
11 |
+
|
12 |
+
if ( ! class_exists( 'YITH_Dashboard' ) ) {
|
13 |
+
/**
|
14 |
+
* YITH_Dashboard class.
|
15 |
+
*/
|
16 |
+
class YITH_Dashboard {
|
17 |
+
/**
|
18 |
+
* Products Feed URL
|
19 |
+
*
|
20 |
+
* @var string
|
21 |
+
*/
|
22 |
+
private static $products_feed = 'https://yithemes.com/latest-updates/feeds/';
|
23 |
+
|
24 |
+
/**
|
25 |
+
* Blog Feed URL
|
26 |
+
*
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
private static $blog_feed = 'https://yithemes.com/feed/';
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Dashboard widget setup.
|
33 |
+
*/
|
34 |
+
public static function dashboard_widget_setup() {
|
35 |
+
wp_add_dashboard_widget( 'yith_dashboard_products_news', __( 'YITH Latest Updates', 'yith-plugin-fw' ), 'YITH_Dashboard::dashboard_products_news' );
|
36 |
+
wp_add_dashboard_widget( 'yith_dashboard_blog_news', __( 'Latest news from YITH Blog', 'yith-plugin-fw' ), 'YITH_Dashboard::dashboard_blog_news' );
|
37 |
+
}
|
38 |
+
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Product news Widget
|
42 |
+
*/
|
43 |
+
public static function dashboard_products_news() {
|
44 |
+
$items = 10;
|
45 |
+
$rss = static::$products_feed;
|
46 |
+
if ( is_string( $rss ) ) {
|
47 |
+
$rss = fetch_feed( $rss );
|
48 |
+
} elseif ( is_array( $rss ) && isset( $rss['url'] ) ) {
|
49 |
+
$rss = fetch_feed( $rss['url'] );
|
50 |
+
} elseif ( ! is_object( $rss ) ) {
|
51 |
+
return;
|
52 |
+
}
|
53 |
+
|
54 |
+
if ( is_wp_error( $rss ) ) {
|
55 |
+
if ( is_admin() || current_user_can( 'manage_options' ) ) {
|
56 |
+
echo '<p><strong>' . esc_html__( 'RSS Error:', 'yith-plugin-fw' ) . '</strong> ' . wp_kses_post( $rss->get_error_message() ) . '</p>';
|
57 |
+
}
|
58 |
+
|
59 |
+
return;
|
60 |
+
}
|
61 |
+
|
62 |
+
if ( ! $rss->get_item_quantity() ) {
|
63 |
+
echo '<ul><li>' . esc_html__( 'An error has occurred, which probably means the feed is down. Try again later.', 'yith-plugin-fw' ) . '</li></ul>';
|
64 |
+
$rss->__destruct();
|
65 |
+
unset( $rss );
|
66 |
+
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* The feed items.
|
72 |
+
*
|
73 |
+
* @var SimplePie_Item[] $last_updates
|
74 |
+
*/
|
75 |
+
$last_updates = $rss->get_items( 0, $items );
|
76 |
+
$html_classes = 'rsswidget yith-update-feeds';
|
77 |
+
$output = '';
|
78 |
+
|
79 |
+
if ( count( $last_updates ) > 0 ) {
|
80 |
+
$output = '<ul class="yith-update-feeds">';
|
81 |
+
}
|
82 |
+
|
83 |
+
foreach ( $last_updates as $last_update ) {
|
84 |
+
$output .= '<li class="yith-update-feed">';
|
85 |
+
|
86 |
+
$date = $last_update->get_date( 'U' );
|
87 |
+
$date_i18n = ! empty( $date ) ? date_i18n( get_option( 'date_format' ), $date ) : '';
|
88 |
+
$html_date = ! empty( $date_i18n ) ? ' <span class="rss-date">' . date_i18n( get_option( 'date_format' ), $date ) . '</span>' : '';
|
89 |
+
|
90 |
+
$output .= sprintf( '<a target="_blank" href="%s" class="%s">%s</a> %s', $last_update->get_permalink(), $html_classes, $last_update->get_title(), $html_date );
|
91 |
+
|
92 |
+
$changelog = $last_update->get_description();
|
93 |
+
|
94 |
+
if ( ! empty( $changelog ) ) {
|
95 |
+
$output .= ' - ';
|
96 |
+
$output .= sprintf( '<a class="yith-last-changelog" href="#" data-changelogid="%s" data-plugininfo="%s">%s</a>', $last_update->get_id( true ), $last_update->get_title(), _x( 'View Changelog', 'Plugin FW', 'yith-plugin-fw' ) );
|
97 |
+
$output .= sprintf( '<div class="yith-feeds-wrapper" id="%s"><div class="yith-feeds-changelog-plugin-name"><img class="yith-feeds-logo" src="%s" /><h3 class="yith-feeds-plugin-name"><span style="font-weight: normal;">%s</span> %s</h3></div><p>%s</p></div>', $last_update->get_id( true ), yith_plugin_fw_get_default_logo(), _x( 'Latest update released on', 'Plugin FW', 'yith-plugin-fw' ), $date_i18n, $changelog );
|
98 |
+
}
|
99 |
+
|
100 |
+
$output .= '</li>';
|
101 |
+
}
|
102 |
+
|
103 |
+
if ( ! empty( $output ) ) {
|
104 |
+
$output .= '</ul>';
|
105 |
+
}
|
106 |
+
|
107 |
+
echo wp_kses_post( $output );
|
108 |
+
$rss->__destruct();
|
109 |
+
unset( $rss );
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Blog news Widget
|
114 |
+
*/
|
115 |
+
public static function dashboard_blog_news() {
|
116 |
+
$args = array(
|
117 |
+
'show_author' => 0,
|
118 |
+
'show_date' => 1,
|
119 |
+
'show_summary' => 1,
|
120 |
+
'items' => 3,
|
121 |
+
);
|
122 |
+
$feed = static::$blog_feed;
|
123 |
+
wp_widget_rss_output( $feed, $args );
|
124 |
+
}
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Enqueue Styles and Scripts for View Last Changelog widget
|
128 |
+
*/
|
129 |
+
public static function enqueue_scripts() {
|
130 |
+
if ( function_exists( 'get_current_screen' ) && get_current_screen() && 'dashboard' === get_current_screen()->id ) {
|
131 |
+
$script_path = defined( 'YIT_CORE_PLUGIN_URL' ) ? YIT_CORE_PLUGIN_URL : get_template_directory_uri() . '/core/plugin-fw';
|
132 |
+
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
|
133 |
+
wp_enqueue_script( 'yith-dashboard', $script_path . '/assets/js/yith-dashboard' . $suffix . '.js', array( 'jquery-ui-dialog' ), yith_plugin_fw_get_version(), true );
|
134 |
+
wp_enqueue_style( 'wp-jquery-ui-dialog' );
|
135 |
+
$l10n = array(
|
136 |
+
'buttons' => array(
|
137 |
+
'close' => _x( 'Close', 'Button label', 'yith-plugin-fw' ),
|
138 |
+
),
|
139 |
+
);
|
140 |
+
wp_localize_script( 'yith-dashboard', 'yith_dashboard', $l10n );
|
141 |
+
}
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
if ( apply_filters( 'yith_plugin_fw_show_dashboard_widgets', true ) ) {
|
146 |
+
add_action( 'wp_dashboard_setup', 'YITH_Dashboard::dashboard_widget_setup' );
|
147 |
+
add_action( 'admin_enqueue_scripts', 'YITH_Dashboard::enqueue_scripts', 20 );
|
148 |
+
}
|
149 |
+
}
|
plugin-fw/includes/class-yith-debug 2.php
ADDED
@@ -0,0 +1,154 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Debug Class.
|
4 |
+
*
|
5 |
+
* @class YITH_Debug
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
10 |
+
|
11 |
+
if ( ! class_exists( 'YITH_Debug' ) ) {
|
12 |
+
/**
|
13 |
+
* YITH_Debug class.
|
14 |
+
*
|
15 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
16 |
+
* @deprecated 3.7.7
|
17 |
+
*/
|
18 |
+
class YITH_Debug {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* The single instance of the class.
|
22 |
+
*
|
23 |
+
* @var YITH_Debug
|
24 |
+
*/
|
25 |
+
private static $instance;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Singleton implementation.
|
29 |
+
*
|
30 |
+
* @return YITH_Debug
|
31 |
+
*/
|
32 |
+
public static function instance() {
|
33 |
+
return ! is_null( self::$instance ) ? self::$instance : self::$instance = new self();
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Deprecated singleton implementation.
|
38 |
+
* Kept for backward compatibility.
|
39 |
+
*
|
40 |
+
* @return YITH_Debug
|
41 |
+
* @deprecated 3.5 | use YITH_Debug::get_instance() instead.
|
42 |
+
*/
|
43 |
+
public static function get_instance() {
|
44 |
+
return self::instance();
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* YITH_Debug constructor.
|
49 |
+
*/
|
50 |
+
private function __construct() {
|
51 |
+
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Init
|
56 |
+
*/
|
57 |
+
public function init() {
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Add debug node in admin bar.
|
63 |
+
*
|
64 |
+
* @param WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance.
|
65 |
+
*/
|
66 |
+
public function add_debug_in_admin_bar( $wp_admin_bar ) {
|
67 |
+
// Do nothing.
|
68 |
+
}
|
69 |
+
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Return an array of debug information.
|
73 |
+
*
|
74 |
+
* @return array
|
75 |
+
*/
|
76 |
+
public function get_debug_information() {
|
77 |
+
return array();
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Return the current screen ID.
|
82 |
+
*
|
83 |
+
* @return string
|
84 |
+
*/
|
85 |
+
public function get_current_screen_info() {
|
86 |
+
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : false;
|
87 |
+
|
88 |
+
return ! ! $screen ? $screen->id : 'null';
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Return the current theme name and version.
|
93 |
+
*
|
94 |
+
* @return string
|
95 |
+
*/
|
96 |
+
public function get_theme_info() {
|
97 |
+
$theme = function_exists( 'wp_get_theme' ) ? wp_get_theme() : false;
|
98 |
+
|
99 |
+
return ! ! $theme ? $theme->get( 'Name' ) . ' (' . $theme->get( 'Version' ) . ')' : 'null';
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Return the WooCommerce version if active.
|
104 |
+
*
|
105 |
+
* @return string
|
106 |
+
*/
|
107 |
+
public function get_woocommerce_version_info() {
|
108 |
+
return function_exists( 'WC' ) ? WC()->version : 'not active';
|
109 |
+
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* Return plugin framework information (version and loaded_by).
|
113 |
+
*
|
114 |
+
* @return string
|
115 |
+
*/
|
116 |
+
public function get_plugin_framework_info() {
|
117 |
+
$plugin_fw_version = yith_plugin_fw_get_version();
|
118 |
+
$plugin_fw_loaded_by = basename( dirname( YIT_CORE_PLUGIN_PATH ) );
|
119 |
+
|
120 |
+
return "$plugin_fw_version (by $plugin_fw_loaded_by)";
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Return premium plugins list with versions.
|
125 |
+
*
|
126 |
+
* @return array
|
127 |
+
*/
|
128 |
+
public function get_premium_plugins_info() {
|
129 |
+
$plugins = YIT_Plugin_Licence()->get_products();
|
130 |
+
$plugins_info = array();
|
131 |
+
|
132 |
+
if ( ! ! $plugins ) {
|
133 |
+
foreach ( $plugins as $plugin ) {
|
134 |
+
$plugins_info[ $plugin['product_id'] ] = array( 'title' => $plugin['Name'] . ' (' . $plugin['Version'] . ')' );
|
135 |
+
}
|
136 |
+
|
137 |
+
sort( $plugins_info );
|
138 |
+
}
|
139 |
+
|
140 |
+
return $plugins_info;
|
141 |
+
}
|
142 |
+
}
|
143 |
+
}
|
144 |
+
if ( ! function_exists( 'yith_debug' ) ) {
|
145 |
+
/**
|
146 |
+
* Single instance of YITH_Debug
|
147 |
+
*
|
148 |
+
* @return YITH_Debug
|
149 |
+
* @deprecated 3.7.7
|
150 |
+
*/
|
151 |
+
function yith_debug() {
|
152 |
+
return YITH_Debug::instance();
|
153 |
+
}
|
154 |
+
}
|
plugin-fw/includes/class-yith-post-type-admin 2.php
ADDED
@@ -0,0 +1,474 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Post Type Admin
|
4 |
+
*
|
5 |
+
* @class YITH_Post_Type_Admin
|
6 |
+
* @package YITH\PluginFramework\Classes
|
7 |
+
*/
|
8 |
+
|
9 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
10 |
+
|
11 |
+
if ( ! class_exists( 'YITH_Post_Type_Admin' ) ) {
|
12 |
+
/**
|
13 |
+
* YITH_Post_Type_Admin class.
|
14 |
+
*
|
15 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
16 |
+
*/
|
17 |
+
abstract class YITH_Post_Type_Admin {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The post type.
|
21 |
+
*
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
protected $post_type = '';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* The object to be shown for each row.
|
28 |
+
*
|
29 |
+
* @var object|null
|
30 |
+
*/
|
31 |
+
protected $object = null;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* The ID of the Post to be shown for each row.
|
35 |
+
*
|
36 |
+
* @var int|null
|
37 |
+
*/
|
38 |
+
protected $post_id = null;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* The single instance of the class.
|
42 |
+
*
|
43 |
+
* @var YITH_Post_Type_Admin[]
|
44 |
+
*/
|
45 |
+
private static $instances = array();
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Singleton implementation.
|
49 |
+
*
|
50 |
+
* @return YITH_Post_Type_Admin
|
51 |
+
*/
|
52 |
+
public static function instance() {
|
53 |
+
$class = get_called_class();
|
54 |
+
|
55 |
+
return ! empty( self::$instances[ $class ] ) ? self::$instances[ $class ] : self::$instances[ $class ] = new $class();
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* YITH_Admin_Post_List_Table constructor.
|
60 |
+
*/
|
61 |
+
protected function __construct() {
|
62 |
+
if ( $this->post_type && $this->is_enabled() ) {
|
63 |
+
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
64 |
+
// use "admin_init" for AJAX calls, since in case of AJAX, "current_screen" is not fired.
|
65 |
+
add_action( 'admin_init', array( $this, 'init_wp_list_handlers' ) );
|
66 |
+
} else {
|
67 |
+
add_action( 'current_screen', array( $this, 'init_wp_list_handlers' ) );
|
68 |
+
}
|
69 |
+
|
70 |
+
add_action( 'edit_form_top', array( $this, 'print_back_to_wp_list_button' ) );
|
71 |
+
}
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Return true if it's enabled.
|
76 |
+
*
|
77 |
+
* @return bool
|
78 |
+
*/
|
79 |
+
protected function is_enabled() {
|
80 |
+
return is_admin();
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Return true if you want to use the object when you render columns. False otherwise.
|
85 |
+
* This is useful if you have an object representing your Custom Post Type that handles the CRUD.
|
86 |
+
* Note: if you use the object, you should set it by overriding the YITH_Post_Type_Admin::prepare_row_data method.
|
87 |
+
*
|
88 |
+
* @return bool
|
89 |
+
*/
|
90 |
+
protected function use_object() {
|
91 |
+
return true;
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Return true if the wp-list handlers should be loaded.
|
96 |
+
*
|
97 |
+
* @return bool
|
98 |
+
*/
|
99 |
+
protected function should_wp_list_handlers_be_loaded() {
|
100 |
+
$screen_id = false;
|
101 |
+
|
102 |
+
if ( function_exists( 'get_current_screen' ) ) {
|
103 |
+
$screen = get_current_screen();
|
104 |
+
$screen_id = isset( $screen, $screen->id ) ? $screen->id : '';
|
105 |
+
}
|
106 |
+
|
107 |
+
if ( ! empty( $_REQUEST['screen'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
108 |
+
$screen_id = sanitize_text_field( wp_unslash( $_REQUEST['screen'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
109 |
+
}
|
110 |
+
|
111 |
+
return ! ! $screen_id && ( 'edit-' . $this->post_type === $screen_id );
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Initialize the WP List handlers.
|
116 |
+
*/
|
117 |
+
public function init_wp_list_handlers() {
|
118 |
+
if ( $this->should_wp_list_handlers_be_loaded() ) {
|
119 |
+
add_action( 'manage_posts_extra_tablenav', array( $this, 'maybe_render_blank_state' ) );
|
120 |
+
|
121 |
+
add_action( 'restrict_manage_posts', array( $this, 'maybe_render_filters' ) );
|
122 |
+
add_filter( 'request', array( $this, 'request_query' ) );
|
123 |
+
|
124 |
+
add_filter( 'list_table_primary_column', array( $this, 'list_table_primary_column' ), 10, 2 );
|
125 |
+
add_filter( 'post_row_actions', array( $this, 'row_actions' ), 100, 2 );
|
126 |
+
|
127 |
+
add_filter( 'default_hidden_columns', array( $this, 'default_hidden_columns' ), 10, 2 );
|
128 |
+
add_filter( 'manage_edit-' . $this->post_type . '_sortable_columns', array( $this, 'define_sortable_columns' ) );
|
129 |
+
add_filter( 'manage_' . $this->post_type . '_posts_columns', array( $this, 'define_columns' ) );
|
130 |
+
add_filter( 'bulk_actions-edit-' . $this->post_type, array( $this, 'define_bulk_actions' ) );
|
131 |
+
|
132 |
+
add_action( 'manage_' . $this->post_type . '_posts_custom_column', array( $this, 'render_columns' ), 10, 2 );
|
133 |
+
add_filter( 'handle_bulk_actions-edit-' . $this->post_type, array( $this, 'handle_bulk_actions' ), 10, 3 );
|
134 |
+
|
135 |
+
add_action( 'disable_months_dropdown', array( $this, 'disable_months_dropdown' ), 10, 2 );
|
136 |
+
}
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* --------------------------------------------------------------------------
|
141 |
+
* Getters and definers methods
|
142 |
+
* --------------------------------------------------------------------------
|
143 |
+
*
|
144 |
+
* Methods for getting data from the objects. Usually you need to override them in your class.
|
145 |
+
*/
|
146 |
+
|
147 |
+
/**
|
148 |
+
* Get actions to show in the list table as action-buttons
|
149 |
+
*
|
150 |
+
* @return array
|
151 |
+
*/
|
152 |
+
protected function get_item_actions() {
|
153 |
+
return array();
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Retrieve an array of parameters for blank state.
|
158 |
+
*
|
159 |
+
* @return array{
|
160 |
+
* @type string $icon The YITH icon. You can use this one (to use an YITH icon) or icon_class or icon_url.
|
161 |
+
* @type string $icon_class The icon class. You can use this one (to use a custom class for your icon) or icon or icon_url.
|
162 |
+
* @type string $icon_url The icon URL. You can use this one (to specify an icon URL) or icon_icon or icon_class.
|
163 |
+
* @type string $message The message to be shown.
|
164 |
+
* @type string $cta {
|
165 |
+
* The call-to-action button params.
|
166 |
+
* @type string $title The call-to-action button title.
|
167 |
+
* @type string $icon The call-to-action button icon.
|
168 |
+
* @type string $url The call-to-action button URL.
|
169 |
+
* @type string $class The call-to-action button class.
|
170 |
+
* }
|
171 |
+
* }
|
172 |
+
*/
|
173 |
+
protected function get_blank_state_params() {
|
174 |
+
return array();
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Define primary column.
|
179 |
+
*
|
180 |
+
* @return string
|
181 |
+
*/
|
182 |
+
protected function get_primary_column() {
|
183 |
+
return '';
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Define hidden columns.
|
188 |
+
*
|
189 |
+
* @return array
|
190 |
+
*/
|
191 |
+
protected function get_default_hidden_columns() {
|
192 |
+
return array();
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Define which columns are sortable.
|
197 |
+
*
|
198 |
+
* @param array $columns Existing columns.
|
199 |
+
*
|
200 |
+
* @return array
|
201 |
+
*/
|
202 |
+
public function define_sortable_columns( $columns ) {
|
203 |
+
return $columns;
|
204 |
+
}
|
205 |
+
|
206 |
+
/**
|
207 |
+
* Define which columns to show on this screen.
|
208 |
+
*
|
209 |
+
* @param array $columns Existing columns.
|
210 |
+
*
|
211 |
+
* @return array
|
212 |
+
*/
|
213 |
+
public function define_columns( $columns ) {
|
214 |
+
return $columns;
|
215 |
+
}
|
216 |
+
|
217 |
+
/**
|
218 |
+
* Define bulk actions.
|
219 |
+
*
|
220 |
+
* @param array $actions Existing actions.
|
221 |
+
*
|
222 |
+
* @return array
|
223 |
+
*/
|
224 |
+
public function define_bulk_actions( $actions ) {
|
225 |
+
return $actions;
|
226 |
+
}
|
227 |
+
|
228 |
+
/**
|
229 |
+
* Pre-fetch any data for the row each column has access to it, by loading $this->object.
|
230 |
+
*
|
231 |
+
* @param int $post_id Post ID being shown.
|
232 |
+
*/
|
233 |
+
protected function prepare_row_data( $post_id ) {
|
234 |
+
}
|
235 |
+
|
236 |
+
/**
|
237 |
+
* Render any custom filters and search inputs for the list table.
|
238 |
+
*/
|
239 |
+
protected function render_filters() {
|
240 |
+
}
|
241 |
+
|
242 |
+
/**
|
243 |
+
* Handle any custom filters.
|
244 |
+
*
|
245 |
+
* @param array $query_vars Query vars.
|
246 |
+
*
|
247 |
+
* @return array
|
248 |
+
*/
|
249 |
+
protected function query_filters( $query_vars ) {
|
250 |
+
return $query_vars;
|
251 |
+
}
|
252 |
+
|
253 |
+
/**
|
254 |
+
* Handle bulk actions.
|
255 |
+
*
|
256 |
+
* @param string $redirect_to URL to redirect to.
|
257 |
+
* @param string $action Action name.
|
258 |
+
* @param array $ids List of ids.
|
259 |
+
*
|
260 |
+
* @return string
|
261 |
+
*/
|
262 |
+
public function handle_bulk_actions( $redirect_to, $action, $ids ) {
|
263 |
+
return esc_url_raw( $redirect_to );
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Has the months dropdown enabled?
|
268 |
+
*
|
269 |
+
* @return bool
|
270 |
+
*/
|
271 |
+
protected function has_months_dropdown_enabled() {
|
272 |
+
return false;
|
273 |
+
}
|
274 |
+
|
275 |
+
/**
|
276 |
+
* Return the text of the "back to WP List" button.
|
277 |
+
* Return empty string if you want to hide the button.
|
278 |
+
*
|
279 |
+
* @return string
|
280 |
+
*/
|
281 |
+
protected function get_back_to_wp_list_text() {
|
282 |
+
$post_type_object = get_post_type_object( $this->post_type );
|
283 |
+
$name = ! ! $post_type_object ? get_post_type_labels( $post_type_object )->name : '';
|
284 |
+
|
285 |
+
// translators: %s is the name of the post type (example Back to "Membership Plans").
|
286 |
+
return ! ! $name ? sprintf( __( 'Back to "%s"', 'yith-plugin-fw' ), $name ) : __( 'Back to the list', 'yith-plugin-fw' );
|
287 |
+
}
|
288 |
+
|
289 |
+
/**
|
290 |
+
* --------------------------------------------------------------------------
|
291 |
+
* Utils hook handlers
|
292 |
+
* --------------------------------------------------------------------------
|
293 |
+
*
|
294 |
+
* Methods for handling hooks.
|
295 |
+
*/
|
296 |
+
|
297 |
+
/**
|
298 |
+
* Adjust which columns are displayed by default.
|
299 |
+
*
|
300 |
+
* @param array $hidden Current hidden columns.
|
301 |
+
* @param object $screen Current screen.
|
302 |
+
*
|
303 |
+
* @return array
|
304 |
+
*/
|
305 |
+
public function default_hidden_columns( $hidden, $screen ) {
|
306 |
+
if ( isset( $screen->id ) && 'edit-' . $this->post_type === $screen->id ) {
|
307 |
+
$hidden = array_merge( $hidden, $this->get_default_hidden_columns() );
|
308 |
+
}
|
309 |
+
|
310 |
+
return $hidden;
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Set list table primary column.
|
315 |
+
*
|
316 |
+
* @param string $default Default value.
|
317 |
+
* @param string $screen_id Current screen ID.
|
318 |
+
*
|
319 |
+
* @return string
|
320 |
+
*/
|
321 |
+
public function list_table_primary_column( $default, $screen_id ) {
|
322 |
+
if ( 'edit-' . $this->post_type === $screen_id && $this->get_primary_column() ) {
|
323 |
+
return $this->get_primary_column();
|
324 |
+
}
|
325 |
+
|
326 |
+
return $default;
|
327 |
+
}
|
328 |
+
|
329 |
+
/**
|
330 |
+
* Show blank slate.
|
331 |
+
*
|
332 |
+
* @param string $which String which table-nav is being shown.
|
333 |
+
*/
|
334 |
+
public function maybe_render_blank_state( $which ) {
|
335 |
+
global $post_type;
|
336 |
+
|
337 |
+
if ( $this->get_blank_state_params() && $post_type === $this->post_type && 'bottom' === $which ) {
|
338 |
+
$counts = (array) wp_count_posts( $post_type );
|
339 |
+
unset( $counts['auto-draft'] );
|
340 |
+
$count = array_sum( $counts );
|
341 |
+
|
342 |
+
if ( 0 < $count ) {
|
343 |
+
return;
|
344 |
+
}
|
345 |
+
|
346 |
+
$this->render_blank_state();
|
347 |
+
|
348 |
+
echo '<style type="text/css">#posts-filter .wp-list-table, #posts-filter .tablenav.top, .tablenav.bottom > *, .wrap .subsubsub { display: none; } #posts-filter .tablenav.bottom { height: auto; display: block } </style>';
|
349 |
+
}
|
350 |
+
}
|
351 |
+
|
352 |
+
/**
|
353 |
+
* Render blank state. Extend to add content.
|
354 |
+
*/
|
355 |
+
protected function render_blank_state() {
|
356 |
+
$component = $this->get_blank_state_params();
|
357 |
+
$component['type'] = 'list-table-blank-state';
|
358 |
+
|
359 |
+
yith_plugin_fw_get_component( $component, true );
|
360 |
+
}
|
361 |
+
|
362 |
+
/**
|
363 |
+
* Render individual columns.
|
364 |
+
*
|
365 |
+
* @param string $column Column ID to render.
|
366 |
+
* @param int $post_id Post ID being shown.
|
367 |
+
*/
|
368 |
+
public function render_columns( $column, $post_id ) {
|
369 |
+
if ( empty( $this->post_id ) || $this->post_id !== $post_id ) {
|
370 |
+
$this->post_id = $post_id;
|
371 |
+
$this->prepare_row_data( $post_id );
|
372 |
+
}
|
373 |
+
|
374 |
+
if ( $this->use_object() && ! $this->object ) {
|
375 |
+
return;
|
376 |
+
}
|
377 |
+
|
378 |
+
$render_method = 'render_' . str_replace( '-', '_', $column ) . '_column';
|
379 |
+
|
380 |
+
if ( is_callable( array( $this, $render_method ) ) ) {
|
381 |
+
$this->{$render_method}();
|
382 |
+
}
|
383 |
+
}
|
384 |
+
|
385 |
+
/**
|
386 |
+
* Set row actions: remove row actions, since we show actions through action-buttons.
|
387 |
+
*
|
388 |
+
* @param array $actions Array of actions.
|
389 |
+
* @param WP_Post $post Current post object.
|
390 |
+
*
|
391 |
+
* @return array
|
392 |
+
*/
|
393 |
+
public function row_actions( $actions, $post ) {
|
394 |
+
if ( $this->post_type === $post->post_type ) {
|
395 |
+
return array();
|
396 |
+
}
|
397 |
+
|
398 |
+
return $actions;
|
399 |
+
}
|
400 |
+
|
401 |
+
/**
|
402 |
+
* See if we should render search filters or not.
|
403 |
+
*/
|
404 |
+
public function maybe_render_filters() {
|
405 |
+
global $typenow;
|
406 |
+
|
407 |
+
if ( $this->post_type === $typenow ) {
|
408 |
+
$this->render_filters();
|
409 |
+
}
|
410 |
+
}
|
411 |
+
|
412 |
+
/**
|
413 |
+
* Handle any filters.
|
414 |
+
*
|
415 |
+
* @param array $query_vars Query vars.
|
416 |
+
*
|
417 |
+
* @return array
|
418 |
+
*/
|
419 |
+
public function request_query( $query_vars ) {
|
420 |
+
global $typenow;
|
421 |
+
|
422 |
+
if ( $this->post_type === $typenow ) {
|
423 |
+
return $this->query_filters( $query_vars );
|
424 |
+
}
|
425 |
+
|
426 |
+
return $query_vars;
|
427 |
+
}
|
428 |
+
|
429 |
+
/**
|
430 |
+
* Disable Months dropdown
|
431 |
+
*
|
432 |
+
* @param bool $disable Set true to disable.
|
433 |
+
* @param string $post_type The post type.
|
434 |
+
*
|
435 |
+
* @return bool
|
436 |
+
*/
|
437 |
+
public function disable_months_dropdown( $disable, $post_type ) {
|
438 |
+
if ( $this->post_type === $post_type ) {
|
439 |
+
$disable = ! $this->has_months_dropdown_enabled();
|
440 |
+
}
|
441 |
+
|
442 |
+
return $disable;
|
443 |
+
}
|
444 |
+
|
445 |
+
/**
|
446 |
+
* Print the "Back to WP List" button in Edit Post pages
|
447 |
+
*/
|
448 |
+
public function print_back_to_wp_list_button() {
|
449 |
+
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : false;
|
450 |
+
$screen_id = $screen ? $screen->id : false;
|
451 |
+
|
452 |
+
if ( $screen_id === $this->post_type ) {
|
453 |
+
$url = add_query_arg( array( 'post_type' => $this->post_type ), admin_url( 'edit.php' ) );
|
454 |
+
$text = $this->get_back_to_wp_list_text();
|
455 |
+
if ( $text ) {
|
456 |
+
?>
|
457 |
+
<div id='yith-plugin-fw__back-to-wp-list__wrapper' class='yith-plugin-fw__back-to-wp-list__wrapper'>
|
458 |
+
<a id='yith-plugin-fw__back-to-wp-list' class='yith-plugin-fw__back-to-wp-list' href='<?php echo esc_url( $url ); ?>'><?php echo esc_html( $text ); ?></a>
|
459 |
+
</div>
|
460 |
+
<script type="text/javascript">
|
461 |
+
( function () {
|
462 |
+
var wrap = document.querySelector( '.wrap' ),
|
463 |
+
backTo = document.querySelector( '#yith-plugin-fw__back-to-wp-list__wrapper' );
|
464 |
+
|
465 |
+
wrap.insertBefore( backTo, wrap.childNodes[ 0 ] );
|
466 |
+
} )();
|
467 |
+
</script>
|
468 |
+
<?php
|
469 |
+
}
|
470 |
+
}
|
471 |
+
}
|
472 |
+
|
473 |
+
}
|
474 |
+
}
|
plugin-fw/includes/class-yith-system-status 2.php
ADDED
@@ -0,0 +1,821 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH System Status Class
|
4 |
+
* handle System Status panel
|
5 |
+
*
|
6 |
+
* @class YITH_System_Status
|
7 |
+
* @package YITH\PluginFramework\Classes
|
8 |
+
*/
|
9 |
+
|
10 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
11 |
+
|
12 |
+
if ( ! class_exists( 'YITH_System_Status' ) ) {
|
13 |
+
/**
|
14 |
+
* YITH_System_Status class.
|
15 |
+
*
|
16 |
+
* @author Alberto Ruggiero
|
17 |
+
*/
|
18 |
+
class YITH_System_Status {
|
19 |
+
/**
|
20 |
+
* The page slug
|
21 |
+
*
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
protected $page = 'yith_system_info';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Plugins requirements list
|
28 |
+
*
|
29 |
+
* @var array
|
30 |
+
*/
|
31 |
+
protected $plugins_requirements = array();
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Requirements labels
|
35 |
+
*
|
36 |
+
* @var array
|
37 |
+
*/
|
38 |
+
public $requirement_labels = array();
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Recommended memory amount 134217728 = 128M
|
42 |
+
*
|
43 |
+
* @var integer
|
44 |
+
*/
|
45 |
+
private $recommended_memory = 134217728;
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Single instance of the class
|
49 |
+
*
|
50 |
+
* @since 1.0.0
|
51 |
+
* @var YITH_System_Status
|
52 |
+
*/
|
53 |
+
protected static $instance = null;
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Main plugin Instance
|
57 |
+
*
|
58 |
+
* @author Alberto Ruggiero
|
59 |
+
* @return YITH_System_Status
|
60 |
+
* @since 1.0.0
|
61 |
+
*/
|
62 |
+
public static function instance() {
|
63 |
+
if ( is_null( self::$instance ) ) {
|
64 |
+
self::$instance = new self();
|
65 |
+
}
|
66 |
+
|
67 |
+
return self::$instance;
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Constructor
|
72 |
+
*
|
73 |
+
* @author Alberto Ruggiero
|
74 |
+
* @return void
|
75 |
+
* @since 1.0.0
|
76 |
+
*/
|
77 |
+
public function __construct() {
|
78 |
+
|
79 |
+
if ( ! is_admin() ) {
|
80 |
+
return;
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Add to prevent trigger admin_init called directly
|
85 |
+
* wp-admin/admin-post.php?page=yith_system_info
|
86 |
+
*/
|
87 |
+
if ( ! is_user_logged_in() ) {
|
88 |
+
return;
|
89 |
+
}
|
90 |
+
|
91 |
+
add_action( 'admin_menu', array( $this, 'add_submenu_page' ), 99 );
|
92 |
+
add_action( 'admin_init', array( $this, 'check_system_status' ) );
|
93 |
+
add_action( 'admin_notices', array( $this, 'activate_system_notice' ), 15 );
|
94 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ), 20 );
|
95 |
+
add_action( 'init', array( $this, 'set_requirements_labels' ) );
|
96 |
+
add_action( 'wp_ajax_yith_create_log_file', array( $this, 'create_log_file' ) );
|
97 |
+
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Set requirements labels
|
102 |
+
*
|
103 |
+
* @author Alberto Ruggiero
|
104 |
+
* @return void
|
105 |
+
* @since 1.0.0
|
106 |
+
*/
|
107 |
+
public function set_requirements_labels() {
|
108 |
+
|
109 |
+
$this->requirement_labels = array(
|
110 |
+
'min_wp_version' => esc_html__( 'WordPress Version', 'yith-plugin-fw' ),
|
111 |
+
'min_wc_version' => esc_html__( 'WooCommerce Version', 'yith-plugin-fw' ),
|
112 |
+
'wp_memory_limit' => esc_html__( 'Available Memory', 'yith-plugin-fw' ),
|
113 |
+
'min_php_version' => esc_html__( 'PHP Version', 'yith-plugin-fw' ),
|
114 |
+
'min_tls_version' => esc_html__( 'TLS Version', 'yith-plugin-fw' ),
|
115 |
+
'wp_cron_enabled' => esc_html__( 'WordPress Cron', 'yith-plugin-fw' ),
|
116 |
+
'simplexml_enabled' => esc_html__( 'SimpleXML', 'yith-plugin-fw' ),
|
117 |
+
'mbstring_enabled' => esc_html__( 'MultiByte String', 'yith-plugin-fw' ),
|
118 |
+
'imagick_version' => esc_html__( 'ImageMagick Version', 'yith-plugin-fw' ),
|
119 |
+
'gd_enabled' => esc_html__( 'GD Library', 'yith-plugin-fw' ),
|
120 |
+
'iconv_enabled' => esc_html__( 'Iconv Module', 'yith-plugin-fw' ),
|
121 |
+
'opcache_enabled' => esc_html__( 'OPCache Save Comments', 'yith-plugin-fw' ),
|
122 |
+
'url_fopen_enabled' => esc_html__( 'URL FOpen', 'yith-plugin-fw' ),
|
123 |
+
);
|
124 |
+
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Add "System Information" submenu page under YITH Plugins
|
129 |
+
*
|
130 |
+
* @author Alberto Ruggiero
|
131 |
+
* @return void
|
132 |
+
* @since 1.0.0
|
133 |
+
*/
|
134 |
+
public function add_submenu_page() {
|
135 |
+
|
136 |
+
$system_info = get_option( 'yith_system_info', array() );
|
137 |
+
$error_notice = ( isset( $system_info['errors'] ) && true === $system_info['errors'] ? ' <span class="yith-system-info-menu update-plugins">!</span>' : '' );
|
138 |
+
$settings = array(
|
139 |
+
'parent_page' => 'yith_plugin_panel',
|
140 |
+
'page_title' => esc_html__( 'System Status', 'yith-plugin-fw' ),
|
141 |
+
'menu_title' => esc_html__( 'System Status', 'yith-plugin-fw' ) . $error_notice,
|
142 |
+
'capability' => 'manage_options',
|
143 |
+
'page' => $this->page,
|
144 |
+
);
|
145 |
+
|
146 |
+
add_submenu_page(
|
147 |
+
$settings['parent_page'],
|
148 |
+
$settings['page_title'],
|
149 |
+
$settings['menu_title'],
|
150 |
+
$settings['capability'],
|
151 |
+
$settings['page'],
|
152 |
+
array( $this, 'show_information_panel' )
|
153 |
+
);
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Add "System Information" page template under YITH Plugins
|
158 |
+
*
|
159 |
+
* @author Alberto Ruggiero
|
160 |
+
* @return void
|
161 |
+
* @since 1.0.0
|
162 |
+
*/
|
163 |
+
public function show_information_panel() {
|
164 |
+
|
165 |
+
$path = defined( 'YIT_CORE_PLUGIN_PATH' ) ? YIT_CORE_PLUGIN_PATH : get_template_directory() . '/core/plugin-fw/';
|
166 |
+
|
167 |
+
require_once $path . '/templates/sysinfo/system-information-panel.php';
|
168 |
+
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Perform system status check
|
173 |
+
*
|
174 |
+
* @author Alberto Ruggiero
|
175 |
+
* @return void
|
176 |
+
* @since 1.0.0
|
177 |
+
*/
|
178 |
+
public function check_system_status() {
|
179 |
+
|
180 |
+
if ( '' === get_option( 'yith_system_info' ) || ( isset( $_GET['page'] ) && $_GET['page'] === $this->page ) ) { //phpcs:ignore
|
181 |
+
|
182 |
+
$this->add_requirements(
|
183 |
+
esc_html__( 'YITH Plugins', 'yith-plugin-fw' ),
|
184 |
+
array(
|
185 |
+
'min_wp_version' => '5.6',
|
186 |
+
'min_wc_version' => '5.3',
|
187 |
+
'min_php_version' => '7.0',
|
188 |
+
)
|
189 |
+
);
|
190 |
+
$this->add_requirements(
|
191 |
+
esc_html__( 'WooCommerce', 'yith-plugin-fw' ),
|
192 |
+
array(
|
193 |
+
'wp_memory_limit' => '64M',
|
194 |
+
)
|
195 |
+
);
|
196 |
+
|
197 |
+
$system_info = $this->get_system_info();
|
198 |
+
$check_results = array();
|
199 |
+
$errors = 0;
|
200 |
+
|
201 |
+
foreach ( $system_info as $key => $value ) {
|
202 |
+
$check_results[ $key ] = array( 'value' => $value );
|
203 |
+
|
204 |
+
if ( isset( $this->plugins_requirements[ $key ] ) ) {
|
205 |
+
|
206 |
+
foreach ( $this->plugins_requirements[ $key ] as $plugin_name => $required_value ) {
|
207 |
+
|
208 |
+
switch ( $key ) {
|
209 |
+
case 'wp_cron_enabled':
|
210 |
+
case 'mbstring_enabled':
|
211 |
+
case 'simplexml_enabled':
|
212 |
+
case 'gd_enabled':
|
213 |
+
case 'iconv_enabled':
|
214 |
+
case 'url_fopen_enabled':
|
215 |
+
case 'opcache_enabled':
|
216 |
+
if ( ! $value ) {
|
217 |
+
$check_results[ $key ]['errors'][ $plugin_name ] = $required_value;
|
218 |
+
$errors ++;
|
219 |
+
}
|
220 |
+
break;
|
221 |
+
|
222 |
+
case 'wp_memory_limit':
|
223 |
+
$required_memory = $this->memory_size_to_num( $required_value );
|
224 |
+
|
225 |
+
if ( $required_memory > $value ) {
|
226 |
+
$check_results[ $key ]['errors'][ $plugin_name ] = $required_value;
|
227 |
+
$errors ++;
|
228 |
+
|
229 |
+
} elseif ( $this->recommended_memory > $value && $value > $required_value ) {
|
230 |
+
$check_results[ $key ]['warnings'] = 'yes';
|
231 |
+
}
|
232 |
+
break;
|
233 |
+
|
234 |
+
default:
|
235 |
+
if ( 'imagick_version' === $key ) {
|
236 |
+
if ( ! version_compare( $value, $required_value, '>=' ) ) {
|
237 |
+
$check_results[ $key ]['errors'][ $plugin_name ] = $required_value;
|
238 |
+
$errors ++;
|
239 |
+
}
|
240 |
+
} else {
|
241 |
+
if ( 'n/a' !== $value ) {
|
242 |
+
if ( ! version_compare( $value, $required_value, '>=' ) ) {
|
243 |
+
$check_results[ $key ]['errors'][ $plugin_name ] = $required_value;
|
244 |
+
$errors ++;
|
245 |
+
}
|
246 |
+
} else {
|
247 |
+
if ( 'min_wc_version' !== $key ) {
|
248 |
+
$check_results[ $key ]['warnings'][ $plugin_name ] = $required_value;
|
249 |
+
}
|
250 |
+
}
|
251 |
+
}
|
252 |
+
}
|
253 |
+
}
|
254 |
+
}
|
255 |
+
}
|
256 |
+
|
257 |
+
update_option(
|
258 |
+
'yith_system_info',
|
259 |
+
array(
|
260 |
+
'system_info' => $check_results,
|
261 |
+
'errors' => $errors > 0,
|
262 |
+
)
|
263 |
+
);
|
264 |
+
|
265 |
+
}
|
266 |
+
|
267 |
+
}
|
268 |
+
|
269 |
+
/**
|
270 |
+
* Handle plugin requirements
|
271 |
+
*
|
272 |
+
* @param string $plugin_name The name of the plugin.
|
273 |
+
* @param array $requirements Array of plugin requirements.
|
274 |
+
*
|
275 |
+
* @author Alberto Ruggiero
|
276 |
+
* @return void
|
277 |
+
* @since 1.0.0
|
278 |
+
*/
|
279 |
+
public function add_requirements( $plugin_name, $requirements ) {
|
280 |
+
|
281 |
+
$allowed_requirements = array_keys( $this->requirement_labels );
|
282 |
+
|
283 |
+
foreach ( $requirements as $requirement => $value ) {
|
284 |
+
|
285 |
+
if ( in_array( $requirement, $allowed_requirements, true ) ) {
|
286 |
+
$this->plugins_requirements[ $requirement ][ $plugin_name ] = $value;
|
287 |
+
}
|
288 |
+
}
|
289 |
+
|
290 |
+
}
|
291 |
+
|
292 |
+
/**
|
293 |
+
* Manages notice dismissing
|
294 |
+
*
|
295 |
+
* @author Alberto Ruggiero
|
296 |
+
* @return void
|
297 |
+
* @since 1.0.0
|
298 |
+
*/
|
299 |
+
public function enqueue_scripts() {
|
300 |
+
$script_path = defined( 'YIT_CORE_PLUGIN_URL' ) ? YIT_CORE_PLUGIN_URL : get_template_directory_uri() . '/core/plugin-fw';
|
301 |
+
wp_register_script( 'yith-system-info', yit_load_js_file( $script_path . '/assets/js/yith-system-info.js' ), array( 'jquery' ), '1.0.0', true );
|
302 |
+
|
303 |
+
if ( isset( $_GET['page'] ) && 'yith_system_info' === $_GET['page'] ) { //phpcs:ignore
|
304 |
+
wp_enqueue_style( 'yit-plugin-style' );
|
305 |
+
wp_enqueue_style( 'yith-plugin-fw-fields' );
|
306 |
+
wp_enqueue_script( 'yith-system-info' );
|
307 |
+
|
308 |
+
$params = array(
|
309 |
+
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
310 |
+
);
|
311 |
+
|
312 |
+
wp_localize_script( 'yith-system-info', 'yith_sysinfo', $params );
|
313 |
+
|
314 |
+
}
|
315 |
+
|
316 |
+
}
|
317 |
+
|
318 |
+
/**
|
319 |
+
* Show system notice
|
320 |
+
*
|
321 |
+
* @author Alberto Ruggiero
|
322 |
+
* @return void
|
323 |
+
* @since 1.0.0
|
324 |
+
*/
|
325 |
+
public function activate_system_notice() {
|
326 |
+
|
327 |
+
$system_info = get_option( 'yith_system_info', '' );
|
328 |
+
|
329 |
+
if ( ( isset( $_GET['page'] ) && $_GET['page'] === $this->page ) || ( ! empty( $_COOKIE['hide_yith_system_alert'] ) && 'yes' === $_COOKIE['hide_yith_system_alert'] ) || ( '' === $system_info ) || ( '' !== $system_info && false === $system_info['errors'] ) ) { //phpcs:ignore
|
330 |
+
return;
|
331 |
+
}
|
332 |
+
|
333 |
+
$show_notice = true;
|
334 |
+
|
335 |
+
if ( true === $show_notice ) {
|
336 |
+
wp_enqueue_script( 'yith-system-info' );
|
337 |
+
?>
|
338 |
+
<div id="yith-system-alert" class="notice notice-error is-dismissible" style="position: relative;">
|
339 |
+
<p>
|
340 |
+
<span class="yith-logo"><img src="<?php echo esc_attr( yith_plugin_fw_get_default_logo() ); ?>"/></span>
|
341 |
+
<b>
|
342 |
+
<?php esc_html_e( 'Warning!', 'yith-plugin-fw' ); ?>
|
343 |
+
</b><br/>
|
344 |
+
<?php
|
345 |
+
/* translators: %1$s open link tag, %2$s open link tag*/
|
346 |
+
echo sprintf( esc_html__( 'The system check has detected some compatibility issues on your installation.%1$sClick here%2$s to know more', 'yith-plugin-fw' ), '<a href="' . esc_url( add_query_arg( array( 'page' => $this->page ), admin_url( 'admin.php' ) ) ) . '">', '</a>' );
|
347 |
+
?>
|
348 |
+
</p>
|
349 |
+
<span class="notice-dismiss"></span>
|
350 |
+
|
351 |
+
</div>
|
352 |
+
<?php
|
353 |
+
}
|
354 |
+
}
|
355 |
+
|
356 |
+
/**
|
357 |
+
* Get system information
|
358 |
+
*
|
359 |
+
* @author Alberto Ruggiero
|
360 |
+
* @return array
|
361 |
+
* @since 1.0.0
|
362 |
+
*/
|
363 |
+
public function get_system_info() {
|
364 |
+
$tls = $this->get_tls_version();
|
365 |
+
$imagick_version = 'n/a';
|
366 |
+
|
367 |
+
// Get PHP version.
|
368 |
+
preg_match( '#^\d+(\.\d+)*#', PHP_VERSION, $match );
|
369 |
+
$php_version = $match[0];
|
370 |
+
|
371 |
+
// WP memory limit.
|
372 |
+
$wp_memory_limit = $this->memory_size_to_num( WP_MEMORY_LIMIT );
|
373 |
+
if ( function_exists( 'memory_get_usage' ) ) {
|
374 |
+
$wp_memory_limit = max( $wp_memory_limit, $this->memory_size_to_num( @ini_get( 'memory_limit' ) ) ); //phpcs:ignore
|
375 |
+
}
|
376 |
+
|
377 |
+
if ( class_exists( 'Imagick' ) && is_callable( array( 'Imagick', 'getVersion' ) ) ) {
|
378 |
+
preg_match( '/([0-9]+\.[0-9]+\.[0-9]+)/', Imagick::getVersion()['versionString'], $imatch );
|
379 |
+
$imagick_version = $imatch[0];
|
380 |
+
}
|
381 |
+
|
382 |
+
return apply_filters(
|
383 |
+
'yith_system_additional_check',
|
384 |
+
array(
|
385 |
+
'min_wp_version' => get_bloginfo( 'version' ),
|
386 |
+
'min_wc_version' => function_exists( 'WC' ) ? WC()->version : 'n/a',
|
387 |
+
'wp_memory_limit' => $wp_memory_limit,
|
388 |
+
'min_php_version' => $php_version,
|
389 |
+
'min_tls_version' => $tls,
|
390 |
+
'imagick_version' => $imagick_version,
|
391 |
+
'wp_cron_enabled' => ( ! ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) || apply_filters( 'yith_system_status_server_cron', false ) ),
|
392 |
+
'mbstring_enabled' => extension_loaded( 'mbstring' ),
|
393 |
+
'simplexml_enabled' => extension_loaded( 'simplexml' ),
|
394 |
+
'gd_enabled' => extension_loaded( 'gd' ) && function_exists( 'gd_info' ),
|
395 |
+
'iconv_enabled' => extension_loaded( 'iconv' ),
|
396 |
+
'opcache_enabled' => ini_get( 'opcache.save_comments' ),
|
397 |
+
'url_fopen_enabled' => ini_get( 'allow_url_fopen' ),
|
398 |
+
)
|
399 |
+
);
|
400 |
+
|
401 |
+
}
|
402 |
+
|
403 |
+
/**
|
404 |
+
* Get log file
|
405 |
+
*
|
406 |
+
* @author Alberto Ruggiero
|
407 |
+
* @return void
|
408 |
+
* @since 1.0.0
|
409 |
+
*/
|
410 |
+
public function create_log_file() {
|
411 |
+
if ( ! current_user_can( 'manage_options' ) || ! isset( $_POST['nonce'], $_POST['file'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'yith-export-log' ) ) {
|
412 |
+
wp_send_json( array( 'file' => false ) );
|
413 |
+
exit;
|
414 |
+
}
|
415 |
+
|
416 |
+
try {
|
417 |
+
|
418 |
+
global $wp_filesystem;
|
419 |
+
|
420 |
+
if ( empty( $wp_filesystem ) ) {
|
421 |
+
require_once ABSPATH . '/wp-admin/includes/file.php';
|
422 |
+
WP_Filesystem();
|
423 |
+
}
|
424 |
+
|
425 |
+
$download_file = false;
|
426 |
+
$file_content = '';
|
427 |
+
$requested_file = sanitize_text_field( wp_unslash( $_POST['file'] ) );
|
428 |
+
|
429 |
+
switch ( $requested_file ) {
|
430 |
+
case 'error_log':
|
431 |
+
$file_content = $wp_filesystem->get_contents( ABSPATH . 'error_log' );
|
432 |
+
break;
|
433 |
+
case 'debug.log':
|
434 |
+
$file_content = $wp_filesystem->get_contents( WP_CONTENT_DIR . '/debug.log' );
|
435 |
+
break;
|
436 |
+
}
|
437 |
+
|
438 |
+
if ( '' !== $file_content ) {
|
439 |
+
$domain = str_replace( array( 'http://', 'https://' ), '', network_site_url() );
|
440 |
+
$hash = substr( wp_hash( $domain ), 0, 16 );
|
441 |
+
$file = wp_upload_dir()['basedir'] . '/log-' . $hash . '.txt';
|
442 |
+
$download_file = wp_upload_dir()['baseurl'] . '/log-' . $hash . '.txt';
|
443 |
+
|
444 |
+
$r = $wp_filesystem->put_contents( $file, $file_content );
|
445 |
+
}
|
446 |
+
|
447 |
+
wp_send_json( array( 'file' => $download_file ) );
|
448 |
+
} catch ( Exception $e ) {
|
449 |
+
wp_send_json( array( 'file' => false ) );
|
450 |
+
}
|
451 |
+
}
|
452 |
+
|
453 |
+
/**
|
454 |
+
* Convert size into number
|
455 |
+
*
|
456 |
+
* @param string $memory_size Memory size to convert.
|
457 |
+
*
|
458 |
+
* @author Alberto Ruggiero
|
459 |
+
* @return integer
|
460 |
+
* @since 1.0.0
|
461 |
+
*/
|
462 |
+
public function memory_size_to_num( $memory_size ) {
|
463 |
+
$unit = strtoupper( substr( $memory_size, - 1 ) );
|
464 |
+
$size = substr( $memory_size, 0, - 1 );
|
465 |
+
|
466 |
+
$multiplier = array(
|
467 |
+
'P' => 5,
|
468 |
+
'T' => 4,
|
469 |
+
'G' => 3,
|
470 |
+
'M' => 2,
|
471 |
+
'K' => 1,
|
472 |
+
);
|
473 |
+
|
474 |
+
if ( isset( $multiplier[ $unit ] ) ) {
|
475 |
+
for ( $i = 1; $i <= $multiplier[ $unit ]; $i ++ ) {
|
476 |
+
$size *= 1024;
|
477 |
+
}
|
478 |
+
}
|
479 |
+
|
480 |
+
return $size;
|
481 |
+
}
|
482 |
+
|
483 |
+
/**
|
484 |
+
* Format requirement value
|
485 |
+
*
|
486 |
+
* @param string $key Requirement Key.
|
487 |
+
* @param mixed $value Requirement value.
|
488 |
+
*
|
489 |
+
* @author Alberto Ruggiero
|
490 |
+
* @return void
|
491 |
+
* @since 1.0.0
|
492 |
+
*/
|
493 |
+
public function format_requirement_value( $key, $value ) {
|
494 |
+
|
495 |
+
if ( strpos( $key, '_enabled' ) !== false ) {
|
496 |
+
echo esc_attr( $value ) ? esc_html__( 'Enabled', 'yith-plugin-fw' ) : esc_html__( 'Disabled', 'yith-plugin-fw' );
|
497 |
+
} elseif ( 'wp_memory_limit' === $key ) {
|
498 |
+
echo esc_html( size_format( $value ) );
|
499 |
+
} else {
|
500 |
+
if ( 'n/a' === $value ) {
|
501 |
+
echo esc_html__( 'N/A', 'yith-plugin-fw' );
|
502 |
+
} else {
|
503 |
+
echo esc_attr( $value );
|
504 |
+
}
|
505 |
+
}
|
506 |
+
|
507 |
+
}
|
508 |
+
|
509 |
+
/**
|
510 |
+
* Print error messages
|
511 |
+
*
|
512 |
+
* @param string $key Requirement key.
|
513 |
+
* @param array $item Requirement item.
|
514 |
+
* @param string $label Requirement label.
|
515 |
+
*
|
516 |
+
* @author Alberto Ruggiero
|
517 |
+
* @return void
|
518 |
+
* @since 1.0.0
|
519 |
+
*/
|
520 |
+
public function print_error_messages( $key, $item, $label ) {
|
521 |
+
?>
|
522 |
+
<ul>
|
523 |
+
<?php foreach ( $item['errors'] as $plugin => $requirement ) : ?>
|
524 |
+
<li>
|
525 |
+
<?php
|
526 |
+
if ( strpos( $key, '_enabled' ) !== false ) {
|
527 |
+
/* translators: %1$s plugin name, %2$s requirement name */
|
528 |
+
echo sprintf( esc_html__( '%1$s needs %2$s enabled', 'yith-plugin-fw' ), '<b>' . esc_attr( $plugin ) . '</b>', '<b>' . esc_attr( $label ) . '</b>' );
|
529 |
+
} elseif ( 'wp_memory_limit' === $key ) {
|
530 |
+
/* translators: %1$s plugin name, %2$s required memory amount */
|
531 |
+
echo sprintf( esc_html__( '%1$s needs at least %2$s of available memory', 'yith-plugin-fw' ), '<b>' . esc_attr( $plugin ) . '</b>', '<span class="error">' . esc_html( size_format( $this->memory_size_to_num( $requirement ) ) ) . '</span>' );
|
532 |
+
} else {
|
533 |
+
/* translators: %1$s plugin name, %2$s version number */
|
534 |
+
echo sprintf( esc_html__( '%1$s needs at least %2$s version', 'yith-plugin-fw' ), '<b>' . esc_attr( $plugin ) . '</b>', '<span class="error">' . esc_attr( $requirement ) . '</span>' );
|
535 |
+
}
|
536 |
+
?>
|
537 |
+
</li>
|
538 |
+
<?php endforeach; ?>
|
539 |
+
</ul>
|
540 |
+
<?php
|
541 |
+
}
|
542 |
+
|
543 |
+
/**
|
544 |
+
* Print solution suggestions
|
545 |
+
*
|
546 |
+
* @param string $key Requirement key.
|
547 |
+
* @param array $item Requirement item.
|
548 |
+
* @param string $label Requirement label.
|
549 |
+
*
|
550 |
+
* @author Alberto Ruggiero
|
551 |
+
* @return void
|
552 |
+
* @since 1.0.0
|
553 |
+
*/
|
554 |
+
public function print_solution_suggestion( $key, $item, $label ) {
|
555 |
+
switch ( $key ) {
|
556 |
+
case 'min_wp_version':
|
557 |
+
case 'min_wc_version':
|
558 |
+
esc_html_e( 'Update it to the latest version in order to benefit of all new features and security updates.', 'yith-plugin-fw' );
|
559 |
+
break;
|
560 |
+
case 'min_php_version':
|
561 |
+
case 'min_tls_version':
|
562 |
+
esc_html_e( 'Contact your hosting company in order to update it.', 'yith-plugin-fw' );
|
563 |
+
break;
|
564 |
+
case 'imagick_version':
|
565 |
+
if ( 'n/a' === $item['value'] ) {
|
566 |
+
esc_html_e( 'Contact your hosting company in order to install it.', 'yith-plugin-fw' );
|
567 |
+
} else {
|
568 |
+
esc_html_e( 'Contact your hosting company in order to update it.', 'yith-plugin-fw' );
|
569 |
+
}
|
570 |
+
break;
|
571 |
+
case 'wp_cron_enabled':
|
572 |
+
/* translators: %1$s code, %2$s file name */
|
573 |
+
echo sprintf( esc_html__( 'Remove %1$s from %2$s file', 'yith-plugin-fw' ), '<code>define( \'DISABLE_WP_CRON\', true );</code>', '<b>wp-config.php</b>' );
|
574 |
+
break;
|
575 |
+
case 'mbstring_enabled':
|
576 |
+
case 'simplexml_enabled':
|
577 |
+
case 'gd_enabled':
|
578 |
+
case 'iconv_enabled':
|
579 |
+
case 'opcache_enabled':
|
580 |
+
case 'url_fopen_enabled':
|
581 |
+
esc_html_e( 'Contact your hosting company in order to enable it.', 'yith-plugin-fw' );
|
582 |
+
break;
|
583 |
+
case 'wp_memory_limit':
|
584 |
+
/* translators: %1$s opening link tag, %2$s closing link tag */
|
585 |
+
echo sprintf( esc_html__( 'Read more %1$shere%2$s or contact your hosting company in order to increase it.', 'yith-plugin-fw' ), '<a href="https://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP" target="_blank">', '</a>' );
|
586 |
+
break;
|
587 |
+
default:
|
588 |
+
echo esc_attr( apply_filters( 'yith_system_generic_message', '', $key, $item, $label ) );
|
589 |
+
}
|
590 |
+
}
|
591 |
+
|
592 |
+
/**
|
593 |
+
* Print warning messages
|
594 |
+
*
|
595 |
+
* @param string $key Requirement Key.
|
596 |
+
*
|
597 |
+
* @author Alberto Ruggiero
|
598 |
+
* @return void
|
599 |
+
* @since 1.0.0
|
600 |
+
*/
|
601 |
+
public function print_warning_messages( $key ) {
|
602 |
+
switch ( $key ) {
|
603 |
+
case 'wp_memory_limit':
|
604 |
+
/* translators: %s recommended memory amount */
|
605 |
+
echo sprintf( esc_html__( 'For optimal functioning of our plugins, we suggest setting at least %s of available memory', 'yith-plugin-fw' ), '<span class="warning">' . esc_html( size_format( $this->recommended_memory ) ) . '</span>' );
|
606 |
+
echo '<br/>';
|
607 |
+
/* translators: %1$s opening link tag, %2$s closing link tag */
|
608 |
+
echo sprintf( esc_html__( 'Read more %1$shere%2$s or contact your hosting company in order to increase it.', 'yith-plugin-fw' ), '<a href="https://codex.wordpress.org/Editing_wp-config.php#Increasing_memory_allocated_to_PHP" target="_blank">', '</a>' );
|
609 |
+
break;
|
610 |
+
case 'min_tls_version':
|
611 |
+
if ( ! function_exists( 'curl_init' ) ) {
|
612 |
+
/* translators: %1$s TLS label, %2$s cURL label */
|
613 |
+
echo sprintf( esc_html__( 'The system check cannot determine which %1$s version is installed because %2$s module is disabled. Ask your hosting company to enable it.', 'yith-plugin-fw' ), '<b>TLS</b>', '<b>cURL</b>' );
|
614 |
+
} else {
|
615 |
+
/* translators: %1$s TLS label */
|
616 |
+
echo sprintf( esc_html__( 'The system check cannot determine which %1$s version is installed due to a connection issue between your site and our server.', 'yith-plugin-fw' ), '<b>TLS</b>' );
|
617 |
+
}
|
618 |
+
break;
|
619 |
+
}
|
620 |
+
}
|
621 |
+
|
622 |
+
/**
|
623 |
+
* Retrieve the TLS Version
|
624 |
+
*
|
625 |
+
* @return string
|
626 |
+
* @since 3.5
|
627 |
+
*/
|
628 |
+
public function get_tls_version() {
|
629 |
+
$tls = get_transient( 'yith-plugin-fw-system-status-tls-version' );
|
630 |
+
|
631 |
+
if ( ! $tls && apply_filters( 'yith_system_status_check_ssl', true ) ) {
|
632 |
+
$services = array(
|
633 |
+
array(
|
634 |
+
'url' => 'https://www.howsmyssl.com/a/check',
|
635 |
+
'string_to_remove' => 'TLS ',
|
636 |
+
'prop' => 'tls_version',
|
637 |
+
),
|
638 |
+
array(
|
639 |
+
'url' => 'https://ttl-version.yithemes.workers.dev/',
|
640 |
+
'string_to_remove' => 'TLSv',
|
641 |
+
'prop' => 'tlsVersion',
|
642 |
+
),
|
643 |
+
);
|
644 |
+
$params = array(
|
645 |
+
'sslverify' => false,
|
646 |
+
'timeout' => 60,
|
647 |
+
'headers' => array( 'Content-Type' => 'application/json' ),
|
648 |
+
);
|
649 |
+
|
650 |
+
foreach ( $services as $service ) {
|
651 |
+
$url = $service['url'];
|
652 |
+
$string_to_remove = $service['string_to_remove'];
|
653 |
+
$prop = $service['prop'];
|
654 |
+
|
655 |
+
$response = wp_remote_get( $url, $params );
|
656 |
+
|
657 |
+
if ( ! is_wp_error( $response ) && 200 === absint( $response['response']['code'] ) && 'OK' === $response['response']['message'] ) {
|
658 |
+
$body = json_decode( $response['body'] );
|
659 |
+
$version = $body && is_object( $body ) && property_exists( $body, $prop ) ? $body->{$prop} : false;
|
660 |
+
if ( $version ) {
|
661 |
+
$tls = str_replace( $string_to_remove, '', $version );
|
662 |
+
break;
|
663 |
+
}
|
664 |
+
}
|
665 |
+
}
|
666 |
+
$tls = ! ! $tls ? $tls : 'n/a';
|
667 |
+
|
668 |
+
set_transient( 'yith-plugin-fw-system-status-tls-version', $tls, 300 );
|
669 |
+
}
|
670 |
+
|
671 |
+
return ! ! $tls ? $tls : 'n/a';
|
672 |
+
}
|
673 |
+
|
674 |
+
/**
|
675 |
+
* Retrieve the output IP Address.
|
676 |
+
*
|
677 |
+
* @return string
|
678 |
+
* @since 3.5
|
679 |
+
*/
|
680 |
+
public function get_output_ip() {
|
681 |
+
$ip = get_transient( 'yith-plugin-fw-system-status-output-ip' );
|
682 |
+
|
683 |
+
if ( ! $ip && apply_filters( 'yith_system_status_check_ip', true ) ) {
|
684 |
+
$url = 'https://ifconfig.co/ip';
|
685 |
+
$params = array(
|
686 |
+
'sslverify' => false,
|
687 |
+
'timeout' => 60,
|
688 |
+
);
|
689 |
+
|
690 |
+
$response = wp_remote_get( $url, $params );
|
691 |
+
|
692 |
+
if ( ! is_wp_error( $response ) && 200 === absint( $response['response']['code'] ) && 'OK' === $response['response']['message'] ) {
|
693 |
+
$body = $response['body'];
|
694 |
+
|
695 |
+
// Check for IPv4.
|
696 |
+
preg_match( '/((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])/', $body, $matches );
|
697 |
+
// Check for IPv6.
|
698 |
+
if ( empty( $matches ) ) {
|
699 |
+
preg_match( '/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/', $body, $matches );
|
700 |
+
}
|
701 |
+
|
702 |
+
$ip = ! empty( $matches ) ? $matches[0] : 'n/a';
|
703 |
+
}
|
704 |
+
|
705 |
+
$ip = ! ! $ip ? $ip : 'n/a';
|
706 |
+
|
707 |
+
set_transient( 'yith-plugin-fw-system-status-output-ip', $ip, 300 );
|
708 |
+
}
|
709 |
+
|
710 |
+
return ! ! $ip ? $ip : 'n/a';
|
711 |
+
}
|
712 |
+
|
713 |
+
/**
|
714 |
+
* Retrieve plugin-fw info, such as version and loaded-by.
|
715 |
+
*
|
716 |
+
* @return array
|
717 |
+
*/
|
718 |
+
public function get_plugin_fw_info() {
|
719 |
+
$version = yith_plugin_fw_get_version();
|
720 |
+
$loaded_by = basename( dirname( YIT_CORE_PLUGIN_PATH ) );
|
721 |
+
$loaded_by_init = trailingslashit( dirname( YIT_CORE_PLUGIN_PATH ) ) . 'init.php';
|
722 |
+
if ( file_exists( $loaded_by_init ) ) {
|
723 |
+
$plugin_data = get_plugin_data( $loaded_by_init );
|
724 |
+
$loaded_by = $plugin_data['Name'] ?? $loaded_by;
|
725 |
+
}
|
726 |
+
|
727 |
+
return compact( 'version', 'loaded_by' );
|
728 |
+
}
|
729 |
+
|
730 |
+
/**
|
731 |
+
* Retrieve database info, such as MySQL version and database size.
|
732 |
+
*
|
733 |
+
* @return array
|
734 |
+
*/
|
735 |
+
public function get_database_info() {
|
736 |
+
|
737 |
+
global $wpdb;
|
738 |
+
|
739 |
+
$database_version = $wpdb->get_row( //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
740 |
+
'SELECT
|
741 |
+
@@GLOBAL.version_comment AS string,
|
742 |
+
@@GLOBAL.version AS number',
|
743 |
+
ARRAY_A
|
744 |
+
);
|
745 |
+
|
746 |
+
$tables = array();
|
747 |
+
$database_size = array();
|
748 |
+
|
749 |
+
// It is not possible to get the database name from some classes that replace wpdb (e.g., HyperDB)
|
750 |
+
// and that is why this if condition is needed.
|
751 |
+
if ( defined( 'DB_NAME' ) ) {
|
752 |
+
$database_table_information = $wpdb->get_results( //phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
|
753 |
+
$wpdb->prepare(
|
754 |
+
"SELECT
|
755 |
+
table_name AS 'name',
|
756 |
+
engine AS 'engine',
|
757 |
+
round( ( data_length / 1024 / 1024 ), 2 ) 'data',
|
758 |
+
round( ( index_length / 1024 / 1024 ), 2 ) 'index',
|
759 |
+
round( ( data_free / 1024 / 1024 ), 2 ) 'free'
|
760 |
+
FROM information_schema.TABLES
|
761 |
+
WHERE table_schema = %s
|
762 |
+
ORDER BY name ASC;",
|
763 |
+
DB_NAME
|
764 |
+
)
|
765 |
+
);
|
766 |
+
|
767 |
+
$database_size = array(
|
768 |
+
'data' => 0,
|
769 |
+
'index' => 0,
|
770 |
+
'free' => 0,
|
771 |
+
);
|
772 |
+
|
773 |
+
$site_tables_prefix = $wpdb->get_blog_prefix( get_current_blog_id() );
|
774 |
+
$global_tables = $wpdb->tables( 'global', true );
|
775 |
+
foreach ( $database_table_information as $table ) {
|
776 |
+
// Only include tables matching the prefix of the current site, this is to prevent displaying all tables on a MS install not relating to the current.
|
777 |
+
if ( is_multisite() && 0 !== strpos( $table->name, $site_tables_prefix ) && ! in_array( $table->name, $global_tables, true ) ) {
|
778 |
+
continue;
|
779 |
+
}
|
780 |
+
|
781 |
+
$tables[ $table->name ] = array(
|
782 |
+
'data' => $table->data,
|
783 |
+
'index' => $table->index,
|
784 |
+
'free' => $table->free,
|
785 |
+
'engine' => $table->engine,
|
786 |
+
);
|
787 |
+
|
788 |
+
$database_size['data'] += $table->data;
|
789 |
+
$database_size['index'] += $table->index;
|
790 |
+
$database_size['free'] += $table->free;
|
791 |
+
}
|
792 |
+
}
|
793 |
+
|
794 |
+
return apply_filters(
|
795 |
+
'yith_database_info',
|
796 |
+
array(
|
797 |
+
'mysql_version' => $database_version['number'],
|
798 |
+
'mysql_version_string' => $database_version['string'],
|
799 |
+
'database_tables' => $tables,
|
800 |
+
'database_size' => $database_size,
|
801 |
+
)
|
802 |
+
);
|
803 |
+
}
|
804 |
+
|
805 |
+
}
|
806 |
+
}
|
807 |
+
|
808 |
+
if ( ! function_exists( 'YITH_System_Status' ) ) {
|
809 |
+
/**
|
810 |
+
* Single instance of YITH_System_Status
|
811 |
+
*
|
812 |
+
* @author Alberto Ruggiero
|
813 |
+
* @return YITH_System_Status
|
814 |
+
* @since 1.0
|
815 |
+
*/
|
816 |
+
function YITH_System_Status() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
|
817 |
+
return YITH_System_Status::instance();
|
818 |
+
}
|
819 |
+
}
|
820 |
+
|
821 |
+
YITH_System_Status();
|
plugin-fw/includes/privacy/class-yith-privacy 2.php
ADDED
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Privacy Class
|
4 |
+
* handle privacy for GDPR
|
5 |
+
*
|
6 |
+
* @class YITH_Privacy
|
7 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
8 |
+
* @package YITH\PluginFramework\Classes
|
9 |
+
*/
|
10 |
+
|
11 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
12 |
+
|
13 |
+
if ( ! class_exists( 'YITH_Privacy' ) ) {
|
14 |
+
/**
|
15 |
+
* Class YITH_Privacy
|
16 |
+
*/
|
17 |
+
class YITH_Privacy {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* The single instance of the class.
|
21 |
+
*
|
22 |
+
* @var YITH_Privacy
|
23 |
+
*/
|
24 |
+
private static $instance;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Singleton implementation.
|
28 |
+
*
|
29 |
+
* @return YITH_Privacy
|
30 |
+
*/
|
31 |
+
public static function instance() {
|
32 |
+
return ! is_null( self::$instance ) ? self::$instance : self::$instance = new self();
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Deprecated singleton implementation.
|
37 |
+
* Kept for backward compatibility.
|
38 |
+
*
|
39 |
+
* @return YITH_Privacy
|
40 |
+
* @deprecated 3.5 | use YITH_Privacy::get_instance() instead.
|
41 |
+
*/
|
42 |
+
public static function get_instance() {
|
43 |
+
return self::instance();
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* YITH_Privacy constructor.
|
48 |
+
*/
|
49 |
+
private function __construct() {
|
50 |
+
add_action( 'admin_init', array( $this, 'add_privacy_message' ) );
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Adds the privacy message on YITH privacy page.
|
55 |
+
*/
|
56 |
+
public function add_privacy_message() {
|
57 |
+
if ( function_exists( 'wp_add_privacy_policy_content' ) ) {
|
58 |
+
$content = $this->get_privacy_message();
|
59 |
+
|
60 |
+
if ( $content ) {
|
61 |
+
$title = apply_filters( 'yith_plugin_fw_privacy_policy_guide_title', _x( 'YITH Plugins', 'Privacy Policy Guide Title', 'yith-plugin-fw' ) );
|
62 |
+
wp_add_privacy_policy_content( $title, $content );
|
63 |
+
}
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Get the privacy message.
|
69 |
+
*
|
70 |
+
* @return string
|
71 |
+
*/
|
72 |
+
public function get_privacy_message() {
|
73 |
+
$privacy_content_path = YIT_CORE_PLUGIN_TEMPLATE_PATH . '/privacy/html-policy-content.php';
|
74 |
+
ob_start();
|
75 |
+
$sections = $this->get_sections();
|
76 |
+
if ( file_exists( $privacy_content_path ) ) {
|
77 |
+
include $privacy_content_path;
|
78 |
+
}
|
79 |
+
|
80 |
+
return apply_filters( 'yith_plugin_fw_privacy_policy_content', ob_get_clean() );
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Get the sections.
|
85 |
+
*
|
86 |
+
* @return array
|
87 |
+
*/
|
88 |
+
public function get_sections() {
|
89 |
+
return apply_filters(
|
90 |
+
'yith_plugin_fw_privacy_policy_content_sections',
|
91 |
+
array(
|
92 |
+
'general' => array(
|
93 |
+
'tutorial' => _x( 'This sample language includes the basics around what personal data your store may be collecting, storing and sharing, as well as who may have access to that data. Depending on what settings are enabled and which additional plugins are used, the specific information shared by your store will vary. We recommend consulting with a lawyer when deciding what information to disclose on your privacy policy.', 'Privacy Policy Content', 'yith-plugin-fw' ),
|
94 |
+
'description' => '',
|
95 |
+
),
|
96 |
+
'collect_and_store' => array(
|
97 |
+
'title' => _x( 'What we collect and store', 'Privacy Policy Content', 'yith-plugin-fw' ),
|
98 |
+
),
|
99 |
+
'has_access' => array(
|
100 |
+
'title' => _x( 'Who on our team has access', 'Privacy Policy Content', 'yith-plugin-fw' ),
|
101 |
+
),
|
102 |
+
'share' => array(
|
103 |
+
'title' => _x( 'What we share with others', 'Privacy Policy Content', 'yith-plugin-fw' ),
|
104 |
+
),
|
105 |
+
'payments' => array(
|
106 |
+
'title' => _x( 'Payments', 'Privacy Policy Content', 'yith-plugin-fw' ),
|
107 |
+
),
|
108 |
+
)
|
109 |
+
);
|
110 |
+
}
|
111 |
+
}
|
112 |
+
}
|
113 |
+
|
114 |
+
YITH_Privacy::instance();
|
plugin-fw/includes/privacy/class-yith-privacy-plugin-abstract 2.php
ADDED
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* YITH Privacy Abstract Class
|
4 |
+
* abstract class to handle privacy in plugins
|
5 |
+
*
|
6 |
+
* @class YITH_Privacy_Plugin_Abstract
|
7 |
+
* @author Leanza Francesco <leanzafrancesco@gmail.com>
|
8 |
+
* @package YITH\PluginFramework\Classes
|
9 |
+
*/
|
10 |
+
|
11 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
12 |
+
|
13 |
+
if ( ! class_exists( 'YITH_Privacy_Plugin_Abstract' ) ) {
|
14 |
+
/**
|
15 |
+
* Class YITH_Privacy_Plugin_Abstract
|
16 |
+
*/
|
17 |
+
class YITH_Privacy_Plugin_Abstract {
|
18 |
+
/**
|
19 |
+
* The plugin name.
|
20 |
+
*
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
private $plugin_name;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* YITH_Privacy_Plugin_Abstract constructor.
|
27 |
+
*
|
28 |
+
* @param string $plugin_name The plugin name.
|
29 |
+
*/
|
30 |
+
public function __construct( $plugin_name ) {
|
31 |
+
$this->plugin_name = $plugin_name;
|
32 |
+
$this->init();
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Let's initialize the privacy.
|
37 |
+
*/
|
38 |
+
protected function init() {
|
39 |
+
add_filter( 'yith_plugin_fw_privacy_guide_content', array( $this, 'add_message_in_section' ), 10, 2 );
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Add message in a specific section.
|
44 |
+
*
|
45 |
+
* @param string $html The HTML of the section.
|
46 |
+
* @param string $section The section.
|
47 |
+
*
|
48 |
+
* @return string
|
49 |
+
*/
|
50 |
+
public function add_message_in_section( $html, $section ) {
|
51 |
+
$message = $this->get_privacy_message( $section );
|
52 |
+
if ( $message ) {
|
53 |
+
$html .= "<p class='privacy-policy-tutorial'><strong>{$this->plugin_name}</strong></p>";
|
54 |
+
$html .= $message;
|
55 |
+
}
|
56 |
+
|
57 |
+
return $html;
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Retrieve the privacy message.
|
62 |
+
* Override me to customize the messages for each section.
|
63 |
+
*
|
64 |
+
* @param string $section The section.
|
65 |
+
*
|
66 |
+
* @return string
|
67 |
+
*/
|
68 |
+
public function get_privacy_message( $section ) {
|
69 |
+
return '';
|
70 |
+
}
|
71 |
+
}
|
72 |
+
}
|
plugin-fw/init 2.php
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Framework Name: YIT Plugin Framework
|
4 |
+
* Version: 3.9.17
|
5 |
+
* Author: YITH
|
6 |
+
* Text Domain: yith-plugin-fw
|
7 |
+
* Domain Path: /languages/
|
8 |
+
*
|
9 |
+
* @author YITH
|
10 |
+
* @version 3.9.17
|
11 |
+
* @package YITH\PluginFramework
|
12 |
+
*/
|
13 |
+
|
14 |
+
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
|
15 |
+
|
16 |
+
if ( ! function_exists( 'yit_maybe_plugin_fw_loader' ) ) {
|
17 |
+
/**
|
18 |
+
* Load the framework if it's not yet loaded.
|
19 |
+
*
|
20 |
+
* @param string $plugin_path The plugin path.
|
21 |
+
*/
|
22 |
+
function yit_maybe_plugin_fw_loader( $plugin_path ) {
|
23 |
+
global $plugin_fw_data, $plugin_upgrade_fw_data;
|
24 |
+
|
25 |
+
$default_headers = array(
|
26 |
+
'Name' => 'Framework Name',
|
27 |
+
'Version' => 'Version',
|
28 |
+
'Author' => 'Author',
|
29 |
+
'TextDomain' => 'Text Domain',
|
30 |
+
'DomainPath' => 'Domain Path',
|
31 |
+
);
|
32 |
+
|
33 |
+
$plugin_path = trailingslashit( $plugin_path );
|
34 |
+
$framework_data = get_file_data( $plugin_path . 'plugin-fw/init.php', $default_headers );
|
35 |
+
$plugin_fw_main_file = $plugin_path . 'plugin-fw/yit-plugin.php';
|
36 |
+
|
37 |
+
if ( ! empty( $plugin_fw_data ) ) {
|
38 |
+
foreach ( $plugin_fw_data as $version => $path ) {
|
39 |
+
if ( version_compare( $version, $framework_data['Version'], '<' ) ) {
|
40 |
+
$plugin_fw_data = array( $framework_data['Version'] => $plugin_fw_main_file );
|
41 |
+
}
|
42 |
+
}
|
43 |
+
} else {
|
44 |
+
$plugin_fw_data = array( $framework_data['Version'] => $plugin_fw_main_file );
|
45 |
+
}
|
46 |
+
|
47 |
+
// Check for license & upgrade classes.
|
48 |
+
$upgrade_fw_init_file = $plugin_path . 'plugin-upgrade/init.php';
|
49 |
+
$framework_data = file_exists( $upgrade_fw_init_file ) ? get_file_data( $upgrade_fw_init_file, $default_headers ) : $framework_data;
|
50 |
+
$plugin_license_path = $plugin_path . 'plugin-upgrade';
|
51 |
+
$plugin_upgrade_path = $plugin_path . 'plugin-upgrade';
|
52 |
+
|
53 |
+
if ( ! file_exists( $plugin_upgrade_path ) ) {
|
54 |
+
// Check path for OLD plugin framework version.
|
55 |
+
if ( file_exists( $plugin_path . 'plugin-fw/licence' ) ) {
|
56 |
+
$plugin_license_path = $plugin_path . 'plugin-fw/licence';
|
57 |
+
$plugin_upgrade_path = $plugin_path . 'plugin-fw/';
|
58 |
+
} else {
|
59 |
+
$plugin_upgrade_path = false;
|
60 |
+
$plugin_license_path = false;
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
if ( file_exists( $plugin_upgrade_path ) ) {
|
65 |
+
if ( ! empty( $plugin_upgrade_fw_data ) ) {
|
66 |
+
foreach ( $plugin_upgrade_fw_data as $version => $files ) {
|
67 |
+
if ( version_compare( $version, $framework_data['Version'], '<' ) ) {
|
68 |
+
$plugin_upgrade_fw_data = array( $framework_data['Version'] => yit_get_upgrade_files( $plugin_license_path, $plugin_upgrade_path ) );
|
69 |
+
}
|
70 |
+
}
|
71 |
+
} else {
|
72 |
+
$plugin_upgrade_fw_data = array( $framework_data['Version'] => yit_get_upgrade_files( $plugin_license_path, $plugin_upgrade_path ) );
|
73 |
+
}
|
74 |
+
}
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
if ( ! function_exists( 'yit_get_upgrade_files' ) ) {
|
79 |
+
/**
|
80 |
+
* Retrieve the core files to include to manage license and upgrade if exists.
|
81 |
+
*
|
82 |
+
* @param string $plugin_license_path The license path.
|
83 |
+
* @param string $plugin_upgrade_path The upgrade path.
|
84 |
+
*
|
85 |
+
* @return array to files to include
|
86 |
+
*/
|
87 |
+
function yit_get_upgrade_files( $plugin_license_path, $plugin_upgrade_path = '' ) {
|
88 |
+
$to_include = array();
|
89 |
+
|
90 |
+
if ( ! ! $plugin_license_path ) {
|
91 |
+
$plugin_upgrade_path = empty( $plugin_upgrade_path ) ? $plugin_license_path : $plugin_upgrade_path;
|
92 |
+
$license_files = array(
|
93 |
+
'%yith-license-path%/lib/yit-licence.php',
|
94 |
+
'%yith-license-path%/lib/yit-plugin-licence.php',
|
95 |
+
'%yith-license-path%/lib/yit-theme-licence.php',
|
96 |
+
);
|
97 |
+
|
98 |
+
$upgrade_files = array( '%yith-upgrade-path%/lib/yit-plugin-upgrade.php' );
|
99 |
+
|
100 |
+
$to_include_license = str_replace( '%yith-license-path%', $plugin_license_path, $license_files );
|
101 |
+
$to_include_upgrade = str_replace( '%yith-upgrade-path%', $plugin_upgrade_path, $upgrade_files );
|
102 |
+
|
103 |
+
$to_include = array_merge( $to_include_license, $to_include_upgrade );
|
104 |
+
}
|
105 |
+
|
106 |
+
return $to_include;
|
107 |
+
}
|
108 |
+
}
|
plugin-fw/languages/yith-plugin-fw 2.pot
ADDED
@@ -0,0 +1,1119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2022
|
2 |
+
# This file is distributed under the same license as the package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: \n"
|
6 |
+
"Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
|
7 |
+
"POT-Creation-Date: 2022-11-11 07:31:10+00:00\n"
|
8 |
+
"MIME-Version: 1.0\n"
|
9 |
+
"Content-Type: text/plain; charset=utf-8\n"
|
10 |
+
"Content-Transfer-Encoding: 8bit\n"
|
11 |
+
"PO-Revision-Date: 2022-MO-DA HO:MI+ZONE\n"
|
12 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
13 |
+
"Language-Team: YITH <info@yithemes.com>\n"
|
14 |
+
"Language: en\n"
|
15 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
16 |
+
"X-Poedit-Country: United States\n"
|
17 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
18 |
+
"X-Poedit-KeywordsList: "
|
19 |
+
"__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
|
20 |
+
"attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
|
21 |
+
"X-Poedit-Basepath: ../\n"
|
22 |
+
"X-Poedit-SearchPath-0: .\n"
|
23 |
+
"X-Poedit-Bookmarks: \n"
|
24 |
+
"X-Textdomain-Support: yes\n"
|
25 |
+
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
26 |
+
|
27 |
+
#: includes/class-yit-assets.php:148 yit-functions.php:2006
|
28 |
+
msgid "Confirm trash"
|
29 |
+
msgstr ""
|
30 |
+
|
31 |
+
#: includes/class-yit-assets.php:149
|
32 |
+
msgid "Are you sure you want to trash the selected items?"
|
33 |
+
msgstr ""
|
34 |
+
|
35 |
+
#: includes/class-yit-assets.php:151 includes/class-yit-assets.php:155
|
36 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
37 |
+
#: yit-functions.php:2008 yit-functions.php:2026
|
38 |
+
msgid "No"
|
39 |
+
msgstr ""
|
40 |
+
|
41 |
+
#: includes/class-yit-assets.php:152 yit-functions.php:2024
|
42 |
+
#: yit-functions.php:2152
|
43 |
+
msgid "Confirm delete"
|
44 |
+
msgstr ""
|
45 |
+
|
46 |
+
#: includes/class-yit-assets.php:153
|
47 |
+
msgid "Are you sure you want to delete the selected items?"
|
48 |
+
msgstr ""
|
49 |
+
|
50 |
+
#: includes/class-yit-assets.php:153 yit-functions.php:1940
|
51 |
+
#: yit-functions.php:2100
|
52 |
+
msgid "This action cannot be undone and you will not be able to recover this data."
|
53 |
+
msgstr ""
|
54 |
+
|
55 |
+
#: includes/class-yit-assets.php:174
|
56 |
+
msgid "Clear"
|
57 |
+
msgstr ""
|
58 |
+
|
59 |
+
#: includes/class-yit-assets.php:175
|
60 |
+
msgid "Clear color"
|
61 |
+
msgstr ""
|
62 |
+
|
63 |
+
#: includes/class-yit-assets.php:176
|
64 |
+
msgid "Default"
|
65 |
+
msgstr ""
|
66 |
+
|
67 |
+
#: includes/class-yit-assets.php:177
|
68 |
+
msgid "Select default color"
|
69 |
+
msgstr ""
|
70 |
+
|
71 |
+
#: includes/class-yit-assets.php:178
|
72 |
+
msgid "Select Color"
|
73 |
+
msgstr ""
|
74 |
+
|
75 |
+
#: includes/class-yit-assets.php:179
|
76 |
+
msgid "Color value"
|
77 |
+
msgstr ""
|
78 |
+
|
79 |
+
#: includes/class-yit-help-desk.php:152
|
80 |
+
msgid "There was an error with your request; please try again later."
|
81 |
+
msgstr ""
|
82 |
+
|
83 |
+
#: includes/class-yit-plugin-panel-woocommerce.php:437
|
84 |
+
msgid "The changes you have made will be lost if you leave this page."
|
85 |
+
msgstr ""
|
86 |
+
|
87 |
+
#: includes/class-yit-plugin-panel.php:83
|
88 |
+
msgid "Plugin Settings"
|
89 |
+
msgstr ""
|
90 |
+
|
91 |
+
#: includes/class-yit-plugin-panel.php:84
|
92 |
+
msgid "Settings"
|
93 |
+
msgstr ""
|
94 |
+
|
95 |
+
#: includes/class-yit-plugin-panel.php:456
|
96 |
+
#: includes/class-yit-plugin-panel.php:459
|
97 |
+
msgid "How to install premium version"
|
98 |
+
msgstr ""
|
99 |
+
|
100 |
+
#: includes/class-yit-plugin-panel.php:656
|
101 |
+
#: includes/class-yit-plugin-subpanel.php:133
|
102 |
+
msgid "Save Changes"
|
103 |
+
msgstr ""
|
104 |
+
|
105 |
+
#: includes/class-yit-plugin-panel.php:664
|
106 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
107 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
108 |
+
msgid "If you continue with this action, you will reset all options in this page."
|
109 |
+
msgstr ""
|
110 |
+
|
111 |
+
#: includes/class-yit-plugin-panel.php:664
|
112 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
113 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
114 |
+
msgid "Are you sure?"
|
115 |
+
msgstr ""
|
116 |
+
|
117 |
+
#: includes/class-yit-plugin-panel.php:668
|
118 |
+
#: includes/class-yit-plugin-subpanel.php:143
|
119 |
+
msgid "Reset to default"
|
120 |
+
msgstr ""
|
121 |
+
|
122 |
+
#: includes/class-yit-plugin-panel.php:1039
|
123 |
+
msgid "Read the <mark>plugin documentation</mark>"
|
124 |
+
msgstr ""
|
125 |
+
|
126 |
+
#: includes/class-yit-plugin-panel.php:1040
|
127 |
+
msgid "Learn what you can really do with this powerful tool"
|
128 |
+
msgstr ""
|
129 |
+
|
130 |
+
#: includes/class-yit-plugin-panel.php:1050
|
131 |
+
msgid "Watch our <mark>\"First Steps\" video</mark>"
|
132 |
+
msgstr ""
|
133 |
+
|
134 |
+
#: includes/class-yit-plugin-panel.php:1051
|
135 |
+
msgid "See how it works before you start using it"
|
136 |
+
msgstr ""
|
137 |
+
|
138 |
+
#: includes/class-yit-plugin-panel.php:1307
|
139 |
+
msgid "The element you have entered already exists. Please, enter another name."
|
140 |
+
msgstr ""
|
141 |
+
|
142 |
+
#: includes/class-yit-plugin-panel.php:1308
|
143 |
+
msgid "Settings saved"
|
144 |
+
msgstr ""
|
145 |
+
|
146 |
+
#: includes/class-yit-plugin-panel.php:1309
|
147 |
+
msgid "Settings reset"
|
148 |
+
msgstr ""
|
149 |
+
|
150 |
+
#: includes/class-yit-plugin-panel.php:1310
|
151 |
+
msgid "Element deleted correctly."
|
152 |
+
msgstr ""
|
153 |
+
|
154 |
+
#: includes/class-yit-plugin-panel.php:1311
|
155 |
+
#: includes/class-yit-plugin-panel.php:1312
|
156 |
+
msgid "Element updated correctly."
|
157 |
+
msgstr ""
|
158 |
+
|
159 |
+
#: includes/class-yit-plugin-panel.php:1313
|
160 |
+
msgid "Database imported correctly."
|
161 |
+
msgstr ""
|
162 |
+
|
163 |
+
#: includes/class-yit-plugin-panel.php:1314
|
164 |
+
msgid "An error has occurred during import. Please try again."
|
165 |
+
msgstr ""
|
166 |
+
|
167 |
+
#: includes/class-yit-plugin-panel.php:1315
|
168 |
+
msgid "The added file is not valid."
|
169 |
+
msgstr ""
|
170 |
+
|
171 |
+
#: includes/class-yit-plugin-panel.php:1316
|
172 |
+
msgid "Sorry, import is disabled."
|
173 |
+
msgstr ""
|
174 |
+
|
175 |
+
#: includes/class-yit-plugin-panel.php:1317
|
176 |
+
msgid "Sorting successful."
|
177 |
+
msgstr ""
|
178 |
+
|
179 |
+
#: includes/class-yit-plugin-panel.php:1806
|
180 |
+
msgid "We need your support"
|
181 |
+
msgstr ""
|
182 |
+
|
183 |
+
#: includes/class-yit-plugin-panel.php:1807
|
184 |
+
msgid "to keep updating and improving the plugin. Please,"
|
185 |
+
msgstr ""
|
186 |
+
|
187 |
+
#: includes/class-yit-plugin-panel.php:1809
|
188 |
+
msgid "help us by leaving a good review"
|
189 |
+
msgstr ""
|
190 |
+
|
191 |
+
#: includes/class-yit-plugin-panel.php:1810
|
192 |
+
msgid ":) Thanks!"
|
193 |
+
msgstr ""
|
194 |
+
|
195 |
+
#: includes/class-yit-pointers.php:80
|
196 |
+
msgid "Plugins Activated"
|
197 |
+
msgstr ""
|
198 |
+
|
199 |
+
#: includes/class-yit-pointers.php:81
|
200 |
+
msgid ""
|
201 |
+
"From now on, you can find all plugin options in YITH menu. Plugin "
|
202 |
+
"customization settings will be available as a new entry in YITH menu."
|
203 |
+
msgstr ""
|
204 |
+
|
205 |
+
#: includes/class-yit-pointers.php:84 includes/class-yit-pointers.php:100
|
206 |
+
#. translators: 1. YITH site link; 2. WordPress site link.
|
207 |
+
msgid "Discover all our plugins available on: %1$s and %2$s"
|
208 |
+
msgstr ""
|
209 |
+
|
210 |
+
#: includes/class-yit-pointers.php:96
|
211 |
+
msgid "Plugins Upgraded"
|
212 |
+
msgstr ""
|
213 |
+
|
214 |
+
#: includes/class-yit-pointers.php:97
|
215 |
+
msgid ""
|
216 |
+
"From now on, you can find the option panel of YITH plugins in YITH menu. "
|
217 |
+
"Every time one of our plugins is added, a new entry will be added to this "
|
218 |
+
"menu. For example, after the update, plugin options (such as for YITH "
|
219 |
+
"WooCommerce Wishlist, YITH WooCommerce Ajax Search, etc.) will be moved "
|
220 |
+
"from previous location to YITH menu."
|
221 |
+
msgstr ""
|
222 |
+
|
223 |
+
#: includes/class-yith-bh-onboarding.php:85
|
224 |
+
msgid "It is not possible save the options"
|
225 |
+
msgstr ""
|
226 |
+
|
227 |
+
#: includes/class-yith-dashboard.php:35
|
228 |
+
msgid "YITH Latest Updates"
|
229 |
+
msgstr ""
|
230 |
+
|
231 |
+
#: includes/class-yith-dashboard.php:36
|
232 |
+
msgid "Latest news from YITH Blog"
|
233 |
+
msgstr ""
|
234 |
+
|
235 |
+
#: includes/class-yith-dashboard.php:56
|
236 |
+
msgid "RSS Error:"
|
237 |
+
msgstr ""
|
238 |
+
|
239 |
+
#: includes/class-yith-dashboard.php:63
|
240 |
+
msgid ""
|
241 |
+
"An error has occurred, which probably means the feed is down. Try again "
|
242 |
+
"later."
|
243 |
+
msgstr ""
|
244 |
+
|
245 |
+
#: includes/class-yith-post-type-admin.php:286
|
246 |
+
#. translators: %s is the name of the post type (example Back to "Membership
|
247 |
+
#. Plans").
|
248 |
+
msgid "Back to \"%s\""
|
249 |
+
msgstr ""
|
250 |
+
|
251 |
+
#: includes/class-yith-post-type-admin.php:286
|
252 |
+
msgid "Back to the list"
|
253 |
+
msgstr ""
|
254 |
+
|
255 |
+
#: includes/class-yith-system-status.php:110
|
256 |
+
msgid "WordPress Version"
|
257 |
+
msgstr ""
|
258 |
+
|
259 |
+
#: includes/class-yith-system-status.php:111
|
260 |
+
msgid "WooCommerce Version"
|
261 |
+
msgstr ""
|
262 |
+
|
263 |
+
#: includes/class-yith-system-status.php:112
|
264 |
+
msgid "Available Memory"
|
265 |
+
msgstr ""
|
266 |
+
|
267 |
+
#: includes/class-yith-system-status.php:113
|
268 |
+
msgid "PHP Version"
|
269 |
+
msgstr ""
|
270 |
+
|
271 |
+
#: includes/class-yith-system-status.php:114
|
272 |
+
msgid "TLS Version"
|
273 |
+
msgstr ""
|
274 |
+
|
275 |
+
#: includes/class-yith-system-status.php:115
|
276 |
+
msgid "WordPress Cron"
|
277 |
+
msgstr ""
|
278 |
+
|
279 |
+
#: includes/class-yith-system-status.php:116
|
280 |
+
msgid "SimpleXML"
|
281 |
+
msgstr ""
|
282 |
+
|
283 |
+
#: includes/class-yith-system-status.php:117
|
284 |
+
msgid "MultiByte String"
|
285 |
+
msgstr ""
|
286 |
+
|
287 |
+
#: includes/class-yith-system-status.php:118
|
288 |
+
msgid "ImageMagick Version"
|
289 |
+
msgstr ""
|
290 |
+
|
291 |
+
#: includes/class-yith-system-status.php:119
|
292 |
+
msgid "GD Library"
|
293 |
+
msgstr ""
|
294 |
+
|
295 |
+
#: includes/class-yith-system-status.php:120
|
296 |
+
msgid "Iconv Module"
|
297 |
+
msgstr ""
|
298 |
+
|
299 |
+
#: includes/class-yith-system-status.php:121
|
300 |
+
msgid "OPCache Save Comments"
|
301 |
+
msgstr ""
|
302 |
+
|
303 |
+
#: includes/class-yith-system-status.php:122
|
304 |
+
msgid "URL FOpen"
|
305 |
+
msgstr ""
|
306 |
+
|
307 |
+
#: includes/class-yith-system-status.php:140
|
308 |
+
#: includes/class-yith-system-status.php:141
|
309 |
+
#: templates/sysinfo/system-information-panel.php:11
|
310 |
+
msgid "System Status"
|
311 |
+
msgstr ""
|
312 |
+
|
313 |
+
#: includes/class-yith-system-status.php:183
|
314 |
+
msgid "YITH Plugins"
|
315 |
+
msgstr ""
|
316 |
+
|
317 |
+
#: includes/class-yith-system-status.php:191
|
318 |
+
msgid "WooCommerce"
|
319 |
+
msgstr ""
|
320 |
+
|
321 |
+
#: includes/class-yith-system-status.php:342
|
322 |
+
msgid "Warning!"
|
323 |
+
msgstr ""
|
324 |
+
|
325 |
+
#: includes/class-yith-system-status.php:346
|
326 |
+
#. translators: %1$s open link tag, %2$s open link tag
|
327 |
+
msgid ""
|
328 |
+
"The system check has detected some compatibility issues on your "
|
329 |
+
"installation.%1$sClick here%2$s to know more"
|
330 |
+
msgstr ""
|
331 |
+
|
332 |
+
#: includes/class-yith-system-status.php:496
|
333 |
+
msgid "Enabled"
|
334 |
+
msgstr ""
|
335 |
+
|
336 |
+
#: includes/class-yith-system-status.php:496
|
337 |
+
msgid "Disabled"
|
338 |
+
msgstr ""
|
339 |
+
|
340 |
+
#: includes/class-yith-system-status.php:501
|
341 |
+
msgid "N/A"
|
342 |
+
msgstr ""
|
343 |
+
|
344 |
+
#: includes/class-yith-system-status.php:528
|
345 |
+
#. translators: %1$s plugin name, %2$s requirement name
|
346 |
+
msgid "%1$s needs %2$s enabled"
|
347 |
+
msgstr ""
|
348 |
+
|
349 |
+
#: includes/class-yith-system-status.php:531
|
350 |
+
#. translators: %1$s plugin name, %2$s required memory amount
|
351 |
+
msgid "%1$s needs at least %2$s of available memory"
|
352 |
+
msgstr ""
|
353 |
+
|
354 |
+
#: includes/class-yith-system-status.php:534
|
355 |
+
#. translators: %1$s plugin name, %2$s version number
|
356 |
+
msgid "%1$s needs at least %2$s version"
|
357 |
+
msgstr ""
|
358 |
+
|
359 |
+
#: includes/class-yith-system-status.php:558
|
360 |
+
msgid ""
|
361 |
+
"Update it to the latest version in order to benefit of all new features and "
|
362 |
+
"security updates."
|
363 |
+
msgstr ""
|
364 |
+
|
365 |
+
#: includes/class-yith-system-status.php:562
|
366 |
+
#: includes/class-yith-system-status.php:568
|
367 |
+
msgid "Contact your hosting company in order to update it."
|
368 |
+
msgstr ""
|
369 |
+
|
370 |
+
#: includes/class-yith-system-status.php:566
|
371 |
+
msgid "Contact your hosting company in order to install it."
|
372 |
+
msgstr ""
|
373 |
+
|
374 |
+
#: includes/class-yith-system-status.php:573
|
375 |
+
#. translators: %1$s code, %2$s file name
|
376 |
+
msgid "Remove %1$s from %2$s file"
|
377 |
+
msgstr ""
|
378 |
+
|
379 |
+
#: includes/class-yith-system-status.php:581
|
380 |
+
msgid "Contact your hosting company in order to enable it."
|
381 |
+
msgstr ""
|
382 |
+
|
383 |
+
#: includes/class-yith-system-status.php:585
|
384 |
+
#: includes/class-yith-system-status.php:608
|
385 |
+
#. translators: %1$s opening link tag, %2$s closing link tag
|
386 |
+
msgid ""
|
387 |
+
"Read more %1$shere%2$s or contact your hosting company in order to increase "
|
388 |
+
"it."
|
389 |
+
msgstr ""
|
390 |
+
|
391 |
+
#: includes/class-yith-system-status.php:605
|
392 |
+
#. translators: %s recommended memory amount
|
393 |
+
msgid ""
|
394 |
+
"For optimal functioning of our plugins, we suggest setting at least %s of "
|
395 |
+
"available memory"
|
396 |
+
msgstr ""
|
397 |
+
|
398 |
+
#: includes/class-yith-system-status.php:613
|
399 |
+
#. translators: %1$s TLS label, %2$s cURL label
|
400 |
+
msgid ""
|
401 |
+
"The system check cannot determine which %1$s version is installed because "
|
402 |
+
"%2$s module is disabled. Ask your hosting company to enable it."
|
403 |
+
msgstr ""
|
404 |
+
|
405 |
+
#: includes/class-yith-system-status.php:616
|
406 |
+
#. translators: %1$s TLS label
|
407 |
+
msgid ""
|
408 |
+
"The system check cannot determine which %1$s version is installed due to a "
|
409 |
+
"connection issue between your site and our server."
|
410 |
+
msgstr ""
|
411 |
+
|
412 |
+
#: templates/bh-onboarding/onboarding-tabs.php:63
|
413 |
+
msgid "Save"
|
414 |
+
msgstr ""
|
415 |
+
|
416 |
+
#: templates/fields/ajax-customers.php:41
|
417 |
+
msgid "Search for a customer..."
|
418 |
+
msgstr ""
|
419 |
+
|
420 |
+
#: templates/fields/ajax-customers.php:68
|
421 |
+
#: templates/fields/ajax-customers.php:79
|
422 |
+
#. translators: 1. user display name; 2. user ID; 3. user email.
|
423 |
+
msgid "%1$s (#%2$s – %3$s)"
|
424 |
+
msgstr ""
|
425 |
+
|
426 |
+
#: templates/fields/ajax-posts.php:41
|
427 |
+
msgid "Search for a post..."
|
428 |
+
msgstr ""
|
429 |
+
|
430 |
+
#: templates/fields/ajax-products.php:16
|
431 |
+
msgid "Search for a product..."
|
432 |
+
msgstr ""
|
433 |
+
|
434 |
+
#: templates/fields/ajax-terms.php:41
|
435 |
+
msgid "Search for a category..."
|
436 |
+
msgstr ""
|
437 |
+
|
438 |
+
#: templates/fields/customtabs.php:17
|
439 |
+
msgid "Close all"
|
440 |
+
msgstr ""
|
441 |
+
|
442 |
+
#: templates/fields/customtabs.php:17
|
443 |
+
msgid "Expand all"
|
444 |
+
msgstr ""
|
445 |
+
|
446 |
+
#: templates/fields/customtabs.php:25 templates/fields/customtabs.php:68
|
447 |
+
msgid "Remove"
|
448 |
+
msgstr ""
|
449 |
+
|
450 |
+
#: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
|
451 |
+
msgid "Name"
|
452 |
+
msgstr ""
|
453 |
+
|
454 |
+
#: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
|
455 |
+
msgid "Value"
|
456 |
+
msgstr ""
|
457 |
+
|
458 |
+
#: templates/fields/customtabs.php:41 templates/fields/customtabs.php:82
|
459 |
+
msgid "Content of the tab. (HTML is supported)"
|
460 |
+
msgstr ""
|
461 |
+
|
462 |
+
#: templates/fields/customtabs.php:52
|
463 |
+
msgid "Add custom product tab"
|
464 |
+
msgstr ""
|
465 |
+
|
466 |
+
#: templates/fields/customtabs.php:93
|
467 |
+
msgid "Do you want to remove the custom tab?"
|
468 |
+
msgstr ""
|
469 |
+
|
470 |
+
#: templates/fields/date-format.php:65
|
471 |
+
msgid "Custom:"
|
472 |
+
msgstr ""
|
473 |
+
|
474 |
+
#: templates/fields/date-format.php:70
|
475 |
+
msgid "Preview:"
|
476 |
+
msgstr ""
|
477 |
+
|
478 |
+
#: templates/fields/icons.php:78
|
479 |
+
msgid "Set Default"
|
480 |
+
msgstr ""
|
481 |
+
|
482 |
+
#: templates/fields/image-gallery.php:29 templates/fields/image-gallery.php:40
|
483 |
+
msgid "Delete image"
|
484 |
+
msgstr ""
|
485 |
+
|
486 |
+
#: templates/fields/image-gallery.php:37
|
487 |
+
msgid "Add Images to Gallery"
|
488 |
+
msgstr ""
|
489 |
+
|
490 |
+
#: templates/fields/image-gallery.php:38
|
491 |
+
msgid "Add to gallery"
|
492 |
+
msgstr ""
|
493 |
+
|
494 |
+
#: templates/fields/image-gallery.php:39
|
495 |
+
msgid "Add images"
|
496 |
+
msgstr ""
|
497 |
+
|
498 |
+
#: templates/fields/image-gallery.php:41
|
499 |
+
msgid "Delete"
|
500 |
+
msgstr ""
|
501 |
+
|
502 |
+
#: templates/fields/select-buttons.php:19
|
503 |
+
msgid "Add All"
|
504 |
+
msgstr ""
|
505 |
+
|
506 |
+
#: templates/fields/select-buttons.php:20
|
507 |
+
msgid "Remove All"
|
508 |
+
msgstr ""
|
509 |
+
|
510 |
+
#: templates/fields/sidebars.php:20
|
511 |
+
msgid "Left sidebar"
|
512 |
+
msgstr ""
|
513 |
+
|
514 |
+
#: templates/fields/sidebars.php:23
|
515 |
+
msgid "Right sidebar"
|
516 |
+
msgstr ""
|
517 |
+
|
518 |
+
#: templates/fields/sidebars.php:26 templates/fields/sidebars.php:29
|
519 |
+
msgid "No sidebar"
|
520 |
+
msgstr ""
|
521 |
+
|
522 |
+
#: templates/fields/sidebars.php:39
|
523 |
+
msgid "Left Sidebar"
|
524 |
+
msgstr ""
|
525 |
+
|
526 |
+
#: templates/fields/sidebars.php:41 templates/fields/sidebars.php:56
|
527 |
+
msgid "Choose a sidebar"
|
528 |
+
msgstr ""
|
529 |
+
|
530 |
+
#: templates/fields/sidebars.php:54
|
531 |
+
msgid "Right Sidebar"
|
532 |
+
msgstr ""
|
533 |
+
|
534 |
+
#: templates/fields/upload.php:34
|
535 |
+
#: templates/panel/woocommerce/woocommerce-upload.php:37
|
536 |
+
msgid "Upload"
|
537 |
+
msgstr ""
|
538 |
+
|
539 |
+
#: templates/fields/upload.php:39
|
540 |
+
msgid "Reset"
|
541 |
+
msgstr ""
|
542 |
+
|
543 |
+
#: templates/panel/welcome-modals/update.php:34
|
544 |
+
#. translators: %s is the plugin version.
|
545 |
+
msgid "is successfully updated to version %s."
|
546 |
+
msgstr ""
|
547 |
+
|
548 |
+
#: templates/panel/welcome-modals/update.php:44
|
549 |
+
#. translators: %s is the plugin version.
|
550 |
+
msgid "What's new in version %s"
|
551 |
+
msgstr ""
|
552 |
+
|
553 |
+
#: templates/panel/welcome-modals/update.php:49
|
554 |
+
msgid "Check the changelog >"
|
555 |
+
msgstr ""
|
556 |
+
|
557 |
+
#: templates/panel/welcome-modals/update.php:64
|
558 |
+
#: templates/panel/welcome-modals/welcome.php:60
|
559 |
+
msgid "Got it, close this window"
|
560 |
+
msgstr ""
|
561 |
+
|
562 |
+
#: templates/panel/welcome-modals/welcome.php:30
|
563 |
+
msgid "Thank you for using our plugin"
|
564 |
+
msgstr ""
|
565 |
+
|
566 |
+
#: templates/panel/welcome-modals/welcome.php:45
|
567 |
+
#. translators: %s is the number of steps.
|
568 |
+
msgid "Start with these %s steps:"
|
569 |
+
msgstr ""
|
570 |
+
|
571 |
+
#: templates/panel/woocommerce/woocommerce-form.php:29
|
572 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
573 |
+
msgid "Save Options"
|
574 |
+
msgstr ""
|
575 |
+
|
576 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
577 |
+
msgid "Options Saved"
|
578 |
+
msgstr ""
|
579 |
+
|
580 |
+
#: templates/panel/woocommerce/woocommerce-form.php:43
|
581 |
+
msgid "Reset Defaults"
|
582 |
+
msgstr ""
|
583 |
+
|
584 |
+
#: templates/sysinfo/system-information-panel.php:12
|
585 |
+
msgid "PHPInfo"
|
586 |
+
msgstr ""
|
587 |
+
|
588 |
+
#: templates/sysinfo/system-information-panel.php:13
|
589 |
+
#: templates/sysinfo/tabs/error-log.php:25
|
590 |
+
msgid "Log Files"
|
591 |
+
msgstr ""
|
592 |
+
|
593 |
+
#: templates/sysinfo/system-information-panel.php:22
|
594 |
+
msgid "YITH System Information"
|
595 |
+
msgstr ""
|
596 |
+
|
597 |
+
#: templates/sysinfo/tabs/error-log.php:13
|
598 |
+
msgid "WP debug.log file"
|
599 |
+
msgstr ""
|
600 |
+
|
601 |
+
#: templates/sysinfo/tabs/error-log.php:18
|
602 |
+
msgid "PHP error_log file"
|
603 |
+
msgstr ""
|
604 |
+
|
605 |
+
#: templates/sysinfo/tabs/error-log.php:60
|
606 |
+
msgid "Download"
|
607 |
+
msgstr ""
|
608 |
+
|
609 |
+
#: templates/sysinfo/tabs/error-log.php:73
|
610 |
+
msgid "The file size exceeds 8 megabytes so it must be downloaded"
|
611 |
+
msgstr ""
|
612 |
+
|
613 |
+
#: templates/sysinfo/tabs/error-log.php:97
|
614 |
+
#. translators: %s file name.
|
615 |
+
msgid ""
|
616 |
+
"No Log file available. Enable the WordPress debug by adding this in the %s "
|
617 |
+
"file of your installation"
|
618 |
+
msgstr ""
|
619 |
+
|
620 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
621 |
+
msgid "Copied!"
|
622 |
+
msgstr ""
|
623 |
+
|
624 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
625 |
+
msgid "Copy Code"
|
626 |
+
msgstr ""
|
627 |
+
|
628 |
+
#: templates/sysinfo/tabs/main.php:17
|
629 |
+
msgid "Site Info"
|
630 |
+
msgstr ""
|
631 |
+
|
632 |
+
#: templates/sysinfo/tabs/main.php:22
|
633 |
+
msgid "Site URL"
|
634 |
+
msgstr ""
|
635 |
+
|
636 |
+
#: templates/sysinfo/tabs/main.php:31
|
637 |
+
msgid "Output IP Address"
|
638 |
+
msgstr ""
|
639 |
+
|
640 |
+
#: templates/sysinfo/tabs/main.php:39
|
641 |
+
msgid "Defined WP_CACHE"
|
642 |
+
msgstr ""
|
643 |
+
|
644 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
645 |
+
msgid "Yes"
|
646 |
+
msgstr ""
|
647 |
+
|
648 |
+
#: templates/sysinfo/tabs/main.php:47
|
649 |
+
msgid "External object cache"
|
650 |
+
msgstr ""
|
651 |
+
|
652 |
+
#: templates/sysinfo/tabs/main.php:55
|
653 |
+
msgid "YITH Plugin Framework Version"
|
654 |
+
msgstr ""
|
655 |
+
|
656 |
+
#: templates/sysinfo/tabs/main.php:64
|
657 |
+
#. translators: %s is the name of the plugin that is loading the framework.
|
658 |
+
msgid "loaded by %s"
|
659 |
+
msgstr ""
|
660 |
+
|
661 |
+
#: templates/sysinfo/tabs/main.php:73
|
662 |
+
msgid "Plugins Requirements"
|
663 |
+
msgstr ""
|
664 |
+
|
665 |
+
#: templates/sysinfo/tabs/main.php:108
|
666 |
+
msgid "Database Info"
|
667 |
+
msgstr ""
|
668 |
+
|
669 |
+
#: templates/sysinfo/tabs/main.php:113
|
670 |
+
msgid "MySQL version"
|
671 |
+
msgstr ""
|
672 |
+
|
673 |
+
#: templates/sysinfo/tabs/main.php:123
|
674 |
+
#. Translators: %s: Codex link.
|
675 |
+
msgid "WordPress recommends a minimum MySQL version of 5.6. See: %s"
|
676 |
+
msgstr ""
|
677 |
+
|
678 |
+
#: templates/sysinfo/tabs/main.php:123
|
679 |
+
msgid "WordPress requirements"
|
680 |
+
msgstr ""
|
681 |
+
|
682 |
+
#: templates/sysinfo/tabs/main.php:130
|
683 |
+
msgid "Total Database Size"
|
684 |
+
msgstr ""
|
685 |
+
|
686 |
+
#: templates/sysinfo/tabs/main.php:138
|
687 |
+
msgid "Database Data Size"
|
688 |
+
msgstr ""
|
689 |
+
|
690 |
+
#: templates/sysinfo/tabs/main.php:146
|
691 |
+
msgid "Database Index Size"
|
692 |
+
msgstr ""
|
693 |
+
|
694 |
+
#: templates/sysinfo/tabs/main.php:154
|
695 |
+
msgid "Database Free Size"
|
696 |
+
msgstr ""
|
697 |
+
|
698 |
+
#: templates/sysinfo/tabs/main.php:168
|
699 |
+
#. Translators: %1$f: Table size, %2$f: Index size, %3$f: Free size, %4$s
|
700 |
+
#. Engine.
|
701 |
+
msgid "Data: %1$.2fMB | Index: %2$.2fMB | Free: %3$.2fMB | Engine: %4$s"
|
702 |
+
msgstr ""
|
703 |
+
|
704 |
+
#: yit-functions.php:1938
|
705 |
+
#. translators: %s is the title of the post object.
|
706 |
+
msgid "Are you sure you want to move \"%s\" to trash?"
|
707 |
+
msgstr ""
|
708 |
+
|
709 |
+
#: yit-functions.php:1940 yit-functions.php:2100
|
710 |
+
#. translators: %s is the title of the post object.
|
711 |
+
msgid "Are you sure you want to delete \"%s\"?"
|
712 |
+
msgstr ""
|
713 |
+
|
714 |
+
#: yit-functions.php:2038 yit-functions.php:2046 yit-functions.php:2163
|
715 |
+
msgid "Further actions"
|
716 |
+
msgstr ""
|
717 |
+
|
718 |
+
#: yit-plugin.php:233
|
719 |
+
msgid "License"
|
720 |
+
msgstr ""
|
721 |
+
|
722 |
+
#: yit-plugin.php:272
|
723 |
+
#. translators: 1. Plugin(s) name(s).
|
724 |
+
msgid ""
|
725 |
+
"%s was deactivated as you're running an higher tier version of the same "
|
726 |
+
"plugin."
|
727 |
+
msgid_plural ""
|
728 |
+
"%s were deactivated as you're running higher tier versions of the same "
|
729 |
+
"plugins."
|
730 |
+
msgstr[0] ""
|
731 |
+
msgstr[1] ""
|
732 |
+
|
733 |
+
#. Author of the plugin/theme
|
734 |
+
msgid "YITH"
|
735 |
+
msgstr ""
|
736 |
+
|
737 |
+
#: includes/builders/elementor/class-yith-elementor-widget.php:252
|
738 |
+
#. translators: %s it the Elementor Widget title.
|
739 |
+
msgctxt "Elementor Widget - section title"
|
740 |
+
msgid "%s - Options"
|
741 |
+
msgstr ""
|
742 |
+
|
743 |
+
#: includes/builders/gutenberg/class-yith-gutenberg.php:152
|
744 |
+
msgctxt "[gutenberg]: Category Name"
|
745 |
+
msgid "YITH"
|
746 |
+
msgstr ""
|
747 |
+
|
748 |
+
#: includes/class-yit-assets.php:136
|
749 |
+
msgctxt "Button text"
|
750 |
+
msgid "Confirm"
|
751 |
+
msgstr ""
|
752 |
+
|
753 |
+
#: includes/class-yit-assets.php:137
|
754 |
+
msgctxt "Button text"
|
755 |
+
msgid "Cancel"
|
756 |
+
msgstr ""
|
757 |
+
|
758 |
+
#: includes/class-yit-assets.php:150 yit-functions.php:2009
|
759 |
+
msgctxt "Trash confirmation action"
|
760 |
+
msgid "Yes, move to trash"
|
761 |
+
msgstr ""
|
762 |
+
|
763 |
+
#: includes/class-yit-assets.php:154 yit-functions.php:2027
|
764 |
+
#: yit-functions.php:2154
|
765 |
+
msgctxt "Delete confirmation action"
|
766 |
+
msgid "Yes, delete"
|
767 |
+
msgstr ""
|
768 |
+
|
769 |
+
#: includes/class-yit-plugin-panel.php:804
|
770 |
+
#. translators: 1. Plugin name.
|
771 |
+
msgctxt "Help tab default title"
|
772 |
+
msgid "Thank you for purchasing %s!"
|
773 |
+
msgstr ""
|
774 |
+
|
775 |
+
#: includes/class-yit-plugin-panel.php:804
|
776 |
+
msgctxt "Help tab default title"
|
777 |
+
msgid "Thank you for using %s!"
|
778 |
+
msgstr ""
|
779 |
+
|
780 |
+
#: includes/class-yit-plugin-panel.php:812
|
781 |
+
msgctxt "Help tab default description"
|
782 |
+
msgid "We want to help you enjoy a wonderful experience with all of our products."
|
783 |
+
msgstr ""
|
784 |
+
|
785 |
+
#: includes/class-yit-plugin-panel.php:863
|
786 |
+
msgctxt "Premium tab name"
|
787 |
+
msgid "Get premium"
|
788 |
+
msgstr ""
|
789 |
+
|
790 |
+
#: includes/class-yit-plugin-panel.php:875
|
791 |
+
msgctxt "Help tab name"
|
792 |
+
msgid "Help"
|
793 |
+
msgstr ""
|
794 |
+
|
795 |
+
#: includes/class-yith-dashboard.php:96
|
796 |
+
msgctxt "Plugin FW"
|
797 |
+
msgid "View Changelog"
|
798 |
+
msgstr ""
|
799 |
+
|
800 |
+
#: includes/class-yith-dashboard.php:97
|
801 |
+
msgctxt "Plugin FW"
|
802 |
+
msgid "Latest update released on"
|
803 |
+
msgstr ""
|
804 |
+
|
805 |
+
#: includes/class-yith-dashboard.php:137
|
806 |
+
msgctxt "Button label"
|
807 |
+
msgid "Close"
|
808 |
+
msgstr ""
|
809 |
+
|
810 |
+
#: includes/privacy/class-yith-privacy.php:61
|
811 |
+
msgctxt "Privacy Policy Guide Title"
|
812 |
+
msgid "YITH Plugins"
|
813 |
+
msgstr ""
|
814 |
+
|
815 |
+
#: includes/privacy/class-yith-privacy.php:93
|
816 |
+
msgctxt "Privacy Policy Content"
|
817 |
+
msgid ""
|
818 |
+
"This sample language includes the basics around what personal data your "
|
819 |
+
"store may be collecting, storing and sharing, as well as who may have "
|
820 |
+
"access to that data. Depending on what settings are enabled and which "
|
821 |
+
"additional plugins are used, the specific information shared by your store "
|
822 |
+
"will vary. We recommend consulting with a lawyer when deciding what "
|
823 |
+
"information to disclose on your privacy policy."
|
824 |
+
msgstr ""
|
825 |
+
|
826 |
+
#: includes/privacy/class-yith-privacy.php:97
|
827 |
+
msgctxt "Privacy Policy Content"
|
828 |
+
msgid "What we collect and store"
|
829 |
+
msgstr ""
|
830 |
+
|
831 |
+
#: includes/privacy/class-yith-privacy.php:100
|
832 |
+
msgctxt "Privacy Policy Content"
|
833 |
+
msgid "Who on our team has access"
|
834 |
+
msgstr ""
|
835 |
+
|
836 |
+
#: includes/privacy/class-yith-privacy.php:103
|
837 |
+
msgctxt "Privacy Policy Content"
|
838 |
+
msgid "What we share with others"
|
839 |
+
msgstr ""
|
840 |
+
|
841 |
+
#: includes/privacy/class-yith-privacy.php:106
|
842 |
+
msgctxt "Privacy Policy Content"
|
843 |
+
msgid "Payments"
|
844 |
+
msgstr ""
|
845 |
+
|
846 |
+
#: templates/fields/copy-to-clipboard.php:41
|
847 |
+
msgctxt "Copy-to-clipboard message"
|
848 |
+
msgid "Copied!"
|
849 |
+
msgstr ""
|
850 |
+
|
851 |
+
#: templates/fields/copy-to-clipboard.php:45
|
852 |
+
msgctxt "Copy-to-clipboard button text"
|
853 |
+
msgid "Copy"
|
854 |
+
msgstr ""
|
855 |
+
|
856 |
+
#: templates/fields/dimensions.php:13
|
857 |
+
msgctxt "Position in the \"Dimensions\" field"
|
858 |
+
msgid "Top"
|
859 |
+
msgstr ""
|
860 |
+
|
861 |
+
#: templates/fields/dimensions.php:14
|
862 |
+
msgctxt "Position in the \"Dimensions\" field"
|
863 |
+
msgid "Right"
|
864 |
+
msgstr ""
|
865 |
+
|
866 |
+
#: templates/fields/dimensions.php:15
|
867 |
+
msgctxt "Position in the \"Dimensions\" field"
|
868 |
+
msgid "Bottom"
|
869 |
+
msgstr ""
|
870 |
+
|
871 |
+
#: templates/fields/dimensions.php:16
|
872 |
+
msgctxt "Position in the \"Dimensions\" field"
|
873 |
+
msgid "Left"
|
874 |
+
msgstr ""
|
875 |
+
|
876 |
+
#: templates/fields/dimensions.php:94
|
877 |
+
msgctxt "Tooltip in the \"Dimensions\" field"
|
878 |
+
msgid "Link values together"
|
879 |
+
msgstr ""
|
880 |
+
|
881 |
+
#: templates/fields/image-dimensions.php:18
|
882 |
+
msgctxt "Image width field label"
|
883 |
+
msgid "Width"
|
884 |
+
msgstr ""
|
885 |
+
|
886 |
+
#: templates/fields/image-dimensions.php:23
|
887 |
+
msgctxt "Image height field label"
|
888 |
+
msgid "Height"
|
889 |
+
msgstr ""
|
890 |
+
|
891 |
+
#: templates/fields/onoff.php:28
|
892 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
893 |
+
msgid "YES"
|
894 |
+
msgstr ""
|
895 |
+
|
896 |
+
#: templates/fields/onoff.php:29
|
897 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
898 |
+
msgid "NO"
|
899 |
+
msgstr ""
|
900 |
+
|
901 |
+
#: templates/panel/help-tab.php:89
|
902 |
+
#. translators: 1. Url to EN playlist.
|
903 |
+
msgctxt "Help tab view all video link"
|
904 |
+
msgid ""
|
905 |
+
"Check the full <a href=\"%s\" target=\"_blank\">Playlist on Youtube</a> to "
|
906 |
+
"learn more >"
|
907 |
+
msgstr ""
|
908 |
+
|
909 |
+
#: templates/panel/help-tab.php:96
|
910 |
+
msgctxt "Help tab Watch Videotutorials link"
|
911 |
+
msgid "Videos are also available in:"
|
912 |
+
msgstr ""
|
913 |
+
|
914 |
+
#: templates/panel/help-tab.php:126
|
915 |
+
msgctxt "Help tab Read Documentation link"
|
916 |
+
msgid "Read the documentation"
|
917 |
+
msgstr ""
|
918 |
+
|
919 |
+
#: templates/panel/help-tab.php:129
|
920 |
+
msgctxt "Help tab Read Documentation link"
|
921 |
+
msgid "to learn how the plugin works from the basics."
|
922 |
+
msgstr ""
|
923 |
+
|
924 |
+
#: templates/panel/help-tab.php:139
|
925 |
+
msgctxt "Help tab Watch video tutorials link"
|
926 |
+
msgid "Watch our video tutorials"
|
927 |
+
msgstr ""
|
928 |
+
|
929 |
+
#: templates/panel/help-tab.php:142
|
930 |
+
msgctxt "Help tab Watch video tutorials link"
|
931 |
+
msgid "to see some helpful use cases."
|
932 |
+
msgstr ""
|
933 |
+
|
934 |
+
#: templates/panel/help-tab.php:152
|
935 |
+
msgctxt "Help tab view FAQs link"
|
936 |
+
msgid "Check the FAQs"
|
937 |
+
msgstr ""
|
938 |
+
|
939 |
+
#: templates/panel/help-tab.php:155
|
940 |
+
msgctxt "Help tab view FAQs link"
|
941 |
+
msgid "to find answers to your doubts."
|
942 |
+
msgstr ""
|
943 |
+
|
944 |
+
#: templates/panel/help-tab.php:170
|
945 |
+
msgctxt "Help tab FAQ title"
|
946 |
+
msgid "Last FAQs in our Help Center"
|
947 |
+
msgstr ""
|
948 |
+
|
949 |
+
#: templates/panel/help-tab.php:184
|
950 |
+
msgctxt "Help tab FAQ link"
|
951 |
+
msgid "View all FAQs >"
|
952 |
+
msgstr ""
|
953 |
+
|
954 |
+
#: templates/panel/help-tab.php:193
|
955 |
+
msgctxt "Help tab submit ticket title"
|
956 |
+
msgid "Need help?"
|
957 |
+
msgstr ""
|
958 |
+
|
959 |
+
#: templates/panel/help-tab.php:196
|
960 |
+
msgctxt "Help tab submit ticket description"
|
961 |
+
msgid ""
|
962 |
+
"If you are experiencing any technical issues, ask for help from our "
|
963 |
+
"developers. Submit a ticket through our support desk and we will help you "
|
964 |
+
"as soon as possible."
|
965 |
+
msgstr ""
|
966 |
+
|
967 |
+
#: templates/panel/help-tab.php:204
|
968 |
+
msgctxt "Help tab submit ticket button"
|
969 |
+
msgid "Submit a ticket"
|
970 |
+
msgstr ""
|
971 |
+
|
972 |
+
#: templates/panel/help-tab.php:216 templates/panel/help-tab.php:218
|
973 |
+
#: templates/panel/help-tab.php:223
|
974 |
+
msgctxt "Help tab documentation"
|
975 |
+
msgid "Read the plugin documentation"
|
976 |
+
msgstr ""
|
977 |
+
|
978 |
+
#: templates/panel/help-tab.php:220
|
979 |
+
msgctxt "Help tab documentation"
|
980 |
+
msgid "to learn how it works from the basics."
|
981 |
+
msgstr ""
|
982 |
+
|
983 |
+
#: templates/panel/help-tab.php:231 templates/panel/help-tab.php:233
|
984 |
+
msgctxt "Help tab support"
|
985 |
+
msgid "Need some help?"
|
986 |
+
msgstr ""
|
987 |
+
|
988 |
+
#: templates/panel/help-tab.php:235
|
989 |
+
msgctxt "Help tab support"
|
990 |
+
msgid "From DIY to full-service help"
|
991 |
+
msgstr ""
|
992 |
+
|
993 |
+
#: templates/panel/help-tab.php:238
|
994 |
+
msgctxt "Help tab support"
|
995 |
+
msgid ""
|
996 |
+
"Call or chat 24/7 with our support agents, or let our experts build your "
|
997 |
+
"site."
|
998 |
+
msgstr ""
|
999 |
+
|
1000 |
+
#: templates/panel/help-tab.php:241
|
1001 |
+
msgctxt "Help tab support"
|
1002 |
+
msgid "Yes, I need help"
|
1003 |
+
msgstr ""
|
1004 |
+
|
1005 |
+
#: templates/panel/premium-tab.php:30
|
1006 |
+
msgctxt "Premium Tab"
|
1007 |
+
msgid "Get the premium version to unlock advanced features"
|
1008 |
+
msgstr ""
|
1009 |
+
|
1010 |
+
#: templates/panel/premium-tab.php:34
|
1011 |
+
msgctxt "Premium Tab"
|
1012 |
+
msgid "Get premium"
|
1013 |
+
msgstr ""
|
1014 |
+
|
1015 |
+
#: templates/panel/premium-tab.php:39
|
1016 |
+
msgctxt "Premium Tab"
|
1017 |
+
msgid "Plugin premium features images"
|
1018 |
+
msgstr ""
|
1019 |
+
|
1020 |
+
#: templates/panel/premium-tab.php:51 templates/panel/premium-tab.php:58
|
1021 |
+
#. translators: alt attribute of main image tag.
|
1022 |
+
msgctxt "Premium Tab"
|
1023 |
+
msgid "And so much more!"
|
1024 |
+
msgstr ""
|
1025 |
+
|
1026 |
+
#: templates/panel/premium-tab.php:53
|
1027 |
+
msgctxt "Premium Tab"
|
1028 |
+
msgid "Check the premium features >"
|
1029 |
+
msgstr ""
|
1030 |
+
|
1031 |
+
#: templates/panel/premium-tab.php:60
|
1032 |
+
msgctxt "Premium Tab"
|
1033 |
+
msgid "Check the free vs premium features >"
|
1034 |
+
msgstr ""
|
1035 |
+
|
1036 |
+
#: templates/panel/premium-tab.php:65
|
1037 |
+
msgctxt "Premium Tab"
|
1038 |
+
msgid "Get the premium version"
|
1039 |
+
msgstr ""
|
1040 |
+
|
1041 |
+
#: yit-functions.php:1952
|
1042 |
+
msgctxt "Post action"
|
1043 |
+
msgid "Preview"
|
1044 |
+
msgstr ""
|
1045 |
+
|
1046 |
+
#: yit-functions.php:1961
|
1047 |
+
msgctxt "Post action"
|
1048 |
+
msgid "View"
|
1049 |
+
msgstr ""
|
1050 |
+
|
1051 |
+
#: yit-functions.php:1972
|
1052 |
+
msgctxt "Post action"
|
1053 |
+
msgid "Edit"
|
1054 |
+
msgstr ""
|
1055 |
+
|
1056 |
+
#: yit-functions.php:1980
|
1057 |
+
msgctxt "Post action"
|
1058 |
+
msgid "Duplicate"
|
1059 |
+
msgstr ""
|
1060 |
+
|
1061 |
+
#: yit-functions.php:1992
|
1062 |
+
msgctxt "Post action"
|
1063 |
+
msgid "Restore"
|
1064 |
+
msgstr ""
|
1065 |
+
|
1066 |
+
#: yit-functions.php:2000
|
1067 |
+
msgctxt "Post action"
|
1068 |
+
msgid "Trash"
|
1069 |
+
msgstr ""
|
1070 |
+
|
1071 |
+
#: yit-functions.php:2017
|
1072 |
+
msgctxt "Post action"
|
1073 |
+
msgid "Delete Permanently"
|
1074 |
+
msgstr ""
|
1075 |
+
|
1076 |
+
#: yit-functions.php:2114
|
1077 |
+
msgctxt "Term action"
|
1078 |
+
msgid "View"
|
1079 |
+
msgstr ""
|
1080 |
+
|
1081 |
+
#: yit-functions.php:2124
|
1082 |
+
msgctxt "Term action"
|
1083 |
+
msgid "Edit"
|
1084 |
+
msgstr ""
|
1085 |
+
|
1086 |
+
#: yit-functions.php:2132
|
1087 |
+
msgctxt "Term action"
|
1088 |
+
msgid "Duplicate"
|
1089 |
+
msgstr ""
|
1090 |
+
|
1091 |
+
#: yit-functions.php:2145
|
1092 |
+
msgctxt "Term action"
|
1093 |
+
msgid "Delete"
|
1094 |
+
msgstr ""
|
1095 |
+
|
1096 |
+
#: yit-plugin.php:85
|
1097 |
+
msgctxt "Plugin Row Meta"
|
1098 |
+
msgid "Live Demo"
|
1099 |
+
msgstr ""
|
1100 |
+
|
1101 |
+
#: yit-plugin.php:89
|
1102 |
+
msgctxt "Plugin Row Meta"
|
1103 |
+
msgid "Documentation"
|
1104 |
+
msgstr ""
|
1105 |
+
|
1106 |
+
#: yit-plugin.php:93
|
1107 |
+
msgctxt "Plugin Row Meta"
|
1108 |
+
msgid "Support"
|
1109 |
+
msgstr ""
|
1110 |
+
|
1111 |
+
#: yit-plugin.php:97
|
1112 |
+
msgctxt "Plugin Row Meta"
|
1113 |
+
msgid "Premium version"
|
1114 |
+
msgstr ""
|
1115 |
+
|
1116 |
+
#: yit-plugin.php:229
|
1117 |
+
msgctxt "Action links"
|
1118 |
+
msgid "Settings"
|
1119 |
+
msgstr ""
|
plugin-fw/languages/yith-plugin-fw-el 2.mo
ADDED
Binary file
|
plugin-fw/languages/yith-plugin-fw-el 2.po
ADDED
@@ -0,0 +1,1143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Translation of YITH Framework in Greek
|
2 |
+
# This file is distributed under the same license as the YITH Framework package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: YITH Framework\n"
|
6 |
+
"Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
|
7 |
+
"POT-Creation-Date: 2022-11-11 07:31:10+00:00\n"
|
8 |
+
"PO-Revision-Date: 2021-02-11 18:07:46+0000\n"
|
9 |
+
"Language: el_GR\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
14 |
+
"X-Generator: GlotPress/3.0.0-alpha.2\n"
|
15 |
+
|
16 |
+
#: includes/class-yit-assets.php:148 yit-functions.php:2006
|
17 |
+
msgid "Confirm trash"
|
18 |
+
msgstr ""
|
19 |
+
|
20 |
+
#: includes/class-yit-assets.php:149
|
21 |
+
msgid "Are you sure you want to trash the selected items?"
|
22 |
+
msgstr ""
|
23 |
+
|
24 |
+
#: includes/class-yit-assets.php:151 includes/class-yit-assets.php:155
|
25 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
26 |
+
#: yit-functions.php:2008 yit-functions.php:2026
|
27 |
+
msgid "No"
|
28 |
+
msgstr "Όχι"
|
29 |
+
|
30 |
+
#: includes/class-yit-assets.php:152 yit-functions.php:2024
|
31 |
+
#: yit-functions.php:2152
|
32 |
+
msgid "Confirm delete"
|
33 |
+
msgstr ""
|
34 |
+
|
35 |
+
#: includes/class-yit-assets.php:153
|
36 |
+
msgid "Are you sure you want to delete the selected items?"
|
37 |
+
msgstr ""
|
38 |
+
|
39 |
+
#: includes/class-yit-assets.php:153 yit-functions.php:1940
|
40 |
+
#: yit-functions.php:2100
|
41 |
+
msgid ""
|
42 |
+
"This action cannot be undone and you will not be able to recover this data."
|
43 |
+
msgstr ""
|
44 |
+
|
45 |
+
#: includes/class-yit-assets.php:174
|
46 |
+
msgid "Clear"
|
47 |
+
msgstr "Καθαρισμός"
|
48 |
+
|
49 |
+
#: includes/class-yit-assets.php:175
|
50 |
+
msgid "Clear color"
|
51 |
+
msgstr "Καθαρισμός χρώματος"
|
52 |
+
|
53 |
+
#: includes/class-yit-assets.php:176
|
54 |
+
msgid "Default"
|
55 |
+
msgstr "Προεπιλεγμένο"
|
56 |
+
|
57 |
+
#: includes/class-yit-assets.php:177
|
58 |
+
msgid "Select default color"
|
59 |
+
msgstr "Επιλογή προεπιλεγμένου χρώματος"
|
60 |
+
|
61 |
+
#: includes/class-yit-assets.php:178
|
62 |
+
msgid "Select Color"
|
63 |
+
msgstr "Επιλογή Χρώματος"
|
64 |
+
|
65 |
+
#: includes/class-yit-assets.php:179
|
66 |
+
msgid "Color value"
|
67 |
+
msgstr "Αξία χρώματος"
|
68 |
+
|
69 |
+
#: includes/class-yit-help-desk.php:152
|
70 |
+
msgid "There was an error with your request; please try again later."
|
71 |
+
msgstr ""
|
72 |
+
|
73 |
+
#: includes/class-yit-plugin-panel-woocommerce.php:437
|
74 |
+
msgid "The changes you have made will be lost if you leave this page."
|
75 |
+
msgstr ""
|
76 |
+
"Οι αλλαγές που έχετε δημιουργήσει θα χαθούν αν αφήσετε αυτήν την σελίδα."
|
77 |
+
|
78 |
+
#: includes/class-yit-plugin-panel.php:83
|
79 |
+
msgid "Plugin Settings"
|
80 |
+
msgstr "Ρυθμίσεις Προσθέτου"
|
81 |
+
|
82 |
+
#: includes/class-yit-plugin-panel.php:84
|
83 |
+
msgid "Settings"
|
84 |
+
msgstr "Ρυθμίσεις"
|
85 |
+
|
86 |
+
#: includes/class-yit-plugin-panel.php:456
|
87 |
+
#: includes/class-yit-plugin-panel.php:459
|
88 |
+
msgid "How to install premium version"
|
89 |
+
msgstr "Πώς να εγκαταστήσετε την προηγμένη έκδοση"
|
90 |
+
|
91 |
+
#: includes/class-yit-plugin-panel.php:656
|
92 |
+
#: includes/class-yit-plugin-subpanel.php:133
|
93 |
+
msgid "Save Changes"
|
94 |
+
msgstr "Αποθήκευση Αλλαγών"
|
95 |
+
|
96 |
+
#: includes/class-yit-plugin-panel.php:664
|
97 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
98 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
99 |
+
msgid ""
|
100 |
+
"If you continue with this action, you will reset all options in this page."
|
101 |
+
msgstr ""
|
102 |
+
"Αν συνεχίσετε με αυτή την ενέργεια θα επαναφέρετε όλες τις επιλογές στη "
|
103 |
+
"σελίδα."
|
104 |
+
|
105 |
+
#: includes/class-yit-plugin-panel.php:664
|
106 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
107 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
108 |
+
msgid "Are you sure?"
|
109 |
+
msgstr "Είστε σίγουρος;"
|
110 |
+
|
111 |
+
#: includes/class-yit-plugin-panel.php:668
|
112 |
+
#: includes/class-yit-plugin-subpanel.php:143
|
113 |
+
msgid "Reset to default"
|
114 |
+
msgstr "Επαναφορά σε προεπιλεγμένο"
|
115 |
+
|
116 |
+
#: includes/class-yit-plugin-panel.php:1039
|
117 |
+
msgid "Read the <mark>plugin documentation</mark>"
|
118 |
+
msgstr ""
|
119 |
+
|
120 |
+
#: includes/class-yit-plugin-panel.php:1040
|
121 |
+
msgid "Learn what you can really do with this powerful tool"
|
122 |
+
msgstr ""
|
123 |
+
|
124 |
+
#: includes/class-yit-plugin-panel.php:1050
|
125 |
+
msgid "Watch our <mark>\"First Steps\" video</mark>"
|
126 |
+
msgstr ""
|
127 |
+
|
128 |
+
#: includes/class-yit-plugin-panel.php:1051
|
129 |
+
msgid "See how it works before you start using it"
|
130 |
+
msgstr ""
|
131 |
+
|
132 |
+
#: includes/class-yit-plugin-panel.php:1307
|
133 |
+
msgid ""
|
134 |
+
"The element you have entered already exists. Please, enter another name."
|
135 |
+
msgstr "Το στοιχείο που εισάγατε υπάρχει ήδη. Παρακαλώ, εισάγετε άλλο όνομα."
|
136 |
+
|
137 |
+
#: includes/class-yit-plugin-panel.php:1308
|
138 |
+
msgid "Settings saved"
|
139 |
+
msgstr "Ρυθμίσεις αποθηκεύτηκαν"
|
140 |
+
|
141 |
+
#: includes/class-yit-plugin-panel.php:1309
|
142 |
+
msgid "Settings reset"
|
143 |
+
msgstr "Επαναφορά ρυθμίσεων"
|
144 |
+
|
145 |
+
#: includes/class-yit-plugin-panel.php:1310
|
146 |
+
msgid "Element deleted correctly."
|
147 |
+
msgstr "Το στοιχείο διαγράφηκε επιτυχώς."
|
148 |
+
|
149 |
+
#: includes/class-yit-plugin-panel.php:1311
|
150 |
+
#: includes/class-yit-plugin-panel.php:1312
|
151 |
+
msgid "Element updated correctly."
|
152 |
+
msgstr "Το στοιχείο αναβαθμίστηκε επιτυχώς."
|
153 |
+
|
154 |
+
#: includes/class-yit-plugin-panel.php:1313
|
155 |
+
msgid "Database imported correctly."
|
156 |
+
msgstr "Επιτυχής εισαγωγή βάσης δεδομένων."
|
157 |
+
|
158 |
+
#: includes/class-yit-plugin-panel.php:1314
|
159 |
+
msgid "An error has occurred during import. Please try again."
|
160 |
+
msgstr "Παρουσιάστηκε σφάλμα κατά την εισαγωγή. Παρακαλώ προσπαθήστε ξανά."
|
161 |
+
|
162 |
+
#: includes/class-yit-plugin-panel.php:1315
|
163 |
+
msgid "The added file is not valid."
|
164 |
+
msgstr "Το προστιθέμενο αρχείο δεν είναι έγκυρο."
|
165 |
+
|
166 |
+
#: includes/class-yit-plugin-panel.php:1316
|
167 |
+
msgid "Sorry, import is disabled."
|
168 |
+
msgstr "Συγνώμη, η εισαγωγή είναι απενεργοποιημένη."
|
169 |
+
|
170 |
+
#: includes/class-yit-plugin-panel.php:1317
|
171 |
+
msgid "Sorting successful."
|
172 |
+
msgstr "Διαλογή επιτυχής."
|
173 |
+
|
174 |
+
#: includes/class-yit-plugin-panel.php:1806
|
175 |
+
msgid "We need your support"
|
176 |
+
msgstr "Χρειαζόμαστε την υποστήριξή σας"
|
177 |
+
|
178 |
+
#: includes/class-yit-plugin-panel.php:1807
|
179 |
+
msgid "to keep updating and improving the plugin. Please,"
|
180 |
+
msgstr ""
|
181 |
+
"για να διατηρήσετε την ενημέρωση και τη βελτίωση του πρόσθετου. Παρακαλώ,"
|
182 |
+
|
183 |
+
#: includes/class-yit-plugin-panel.php:1809
|
184 |
+
msgid "help us by leaving a good review"
|
185 |
+
msgstr ""
|
186 |
+
|
187 |
+
#: includes/class-yit-plugin-panel.php:1810
|
188 |
+
msgid ":) Thanks!"
|
189 |
+
msgstr ":) Ευχαριστώ!"
|
190 |
+
|
191 |
+
#: includes/class-yit-pointers.php:80
|
192 |
+
msgid "Plugins Activated"
|
193 |
+
msgstr "Ενεργοποιημένα Πρόσθετα"
|
194 |
+
|
195 |
+
#: includes/class-yit-pointers.php:81
|
196 |
+
msgid ""
|
197 |
+
"From now on, you can find all plugin options in YITH menu. Plugin "
|
198 |
+
"customization settings will be available as a new entry in YITH menu."
|
199 |
+
msgstr ""
|
200 |
+
|
201 |
+
#. translators: 1. YITH site link; 2. WordPress site link.
|
202 |
+
#: includes/class-yit-pointers.php:84 includes/class-yit-pointers.php:100
|
203 |
+
msgid "Discover all our plugins available on: %1$s and %2$s"
|
204 |
+
msgstr "Ανακαλύψτε όλα τα διαθέσιμά μας πρόσθετα στο: %1$s και %2$s"
|
205 |
+
|
206 |
+
#: includes/class-yit-pointers.php:96
|
207 |
+
msgid "Plugins Upgraded"
|
208 |
+
msgstr "Αναβαθμισμένα Πρόσθετα"
|
209 |
+
|
210 |
+
#: includes/class-yit-pointers.php:97
|
211 |
+
msgid ""
|
212 |
+
"From now on, you can find the option panel of YITH plugins in YITH menu. "
|
213 |
+
"Every time one of our plugins is added, a new entry will be added to this "
|
214 |
+
"menu. For example, after the update, plugin options (such as for YITH "
|
215 |
+
"WooCommerce Wishlist, YITH WooCommerce Ajax Search, etc.) will be moved from "
|
216 |
+
"previous location to YITH menu."
|
217 |
+
msgstr ""
|
218 |
+
|
219 |
+
#: includes/class-yith-bh-onboarding.php:85
|
220 |
+
msgid "It is not possible save the options"
|
221 |
+
msgstr ""
|
222 |
+
|
223 |
+
#: includes/class-yith-dashboard.php:35
|
224 |
+
msgid "YITH Latest Updates"
|
225 |
+
msgstr "Τελευταίες Αναβαθμίσεις YITH"
|
226 |
+
|
227 |
+
#: includes/class-yith-dashboard.php:36
|
228 |
+
msgid "Latest news from YITH Blog"
|
229 |
+
msgstr "Τελευταία νέα από YITH Blog"
|
230 |
+
|
231 |
+
#: includes/class-yith-dashboard.php:56
|
232 |
+
msgid "RSS Error:"
|
233 |
+
msgstr "Σφάλμα RSS:"
|
234 |
+
|
235 |
+
#: includes/class-yith-dashboard.php:63
|
236 |
+
msgid ""
|
237 |
+
"An error has occurred, which probably means the feed is down. Try again "
|
238 |
+
"later."
|
239 |
+
msgstr ""
|
240 |
+
"Παρουσιάστηκε σφάλμα, που πιθανότατα σημαίνει ότι έπεσε το τροφοδοτικό. "
|
241 |
+
"Προσπαθήστε ξανά αργότερα."
|
242 |
+
|
243 |
+
#. translators: %s is the name of the post type (example Back to "Membership
|
244 |
+
#. Plans").
|
245 |
+
#: includes/class-yith-post-type-admin.php:286
|
246 |
+
msgid "Back to \"%s\""
|
247 |
+
msgstr ""
|
248 |
+
|
249 |
+
#: includes/class-yith-post-type-admin.php:286
|
250 |
+
msgid "Back to the list"
|
251 |
+
msgstr ""
|
252 |
+
|
253 |
+
#: includes/class-yith-system-status.php:110
|
254 |
+
msgid "WordPress Version"
|
255 |
+
msgstr "Έκδοση WordPress"
|
256 |
+
|
257 |
+
#: includes/class-yith-system-status.php:111
|
258 |
+
msgid "WooCommerce Version"
|
259 |
+
msgstr "Έκδοση WooCommerce"
|
260 |
+
|
261 |
+
#: includes/class-yith-system-status.php:112
|
262 |
+
msgid "Available Memory"
|
263 |
+
msgstr "Διαθέσιμη Μνήμη"
|
264 |
+
|
265 |
+
#: includes/class-yith-system-status.php:113
|
266 |
+
msgid "PHP Version"
|
267 |
+
msgstr "Έκδοση PHP"
|
268 |
+
|
269 |
+
#: includes/class-yith-system-status.php:114
|
270 |
+
msgid "TLS Version"
|
271 |
+
msgstr "Έκδοση TLS"
|
272 |
+
|
273 |
+
#: includes/class-yith-system-status.php:115
|
274 |
+
msgid "WordPress Cron"
|
275 |
+
msgstr "WordPress Cron"
|
276 |
+
|
277 |
+
#: includes/class-yith-system-status.php:116
|
278 |
+
msgid "SimpleXML"
|
279 |
+
msgstr "SimpleXML"
|
280 |
+
|
281 |
+
#: includes/class-yith-system-status.php:117
|
282 |
+
msgid "MultiByte String"
|
283 |
+
msgstr "MultiByte String"
|
284 |
+
|
285 |
+
#: includes/class-yith-system-status.php:118
|
286 |
+
msgid "ImageMagick Version"
|
287 |
+
msgstr "Έκδοση ImageMagick"
|
288 |
+
|
289 |
+
#: includes/class-yith-system-status.php:119
|
290 |
+
msgid "GD Library"
|
291 |
+
msgstr "Βιβλιοθήκη GD"
|
292 |
+
|
293 |
+
#: includes/class-yith-system-status.php:120
|
294 |
+
msgid "Iconv Module"
|
295 |
+
msgstr "Άρθρωμα Iconv"
|
296 |
+
|
297 |
+
#: includes/class-yith-system-status.php:121
|
298 |
+
msgid "OPCache Save Comments"
|
299 |
+
msgstr "OPCache Save Comments"
|
300 |
+
|
301 |
+
#: includes/class-yith-system-status.php:122
|
302 |
+
msgid "URL FOpen"
|
303 |
+
msgstr "URL FOpen"
|
304 |
+
|
305 |
+
#: includes/class-yith-system-status.php:140
|
306 |
+
#: includes/class-yith-system-status.php:141
|
307 |
+
#: templates/sysinfo/system-information-panel.php:11
|
308 |
+
msgid "System Status"
|
309 |
+
msgstr "Κατάσταση Συστήματος"
|
310 |
+
|
311 |
+
#: includes/class-yith-system-status.php:183
|
312 |
+
msgid "YITH Plugins"
|
313 |
+
msgstr "Πρόσθετα YITH"
|
314 |
+
|
315 |
+
#: includes/class-yith-system-status.php:191
|
316 |
+
msgid "WooCommerce"
|
317 |
+
msgstr "WooCommerce"
|
318 |
+
|
319 |
+
#: includes/class-yith-system-status.php:342
|
320 |
+
msgid "Warning!"
|
321 |
+
msgstr "Προσοχή!"
|
322 |
+
|
323 |
+
#. translators: %1$s open link tag, %2$s open link tag
|
324 |
+
#: includes/class-yith-system-status.php:346
|
325 |
+
msgid ""
|
326 |
+
"The system check has detected some compatibility issues on your installation."
|
327 |
+
"%1$sClick here%2$s to know more"
|
328 |
+
msgstr ""
|
329 |
+
"Ο έλεγχος συστήματος έχει εντοπίσει κάποια προβλήματα συμβατότητας στην "
|
330 |
+
"εγκατάστασή σας.%1$sΚάντε κλικ εδώ%2$s για να μάθετε περισσότερα"
|
331 |
+
|
332 |
+
#: includes/class-yith-system-status.php:496
|
333 |
+
msgid "Enabled"
|
334 |
+
msgstr "Ενεργοποιημένο"
|
335 |
+
|
336 |
+
#: includes/class-yith-system-status.php:496
|
337 |
+
msgid "Disabled"
|
338 |
+
msgstr "Απενεργοποιημένο"
|
339 |
+
|
340 |
+
#: includes/class-yith-system-status.php:501
|
341 |
+
msgid "N/A"
|
342 |
+
msgstr "N/A"
|
343 |
+
|
344 |
+
#. translators: %1$s plugin name, %2$s requirement name
|
345 |
+
#: includes/class-yith-system-status.php:528
|
346 |
+
msgid "%1$s needs %2$s enabled"
|
347 |
+
msgstr "%1$s χρειάζεται %2$s ενεργοποιημένο"
|
348 |
+
|
349 |
+
#. translators: %1$s plugin name, %2$s required memory amount
|
350 |
+
#: includes/class-yith-system-status.php:531
|
351 |
+
msgid "%1$s needs at least %2$s of available memory"
|
352 |
+
msgstr "%1$s χρειάζεται τουλάχιστον %2$s διαθέσιμης μνήμης"
|
353 |
+
|
354 |
+
#. translators: %1$s plugin name, %2$s version number
|
355 |
+
#: includes/class-yith-system-status.php:534
|
356 |
+
msgid "%1$s needs at least %2$s version"
|
357 |
+
msgstr "%1$s χρειάζεται τουλάχιστον %2$s έκδοση"
|
358 |
+
|
359 |
+
#: includes/class-yith-system-status.php:558
|
360 |
+
msgid ""
|
361 |
+
"Update it to the latest version in order to benefit of all new features and "
|
362 |
+
"security updates."
|
363 |
+
msgstr ""
|
364 |
+
"Κάντε αναβάθμιση της τελευταίας έκδοσης για να επωφεληθείτε από τα νέα "
|
365 |
+
"χαρακτηριστικά και τις αναβαθμίσεις προστασίας."
|
366 |
+
|
367 |
+
#: includes/class-yith-system-status.php:562
|
368 |
+
#: includes/class-yith-system-status.php:568
|
369 |
+
msgid "Contact your hosting company in order to update it."
|
370 |
+
msgstr "Επικοινωνήστε με την εταιρεία hosting σας για να αναβαθμίσετε."
|
371 |
+
|
372 |
+
#: includes/class-yith-system-status.php:566
|
373 |
+
msgid "Contact your hosting company in order to install it."
|
374 |
+
msgstr "Επικοινωνήστε με την εταιρεία hosting σας για να το ενεργοποιήσετε."
|
375 |
+
|
376 |
+
#. translators: %1$s code, %2$s file name
|
377 |
+
#: includes/class-yith-system-status.php:573
|
378 |
+
msgid "Remove %1$s from %2$s file"
|
379 |
+
msgstr "Αφαίρεση %1$s από αρχείο %2$s"
|
380 |
+
|
381 |
+
#: includes/class-yith-system-status.php:581
|
382 |
+
msgid "Contact your hosting company in order to enable it."
|
383 |
+
msgstr "Επικοινωνήστε με την εταιρεία hosting σας για να ενεργοποιήσετε."
|
384 |
+
|
385 |
+
#. translators: %1$s opening link tag, %2$s closing link tag
|
386 |
+
#: includes/class-yith-system-status.php:585
|
387 |
+
#: includes/class-yith-system-status.php:608
|
388 |
+
msgid ""
|
389 |
+
"Read more %1$shere%2$s or contact your hosting company in order to increase "
|
390 |
+
"it."
|
391 |
+
msgstr ""
|
392 |
+
"Μάθετε περισσότερα %1$sεδώ%2$s ή επικοινωνήστε με την εταιρεία hosting σας "
|
393 |
+
"για να το βελτιώσετε."
|
394 |
+
|
395 |
+
#. translators: %s recommended memory amount
|
396 |
+
#: includes/class-yith-system-status.php:605
|
397 |
+
msgid ""
|
398 |
+
"For optimal functioning of our plugins, we suggest setting at least %s of "
|
399 |
+
"available memory"
|
400 |
+
msgstr ""
|
401 |
+
"Για την βέλτιστη λειτουργικότητα των προσθέτων μας, προτείνουμε να ορίσετε "
|
402 |
+
"τουλάχιστον %s διαθέσιμης μνήμης"
|
403 |
+
|
404 |
+
#. translators: %1$s TLS label, %2$s cURL label
|
405 |
+
#: includes/class-yith-system-status.php:613
|
406 |
+
msgid ""
|
407 |
+
"The system check cannot determine which %1$s version is installed because "
|
408 |
+
"%2$s module is disabled. Ask your hosting company to enable it."
|
409 |
+
msgstr ""
|
410 |
+
"Το σύστημα δεν μπορεί να καθορίσει ποια %1$s έκδοση έχει εγκατασταθεί γιατί "
|
411 |
+
"το %2$s άρθρωμα είναι απενεργοποιημένο. Ζητήστε από την εταιρεία hosting σας "
|
412 |
+
"να το ενεργοποιήσει."
|
413 |
+
|
414 |
+
#. translators: %1$s TLS label
|
415 |
+
#: includes/class-yith-system-status.php:616
|
416 |
+
msgid ""
|
417 |
+
"The system check cannot determine which %1$s version is installed due to a "
|
418 |
+
"connection issue between your site and our server."
|
419 |
+
msgstr ""
|
420 |
+
"Ο έλεγχος συστήματος δεν μπορεί να διευκρινήσει ποια έκδοση %1$s έχει "
|
421 |
+
"εγκατασταθεί λόγω προβλήματος σύνδεσης ανάμεσα στον ιστότοπο σας και τον "
|
422 |
+
"διακομιστή μας."
|
423 |
+
|
424 |
+
#: templates/bh-onboarding/onboarding-tabs.php:63
|
425 |
+
msgid "Save"
|
426 |
+
msgstr ""
|
427 |
+
|
428 |
+
#: templates/fields/ajax-customers.php:41
|
429 |
+
msgid "Search for a customer..."
|
430 |
+
msgstr ""
|
431 |
+
|
432 |
+
#. translators: 1. user display name; 2. user ID; 3. user email.
|
433 |
+
#: templates/fields/ajax-customers.php:68
|
434 |
+
#: templates/fields/ajax-customers.php:79
|
435 |
+
msgid "%1$s (#%2$s – %3$s)"
|
436 |
+
msgstr "%1$s (#%2$s – %3$s)"
|
437 |
+
|
438 |
+
#: templates/fields/ajax-posts.php:41
|
439 |
+
msgid "Search for a post..."
|
440 |
+
msgstr ""
|
441 |
+
|
442 |
+
#: templates/fields/ajax-products.php:16
|
443 |
+
msgid "Search for a product..."
|
444 |
+
msgstr ""
|
445 |
+
|
446 |
+
#: templates/fields/ajax-terms.php:41
|
447 |
+
msgid "Search for a category..."
|
448 |
+
msgstr ""
|
449 |
+
|
450 |
+
#: templates/fields/customtabs.php:17
|
451 |
+
msgid "Close all"
|
452 |
+
msgstr "Απενεργοποίηση όλων"
|
453 |
+
|
454 |
+
#: templates/fields/customtabs.php:17
|
455 |
+
msgid "Expand all"
|
456 |
+
msgstr "Ανάπτυξη όλων"
|
457 |
+
|
458 |
+
#: templates/fields/customtabs.php:25 templates/fields/customtabs.php:68
|
459 |
+
msgid "Remove"
|
460 |
+
msgstr "Αφαίρεση"
|
461 |
+
|
462 |
+
#: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
|
463 |
+
msgid "Name"
|
464 |
+
msgstr "Όνομα"
|
465 |
+
|
466 |
+
#: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
|
467 |
+
msgid "Value"
|
468 |
+
msgstr "Τιμή"
|
469 |
+
|
470 |
+
#: templates/fields/customtabs.php:41 templates/fields/customtabs.php:82
|
471 |
+
msgid "Content of the tab. (HTML is supported)"
|
472 |
+
msgstr "Περιεχόμενο καρτέλας. (Υποστηρίζεται HTML)"
|
473 |
+
|
474 |
+
#: templates/fields/customtabs.php:52
|
475 |
+
msgid "Add custom product tab"
|
476 |
+
msgstr "Προσθέστε καρτέλα προσαρμοσμένου προϊόντος"
|
477 |
+
|
478 |
+
#: templates/fields/customtabs.php:93
|
479 |
+
msgid "Do you want to remove the custom tab?"
|
480 |
+
msgstr "Θέλετε να αφαιρέσετε την προσαρμοσμένη καρτέλα;"
|
481 |
+
|
482 |
+
#: templates/fields/date-format.php:65
|
483 |
+
msgid "Custom:"
|
484 |
+
msgstr "Προσαρμογή:"
|
485 |
+
|
486 |
+
#: templates/fields/date-format.php:70
|
487 |
+
msgid "Preview:"
|
488 |
+
msgstr "Προεπισκόπηση:"
|
489 |
+
|
490 |
+
#: templates/fields/icons.php:78
|
491 |
+
msgid "Set Default"
|
492 |
+
msgstr "Ορίστε Προεπιλεγμένο"
|
493 |
+
|
494 |
+
#: templates/fields/image-gallery.php:29 templates/fields/image-gallery.php:40
|
495 |
+
msgid "Delete image"
|
496 |
+
msgstr "Διαγραφή εικόνας"
|
497 |
+
|
498 |
+
#: templates/fields/image-gallery.php:37
|
499 |
+
msgid "Add Images to Gallery"
|
500 |
+
msgstr "Προσθέστε Εικόνες στη Συλλογή"
|
501 |
+
|
502 |
+
#: templates/fields/image-gallery.php:38
|
503 |
+
msgid "Add to gallery"
|
504 |
+
msgstr "Προσθέστε στη συλλογή"
|
505 |
+
|
506 |
+
#: templates/fields/image-gallery.php:39
|
507 |
+
msgid "Add images"
|
508 |
+
msgstr "Προσθέστε εικόνες"
|
509 |
+
|
510 |
+
#: templates/fields/image-gallery.php:41
|
511 |
+
msgid "Delete"
|
512 |
+
msgstr "Διαγραφή"
|
513 |
+
|
514 |
+
#: templates/fields/select-buttons.php:19
|
515 |
+
msgid "Add All"
|
516 |
+
msgstr "Προσθήκη Όλων"
|
517 |
+
|
518 |
+
#: templates/fields/select-buttons.php:20
|
519 |
+
msgid "Remove All"
|
520 |
+
msgstr "Αφαίρεση Όλων"
|
521 |
+
|
522 |
+
#: templates/fields/sidebars.php:20
|
523 |
+
msgid "Left sidebar"
|
524 |
+
msgstr "Αριστερή πλευρική στήλη"
|
525 |
+
|
526 |
+
#: templates/fields/sidebars.php:23
|
527 |
+
msgid "Right sidebar"
|
528 |
+
msgstr "Δεξιά πλευρική στήλη"
|
529 |
+
|
530 |
+
#: templates/fields/sidebars.php:26 templates/fields/sidebars.php:29
|
531 |
+
msgid "No sidebar"
|
532 |
+
msgstr "Χωρίς πλευρική στήλη"
|
533 |
+
|
534 |
+
#: templates/fields/sidebars.php:39
|
535 |
+
msgid "Left Sidebar"
|
536 |
+
msgstr "Αριστερή Πλευρική Στήλη"
|
537 |
+
|
538 |
+
#: templates/fields/sidebars.php:41 templates/fields/sidebars.php:56
|
539 |
+
msgid "Choose a sidebar"
|
540 |
+
msgstr "Επιλέξτε πλευρική στήλη"
|
541 |
+
|
542 |
+
#: templates/fields/sidebars.php:54
|
543 |
+
msgid "Right Sidebar"
|
544 |
+
msgstr "Δεξιά Πλευρική Στήλη"
|
545 |
+
|
546 |
+
#: templates/fields/upload.php:34
|
547 |
+
#: templates/panel/woocommerce/woocommerce-upload.php:37
|
548 |
+
msgid "Upload"
|
549 |
+
msgstr "Ανέβασμα"
|
550 |
+
|
551 |
+
#: templates/fields/upload.php:39
|
552 |
+
msgid "Reset"
|
553 |
+
msgstr "Επαναφορά"
|
554 |
+
|
555 |
+
#. translators: %s is the plugin version.
|
556 |
+
#: templates/panel/welcome-modals/update.php:34
|
557 |
+
msgid "is successfully updated to version %s."
|
558 |
+
msgstr ""
|
559 |
+
|
560 |
+
#. translators: %s is the plugin version.
|
561 |
+
#: templates/panel/welcome-modals/update.php:44
|
562 |
+
msgid "What's new in version %s"
|
563 |
+
msgstr ""
|
564 |
+
|
565 |
+
#: templates/panel/welcome-modals/update.php:49
|
566 |
+
msgid "Check the changelog >"
|
567 |
+
msgstr ""
|
568 |
+
|
569 |
+
#: templates/panel/welcome-modals/update.php:64
|
570 |
+
#: templates/panel/welcome-modals/welcome.php:60
|
571 |
+
msgid "Got it, close this window"
|
572 |
+
msgstr ""
|
573 |
+
|
574 |
+
#: templates/panel/welcome-modals/welcome.php:30
|
575 |
+
msgid "Thank you for using our plugin"
|
576 |
+
msgstr ""
|
577 |
+
|
578 |
+
#. translators: %s is the number of steps.
|
579 |
+
#: templates/panel/welcome-modals/welcome.php:45
|
580 |
+
msgid "Start with these %s steps:"
|
581 |
+
msgstr ""
|
582 |
+
|
583 |
+
#: templates/panel/woocommerce/woocommerce-form.php:29
|
584 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
585 |
+
msgid "Save Options"
|
586 |
+
msgstr ""
|
587 |
+
|
588 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
589 |
+
msgid "Options Saved"
|
590 |
+
msgstr ""
|
591 |
+
|
592 |
+
#: templates/panel/woocommerce/woocommerce-form.php:43
|
593 |
+
msgid "Reset Defaults"
|
594 |
+
msgstr "Επαναφορά Προεπιλεγμένων"
|
595 |
+
|
596 |
+
#: templates/sysinfo/system-information-panel.php:12
|
597 |
+
msgid "PHPInfo"
|
598 |
+
msgstr "PHPInfo"
|
599 |
+
|
600 |
+
#: templates/sysinfo/system-information-panel.php:13
|
601 |
+
#: templates/sysinfo/tabs/error-log.php:25
|
602 |
+
msgid "Log Files"
|
603 |
+
msgstr "Αρχεία Καταγραφής"
|
604 |
+
|
605 |
+
#: templates/sysinfo/system-information-panel.php:22
|
606 |
+
msgid "YITH System Information"
|
607 |
+
msgstr "Σύστημα Πληροφοριών YITH"
|
608 |
+
|
609 |
+
#: templates/sysinfo/tabs/error-log.php:13
|
610 |
+
msgid "WP debug.log file"
|
611 |
+
msgstr "Αρχείο WP debug.log"
|
612 |
+
|
613 |
+
#: templates/sysinfo/tabs/error-log.php:18
|
614 |
+
msgid "PHP error_log file"
|
615 |
+
msgstr "Αρχείο PHP error_log"
|
616 |
+
|
617 |
+
#: templates/sysinfo/tabs/error-log.php:60
|
618 |
+
msgid "Download"
|
619 |
+
msgstr "Κατέβασμα"
|
620 |
+
|
621 |
+
#: templates/sysinfo/tabs/error-log.php:73
|
622 |
+
msgid "The file size exceeds 8 megabytes so it must be downloaded"
|
623 |
+
msgstr ""
|
624 |
+
"Το μέγεθος αρχείου υπερβαίνει τα 8 megabytes οπότε θα πρέπει να το κατεβάσετε"
|
625 |
+
|
626 |
+
#. translators: %s file name.
|
627 |
+
#: templates/sysinfo/tabs/error-log.php:97
|
628 |
+
msgid ""
|
629 |
+
"No Log file available. Enable the WordPress debug by adding this in the %s "
|
630 |
+
"file of your installation"
|
631 |
+
msgstr ""
|
632 |
+
"Δεν υπάρχει διαθέσιμο αρχείο Καταγραφής. Ενεργοποιήστε την αποσφαλμάτωση "
|
633 |
+
"WordPress προσθέτοντάς το στο αρχείο %s της εγκατάστασής σας"
|
634 |
+
|
635 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
636 |
+
msgid "Copied!"
|
637 |
+
msgstr "Έγινε αντιγραφή!"
|
638 |
+
|
639 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
640 |
+
msgid "Copy Code"
|
641 |
+
msgstr "Αντιγραφή Κώδικα"
|
642 |
+
|
643 |
+
#: templates/sysinfo/tabs/main.php:17
|
644 |
+
msgid "Site Info"
|
645 |
+
msgstr "Στοιχεία Ιστότοπου"
|
646 |
+
|
647 |
+
#: templates/sysinfo/tabs/main.php:22
|
648 |
+
msgid "Site URL"
|
649 |
+
msgstr "URL Ιστοσελίδας"
|
650 |
+
|
651 |
+
#: templates/sysinfo/tabs/main.php:31
|
652 |
+
msgid "Output IP Address"
|
653 |
+
msgstr "Διεύθυνση IP Παραγωγής"
|
654 |
+
|
655 |
+
#: templates/sysinfo/tabs/main.php:39
|
656 |
+
msgid "Defined WP_CACHE"
|
657 |
+
msgstr "Καθορισμένο WP_CACHE"
|
658 |
+
|
659 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
660 |
+
msgid "Yes"
|
661 |
+
msgstr "Ναι"
|
662 |
+
|
663 |
+
#: templates/sysinfo/tabs/main.php:47
|
664 |
+
msgid "External object cache"
|
665 |
+
msgstr "Cache εξωτερικού αντικειμένου"
|
666 |
+
|
667 |
+
#: templates/sysinfo/tabs/main.php:55
|
668 |
+
msgid "YITH Plugin Framework Version"
|
669 |
+
msgstr ""
|
670 |
+
|
671 |
+
#. translators: %s is the name of the plugin that is loading the framework.
|
672 |
+
#: templates/sysinfo/tabs/main.php:64
|
673 |
+
msgid "loaded by %s"
|
674 |
+
msgstr ""
|
675 |
+
|
676 |
+
#: templates/sysinfo/tabs/main.php:73
|
677 |
+
msgid "Plugins Requirements"
|
678 |
+
msgstr "Προϋποθέσεις Πρόσθετων"
|
679 |
+
|
680 |
+
#: templates/sysinfo/tabs/main.php:108
|
681 |
+
msgid "Database Info"
|
682 |
+
msgstr ""
|
683 |
+
|
684 |
+
#: templates/sysinfo/tabs/main.php:113
|
685 |
+
msgid "MySQL version"
|
686 |
+
msgstr ""
|
687 |
+
|
688 |
+
#. Translators: %s: Codex link.
|
689 |
+
#: templates/sysinfo/tabs/main.php:123
|
690 |
+
msgid "WordPress recommends a minimum MySQL version of 5.6. See: %s"
|
691 |
+
msgstr ""
|
692 |
+
|
693 |
+
#: templates/sysinfo/tabs/main.php:123
|
694 |
+
msgid "WordPress requirements"
|
695 |
+
msgstr ""
|
696 |
+
|
697 |
+
#: templates/sysinfo/tabs/main.php:130
|
698 |
+
msgid "Total Database Size"
|
699 |
+
msgstr ""
|
700 |
+
|
701 |
+
#: templates/sysinfo/tabs/main.php:138
|
702 |
+
msgid "Database Data Size"
|
703 |
+
msgstr ""
|
704 |
+
|
705 |
+
#: templates/sysinfo/tabs/main.php:146
|
706 |
+
msgid "Database Index Size"
|
707 |
+
msgstr ""
|
708 |
+
|
709 |
+
#: templates/sysinfo/tabs/main.php:154
|
710 |
+
msgid "Database Free Size"
|
711 |
+
msgstr ""
|
712 |
+
|
713 |
+
#. Translators: %1$f: Table size, %2$f: Index size, %3$f: Free size, %4$s
|
714 |
+
#. Engine.
|
715 |
+
#: templates/sysinfo/tabs/main.php:168
|
716 |
+
msgid "Data: %1$.2fMB | Index: %2$.2fMB | Free: %3$.2fMB | Engine: %4$s"
|
717 |
+
msgstr ""
|
718 |
+
|
719 |
+
#. translators: %s is the title of the post object.
|
720 |
+
#: yit-functions.php:1938
|
721 |
+
msgid "Are you sure you want to move \"%s\" to trash?"
|
722 |
+
msgstr ""
|
723 |
+
|
724 |
+
#. translators: %s is the title of the post object.
|
725 |
+
#: yit-functions.php:1940 yit-functions.php:2100
|
726 |
+
msgid "Are you sure you want to delete \"%s\"?"
|
727 |
+
msgstr ""
|
728 |
+
|
729 |
+
#: yit-functions.php:2038 yit-functions.php:2046 yit-functions.php:2163
|
730 |
+
msgid "Further actions"
|
731 |
+
msgstr ""
|
732 |
+
|
733 |
+
#: yit-plugin.php:233
|
734 |
+
msgid "License"
|
735 |
+
msgstr "Άδεια χρήσης προϊόντος"
|
736 |
+
|
737 |
+
#. translators: 1. Plugin(s) name(s).
|
738 |
+
#: yit-plugin.php:272
|
739 |
+
msgid ""
|
740 |
+
"%s was deactivated as you're running an higher tier version of the same "
|
741 |
+
"plugin."
|
742 |
+
msgid_plural ""
|
743 |
+
"%s were deactivated as you're running higher tier versions of the same "
|
744 |
+
"plugins."
|
745 |
+
msgstr[0] ""
|
746 |
+
msgstr[1] ""
|
747 |
+
|
748 |
+
#. Author of the plugin/theme
|
749 |
+
msgid "YITH"
|
750 |
+
msgstr "YITH"
|
751 |
+
|
752 |
+
#. translators: %s it the Elementor Widget title.
|
753 |
+
#: includes/builders/elementor/class-yith-elementor-widget.php:252
|
754 |
+
msgctxt "Elementor Widget - section title"
|
755 |
+
msgid "%s - Options"
|
756 |
+
msgstr ""
|
757 |
+
|
758 |
+
#: includes/builders/gutenberg/class-yith-gutenberg.php:152
|
759 |
+
msgctxt "[gutenberg]: Category Name"
|
760 |
+
msgid "YITH"
|
761 |
+
msgstr "YITH"
|
762 |
+
|
763 |
+
#: includes/class-yit-assets.php:136
|
764 |
+
msgctxt "Button text"
|
765 |
+
msgid "Confirm"
|
766 |
+
msgstr ""
|
767 |
+
|
768 |
+
#: includes/class-yit-assets.php:137
|
769 |
+
msgctxt "Button text"
|
770 |
+
msgid "Cancel"
|
771 |
+
msgstr ""
|
772 |
+
|
773 |
+
#: includes/class-yit-assets.php:150 yit-functions.php:2009
|
774 |
+
msgctxt "Trash confirmation action"
|
775 |
+
msgid "Yes, move to trash"
|
776 |
+
msgstr ""
|
777 |
+
|
778 |
+
#: includes/class-yit-assets.php:154 yit-functions.php:2027
|
779 |
+
#: yit-functions.php:2154
|
780 |
+
msgctxt "Delete confirmation action"
|
781 |
+
msgid "Yes, delete"
|
782 |
+
msgstr ""
|
783 |
+
|
784 |
+
#. translators: 1. Plugin name.
|
785 |
+
#: includes/class-yit-plugin-panel.php:804
|
786 |
+
msgctxt "Help tab default title"
|
787 |
+
msgid "Thank you for purchasing %s!"
|
788 |
+
msgstr ""
|
789 |
+
|
790 |
+
#: includes/class-yit-plugin-panel.php:804
|
791 |
+
msgctxt "Help tab default title"
|
792 |
+
msgid "Thank you for using %s!"
|
793 |
+
msgstr ""
|
794 |
+
|
795 |
+
#: includes/class-yit-plugin-panel.php:812
|
796 |
+
msgctxt "Help tab default description"
|
797 |
+
msgid ""
|
798 |
+
"We want to help you enjoy a wonderful experience with all of our products."
|
799 |
+
msgstr ""
|
800 |
+
|
801 |
+
#: includes/class-yit-plugin-panel.php:863
|
802 |
+
msgctxt "Premium tab name"
|
803 |
+
msgid "Get premium"
|
804 |
+
msgstr ""
|
805 |
+
|
806 |
+
#: includes/class-yit-plugin-panel.php:875
|
807 |
+
msgctxt "Help tab name"
|
808 |
+
msgid "Help"
|
809 |
+
msgstr ""
|
810 |
+
|
811 |
+
#: includes/class-yith-dashboard.php:96
|
812 |
+
msgctxt "Plugin FW"
|
813 |
+
msgid "View Changelog"
|
814 |
+
msgstr "Προβολή Αρχείου Καταγραφής"
|
815 |
+
|
816 |
+
#: includes/class-yith-dashboard.php:97
|
817 |
+
msgctxt "Plugin FW"
|
818 |
+
msgid "Latest update released on"
|
819 |
+
msgstr "Τελευταία αναβάθμιση κυκλοφόρησε στις"
|
820 |
+
|
821 |
+
#: includes/class-yith-dashboard.php:137
|
822 |
+
msgctxt "Button label"
|
823 |
+
msgid "Close"
|
824 |
+
msgstr "Απενεργοποίηση"
|
825 |
+
|
826 |
+
#: includes/privacy/class-yith-privacy.php:61
|
827 |
+
msgctxt "Privacy Policy Guide Title"
|
828 |
+
msgid "YITH Plugins"
|
829 |
+
msgstr "Πρόσθετα YITH"
|
830 |
+
|
831 |
+
#: includes/privacy/class-yith-privacy.php:93
|
832 |
+
msgctxt "Privacy Policy Content"
|
833 |
+
msgid ""
|
834 |
+
"This sample language includes the basics around what personal data your "
|
835 |
+
"store may be collecting, storing and sharing, as well as who may have access "
|
836 |
+
"to that data. Depending on what settings are enabled and which additional "
|
837 |
+
"plugins are used, the specific information shared by your store will vary. "
|
838 |
+
"We recommend consulting with a lawyer when deciding what information to "
|
839 |
+
"disclose on your privacy policy."
|
840 |
+
msgstr ""
|
841 |
+
"Αυτό το δείγμα γλώσσας περιλαμβάνει τα βασικά στοιχεία γύρω από το τι "
|
842 |
+
"προσωπικά δεδομένα το κατάστημά σας μπορεί να συλλέγει, την αποθήκευση και "
|
843 |
+
"την κοινή χρήση, καθώς και ποιοι μπορεί να έχουν πρόσβαση σε αυτά τα "
|
844 |
+
"δεδομένα. Ανάλογα με τις ρυθμίσεις που είναι ενεργοποιημένες και ποια "
|
845 |
+
"επιπλέον πρόσθετα χρησιμοποιούνται, οι συγκεκριμένες πληροφορίες που "
|
846 |
+
"κοινοποιούνται από το κατάστημά σας θα ποικίλλουν. Συνιστούμε τη διαβούλευση "
|
847 |
+
"με έναν δικηγόρο, όταν αποφασίζετε ποιες πληροφορίες να αποκαλύπτετε στην "
|
848 |
+
"πολιτική απορρήτου σας."
|
849 |
+
|
850 |
+
#: includes/privacy/class-yith-privacy.php:97
|
851 |
+
msgctxt "Privacy Policy Content"
|
852 |
+
msgid "What we collect and store"
|
853 |
+
msgstr "Τι συλλέγουμε και αποθηκεύουμε"
|
854 |
+
|
855 |
+
#: includes/privacy/class-yith-privacy.php:100
|
856 |
+
msgctxt "Privacy Policy Content"
|
857 |
+
msgid "Who on our team has access"
|
858 |
+
msgstr "Ποιος στην ομάδα μας έχει πρόσβαση"
|
859 |
+
|
860 |
+
#: includes/privacy/class-yith-privacy.php:103
|
861 |
+
msgctxt "Privacy Policy Content"
|
862 |
+
msgid "What we share with others"
|
863 |
+
msgstr "Τι μοιραζόμαστε με τους άλλους"
|
864 |
+
|
865 |
+
#: includes/privacy/class-yith-privacy.php:106
|
866 |
+
msgctxt "Privacy Policy Content"
|
867 |
+
msgid "Payments"
|
868 |
+
msgstr "Πληρωμές"
|
869 |
+
|
870 |
+
#: templates/fields/copy-to-clipboard.php:41
|
871 |
+
msgctxt "Copy-to-clipboard message"
|
872 |
+
msgid "Copied!"
|
873 |
+
msgstr ""
|
874 |
+
|
875 |
+
#: templates/fields/copy-to-clipboard.php:45
|
876 |
+
msgctxt "Copy-to-clipboard button text"
|
877 |
+
msgid "Copy"
|
878 |
+
msgstr ""
|
879 |
+
|
880 |
+
#: templates/fields/dimensions.php:13
|
881 |
+
msgctxt "Position in the \"Dimensions\" field"
|
882 |
+
msgid "Top"
|
883 |
+
msgstr "Κορυφή"
|
884 |
+
|
885 |
+
#: templates/fields/dimensions.php:14
|
886 |
+
msgctxt "Position in the \"Dimensions\" field"
|
887 |
+
msgid "Right"
|
888 |
+
msgstr "Δεξιά"
|
889 |
+
|
890 |
+
#: templates/fields/dimensions.php:15
|
891 |
+
msgctxt "Position in the \"Dimensions\" field"
|
892 |
+
msgid "Bottom"
|
893 |
+
msgstr "Κάτω"
|
894 |
+
|
895 |
+
#: templates/fields/dimensions.php:16
|
896 |
+
msgctxt "Position in the \"Dimensions\" field"
|
897 |
+
msgid "Left"
|
898 |
+
msgstr "Αριστερά"
|
899 |
+
|
900 |
+
#: templates/fields/dimensions.php:94
|
901 |
+
msgctxt "Tooltip in the \"Dimensions\" field"
|
902 |
+
msgid "Link values together"
|
903 |
+
msgstr "Συνδέστε αξίες"
|
904 |
+
|
905 |
+
#: templates/fields/image-dimensions.php:18
|
906 |
+
msgctxt "Image width field label"
|
907 |
+
msgid "Width"
|
908 |
+
msgstr ""
|
909 |
+
|
910 |
+
#: templates/fields/image-dimensions.php:23
|
911 |
+
msgctxt "Image height field label"
|
912 |
+
msgid "Height"
|
913 |
+
msgstr ""
|
914 |
+
|
915 |
+
#: templates/fields/onoff.php:28
|
916 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
917 |
+
msgid "YES"
|
918 |
+
msgstr "ΝΑΙ"
|
919 |
+
|
920 |
+
#: templates/fields/onoff.php:29
|
921 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
922 |
+
msgid "NO"
|
923 |
+
msgstr "ΟΧΙ"
|
924 |
+
|
925 |
+
#. translators: 1. Url to EN playlist.
|
926 |
+
#: templates/panel/help-tab.php:89
|
927 |
+
msgctxt "Help tab view all video link"
|
928 |
+
msgid ""
|
929 |
+
"Check the full <a href=\"%s\" target=\"_blank\">Playlist on Youtube</a> to "
|
930 |
+
"learn more >"
|
931 |
+
msgstr ""
|
932 |
+
|
933 |
+
#: templates/panel/help-tab.php:96
|
934 |
+
msgctxt "Help tab Watch Videotutorials link"
|
935 |
+
msgid "Videos are also available in:"
|
936 |
+
msgstr ""
|
937 |
+
|
938 |
+
#: templates/panel/help-tab.php:126
|
939 |
+
msgctxt "Help tab Read Documentation link"
|
940 |
+
msgid "Read the documentation"
|
941 |
+
msgstr ""
|
942 |
+
|
943 |
+
#: templates/panel/help-tab.php:129
|
944 |
+
msgctxt "Help tab Read Documentation link"
|
945 |
+
msgid "to learn how the plugin works from the basics."
|
946 |
+
msgstr ""
|
947 |
+
|
948 |
+
#: templates/panel/help-tab.php:139
|
949 |
+
msgctxt "Help tab Watch video tutorials link"
|
950 |
+
msgid "Watch our video tutorials"
|
951 |
+
msgstr ""
|
952 |
+
|
953 |
+
#: templates/panel/help-tab.php:142
|
954 |
+
msgctxt "Help tab Watch video tutorials link"
|
955 |
+
msgid "to see some helpful use cases."
|
956 |
+
msgstr ""
|
957 |
+
|
958 |
+
#: templates/panel/help-tab.php:152
|
959 |
+
msgctxt "Help tab view FAQs link"
|
960 |
+
msgid "Check the FAQs"
|
961 |
+
msgstr ""
|
962 |
+
|
963 |
+
#: templates/panel/help-tab.php:155
|
964 |
+
msgctxt "Help tab view FAQs link"
|
965 |
+
msgid "to find answers to your doubts."
|
966 |
+
msgstr ""
|
967 |
+
|
968 |
+
#: templates/panel/help-tab.php:170
|
969 |
+
msgctxt "Help tab FAQ title"
|
970 |
+
msgid "Last FAQs in our Help Center"
|
971 |
+
msgstr ""
|
972 |
+
|
973 |
+
#: templates/panel/help-tab.php:184
|
974 |
+
msgctxt "Help tab FAQ link"
|
975 |
+
msgid "View all FAQs >"
|
976 |
+
msgstr ""
|
977 |
+
|
978 |
+
#: templates/panel/help-tab.php:193
|
979 |
+
msgctxt "Help tab submit ticket title"
|
980 |
+
msgid "Need help?"
|
981 |
+
msgstr ""
|
982 |
+
|
983 |
+
#: templates/panel/help-tab.php:196
|
984 |
+
msgctxt "Help tab submit ticket description"
|
985 |
+
msgid ""
|
986 |
+
"If you are experiencing any technical issues, ask for help from our "
|
987 |
+
"developers. Submit a ticket through our support desk and we will help you as "
|
988 |
+
"soon as possible."
|
989 |
+
msgstr ""
|
990 |
+
|
991 |
+
#: templates/panel/help-tab.php:204
|
992 |
+
msgctxt "Help tab submit ticket button"
|
993 |
+
msgid "Submit a ticket"
|
994 |
+
msgstr ""
|
995 |
+
|
996 |
+
#: templates/panel/help-tab.php:216 templates/panel/help-tab.php:218
|
997 |
+
#: templates/panel/help-tab.php:223
|
998 |
+
msgctxt "Help tab documentation"
|
999 |
+
msgid "Read the plugin documentation"
|
1000 |
+
msgstr ""
|
1001 |
+
|
1002 |
+
#: templates/panel/help-tab.php:220
|
1003 |
+
msgctxt "Help tab documentation"
|
1004 |
+
msgid "to learn how it works from the basics."
|
1005 |
+
msgstr ""
|
1006 |
+
|
1007 |
+
#: templates/panel/help-tab.php:231 templates/panel/help-tab.php:233
|
1008 |
+
msgctxt "Help tab support"
|
1009 |
+
msgid "Need some help?"
|
1010 |
+
msgstr ""
|
1011 |
+
|
1012 |
+
#: templates/panel/help-tab.php:235
|
1013 |
+
msgctxt "Help tab support"
|
1014 |
+
msgid "From DIY to full-service help"
|
1015 |
+
msgstr ""
|
1016 |
+
|
1017 |
+
#: templates/panel/help-tab.php:238
|
1018 |
+
msgctxt "Help tab support"
|
1019 |
+
msgid ""
|
1020 |
+
"Call or chat 24/7 with our support agents, or let our experts build your "
|
1021 |
+
"site."
|
1022 |
+
msgstr ""
|
1023 |
+
|
1024 |
+
#: templates/panel/help-tab.php:241
|
1025 |
+
msgctxt "Help tab support"
|
1026 |
+
msgid "Yes, I need help"
|
1027 |
+
msgstr ""
|
1028 |
+
|
1029 |
+
#: templates/panel/premium-tab.php:30
|
1030 |
+
msgctxt "Premium Tab"
|
1031 |
+
msgid "Get the premium version to unlock advanced features"
|
1032 |
+
msgstr ""
|
1033 |
+
|
1034 |
+
#: templates/panel/premium-tab.php:34
|
1035 |
+
msgctxt "Premium Tab"
|
1036 |
+
msgid "Get premium"
|
1037 |
+
msgstr ""
|
1038 |
+
|
1039 |
+
#: templates/panel/premium-tab.php:39
|
1040 |
+
msgctxt "Premium Tab"
|
1041 |
+
msgid "Plugin premium features images"
|
1042 |
+
msgstr ""
|
1043 |
+
|
1044 |
+
#. translators: alt attribute of main image tag.
|
1045 |
+
#: templates/panel/premium-tab.php:51 templates/panel/premium-tab.php:58
|
1046 |
+
msgctxt "Premium Tab"
|
1047 |
+
msgid "And so much more!"
|
1048 |
+
msgstr ""
|
1049 |
+
|
1050 |
+
#: templates/panel/premium-tab.php:53
|
1051 |
+
msgctxt "Premium Tab"
|
1052 |
+
msgid "Check the premium features >"
|
1053 |
+
msgstr ""
|
1054 |
+
|
1055 |
+
#: templates/panel/premium-tab.php:60
|
1056 |
+
msgctxt "Premium Tab"
|
1057 |
+
msgid "Check the free vs premium features >"
|
1058 |
+
msgstr ""
|
1059 |
+
|
1060 |
+
#: templates/panel/premium-tab.php:65
|
1061 |
+
msgctxt "Premium Tab"
|
1062 |
+
msgid "Get the premium version"
|
1063 |
+
msgstr ""
|
1064 |
+
|
1065 |
+
#: yit-functions.php:1952
|
1066 |
+
msgctxt "Post action"
|
1067 |
+
msgid "Preview"
|
1068 |
+
msgstr ""
|
1069 |
+
|
1070 |
+
#: yit-functions.php:1961
|
1071 |
+
msgctxt "Post action"
|
1072 |
+
msgid "View"
|
1073 |
+
msgstr ""
|
1074 |
+
|
1075 |
+
#: yit-functions.php:1972
|
1076 |
+
msgctxt "Post action"
|
1077 |
+
msgid "Edit"
|
1078 |
+
msgstr ""
|
1079 |
+
|
1080 |
+
#: yit-functions.php:1980
|
1081 |
+
msgctxt "Post action"
|
1082 |
+
msgid "Duplicate"
|
1083 |
+
msgstr ""
|
1084 |
+
|
1085 |
+
#: yit-functions.php:1992
|
1086 |
+
msgctxt "Post action"
|
1087 |
+
msgid "Restore"
|
1088 |
+
msgstr ""
|
1089 |
+
|
1090 |
+
#: yit-functions.php:2000
|
1091 |
+
msgctxt "Post action"
|
1092 |
+
msgid "Trash"
|
1093 |
+
msgstr ""
|
1094 |
+
|
1095 |
+
#: yit-functions.php:2017
|
1096 |
+
msgctxt "Post action"
|
1097 |
+
msgid "Delete Permanently"
|
1098 |
+
msgstr ""
|
1099 |
+
|
1100 |
+
#: yit-functions.php:2114
|
1101 |
+
msgctxt "Term action"
|
1102 |
+
msgid "View"
|
1103 |
+
msgstr ""
|
1104 |
+
|
1105 |
+
#: yit-functions.php:2124
|
1106 |
+
msgctxt "Term action"
|
1107 |
+
msgid "Edit"
|
1108 |
+
msgstr ""
|
1109 |
+
|
1110 |
+
#: yit-functions.php:2132
|
1111 |
+
msgctxt "Term action"
|
1112 |
+
msgid "Duplicate"
|
1113 |
+
msgstr ""
|
1114 |
+
|
1115 |
+
#: yit-functions.php:2145
|
1116 |
+
msgctxt "Term action"
|
1117 |
+
msgid "Delete"
|
1118 |
+
msgstr ""
|
1119 |
+
|
1120 |
+
#: yit-plugin.php:85
|
1121 |
+
msgctxt "Plugin Row Meta"
|
1122 |
+
msgid "Live Demo"
|
1123 |
+
msgstr "Live Demo"
|
1124 |
+
|
1125 |
+
#: yit-plugin.php:89
|
1126 |
+
msgctxt "Plugin Row Meta"
|
1127 |
+
msgid "Documentation"
|
1128 |
+
msgstr "Εγχειρίδιο χρήσης"
|
1129 |
+
|
1130 |
+
#: yit-plugin.php:93
|
1131 |
+
msgctxt "Plugin Row Meta"
|
1132 |
+
msgid "Support"
|
1133 |
+
msgstr "Υποστήριξη"
|
1134 |
+
|
1135 |
+
#: yit-plugin.php:97
|
1136 |
+
msgctxt "Plugin Row Meta"
|
1137 |
+
msgid "Premium version"
|
1138 |
+
msgstr "Premium έκδοση"
|
1139 |
+
|
1140 |
+
#: yit-plugin.php:229
|
1141 |
+
msgctxt "Action links"
|
1142 |
+
msgid "Settings"
|
1143 |
+
msgstr "Ρυθμίσεις"
|
plugin-fw/languages/yith-plugin-fw-es_ES 2.mo
ADDED
Binary file
|
plugin-fw/languages/yith-plugin-fw-es_ES 2.po
ADDED
@@ -0,0 +1,1162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Translation of YITH Framework in Spanish (Spain)
|
2 |
+
# This file is distributed under the same license as the YITH Framework package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: YITH Framework\n"
|
6 |
+
"Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
|
7 |
+
"POT-Creation-Date: 2022-11-11 07:31:10+00:00\n"
|
8 |
+
"PO-Revision-Date: 2022-09-22 14:14:01+0000\n"
|
9 |
+
"Language: es\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
14 |
+
"X-Generator: GlotPress/3.0.0-alpha.2\n"
|
15 |
+
|
16 |
+
#: includes/class-yit-assets.php:148 yit-functions.php:2006
|
17 |
+
msgid "Confirm trash"
|
18 |
+
msgstr "Confirmar el traslado a la papelera"
|
19 |
+
|
20 |
+
#: includes/class-yit-assets.php:149
|
21 |
+
msgid "Are you sure you want to trash the selected items?"
|
22 |
+
msgstr ""
|
23 |
+
"¿Estás seguro de que quieres mover a la papelera los elementos seleccionados?"
|
24 |
+
|
25 |
+
#: includes/class-yit-assets.php:151 includes/class-yit-assets.php:155
|
26 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
27 |
+
#: yit-functions.php:2008 yit-functions.php:2026
|
28 |
+
msgid "No"
|
29 |
+
msgstr "No"
|
30 |
+
|
31 |
+
#: includes/class-yit-assets.php:152 yit-functions.php:2024
|
32 |
+
#: yit-functions.php:2152
|
33 |
+
msgid "Confirm delete"
|
34 |
+
msgstr "Confirmar el borrado"
|
35 |
+
|
36 |
+
#: includes/class-yit-assets.php:153
|
37 |
+
msgid "Are you sure you want to delete the selected items?"
|
38 |
+
msgstr "¿Estás seguro de que quieres borrar los elementos seleccionados?"
|
39 |
+
|
40 |
+
#: includes/class-yit-assets.php:153 yit-functions.php:1940
|
41 |
+
#: yit-functions.php:2100
|
42 |
+
msgid ""
|
43 |
+
"This action cannot be undone and you will not be able to recover this data."
|
44 |
+
msgstr "Esta acción no se puede revertir y no podrá recuperar estos datos."
|
45 |
+
|
46 |
+
#: includes/class-yit-assets.php:174
|
47 |
+
msgid "Clear"
|
48 |
+
msgstr "Borrar"
|
49 |
+
|
50 |
+
#: includes/class-yit-assets.php:175
|
51 |
+
msgid "Clear color"
|
52 |
+
msgstr "Borrar color"
|
53 |
+
|
54 |
+
#: includes/class-yit-assets.php:176
|
55 |
+
msgid "Default"
|
56 |
+
msgstr "Predeterminado"
|
57 |
+
|
58 |
+
#: includes/class-yit-assets.php:177
|
59 |
+
msgid "Select default color"
|
60 |
+
msgstr "Seleccionar color predeterminado"
|
61 |
+
|
62 |
+
#: includes/class-yit-assets.php:178
|
63 |
+
msgid "Select Color"
|
64 |
+
msgstr "Seleccionar color"
|
65 |
+
|
66 |
+
#: includes/class-yit-assets.php:179
|
67 |
+
msgid "Color value"
|
68 |
+
msgstr "Valor del color"
|
69 |
+
|
70 |
+
#: includes/class-yit-help-desk.php:152
|
71 |
+
msgid "There was an error with your request; please try again later."
|
72 |
+
msgstr ""
|
73 |
+
"Se ha producido un error en tu solicitud; inténtalo de nuevo más tarde."
|
74 |
+
|
75 |
+
#: includes/class-yit-plugin-panel-woocommerce.php:437
|
76 |
+
msgid "The changes you have made will be lost if you leave this page."
|
77 |
+
msgstr "Los cambios que has hecho se perderán si abandonas esta página."
|
78 |
+
|
79 |
+
#: includes/class-yit-plugin-panel.php:83
|
80 |
+
msgid "Plugin Settings"
|
81 |
+
msgstr "Ajustes del plugin"
|
82 |
+
|
83 |
+
#: includes/class-yit-plugin-panel.php:84
|
84 |
+
msgid "Settings"
|
85 |
+
msgstr "Ajustes"
|
86 |
+
|
87 |
+
#: includes/class-yit-plugin-panel.php:456
|
88 |
+
#: includes/class-yit-plugin-panel.php:459
|
89 |
+
msgid "How to install premium version"
|
90 |
+
msgstr "Cómo instalar la versión premium"
|
91 |
+
|
92 |
+
#: includes/class-yit-plugin-panel.php:656
|
93 |
+
#: includes/class-yit-plugin-subpanel.php:133
|
94 |
+
msgid "Save Changes"
|
95 |
+
msgstr "Guardar cambios"
|
96 |
+
|
97 |
+
#: includes/class-yit-plugin-panel.php:664
|
98 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
99 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
100 |
+
msgid ""
|
101 |
+
"If you continue with this action, you will reset all options in this page."
|
102 |
+
msgstr ""
|
103 |
+
"Si continúas con esta acción, restablecerás todas las opciones en esta "
|
104 |
+
"página."
|
105 |
+
|
106 |
+
#: includes/class-yit-plugin-panel.php:664
|
107 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
108 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
109 |
+
msgid "Are you sure?"
|
110 |
+
msgstr "¿Estás seguro?"
|
111 |
+
|
112 |
+
#: includes/class-yit-plugin-panel.php:668
|
113 |
+
#: includes/class-yit-plugin-subpanel.php:143
|
114 |
+
msgid "Reset to default"
|
115 |
+
msgstr "Restablecer valores predeterminados"
|
116 |
+
|
117 |
+
#: includes/class-yit-plugin-panel.php:1039
|
118 |
+
msgid "Read the <mark>plugin documentation</mark>"
|
119 |
+
msgstr "Lee la <mark>documentación del plugin</mark>"
|
120 |
+
|
121 |
+
#: includes/class-yit-plugin-panel.php:1040
|
122 |
+
msgid "Learn what you can really do with this powerful tool"
|
123 |
+
msgstr "Aprende lo que realmente puedes hacer con esta potente herramienta"
|
124 |
+
|
125 |
+
#: includes/class-yit-plugin-panel.php:1050
|
126 |
+
msgid "Watch our <mark>\"First Steps\" video</mark>"
|
127 |
+
msgstr "Mira nuestro <mark>vídeo de «primeros pasos»</mark>"
|
128 |
+
|
129 |
+
#: includes/class-yit-plugin-panel.php:1051
|
130 |
+
msgid "See how it works before you start using it"
|
131 |
+
msgstr "Ve cómo funciona antes de empezar a usarlo"
|
132 |
+
|
133 |
+
#: includes/class-yit-plugin-panel.php:1307
|
134 |
+
msgid ""
|
135 |
+
"The element you have entered already exists. Please, enter another name."
|
136 |
+
msgstr ""
|
137 |
+
"El elemento que has introducido ya existe. Por favor, introduce otro nombre."
|
138 |
+
|
139 |
+
#: includes/class-yit-plugin-panel.php:1308
|
140 |
+
msgid "Settings saved"
|
141 |
+
msgstr "Ajustes guardados"
|
142 |
+
|
143 |
+
#: includes/class-yit-plugin-panel.php:1309
|
144 |
+
msgid "Settings reset"
|
145 |
+
msgstr "Restablecer ajustes"
|
146 |
+
|
147 |
+
#: includes/class-yit-plugin-panel.php:1310
|
148 |
+
msgid "Element deleted correctly."
|
149 |
+
msgstr "Elemento eliminado correctamente."
|
150 |
+
|
151 |
+
#: includes/class-yit-plugin-panel.php:1311
|
152 |
+
#: includes/class-yit-plugin-panel.php:1312
|
153 |
+
msgid "Element updated correctly."
|
154 |
+
msgstr "Elemento actualizado correctamente."
|
155 |
+
|
156 |
+
#: includes/class-yit-plugin-panel.php:1313
|
157 |
+
msgid "Database imported correctly."
|
158 |
+
msgstr "Base de datos importada correctamente."
|
159 |
+
|
160 |
+
#: includes/class-yit-plugin-panel.php:1314
|
161 |
+
msgid "An error has occurred during import. Please try again."
|
162 |
+
msgstr ""
|
163 |
+
"Ha ocurrido un error durante la importación. Por favor, inténtalo de nuevo."
|
164 |
+
|
165 |
+
#: includes/class-yit-plugin-panel.php:1315
|
166 |
+
msgid "The added file is not valid."
|
167 |
+
msgstr "El archivo añadido no es válido."
|
168 |
+
|
169 |
+
#: includes/class-yit-plugin-panel.php:1316
|
170 |
+
msgid "Sorry, import is disabled."
|
171 |
+
msgstr "Lo siento, la importación está desactivada."
|
172 |
+
|
173 |
+
#: includes/class-yit-plugin-panel.php:1317
|
174 |
+
msgid "Sorting successful."
|
175 |
+
msgstr "Clasificación realizada con éxito"
|
176 |
+
|
177 |
+
#: includes/class-yit-plugin-panel.php:1806
|
178 |
+
msgid "We need your support"
|
179 |
+
msgstr "Necesitamos tu apoyo"
|
180 |
+
|
181 |
+
#: includes/class-yit-plugin-panel.php:1807
|
182 |
+
msgid "to keep updating and improving the plugin. Please,"
|
183 |
+
msgstr "para que podamos seguir actualizando y mejorando el plugin. Por favor,"
|
184 |
+
|
185 |
+
#: includes/class-yit-plugin-panel.php:1809
|
186 |
+
msgid "help us by leaving a good review"
|
187 |
+
msgstr "ayúdanos dejando una buena valoración"
|
188 |
+
|
189 |
+
#: includes/class-yit-plugin-panel.php:1810
|
190 |
+
msgid ":) Thanks!"
|
191 |
+
msgstr ":) ¡Gracias!"
|
192 |
+
|
193 |
+
#: includes/class-yit-pointers.php:80
|
194 |
+
msgid "Plugins Activated"
|
195 |
+
msgstr "Plugins activados"
|
196 |
+
|
197 |
+
#: includes/class-yit-pointers.php:81
|
198 |
+
msgid ""
|
199 |
+
"From now on, you can find all plugin options in YITH menu. Plugin "
|
200 |
+
"customization settings will be available as a new entry in YITH menu."
|
201 |
+
msgstr ""
|
202 |
+
"Desde ahora, puedes encontrar todas las opciones de los plugins en el menú "
|
203 |
+
"YITH plugins. La personalización de los ajustes del plugins estará "
|
204 |
+
"disponible como una nueva entrada en el menú YITH plugins."
|
205 |
+
|
206 |
+
#. translators: 1. YITH site link; 2. WordPress site link.
|
207 |
+
#: includes/class-yit-pointers.php:84 includes/class-yit-pointers.php:100
|
208 |
+
msgid "Discover all our plugins available on: %1$s and %2$s"
|
209 |
+
msgstr "Descubre todos nuestros plugins disponibles en: %1$s y %2$s"
|
210 |
+
|
211 |
+
#: includes/class-yit-pointers.php:96
|
212 |
+
msgid "Plugins Upgraded"
|
213 |
+
msgstr "Plugins mejorados"
|
214 |
+
|
215 |
+
#: includes/class-yit-pointers.php:97
|
216 |
+
msgid ""
|
217 |
+
"From now on, you can find the option panel of YITH plugins in YITH menu. "
|
218 |
+
"Every time one of our plugins is added, a new entry will be added to this "
|
219 |
+
"menu. For example, after the update, plugin options (such as for YITH "
|
220 |
+
"WooCommerce Wishlist, YITH WooCommerce Ajax Search, etc.) will be moved from "
|
221 |
+
"previous location to YITH menu."
|
222 |
+
msgstr ""
|
223 |
+
"Desde ahora puedes encontrar la opción en el panel de Plugins de YITH en el "
|
224 |
+
"menú YITH plugins. Cada vez que uno de nuestros plugins es añadido, una "
|
225 |
+
"nueva entrada será añadida a este menú. Por ejemplo, tras la actualización, "
|
226 |
+
"las opciones de los plugins (tales como YITH WooCommerce Wishlist, YITH "
|
227 |
+
"WooCommerce Ajax Search, etc.) serán movidos de la ubicación previa a la "
|
228 |
+
"pestaña de YITH plugins."
|
229 |
+
|
230 |
+
#: includes/class-yith-bh-onboarding.php:85
|
231 |
+
msgid "It is not possible save the options"
|
232 |
+
msgstr "No es posible guardar las opciones"
|
233 |
+
|
234 |
+
#: includes/class-yith-dashboard.php:35
|
235 |
+
msgid "YITH Latest Updates"
|
236 |
+
msgstr "Últimas actualizaciones de YITH"
|
237 |
+
|
238 |
+
#: includes/class-yith-dashboard.php:36
|
239 |
+
msgid "Latest news from YITH Blog"
|
240 |
+
msgstr "Últimas novedades del Blog de YITH"
|
241 |
+
|
242 |
+
#: includes/class-yith-dashboard.php:56
|
243 |
+
msgid "RSS Error:"
|
244 |
+
msgstr "Error RSS:"
|
245 |
+
|
246 |
+
#: includes/class-yith-dashboard.php:63
|
247 |
+
msgid ""
|
248 |
+
"An error has occurred, which probably means the feed is down. Try again "
|
249 |
+
"later."
|
250 |
+
msgstr ""
|
251 |
+
"Ha ocurrido un error, lo que puede que signifique que el feed ha caído. "
|
252 |
+
"Inténtalo de nuevo más tarde."
|
253 |
+
|
254 |
+
#. translators: %s is the name of the post type (example Back to "Membership
|
255 |
+
#. Plans").
|
256 |
+
#: includes/class-yith-post-type-admin.php:286
|
257 |
+
msgid "Back to \"%s\""
|
258 |
+
msgstr "Volver a \"%s\""
|
259 |
+
|
260 |
+
#: includes/class-yith-post-type-admin.php:286
|
261 |
+
msgid "Back to the list"
|
262 |
+
msgstr "Volver a la lista"
|
263 |
+
|
264 |
+
#: includes/class-yith-system-status.php:110
|
265 |
+
msgid "WordPress Version"
|
266 |
+
msgstr "Versión de WordPress"
|
267 |
+
|
268 |
+
#: includes/class-yith-system-status.php:111
|
269 |
+
msgid "WooCommerce Version"
|
270 |
+
msgstr "Versión de WooCommerce"
|
271 |
+
|
272 |
+
#: includes/class-yith-system-status.php:112
|
273 |
+
msgid "Available Memory"
|
274 |
+
msgstr "Memoria disponible"
|
275 |
+
|
276 |
+
#: includes/class-yith-system-status.php:113
|
277 |
+
msgid "PHP Version"
|
278 |
+
msgstr "Versión PHP"
|
279 |
+
|
280 |
+
#: includes/class-yith-system-status.php:114
|
281 |
+
msgid "TLS Version"
|
282 |
+
msgstr "Versión TLS"
|
283 |
+
|
284 |
+
#: includes/class-yith-system-status.php:115
|
285 |
+
msgid "WordPress Cron"
|
286 |
+
msgstr "Cron de WordPress"
|
287 |
+
|
288 |
+
#: includes/class-yith-system-status.php:116
|
289 |
+
msgid "SimpleXML"
|
290 |
+
msgstr "SimpleXML"
|
291 |
+
|
292 |
+
#: includes/class-yith-system-status.php:117
|
293 |
+
msgid "MultiByte String"
|
294 |
+
msgstr "Cadena MultiByte"
|
295 |
+
|
296 |
+
#: includes/class-yith-system-status.php:118
|
297 |
+
msgid "ImageMagick Version"
|
298 |
+
msgstr "Versión ImageMagick"
|
299 |
+
|
300 |
+
#: includes/class-yith-system-status.php:119
|
301 |
+
msgid "GD Library"
|
302 |
+
msgstr "Biblioteca GD"
|
303 |
+
|
304 |
+
#: includes/class-yith-system-status.php:120
|
305 |
+
msgid "Iconv Module"
|
306 |
+
msgstr "Módulo Iconv"
|
307 |
+
|
308 |
+
#: includes/class-yith-system-status.php:121
|
309 |
+
msgid "OPCache Save Comments"
|
310 |
+
msgstr "Guardar comentarios OPCache"
|
311 |
+
|
312 |
+
#: includes/class-yith-system-status.php:122
|
313 |
+
msgid "URL FOpen"
|
314 |
+
msgstr "URL FOpen"
|
315 |
+
|
316 |
+
#: includes/class-yith-system-status.php:140
|
317 |
+
#: includes/class-yith-system-status.php:141
|
318 |
+
#: templates/sysinfo/system-information-panel.php:11
|
319 |
+
msgid "System Status"
|
320 |
+
msgstr "Estado del sistema"
|
321 |
+
|
322 |
+
#: includes/class-yith-system-status.php:183
|
323 |
+
msgid "YITH Plugins"
|
324 |
+
msgstr "YITH Plugins"
|
325 |
+
|
326 |
+
#: includes/class-yith-system-status.php:191
|
327 |
+
msgid "WooCommerce"
|
328 |
+
msgstr "WooCommerce"
|
329 |
+
|
330 |
+
#: includes/class-yith-system-status.php:342
|
331 |
+
msgid "Warning!"
|
332 |
+
msgstr "¡Atención!"
|
333 |
+
|
334 |
+
#. translators: %1$s open link tag, %2$s open link tag
|
335 |
+
#: includes/class-yith-system-status.php:346
|
336 |
+
msgid ""
|
337 |
+
"The system check has detected some compatibility issues on your installation."
|
338 |
+
"%1$sClick here%2$s to know more"
|
339 |
+
msgstr ""
|
340 |
+
"La comprobación del sistema ha detectado algunos problemas de compatibilidad "
|
341 |
+
"en tu instalación.%1$sHaz clic quí%2$s para saber más"
|
342 |
+
|
343 |
+
#: includes/class-yith-system-status.php:496
|
344 |
+
msgid "Enabled"
|
345 |
+
msgstr "Activado"
|
346 |
+
|
347 |
+
#: includes/class-yith-system-status.php:496
|
348 |
+
msgid "Disabled"
|
349 |
+
msgstr "Desactivado"
|
350 |
+
|
351 |
+
#: includes/class-yith-system-status.php:501
|
352 |
+
msgid "N/A"
|
353 |
+
msgstr "N/D"
|
354 |
+
|
355 |
+
#. translators: %1$s plugin name, %2$s requirement name
|
356 |
+
#: includes/class-yith-system-status.php:528
|
357 |
+
msgid "%1$s needs %2$s enabled"
|
358 |
+
msgstr "%1$s necesita %2$s activado"
|
359 |
+
|
360 |
+
#. translators: %1$s plugin name, %2$s required memory amount
|
361 |
+
#: includes/class-yith-system-status.php:531
|
362 |
+
msgid "%1$s needs at least %2$s of available memory"
|
363 |
+
msgstr "%1$s necesita al menos %2$s de memoria disponible"
|
364 |
+
|
365 |
+
#. translators: %1$s plugin name, %2$s version number
|
366 |
+
#: includes/class-yith-system-status.php:534
|
367 |
+
msgid "%1$s needs at least %2$s version"
|
368 |
+
msgstr "%1$s necesita al menos la versión %2$s"
|
369 |
+
|
370 |
+
#: includes/class-yith-system-status.php:558
|
371 |
+
msgid ""
|
372 |
+
"Update it to the latest version in order to benefit of all new features and "
|
373 |
+
"security updates."
|
374 |
+
msgstr ""
|
375 |
+
"Actualízalo a la última versión para beneficiarte de todas las "
|
376 |
+
"características y actualizaciones de seguridad."
|
377 |
+
|
378 |
+
#: includes/class-yith-system-status.php:562
|
379 |
+
#: includes/class-yith-system-status.php:568
|
380 |
+
msgid "Contact your hosting company in order to update it."
|
381 |
+
msgstr "Ponte en contacto con tu empresa de hosting para actualizarlo."
|
382 |
+
|
383 |
+
#: includes/class-yith-system-status.php:566
|
384 |
+
msgid "Contact your hosting company in order to install it."
|
385 |
+
msgstr "Ponte en contacto con tu empresa de hosting para instalarlo."
|
386 |
+
|
387 |
+
#. translators: %1$s code, %2$s file name
|
388 |
+
#: includes/class-yith-system-status.php:573
|
389 |
+
msgid "Remove %1$s from %2$s file"
|
390 |
+
msgstr "Eliminar %1$s desde el archivo %2$s "
|
391 |
+
|
392 |
+
#: includes/class-yith-system-status.php:581
|
393 |
+
msgid "Contact your hosting company in order to enable it."
|
394 |
+
msgstr "Contacta con tu empresa de hosting para activarlo."
|
395 |
+
|
396 |
+
#. translators: %1$s opening link tag, %2$s closing link tag
|
397 |
+
#: includes/class-yith-system-status.php:585
|
398 |
+
#: includes/class-yith-system-status.php:608
|
399 |
+
msgid ""
|
400 |
+
"Read more %1$shere%2$s or contact your hosting company in order to increase "
|
401 |
+
"it."
|
402 |
+
msgstr ""
|
403 |
+
"Lee más %1$saquí%2$s o contacta a tu empresa de hosting para incrementarlo."
|
404 |
+
|
405 |
+
#. translators: %s recommended memory amount
|
406 |
+
#: includes/class-yith-system-status.php:605
|
407 |
+
msgid ""
|
408 |
+
"For optimal functioning of our plugins, we suggest setting at least %s of "
|
409 |
+
"available memory"
|
410 |
+
msgstr ""
|
411 |
+
"Para el óptimo funcionamiento de nuestros plugins, sugerimos al menos %s de "
|
412 |
+
"memoria disponible"
|
413 |
+
|
414 |
+
#. translators: %1$s TLS label, %2$s cURL label
|
415 |
+
#: includes/class-yith-system-status.php:613
|
416 |
+
msgid ""
|
417 |
+
"The system check cannot determine which %1$s version is installed because "
|
418 |
+
"%2$s module is disabled. Ask your hosting company to enable it."
|
419 |
+
msgstr ""
|
420 |
+
"La comprobación del sistema no ha podido determinar qué versión de %1$s está "
|
421 |
+
"instalada porque el módulo %2$s está desactivado. Solicita a tu compañia de "
|
422 |
+
"hosting que lo active."
|
423 |
+
|
424 |
+
#. translators: %1$s TLS label
|
425 |
+
#: includes/class-yith-system-status.php:616
|
426 |
+
msgid ""
|
427 |
+
"The system check cannot determine which %1$s version is installed due to a "
|
428 |
+
"connection issue between your site and our server."
|
429 |
+
msgstr ""
|
430 |
+
"La comprobación del sistema no ha podido determinar qué versión de %1$s está "
|
431 |
+
"instalada debido a un error entre tu sitio y nuestro servidor."
|
432 |
+
|
433 |
+
#: templates/bh-onboarding/onboarding-tabs.php:63
|
434 |
+
msgid "Save"
|
435 |
+
msgstr "Guardar"
|
436 |
+
|
437 |
+
#: templates/fields/ajax-customers.php:41
|
438 |
+
msgid "Search for a customer..."
|
439 |
+
msgstr "Buscar un cliente..."
|
440 |
+
|
441 |
+
#. translators: 1. user display name; 2. user ID; 3. user email.
|
442 |
+
#: templates/fields/ajax-customers.php:68
|
443 |
+
#: templates/fields/ajax-customers.php:79
|
444 |
+
msgid "%1$s (#%2$s – %3$s)"
|
445 |
+
msgstr "%1$s (#%2$s – %3$s)"
|
446 |
+
|
447 |
+
#: templates/fields/ajax-posts.php:41
|
448 |
+
msgid "Search for a post..."
|
449 |
+
msgstr "Buscar una entrada..."
|
450 |
+
|
451 |
+
#: templates/fields/ajax-products.php:16
|
452 |
+
msgid "Search for a product..."
|
453 |
+
msgstr "Buscar un producto..."
|
454 |
+
|
455 |
+
#: templates/fields/ajax-terms.php:41
|
456 |
+
msgid "Search for a category..."
|
457 |
+
msgstr "Buscar una categoría..."
|
458 |
+
|
459 |
+
#: templates/fields/customtabs.php:17
|
460 |
+
msgid "Close all"
|
461 |
+
msgstr "Cerrar todo"
|
462 |
+
|
463 |
+
#: templates/fields/customtabs.php:17
|
464 |
+
msgid "Expand all"
|
465 |
+
msgstr "Expandir todo"
|
466 |
+
|
467 |
+
#: templates/fields/customtabs.php:25 templates/fields/customtabs.php:68
|
468 |
+
msgid "Remove"
|
469 |
+
msgstr "Eliminar"
|
470 |
+
|
471 |
+
#: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
|
472 |
+
msgid "Name"
|
473 |
+
msgstr "Nombre"
|
474 |
+
|
475 |
+
#: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
|
476 |
+
msgid "Value"
|
477 |
+
msgstr "Valor"
|
478 |
+
|
479 |
+
#: templates/fields/customtabs.php:41 templates/fields/customtabs.php:82
|
480 |
+
msgid "Content of the tab. (HTML is supported)"
|
481 |
+
msgstr "Contenido de la pestaña. (Compatible con HTML)"
|
482 |
+
|
483 |
+
#: templates/fields/customtabs.php:52
|
484 |
+
msgid "Add custom product tab"
|
485 |
+
msgstr "Añadir pestaña de producto personalizada"
|
486 |
+
|
487 |
+
#: templates/fields/customtabs.php:93
|
488 |
+
msgid "Do you want to remove the custom tab?"
|
489 |
+
msgstr "¿Quieres eliminar la pestaña personalizada?"
|
490 |
+
|
491 |
+
#: templates/fields/date-format.php:65
|
492 |
+
msgid "Custom:"
|
493 |
+
msgstr "Personalizado:"
|
494 |
+
|
495 |
+
#: templates/fields/date-format.php:70
|
496 |
+
msgid "Preview:"
|
497 |
+
msgstr "Vista previa:"
|
498 |
+
|
499 |
+
#: templates/fields/icons.php:78
|
500 |
+
msgid "Set Default"
|
501 |
+
msgstr "Establecer predeterminado"
|
502 |
+
|
503 |
+
#: templates/fields/image-gallery.php:29 templates/fields/image-gallery.php:40
|
504 |
+
msgid "Delete image"
|
505 |
+
msgstr "Eliminar imagen"
|
506 |
+
|
507 |
+
#: templates/fields/image-gallery.php:37
|
508 |
+
msgid "Add Images to Gallery"
|
509 |
+
msgstr "Añadir imágenes a la Galería"
|
510 |
+
|
511 |
+
#: templates/fields/image-gallery.php:38
|
512 |
+
msgid "Add to gallery"
|
513 |
+
msgstr "Añadir a la galería"
|
514 |
+
|
515 |
+
#: templates/fields/image-gallery.php:39
|
516 |
+
msgid "Add images"
|
517 |
+
msgstr "Añadir imágenes"
|
518 |
+
|
519 |
+
#: templates/fields/image-gallery.php:41
|
520 |
+
msgid "Delete"
|
521 |
+
msgstr "Eliminar"
|
522 |
+
|
523 |
+
#: templates/fields/select-buttons.php:19
|
524 |
+
msgid "Add All"
|
525 |
+
msgstr "Añadir todo"
|
526 |
+
|
527 |
+
#: templates/fields/select-buttons.php:20
|
528 |
+
msgid "Remove All"
|
529 |
+
msgstr "Eliminar todo"
|
530 |
+
|
531 |
+
#: templates/fields/sidebars.php:20
|
532 |
+
msgid "Left sidebar"
|
533 |
+
msgstr "Barra lateral izquierda"
|
534 |
+
|
535 |
+
#: templates/fields/sidebars.php:23
|
536 |
+
msgid "Right sidebar"
|
537 |
+
msgstr "Barra lateral derecha"
|
538 |
+
|
539 |
+
#: templates/fields/sidebars.php:26 templates/fields/sidebars.php:29
|
540 |
+
msgid "No sidebar"
|
541 |
+
msgstr "Sin barra lateral"
|
542 |
+
|
543 |
+
#: templates/fields/sidebars.php:39
|
544 |
+
msgid "Left Sidebar"
|
545 |
+
msgstr "Barra lateral izquierda"
|
546 |
+
|
547 |
+
#: templates/fields/sidebars.php:41 templates/fields/sidebars.php:56
|
548 |
+
msgid "Choose a sidebar"
|
549 |
+
msgstr "Elige una barra lateral"
|
550 |
+
|
551 |
+
#: templates/fields/sidebars.php:54
|
552 |
+
msgid "Right Sidebar"
|
553 |
+
msgstr "Barra lateral derecha"
|
554 |
+
|
555 |
+
#: templates/fields/upload.php:34
|
556 |
+
#: templates/panel/woocommerce/woocommerce-upload.php:37
|
557 |
+
msgid "Upload"
|
558 |
+
msgstr "Subir"
|
559 |
+
|
560 |
+
#: templates/fields/upload.php:39
|
561 |
+
msgid "Reset"
|
562 |
+
msgstr "Restablecer"
|
563 |
+
|
564 |
+
#. translators: %s is the plugin version.
|
565 |
+
#: templates/panel/welcome-modals/update.php:34
|
566 |
+
msgid "is successfully updated to version %s."
|
567 |
+
msgstr "ha sido actualizado correctamente a la versión %s."
|
568 |
+
|
569 |
+
#. translators: %s is the plugin version.
|
570 |
+
#: templates/panel/welcome-modals/update.php:44
|
571 |
+
msgid "What's new in version %s"
|
572 |
+
msgstr "Novedades de la versión %s"
|
573 |
+
|
574 |
+
#: templates/panel/welcome-modals/update.php:49
|
575 |
+
msgid "Check the changelog >"
|
576 |
+
msgstr "Comprueba el registro de cambios >"
|
577 |
+
|
578 |
+
#: templates/panel/welcome-modals/update.php:64
|
579 |
+
#: templates/panel/welcome-modals/welcome.php:60
|
580 |
+
msgid "Got it, close this window"
|
581 |
+
msgstr "Entendido, cerrar esta ventana"
|
582 |
+
|
583 |
+
#: templates/panel/welcome-modals/welcome.php:30
|
584 |
+
msgid "Thank you for using our plugin"
|
585 |
+
msgstr "Gracias por usar nuestro plugin"
|
586 |
+
|
587 |
+
#. translators: %s is the number of steps.
|
588 |
+
#: templates/panel/welcome-modals/welcome.php:45
|
589 |
+
msgid "Start with these %s steps:"
|
590 |
+
msgstr "Comienza con estos %s pasos:"
|
591 |
+
|
592 |
+
#: templates/panel/woocommerce/woocommerce-form.php:29
|
593 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
594 |
+
msgid "Save Options"
|
595 |
+
msgstr "Guardar Opciones"
|
596 |
+
|
597 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
598 |
+
msgid "Options Saved"
|
599 |
+
msgstr "Opciones guardadas"
|
600 |
+
|
601 |
+
#: templates/panel/woocommerce/woocommerce-form.php:43
|
602 |
+
msgid "Reset Defaults"
|
603 |
+
msgstr "Restablecer valores predeterminados"
|
604 |
+
|
605 |
+
#: templates/sysinfo/system-information-panel.php:12
|
606 |
+
msgid "PHPInfo"
|
607 |
+
msgstr "Información PHP"
|
608 |
+
|
609 |
+
#: templates/sysinfo/system-information-panel.php:13
|
610 |
+
#: templates/sysinfo/tabs/error-log.php:25
|
611 |
+
msgid "Log Files"
|
612 |
+
msgstr "Archivos de registro"
|
613 |
+
|
614 |
+
#: templates/sysinfo/system-information-panel.php:22
|
615 |
+
msgid "YITH System Information"
|
616 |
+
msgstr "Información de Sistema de YITH"
|
617 |
+
|
618 |
+
#: templates/sysinfo/tabs/error-log.php:13
|
619 |
+
msgid "WP debug.log file"
|
620 |
+
msgstr "Archivo WP debug.log"
|
621 |
+
|
622 |
+
#: templates/sysinfo/tabs/error-log.php:18
|
623 |
+
msgid "PHP error_log file"
|
624 |
+
msgstr "Archivo PHP error_log"
|
625 |
+
|
626 |
+
#: templates/sysinfo/tabs/error-log.php:60
|
627 |
+
msgid "Download"
|
628 |
+
msgstr "Descargar"
|
629 |
+
|
630 |
+
#: templates/sysinfo/tabs/error-log.php:73
|
631 |
+
msgid "The file size exceeds 8 megabytes so it must be downloaded"
|
632 |
+
msgstr "El archivo excede los 8 megabytes por lo que debe ser descargado"
|
633 |
+
|
634 |
+
#. translators: %s file name.
|
635 |
+
#: templates/sysinfo/tabs/error-log.php:97
|
636 |
+
msgid ""
|
637 |
+
"No Log file available. Enable the WordPress debug by adding this in the %s "
|
638 |
+
"file of your installation"
|
639 |
+
msgstr ""
|
640 |
+
"No hay archivo de registro disponible. Activa la depuración de WordPress "
|
641 |
+
"añadiendo este código en el archivo %s de tu instalación"
|
642 |
+
|
643 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
644 |
+
msgid "Copied!"
|
645 |
+
msgstr "¡Copiado!"
|
646 |
+
|
647 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
648 |
+
msgid "Copy Code"
|
649 |
+
msgstr "Copiar código"
|
650 |
+
|
651 |
+
#: templates/sysinfo/tabs/main.php:17
|
652 |
+
msgid "Site Info"
|
653 |
+
msgstr "Información del sitio"
|
654 |
+
|
655 |
+
#: templates/sysinfo/tabs/main.php:22
|
656 |
+
msgid "Site URL"
|
657 |
+
msgstr "URL del sitio"
|
658 |
+
|
659 |
+
#: templates/sysinfo/tabs/main.php:31
|
660 |
+
msgid "Output IP Address"
|
661 |
+
msgstr "Dirección IP de salida"
|
662 |
+
|
663 |
+
#: templates/sysinfo/tabs/main.php:39
|
664 |
+
msgid "Defined WP_CACHE"
|
665 |
+
msgstr "WP_CACHE definido"
|
666 |
+
|
667 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
668 |
+
msgid "Yes"
|
669 |
+
msgstr "Sí"
|
670 |
+
|
671 |
+
#: templates/sysinfo/tabs/main.php:47
|
672 |
+
msgid "External object cache"
|
673 |
+
msgstr "Caché objeto externo"
|
674 |
+
|
675 |
+
#: templates/sysinfo/tabs/main.php:55
|
676 |
+
msgid "YITH Plugin Framework Version"
|
677 |
+
msgstr "Versión del YITH Plugin Framework "
|
678 |
+
|
679 |
+
#. translators: %s is the name of the plugin that is loading the framework.
|
680 |
+
#: templates/sysinfo/tabs/main.php:64
|
681 |
+
msgid "loaded by %s"
|
682 |
+
msgstr "cargado por %s"
|
683 |
+
|
684 |
+
#: templates/sysinfo/tabs/main.php:73
|
685 |
+
msgid "Plugins Requirements"
|
686 |
+
msgstr "Requerimientos de los plugins"
|
687 |
+
|
688 |
+
#: templates/sysinfo/tabs/main.php:108
|
689 |
+
msgid "Database Info"
|
690 |
+
msgstr "Información de la base de datos"
|
691 |
+
|
692 |
+
#: templates/sysinfo/tabs/main.php:113
|
693 |
+
msgid "MySQL version"
|
694 |
+
msgstr "Versión de MySQL"
|
695 |
+
|
696 |
+
#. Translators: %s: Codex link.
|
697 |
+
#: templates/sysinfo/tabs/main.php:123
|
698 |
+
msgid "WordPress recommends a minimum MySQL version of 5.6. See: %s"
|
699 |
+
msgstr "WordPress recomienda como versión mínima para MySQL la 5.6. Ver: %s"
|
700 |
+
|
701 |
+
#: templates/sysinfo/tabs/main.php:123
|
702 |
+
msgid "WordPress requirements"
|
703 |
+
msgstr "Requerimientos de WordPress"
|
704 |
+
|
705 |
+
#: templates/sysinfo/tabs/main.php:130
|
706 |
+
msgid "Total Database Size"
|
707 |
+
msgstr "Tamaño total de la base de datos:"
|
708 |
+
|
709 |
+
#: templates/sysinfo/tabs/main.php:138
|
710 |
+
msgid "Database Data Size"
|
711 |
+
msgstr "Tamaño de los datos en la base de datos:"
|
712 |
+
|
713 |
+
#: templates/sysinfo/tabs/main.php:146
|
714 |
+
msgid "Database Index Size"
|
715 |
+
msgstr "Tamaño del índice en la base de datos:"
|
716 |
+
|
717 |
+
#: templates/sysinfo/tabs/main.php:154
|
718 |
+
msgid "Database Free Size"
|
719 |
+
msgstr "Espacio libre en la base de datos:"
|
720 |
+
|
721 |
+
#. Translators: %1$f: Table size, %2$f: Index size, %3$f: Free size, %4$s
|
722 |
+
#. Engine.
|
723 |
+
#: templates/sysinfo/tabs/main.php:168
|
724 |
+
msgid "Data: %1$.2fMB | Index: %2$.2fMB | Free: %3$.2fMB | Engine: %4$s"
|
725 |
+
msgstr "Datos: %1$.2fMB | Índice: %2$.2fMB | Libre: %3$.2fMB | Motor: %4$s"
|
726 |
+
|
727 |
+
#. translators: %s is the title of the post object.
|
728 |
+
#: yit-functions.php:1938
|
729 |
+
msgid "Are you sure you want to move \"%s\" to trash?"
|
730 |
+
msgstr "¿Estás seguro de que quieres mover \"%s\" a la papelera?"
|
731 |
+
|
732 |
+
#. translators: %s is the title of the post object.
|
733 |
+
#: yit-functions.php:1940 yit-functions.php:2100
|
734 |
+
msgid "Are you sure you want to delete \"%s\"?"
|
735 |
+
msgstr "¿Estás seguro de que quieres borrar \"%s\"?"
|
736 |
+
|
737 |
+
#: yit-functions.php:2038 yit-functions.php:2046 yit-functions.php:2163
|
738 |
+
msgid "Further actions"
|
739 |
+
msgstr "Otras acciones"
|
740 |
+
|
741 |
+
#: yit-plugin.php:233
|
742 |
+
msgid "License"
|
743 |
+
msgstr "Licencia"
|
744 |
+
|
745 |
+
#. translators: 1. Plugin(s) name(s).
|
746 |
+
#: yit-plugin.php:272
|
747 |
+
msgid ""
|
748 |
+
"%s was deactivated as you're running an higher tier version of the same "
|
749 |
+
"plugin."
|
750 |
+
msgid_plural ""
|
751 |
+
"%s were deactivated as you're running higher tier versions of the same "
|
752 |
+
"plugins."
|
753 |
+
msgstr[0] ""
|
754 |
+
"%s fue desactivado ya que estás ejecutando una versión superior del mismo "
|
755 |
+
"plugin."
|
756 |
+
msgstr[1] ""
|
757 |
+
"%s fueron desactivados ya que estás ejecutando una versión superior de los "
|
758 |
+
"mismos plugins."
|
759 |
+
|
760 |
+
#. Author of the plugin/theme
|
761 |
+
msgid "YITH"
|
762 |
+
msgstr "YITH"
|
763 |
+
|
764 |
+
#. translators: %s it the Elementor Widget title.
|
765 |
+
#: includes/builders/elementor/class-yith-elementor-widget.php:252
|
766 |
+
msgctxt "Elementor Widget - section title"
|
767 |
+
msgid "%s - Options"
|
768 |
+
msgstr "%s - Opciones"
|
769 |
+
|
770 |
+
#: includes/builders/gutenberg/class-yith-gutenberg.php:152
|
771 |
+
msgctxt "[gutenberg]: Category Name"
|
772 |
+
msgid "YITH"
|
773 |
+
msgstr "YITH"
|
774 |
+
|
775 |
+
#: includes/class-yit-assets.php:136
|
776 |
+
msgctxt "Button text"
|
777 |
+
msgid "Confirm"
|
778 |
+
msgstr "Confirmar"
|
779 |
+
|
780 |
+
#: includes/class-yit-assets.php:137
|
781 |
+
msgctxt "Button text"
|
782 |
+
msgid "Cancel"
|
783 |
+
msgstr "Cancelar"
|
784 |
+
|
785 |
+
#: includes/class-yit-assets.php:150 yit-functions.php:2009
|
786 |
+
msgctxt "Trash confirmation action"
|
787 |
+
msgid "Yes, move to trash"
|
788 |
+
msgstr "Sí, mover a la papelera"
|
789 |
+
|
790 |
+
#: includes/class-yit-assets.php:154 yit-functions.php:2027
|
791 |
+
#: yit-functions.php:2154
|
792 |
+
msgctxt "Delete confirmation action"
|
793 |
+
msgid "Yes, delete"
|
794 |
+
msgstr "Si, borrar"
|
795 |
+
|
796 |
+
#. translators: 1. Plugin name.
|
797 |
+
#: includes/class-yit-plugin-panel.php:804
|
798 |
+
msgctxt "Help tab default title"
|
799 |
+
msgid "Thank you for purchasing %s!"
|
800 |
+
msgstr "¡Gracias por comprar %s!"
|
801 |
+
|
802 |
+
#: includes/class-yit-plugin-panel.php:804
|
803 |
+
msgctxt "Help tab default title"
|
804 |
+
msgid "Thank you for using %s!"
|
805 |
+
msgstr "¡Gracias por usar %s!"
|
806 |
+
|
807 |
+
#: includes/class-yit-plugin-panel.php:812
|
808 |
+
msgctxt "Help tab default description"
|
809 |
+
msgid ""
|
810 |
+
"We want to help you enjoy a wonderful experience with all of our products."
|
811 |
+
msgstr ""
|
812 |
+
"Queremos ayudarte a disfrutar de una experiencia maravillosa con todos "
|
813 |
+
"nuestros productos."
|
814 |
+
|
815 |
+
#: includes/class-yit-plugin-panel.php:863
|
816 |
+
msgctxt "Premium tab name"
|
817 |
+
msgid "Get premium"
|
818 |
+
msgstr "Obtén premium"
|
819 |
+
|
820 |
+
#: includes/class-yit-plugin-panel.php:875
|
821 |
+
msgctxt "Help tab name"
|
822 |
+
msgid "Help"
|
823 |
+
msgstr "Ayuda"
|
824 |
+
|
825 |
+
#: includes/class-yith-dashboard.php:96
|
826 |
+
msgctxt "Plugin FW"
|
827 |
+
msgid "View Changelog"
|
828 |
+
msgstr "Ver Registro de cambios"
|
829 |
+
|
830 |
+
#: includes/class-yith-dashboard.php:97
|
831 |
+
msgctxt "Plugin FW"
|
832 |
+
msgid "Latest update released on"
|
833 |
+
msgstr "Última actualización publicada el"
|
834 |
+
|
835 |
+
#: includes/class-yith-dashboard.php:137
|
836 |
+
msgctxt "Button label"
|
837 |
+
msgid "Close"
|
838 |
+
msgstr "Cerrar"
|
839 |
+
|
840 |
+
#: includes/privacy/class-yith-privacy.php:61
|
841 |
+
msgctxt "Privacy Policy Guide Title"
|
842 |
+
msgid "YITH Plugins"
|
843 |
+
msgstr "Plugins de YITH"
|
844 |
+
|
845 |
+
#: includes/privacy/class-yith-privacy.php:93
|
846 |
+
msgctxt "Privacy Policy Content"
|
847 |
+
msgid ""
|
848 |
+
"This sample language includes the basics around what personal data your "
|
849 |
+
"store may be collecting, storing and sharing, as well as who may have access "
|
850 |
+
"to that data. Depending on what settings are enabled and which additional "
|
851 |
+
"plugins are used, the specific information shared by your store will vary. "
|
852 |
+
"We recommend consulting with a lawyer when deciding what information to "
|
853 |
+
"disclose on your privacy policy."
|
854 |
+
msgstr ""
|
855 |
+
"Este idioma de prueba incluye la información principal sobre qué tipo de "
|
856 |
+
"información puede estar recopilando, almacenando y compartiendo tu tienda, "
|
857 |
+
"así como quién tiene acceso a esa información. Dependiendo de los ajustes "
|
858 |
+
"configurados y qué plugins adicionales sean usados, la información "
|
859 |
+
"específica compartida por tu sitio variará. Recomendamos consultar con un "
|
860 |
+
"abogado cuando decidas qué información mostrar en tu política de privacidad."
|
861 |
+
|
862 |
+
#: includes/privacy/class-yith-privacy.php:97
|
863 |
+
msgctxt "Privacy Policy Content"
|
864 |
+
msgid "What we collect and store"
|
865 |
+
msgstr "Qué recopilamos y almacenamos"
|
866 |
+
|
867 |
+
#: includes/privacy/class-yith-privacy.php:100
|
868 |
+
msgctxt "Privacy Policy Content"
|
869 |
+
msgid "Who on our team has access"
|
870 |
+
msgstr "Quién en nuestro equipo tiene acceso"
|
871 |
+
|
872 |
+
#: includes/privacy/class-yith-privacy.php:103
|
873 |
+
msgctxt "Privacy Policy Content"
|
874 |
+
msgid "What we share with others"
|
875 |
+
msgstr "Qué compartimos con otros"
|
876 |
+
|
877 |
+
#: includes/privacy/class-yith-privacy.php:106
|
878 |
+
msgctxt "Privacy Policy Content"
|
879 |
+
msgid "Payments"
|
880 |
+
msgstr "Pagos"
|
881 |
+
|
882 |
+
#: templates/fields/copy-to-clipboard.php:41
|
883 |
+
msgctxt "Copy-to-clipboard message"
|
884 |
+
msgid "Copied!"
|
885 |
+
msgstr "¡Copiado!"
|
886 |
+
|
887 |
+
#: templates/fields/copy-to-clipboard.php:45
|
888 |
+
msgctxt "Copy-to-clipboard button text"
|
889 |
+
msgid "Copy"
|
890 |
+
msgstr "Copiar"
|
891 |
+
|
892 |
+
#: templates/fields/dimensions.php:13
|
893 |
+
msgctxt "Position in the \"Dimensions\" field"
|
894 |
+
msgid "Top"
|
895 |
+
msgstr "Parte superior"
|
896 |
+
|
897 |
+
#: templates/fields/dimensions.php:14
|
898 |
+
msgctxt "Position in the \"Dimensions\" field"
|
899 |
+
msgid "Right"
|
900 |
+
msgstr "Derecha"
|
901 |
+
|
902 |
+
#: templates/fields/dimensions.php:15
|
903 |
+
msgctxt "Position in the \"Dimensions\" field"
|
904 |
+
msgid "Bottom"
|
905 |
+
msgstr "Parte inferior"
|
906 |
+
|
907 |
+
#: templates/fields/dimensions.php:16
|
908 |
+
msgctxt "Position in the \"Dimensions\" field"
|
909 |
+
msgid "Left"
|
910 |
+
msgstr "Izquierda"
|
911 |
+
|
912 |
+
#: templates/fields/dimensions.php:94
|
913 |
+
msgctxt "Tooltip in the \"Dimensions\" field"
|
914 |
+
msgid "Link values together"
|
915 |
+
msgstr "Enlazar valores juntos"
|
916 |
+
|
917 |
+
#: templates/fields/image-dimensions.php:18
|
918 |
+
msgctxt "Image width field label"
|
919 |
+
msgid "Width"
|
920 |
+
msgstr "Anchura"
|
921 |
+
|
922 |
+
#: templates/fields/image-dimensions.php:23
|
923 |
+
msgctxt "Image height field label"
|
924 |
+
msgid "Height"
|
925 |
+
msgstr "Altura"
|
926 |
+
|
927 |
+
#: templates/fields/onoff.php:28
|
928 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
929 |
+
msgid "YES"
|
930 |
+
msgstr "SÍ"
|
931 |
+
|
932 |
+
#: templates/fields/onoff.php:29
|
933 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
934 |
+
msgid "NO"
|
935 |
+
msgstr "NO"
|
936 |
+
|
937 |
+
#. translators: 1. Url to EN playlist.
|
938 |
+
#: templates/panel/help-tab.php:89
|
939 |
+
msgctxt "Help tab view all video link"
|
940 |
+
msgid ""
|
941 |
+
"Check the full <a href=\"%s\" target=\"_blank\">Playlist on Youtube</a> to "
|
942 |
+
"learn more >"
|
943 |
+
msgstr ""
|
944 |
+
"Consulta la <a href=\"%s\" target=\"_blank\">Lista de reproducción en "
|
945 |
+
"Youtube</a> para saber más >"
|
946 |
+
|
947 |
+
#: templates/panel/help-tab.php:96
|
948 |
+
msgctxt "Help tab Watch Videotutorials link"
|
949 |
+
msgid "Videos are also available in:"
|
950 |
+
msgstr "Los vídeos también están disponibles en:"
|
951 |
+
|
952 |
+
#: templates/panel/help-tab.php:126
|
953 |
+
msgctxt "Help tab Read Documentation link"
|
954 |
+
msgid "Read the documentation"
|
955 |
+
msgstr "Lee la documentación"
|
956 |
+
|
957 |
+
#: templates/panel/help-tab.php:129
|
958 |
+
msgctxt "Help tab Read Documentation link"
|
959 |
+
msgid "to learn how the plugin works from the basics."
|
960 |
+
msgstr "para aprender cómo funciona el plugin desde lo más básico."
|
961 |
+
|
962 |
+
#: templates/panel/help-tab.php:139
|
963 |
+
msgctxt "Help tab Watch video tutorials link"
|
964 |
+
msgid "Watch our video tutorials"
|
965 |
+
msgstr "Ve nuestros videotutoriales"
|
966 |
+
|
967 |
+
#: templates/panel/help-tab.php:142
|
968 |
+
msgctxt "Help tab Watch video tutorials link"
|
969 |
+
msgid "to see some helpful use cases."
|
970 |
+
msgstr "para ver algunos casos de uso útiles."
|
971 |
+
|
972 |
+
#: templates/panel/help-tab.php:152
|
973 |
+
msgctxt "Help tab view FAQs link"
|
974 |
+
msgid "Check the FAQs"
|
975 |
+
msgstr "Comprueba las FAQ"
|
976 |
+
|
977 |
+
#: templates/panel/help-tab.php:155
|
978 |
+
msgctxt "Help tab view FAQs link"
|
979 |
+
msgid "to find answers to your doubts."
|
980 |
+
msgstr "para encontrar respuestas a tus dudas."
|
981 |
+
|
982 |
+
#: templates/panel/help-tab.php:170
|
983 |
+
msgctxt "Help tab FAQ title"
|
984 |
+
msgid "Last FAQs in our Help Center"
|
985 |
+
msgstr "Últimas FAQ en nuestro Centro de ayuda"
|
986 |
+
|
987 |
+
#: templates/panel/help-tab.php:184
|
988 |
+
msgctxt "Help tab FAQ link"
|
989 |
+
msgid "View all FAQs >"
|
990 |
+
msgstr "Ver todas las FAQs >"
|
991 |
+
|
992 |
+
#: templates/panel/help-tab.php:193
|
993 |
+
msgctxt "Help tab submit ticket title"
|
994 |
+
msgid "Need help?"
|
995 |
+
msgstr "¿Necesitas ayuda?"
|
996 |
+
|
997 |
+
#: templates/panel/help-tab.php:196
|
998 |
+
msgctxt "Help tab submit ticket description"
|
999 |
+
msgid ""
|
1000 |
+
"If you are experiencing any technical issues, ask for help from our "
|
1001 |
+
"developers. Submit a ticket through our support desk and we will help you as "
|
1002 |
+
"soon as possible."
|
1003 |
+
msgstr ""
|
1004 |
+
"Si tienes algún problema técnico, pide ayuda a nuestros desarrolladores. "
|
1005 |
+
"Envía un ticket a través de nuestro servicio de asistencia y te ayudaremos "
|
1006 |
+
"lo antes posible."
|
1007 |
+
|
1008 |
+
#: templates/panel/help-tab.php:204
|
1009 |
+
msgctxt "Help tab submit ticket button"
|
1010 |
+
msgid "Submit a ticket"
|
1011 |
+
msgstr "Enviar ticket"
|
1012 |
+
|
1013 |
+
#: templates/panel/help-tab.php:216 templates/panel/help-tab.php:218
|
1014 |
+
#: templates/panel/help-tab.php:223
|
1015 |
+
msgctxt "Help tab documentation"
|
1016 |
+
msgid "Read the plugin documentation"
|
1017 |
+
msgstr "Lee la documentación del plugin"
|
1018 |
+
|
1019 |
+
#: templates/panel/help-tab.php:220
|
1020 |
+
msgctxt "Help tab documentation"
|
1021 |
+
msgid "to learn how it works from the basics."
|
1022 |
+
msgstr "para aprender cómo funciona desde lo más básico."
|
1023 |
+
|
1024 |
+
#: templates/panel/help-tab.php:231 templates/panel/help-tab.php:233
|
1025 |
+
msgctxt "Help tab support"
|
1026 |
+
msgid "Need some help?"
|
1027 |
+
msgstr "¿Necesitas ayuda?"
|
1028 |
+
|
1029 |
+
#: templates/panel/help-tab.php:235
|
1030 |
+
msgctxt "Help tab support"
|
1031 |
+
msgid "From DIY to full-service help"
|
1032 |
+
msgstr "Ayuda desde «hazlo tu mismo» hasta un servicio completo"
|
1033 |
+
|
1034 |
+
#: templates/panel/help-tab.php:238
|
1035 |
+
msgctxt "Help tab support"
|
1036 |
+
msgid ""
|
1037 |
+
"Call or chat 24/7 with our support agents, or let our experts build your "
|
1038 |
+
"site."
|
1039 |
+
msgstr ""
|
1040 |
+
"Llama o chatee las 24 horas del día con nuestros agentes de soporte, o deja "
|
1041 |
+
"que nuestros expertos construyan tu sitio."
|
1042 |
+
|
1043 |
+
#: templates/panel/help-tab.php:241
|
1044 |
+
msgctxt "Help tab support"
|
1045 |
+
msgid "Yes, I need help"
|
1046 |
+
msgstr "Sí, necesito ayuda"
|
1047 |
+
|
1048 |
+
#: templates/panel/premium-tab.php:30
|
1049 |
+
msgctxt "Premium Tab"
|
1050 |
+
msgid "Get the premium version to unlock advanced features"
|
1051 |
+
msgstr "Obtén la versión premium para desbloquear características avanzadas"
|
1052 |
+
|
1053 |
+
#: templates/panel/premium-tab.php:34
|
1054 |
+
msgctxt "Premium Tab"
|
1055 |
+
msgid "Get premium"
|
1056 |
+
msgstr "Obtén la versión Premium"
|
1057 |
+
|
1058 |
+
#: templates/panel/premium-tab.php:39
|
1059 |
+
msgctxt "Premium Tab"
|
1060 |
+
msgid "Plugin premium features images"
|
1061 |
+
msgstr "Imágenes de la versión premium"
|
1062 |
+
|
1063 |
+
#. translators: alt attribute of main image tag.
|
1064 |
+
#: templates/panel/premium-tab.php:51 templates/panel/premium-tab.php:58
|
1065 |
+
msgctxt "Premium Tab"
|
1066 |
+
msgid "And so much more!"
|
1067 |
+
msgstr "¡Y mucho más!"
|
1068 |
+
|
1069 |
+
#: templates/panel/premium-tab.php:53
|
1070 |
+
msgctxt "Premium Tab"
|
1071 |
+
msgid "Check the premium features >"
|
1072 |
+
msgstr "Comprueba las características premium >"
|
1073 |
+
|
1074 |
+
#: templates/panel/premium-tab.php:60
|
1075 |
+
msgctxt "Premium Tab"
|
1076 |
+
msgid "Check the free vs premium features >"
|
1077 |
+
msgstr "Comprueba las características gratuitas frente a las premium >"
|
1078 |
+
|
1079 |
+
#: templates/panel/premium-tab.php:65
|
1080 |
+
msgctxt "Premium Tab"
|
1081 |
+
msgid "Get the premium version"
|
1082 |
+
msgstr "Obtén la versión Premium"
|
1083 |
+
|
1084 |
+
#: yit-functions.php:1952
|
1085 |
+
msgctxt "Post action"
|
1086 |
+
msgid "Preview"
|
1087 |
+
msgstr "Previsualizar"
|
1088 |
+
|
1089 |
+
#: yit-functions.php:1961
|
1090 |
+
msgctxt "Post action"
|
1091 |
+
msgid "View"
|
1092 |
+
msgstr "Ver"
|
1093 |
+
|
1094 |
+
#: yit-functions.php:1972
|
1095 |
+
msgctxt "Post action"
|
1096 |
+
msgid "Edit"
|
1097 |
+
msgstr "Editar"
|
1098 |
+
|
1099 |
+
#: yit-functions.php:1980
|
1100 |
+
msgctxt "Post action"
|
1101 |
+
msgid "Duplicate"
|
1102 |
+
msgstr "Duplicar"
|
1103 |
+
|
1104 |
+
#: yit-functions.php:1992
|
1105 |
+
msgctxt "Post action"
|
1106 |
+
msgid "Restore"
|
1107 |
+
msgstr "Restaurar"
|
1108 |
+
|
1109 |
+
#: yit-functions.php:2000
|
1110 |
+
msgctxt "Post action"
|
1111 |
+
msgid "Trash"
|
1112 |
+
msgstr "A la papelera"
|
1113 |
+
|
1114 |
+
#: yit-functions.php:2017
|
1115 |
+
msgctxt "Post action"
|
1116 |
+
msgid "Delete Permanently"
|
1117 |
+
msgstr "Borrar permanentemente"
|
1118 |
+
|
1119 |
+
#: yit-functions.php:2114
|
1120 |
+
msgctxt "Term action"
|
1121 |
+
msgid "View"
|
1122 |
+
msgstr "Ver"
|
1123 |
+
|
1124 |
+
#: yit-functions.php:2124
|
1125 |
+
msgctxt "Term action"
|
1126 |
+
msgid "Edit"
|
1127 |
+
msgstr "Editar"
|
1128 |
+
|
1129 |
+
#: yit-functions.php:2132
|
1130 |
+
msgctxt "Term action"
|
1131 |
+
msgid "Duplicate"
|
1132 |
+
msgstr "Duplicar"
|
1133 |
+
|
1134 |
+
#: yit-functions.php:2145
|
1135 |
+
msgctxt "Term action"
|
1136 |
+
msgid "Delete"
|
1137 |
+
msgstr "Borrar"
|
1138 |
+
|
1139 |
+
#: yit-plugin.php:85
|
1140 |
+
msgctxt "Plugin Row Meta"
|
1141 |
+
msgid "Live Demo"
|
1142 |
+
msgstr "Demostración en vivo"
|
1143 |
+
|
1144 |
+
#: yit-plugin.php:89
|
1145 |
+
msgctxt "Plugin Row Meta"
|
1146 |
+
msgid "Documentation"
|
1147 |
+
msgstr "Documentación"
|
1148 |
+
|
1149 |
+
#: yit-plugin.php:93
|
1150 |
+
msgctxt "Plugin Row Meta"
|
1151 |
+
msgid "Support"
|
1152 |
+
msgstr "Soporte"
|
1153 |
+
|
1154 |
+
#: yit-plugin.php:97
|
1155 |
+
msgctxt "Plugin Row Meta"
|
1156 |
+
msgid "Premium version"
|
1157 |
+
msgstr "Versión premium"
|
1158 |
+
|
1159 |
+
#: yit-plugin.php:229
|
1160 |
+
msgctxt "Action links"
|
1161 |
+
msgid "Settings"
|
1162 |
+
msgstr "Ajustes"
|
plugin-fw/languages/yith-plugin-fw-it_IT 2.mo
ADDED
Binary file
|
plugin-fw/languages/yith-plugin-fw-it_IT 2.po
ADDED
@@ -0,0 +1,1163 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Translation of YITH Framework in Italian
|
2 |
+
# This file is distributed under the same license as the YITH Framework package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: YITH Framework\n"
|
6 |
+
"Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
|
7 |
+
"POT-Creation-Date: 2022-11-11 07:31:10+00:00\n"
|
8 |
+
"PO-Revision-Date: 2022-08-12 07:42:56+0000\n"
|
9 |
+
"Language: it\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
14 |
+
"X-Generator: GlotPress/3.0.0-alpha.2\n"
|
15 |
+
|
16 |
+
#: includes/class-yit-assets.php:148 yit-functions.php:2006
|
17 |
+
msgid "Confirm trash"
|
18 |
+
msgstr "Conferma eliminazione"
|
19 |
+
|
20 |
+
#: includes/class-yit-assets.php:149
|
21 |
+
msgid "Are you sure you want to trash the selected items?"
|
22 |
+
msgstr "Se sicuro di voler spostare nel cestino gli elementi selezionati?"
|
23 |
+
|
24 |
+
#: includes/class-yit-assets.php:151 includes/class-yit-assets.php:155
|
25 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
26 |
+
#: yit-functions.php:2008 yit-functions.php:2026
|
27 |
+
msgid "No"
|
28 |
+
msgstr "No"
|
29 |
+
|
30 |
+
#: includes/class-yit-assets.php:152 yit-functions.php:2024
|
31 |
+
#: yit-functions.php:2152
|
32 |
+
msgid "Confirm delete"
|
33 |
+
msgstr "Conferma eliminazione"
|
34 |
+
|
35 |
+
#: includes/class-yit-assets.php:153
|
36 |
+
msgid "Are you sure you want to delete the selected items?"
|
37 |
+
msgstr "Se sicuro di voler eliminare gli elementi selezionati?"
|
38 |
+
|
39 |
+
#: includes/class-yit-assets.php:153 yit-functions.php:1940
|
40 |
+
#: yit-functions.php:2100
|
41 |
+
msgid ""
|
42 |
+
"This action cannot be undone and you will not be able to recover this data."
|
43 |
+
msgstr ""
|
44 |
+
"Quest'azione non può essere annullata e non sarà possibile recuperare questi "
|
45 |
+
"dati."
|
46 |
+
|
47 |
+
#: includes/class-yit-assets.php:174
|
48 |
+
msgid "Clear"
|
49 |
+
msgstr "Rimuovi"
|
50 |
+
|
51 |
+
#: includes/class-yit-assets.php:175
|
52 |
+
msgid "Clear color"
|
53 |
+
msgstr "Rimuovi colore"
|
54 |
+
|
55 |
+
#: includes/class-yit-assets.php:176
|
56 |
+
msgid "Default"
|
57 |
+
msgstr "Predefinito"
|
58 |
+
|
59 |
+
#: includes/class-yit-assets.php:177
|
60 |
+
msgid "Select default color"
|
61 |
+
msgstr "Seleziona il colore predefinito"
|
62 |
+
|
63 |
+
#: includes/class-yit-assets.php:178
|
64 |
+
msgid "Select Color"
|
65 |
+
msgstr "Seleziona il colore"
|
66 |
+
|
67 |
+
#: includes/class-yit-assets.php:179
|
68 |
+
msgid "Color value"
|
69 |
+
msgstr "Valore del colore"
|
70 |
+
|
71 |
+
#: includes/class-yit-help-desk.php:152
|
72 |
+
msgid "There was an error with your request; please try again later."
|
73 |
+
msgstr "Si è verificato un errore con la tua richiesta. Riprova più tardi."
|
74 |
+
|
75 |
+
#: includes/class-yit-plugin-panel-woocommerce.php:437
|
76 |
+
msgid "The changes you have made will be lost if you leave this page."
|
77 |
+
msgstr "Perderai tutti i cambiamenti effettuati se lasci questa pagina."
|
78 |
+
|
79 |
+
#: includes/class-yit-plugin-panel.php:83
|
80 |
+
msgid "Plugin Settings"
|
81 |
+
msgstr "Impostazioni plugin"
|
82 |
+
|
83 |
+
#: includes/class-yit-plugin-panel.php:84
|
84 |
+
msgid "Settings"
|
85 |
+
msgstr "Impostazioni"
|
86 |
+
|
87 |
+
#: includes/class-yit-plugin-panel.php:456
|
88 |
+
#: includes/class-yit-plugin-panel.php:459
|
89 |
+
msgid "How to install premium version"
|
90 |
+
msgstr "Come installare la versione premium"
|
91 |
+
|
92 |
+
#: includes/class-yit-plugin-panel.php:656
|
93 |
+
#: includes/class-yit-plugin-subpanel.php:133
|
94 |
+
msgid "Save Changes"
|
95 |
+
msgstr "Salva modifiche"
|
96 |
+
|
97 |
+
#: includes/class-yit-plugin-panel.php:664
|
98 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
99 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
100 |
+
msgid ""
|
101 |
+
"If you continue with this action, you will reset all options in this page."
|
102 |
+
msgstr ""
|
103 |
+
"Se prosegui con questa azione, tutte le opzioni di questa pagina saranno "
|
104 |
+
"reimpostate."
|
105 |
+
|
106 |
+
#: includes/class-yit-plugin-panel.php:664
|
107 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
108 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
109 |
+
msgid "Are you sure?"
|
110 |
+
msgstr "Sei sicuro?"
|
111 |
+
|
112 |
+
#: includes/class-yit-plugin-panel.php:668
|
113 |
+
#: includes/class-yit-plugin-subpanel.php:143
|
114 |
+
msgid "Reset to default"
|
115 |
+
msgstr "Ripristina configurazione predefinita"
|
116 |
+
|
117 |
+
#: includes/class-yit-plugin-panel.php:1039
|
118 |
+
msgid "Read the <mark>plugin documentation</mark>"
|
119 |
+
msgstr "Consulta la <mark>documentazione del plugin</mark>"
|
120 |
+
|
121 |
+
#: includes/class-yit-plugin-panel.php:1040
|
122 |
+
msgid "Learn what you can really do with this powerful tool"
|
123 |
+
msgstr "Scopri cosa puoi fare con questo potente strumento"
|
124 |
+
|
125 |
+
#: includes/class-yit-plugin-panel.php:1050
|
126 |
+
msgid "Watch our <mark>\"First Steps\" video</mark>"
|
127 |
+
msgstr "Guarda il nostro <mark>video \"Primi Step\"</mark>"
|
128 |
+
|
129 |
+
#: includes/class-yit-plugin-panel.php:1051
|
130 |
+
msgid "See how it works before you start using it"
|
131 |
+
msgstr "Guarda come funziona prima di iniziare ad usarlo"
|
132 |
+
|
133 |
+
#: includes/class-yit-plugin-panel.php:1307
|
134 |
+
msgid ""
|
135 |
+
"The element you have entered already exists. Please, enter another name."
|
136 |
+
msgstr "L'elemento inserito esiste già. Per favore, inserisci un altro nome."
|
137 |
+
|
138 |
+
#: includes/class-yit-plugin-panel.php:1308
|
139 |
+
msgid "Settings saved"
|
140 |
+
msgstr "Impostazioni salvate"
|
141 |
+
|
142 |
+
#: includes/class-yit-plugin-panel.php:1309
|
143 |
+
msgid "Settings reset"
|
144 |
+
msgstr "Impostazioni azzerate"
|
145 |
+
|
146 |
+
#: includes/class-yit-plugin-panel.php:1310
|
147 |
+
msgid "Element deleted correctly."
|
148 |
+
msgstr "Elemento rimosso correttamente."
|
149 |
+
|
150 |
+
#: includes/class-yit-plugin-panel.php:1311
|
151 |
+
#: includes/class-yit-plugin-panel.php:1312
|
152 |
+
msgid "Element updated correctly."
|
153 |
+
msgstr "Elemento aggiornato correttamente."
|
154 |
+
|
155 |
+
#: includes/class-yit-plugin-panel.php:1313
|
156 |
+
msgid "Database imported correctly."
|
157 |
+
msgstr "Database importato correttamente."
|
158 |
+
|
159 |
+
#: includes/class-yit-plugin-panel.php:1314
|
160 |
+
msgid "An error has occurred during import. Please try again."
|
161 |
+
msgstr "Si è verificato un errore durante l'importazione. Prova di nuovo."
|
162 |
+
|
163 |
+
#: includes/class-yit-plugin-panel.php:1315
|
164 |
+
msgid "The added file is not valid."
|
165 |
+
msgstr "Il file aggiunto non è valido."
|
166 |
+
|
167 |
+
#: includes/class-yit-plugin-panel.php:1316
|
168 |
+
msgid "Sorry, import is disabled."
|
169 |
+
msgstr "Ci dispiace, l'importazione è disabilitata."
|
170 |
+
|
171 |
+
#: includes/class-yit-plugin-panel.php:1317
|
172 |
+
msgid "Sorting successful."
|
173 |
+
msgstr "Ordinamento effettuato con successo."
|
174 |
+
|
175 |
+
#: includes/class-yit-plugin-panel.php:1806
|
176 |
+
msgid "We need your support"
|
177 |
+
msgstr "Abbiamo bisogno del tuo sostegno"
|
178 |
+
|
179 |
+
#: includes/class-yit-plugin-panel.php:1807
|
180 |
+
msgid "to keep updating and improving the plugin. Please,"
|
181 |
+
msgstr "per poter continuare ad aggiornare e migliorare il plugin."
|
182 |
+
|
183 |
+
#: includes/class-yit-plugin-panel.php:1809
|
184 |
+
msgid "help us by leaving a good review"
|
185 |
+
msgstr "Puoi darci una mano lasciando una recensione positiva"
|
186 |
+
|
187 |
+
#: includes/class-yit-plugin-panel.php:1810
|
188 |
+
msgid ":) Thanks!"
|
189 |
+
msgstr ":) Grazie!"
|
190 |
+
|
191 |
+
#: includes/class-yit-pointers.php:80
|
192 |
+
msgid "Plugins Activated"
|
193 |
+
msgstr "Plugin attivati"
|
194 |
+
|
195 |
+
#: includes/class-yit-pointers.php:81
|
196 |
+
msgid ""
|
197 |
+
"From now on, you can find all plugin options in YITH menu. Plugin "
|
198 |
+
"customization settings will be available as a new entry in YITH menu."
|
199 |
+
msgstr ""
|
200 |
+
"D'ora in poi puoi trovare tutte le opzioni dei plugin nel menù YITH. Le "
|
201 |
+
"impostazioni di personalizzazione saranno disponibili come una nuova voce in "
|
202 |
+
"YITH."
|
203 |
+
|
204 |
+
#. translators: 1. YITH site link; 2. WordPress site link.
|
205 |
+
#: includes/class-yit-pointers.php:84 includes/class-yit-pointers.php:100
|
206 |
+
msgid "Discover all our plugins available on: %1$s and %2$s"
|
207 |
+
msgstr "Scopri tutti i nostri plugin disponibili su: %1$s and %2$s"
|
208 |
+
|
209 |
+
#: includes/class-yit-pointers.php:96
|
210 |
+
msgid "Plugins Upgraded"
|
211 |
+
msgstr "Plugin aggiornati"
|
212 |
+
|
213 |
+
#: includes/class-yit-pointers.php:97
|
214 |
+
msgid ""
|
215 |
+
"From now on, you can find the option panel of YITH plugins in YITH menu. "
|
216 |
+
"Every time one of our plugins is added, a new entry will be added to this "
|
217 |
+
"menu. For example, after the update, plugin options (such as for YITH "
|
218 |
+
"WooCommerce Wishlist, YITH WooCommerce Ajax Search, etc.) will be moved from "
|
219 |
+
"previous location to YITH menu."
|
220 |
+
msgstr ""
|
221 |
+
"D'ora in poi puoi trovare il pannello opzioni dei plugin YITH nel menù YITH. "
|
222 |
+
"Ogni volta che viene aggiunto uno dei nostri plugin comparirà una nuova voce "
|
223 |
+
"in questo menù. Ad esempio, dopo l'aggiornamento, le opzioni del plugin "
|
224 |
+
"(come per YITH WooCommerce Wishlist, YITH WooCommerce Ajax Search, etc.) "
|
225 |
+
"saranno spostate dalla posizione precedente al menù YITH."
|
226 |
+
|
227 |
+
#: includes/class-yith-bh-onboarding.php:85
|
228 |
+
msgid "It is not possible save the options"
|
229 |
+
msgstr "Non è possibile salvare le opzioni"
|
230 |
+
|
231 |
+
#: includes/class-yith-dashboard.php:35
|
232 |
+
msgid "YITH Latest Updates"
|
233 |
+
msgstr "Ultimi aggiornamenti da YITH"
|
234 |
+
|
235 |
+
#: includes/class-yith-dashboard.php:36
|
236 |
+
msgid "Latest news from YITH Blog"
|
237 |
+
msgstr "Ultime novità dal blog YITH"
|
238 |
+
|
239 |
+
#: includes/class-yith-dashboard.php:56
|
240 |
+
msgid "RSS Error:"
|
241 |
+
msgstr "Errore RSS:"
|
242 |
+
|
243 |
+
#: includes/class-yith-dashboard.php:63
|
244 |
+
msgid ""
|
245 |
+
"An error has occurred, which probably means the feed is down. Try again "
|
246 |
+
"later."
|
247 |
+
msgstr ""
|
248 |
+
"Si è verificato un errore probabilmente causato dal feed non disponibile. "
|
249 |
+
"Riprova più tardi."
|
250 |
+
|
251 |
+
#. translators: %s is the name of the post type (example Back to "Membership
|
252 |
+
#. Plans").
|
253 |
+
#: includes/class-yith-post-type-admin.php:286
|
254 |
+
msgid "Back to \"%s\""
|
255 |
+
msgstr "Torna a \"%s\""
|
256 |
+
|
257 |
+
#: includes/class-yith-post-type-admin.php:286
|
258 |
+
msgid "Back to the list"
|
259 |
+
msgstr "Torna all'elenco"
|
260 |
+
|
261 |
+
#: includes/class-yith-system-status.php:110
|
262 |
+
msgid "WordPress Version"
|
263 |
+
msgstr "Versione di WordPress"
|
264 |
+
|
265 |
+
#: includes/class-yith-system-status.php:111
|
266 |
+
msgid "WooCommerce Version"
|
267 |
+
msgstr "Versione di WooCommerce"
|
268 |
+
|
269 |
+
#: includes/class-yith-system-status.php:112
|
270 |
+
msgid "Available Memory"
|
271 |
+
msgstr "Memoria disponibile"
|
272 |
+
|
273 |
+
#: includes/class-yith-system-status.php:113
|
274 |
+
msgid "PHP Version"
|
275 |
+
msgstr "Versione PHP"
|
276 |
+
|
277 |
+
#: includes/class-yith-system-status.php:114
|
278 |
+
msgid "TLS Version"
|
279 |
+
msgstr "Versione TLS"
|
280 |
+
|
281 |
+
#: includes/class-yith-system-status.php:115
|
282 |
+
msgid "WordPress Cron"
|
283 |
+
msgstr "Cron WordPress"
|
284 |
+
|
285 |
+
#: includes/class-yith-system-status.php:116
|
286 |
+
msgid "SimpleXML"
|
287 |
+
msgstr "SimpleXML"
|
288 |
+
|
289 |
+
#: includes/class-yith-system-status.php:117
|
290 |
+
msgid "MultiByte String"
|
291 |
+
msgstr "MultiByte String"
|
292 |
+
|
293 |
+
#: includes/class-yith-system-status.php:118
|
294 |
+
msgid "ImageMagick Version"
|
295 |
+
msgstr "Versione di ImageMagick"
|
296 |
+
|
297 |
+
#: includes/class-yith-system-status.php:119
|
298 |
+
msgid "GD Library"
|
299 |
+
msgstr "GD Library"
|
300 |
+
|
301 |
+
#: includes/class-yith-system-status.php:120
|
302 |
+
msgid "Iconv Module"
|
303 |
+
msgstr "Iconv Module"
|
304 |
+
|
305 |
+
#: includes/class-yith-system-status.php:121
|
306 |
+
msgid "OPCache Save Comments"
|
307 |
+
msgstr "OPCache Save Comments"
|
308 |
+
|
309 |
+
#: includes/class-yith-system-status.php:122
|
310 |
+
msgid "URL FOpen"
|
311 |
+
msgstr "URL FOpen"
|
312 |
+
|
313 |
+
#: includes/class-yith-system-status.php:140
|
314 |
+
#: includes/class-yith-system-status.php:141
|
315 |
+
#: templates/sysinfo/system-information-panel.php:11
|
316 |
+
msgid "System Status"
|
317 |
+
msgstr "Stato del sistema"
|
318 |
+
|
319 |
+
#: includes/class-yith-system-status.php:183
|
320 |
+
msgid "YITH Plugins"
|
321 |
+
msgstr "Plugin YITH"
|
322 |
+
|
323 |
+
#: includes/class-yith-system-status.php:191
|
324 |
+
msgid "WooCommerce"
|
325 |
+
msgstr "WooCommerce"
|
326 |
+
|
327 |
+
#: includes/class-yith-system-status.php:342
|
328 |
+
msgid "Warning!"
|
329 |
+
msgstr "Attenzione!"
|
330 |
+
|
331 |
+
#. translators: %1$s open link tag, %2$s open link tag
|
332 |
+
#: includes/class-yith-system-status.php:346
|
333 |
+
msgid ""
|
334 |
+
"The system check has detected some compatibility issues on your installation."
|
335 |
+
"%1$sClick here%2$s to know more"
|
336 |
+
msgstr ""
|
337 |
+
"Il controllo di sistema ha individuato delle incompatibilità con la tua "
|
338 |
+
"installazione. %1$sVedi qui%2$s per maggiori dettagli"
|
339 |
+
|
340 |
+
#: includes/class-yith-system-status.php:496
|
341 |
+
msgid "Enabled"
|
342 |
+
msgstr "Abilitato"
|
343 |
+
|
344 |
+
#: includes/class-yith-system-status.php:496
|
345 |
+
msgid "Disabled"
|
346 |
+
msgstr "Disabilitato"
|
347 |
+
|
348 |
+
#: includes/class-yith-system-status.php:501
|
349 |
+
msgid "N/A"
|
350 |
+
msgstr "N.D."
|
351 |
+
|
352 |
+
#. translators: %1$s plugin name, %2$s requirement name
|
353 |
+
#: includes/class-yith-system-status.php:528
|
354 |
+
msgid "%1$s needs %2$s enabled"
|
355 |
+
msgstr "%1$s necessita dell'attivazione di %2$s"
|
356 |
+
|
357 |
+
#. translators: %1$s plugin name, %2$s required memory amount
|
358 |
+
#: includes/class-yith-system-status.php:531
|
359 |
+
msgid "%1$s needs at least %2$s of available memory"
|
360 |
+
msgstr "%1$s necessita di almeno %2$s di memoria disponibile"
|
361 |
+
|
362 |
+
#. translators: %1$s plugin name, %2$s version number
|
363 |
+
#: includes/class-yith-system-status.php:534
|
364 |
+
msgid "%1$s needs at least %2$s version"
|
365 |
+
msgstr "%1$s necessita almeno della versione %2$s"
|
366 |
+
|
367 |
+
#: includes/class-yith-system-status.php:558
|
368 |
+
msgid ""
|
369 |
+
"Update it to the latest version in order to benefit of all new features and "
|
370 |
+
"security updates."
|
371 |
+
msgstr ""
|
372 |
+
"Aggiorna all'ultima versione per beneficiare di tutte le nuove funzionalità "
|
373 |
+
"e degli aggiornamenti di sicurezza."
|
374 |
+
|
375 |
+
#: includes/class-yith-system-status.php:562
|
376 |
+
#: includes/class-yith-system-status.php:568
|
377 |
+
msgid "Contact your hosting company in order to update it."
|
378 |
+
msgstr "Contatta il tuo servizio hosting per aggiornarlo."
|
379 |
+
|
380 |
+
#: includes/class-yith-system-status.php:566
|
381 |
+
msgid "Contact your hosting company in order to install it."
|
382 |
+
msgstr "Per installarlo contatta il tuo servizio di hosting."
|
383 |
+
|
384 |
+
#. translators: %1$s code, %2$s file name
|
385 |
+
#: includes/class-yith-system-status.php:573
|
386 |
+
msgid "Remove %1$s from %2$s file"
|
387 |
+
msgstr "Rimuovi %1$s dal file %2$s"
|
388 |
+
|
389 |
+
#: includes/class-yith-system-status.php:581
|
390 |
+
msgid "Contact your hosting company in order to enable it."
|
391 |
+
msgstr "Per attivarlo contatta il tuo servizio di hosting."
|
392 |
+
|
393 |
+
#. translators: %1$s opening link tag, %2$s closing link tag
|
394 |
+
#: includes/class-yith-system-status.php:585
|
395 |
+
#: includes/class-yith-system-status.php:608
|
396 |
+
msgid ""
|
397 |
+
"Read more %1$shere%2$s or contact your hosting company in order to increase "
|
398 |
+
"it."
|
399 |
+
msgstr ""
|
400 |
+
"Per maggiori informazioni %1$sleggi questo%2$s oppure contatta il tuo host "
|
401 |
+
"per un upgrade."
|
402 |
+
|
403 |
+
#. translators: %s recommended memory amount
|
404 |
+
#: includes/class-yith-system-status.php:605
|
405 |
+
msgid ""
|
406 |
+
"For optimal functioning of our plugins, we suggest setting at least %s of "
|
407 |
+
"available memory"
|
408 |
+
msgstr ""
|
409 |
+
"Per il funzionamento ottimale dei nostri plugin consigliamo di impostare "
|
410 |
+
"almeno %s della memoria disponibile"
|
411 |
+
|
412 |
+
#. translators: %1$s TLS label, %2$s cURL label
|
413 |
+
#: includes/class-yith-system-status.php:613
|
414 |
+
msgid ""
|
415 |
+
"The system check cannot determine which %1$s version is installed because "
|
416 |
+
"%2$s module is disabled. Ask your hosting company to enable it."
|
417 |
+
msgstr ""
|
418 |
+
"Non ci è stato possibile determinare quale versione di %1$s è installata in "
|
419 |
+
"quanto il modulo %2$s è disattivato. Chiedi al tuo servizio hosting di "
|
420 |
+
"attivarlo."
|
421 |
+
|
422 |
+
#. translators: %1$s TLS label
|
423 |
+
#: includes/class-yith-system-status.php:616
|
424 |
+
msgid ""
|
425 |
+
"The system check cannot determine which %1$s version is installed due to a "
|
426 |
+
"connection issue between your site and our server."
|
427 |
+
msgstr ""
|
428 |
+
"Non ci è stato possibile determinare quale versione di %1$s è installata a "
|
429 |
+
"causa di un problema di connessione fra il tuo sito e il nostro server."
|
430 |
+
|
431 |
+
#: templates/bh-onboarding/onboarding-tabs.php:63
|
432 |
+
msgid "Save"
|
433 |
+
msgstr "Salva"
|
434 |
+
|
435 |
+
#: templates/fields/ajax-customers.php:41
|
436 |
+
msgid "Search for a customer..."
|
437 |
+
msgstr "Cerca un cliente..."
|
438 |
+
|
439 |
+
#. translators: 1. user display name; 2. user ID; 3. user email.
|
440 |
+
#: templates/fields/ajax-customers.php:68
|
441 |
+
#: templates/fields/ajax-customers.php:79
|
442 |
+
msgid "%1$s (#%2$s – %3$s)"
|
443 |
+
msgstr "%1$s (#%2$s – %3$s)"
|
444 |
+
|
445 |
+
#: templates/fields/ajax-posts.php:41
|
446 |
+
msgid "Search for a post..."
|
447 |
+
msgstr "Cerca un post..."
|
448 |
+
|
449 |
+
#: templates/fields/ajax-products.php:16
|
450 |
+
msgid "Search for a product..."
|
451 |
+
msgstr "Cerca un prodotto..."
|
452 |
+
|
453 |
+
#: templates/fields/ajax-terms.php:41
|
454 |
+
msgid "Search for a category..."
|
455 |
+
msgstr "Cerca una categoria..."
|
456 |
+
|
457 |
+
#: templates/fields/customtabs.php:17
|
458 |
+
msgid "Close all"
|
459 |
+
msgstr "Chiudi tutti"
|
460 |
+
|
461 |
+
#: templates/fields/customtabs.php:17
|
462 |
+
msgid "Expand all"
|
463 |
+
msgstr "Espandi tutti"
|
464 |
+
|
465 |
+
#: templates/fields/customtabs.php:25 templates/fields/customtabs.php:68
|
466 |
+
msgid "Remove"
|
467 |
+
msgstr "Rimuovi"
|
468 |
+
|
469 |
+
#: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
|
470 |
+
msgid "Name"
|
471 |
+
msgstr "Nome"
|
472 |
+
|
473 |
+
#: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
|
474 |
+
msgid "Value"
|
475 |
+
msgstr "Valore"
|
476 |
+
|
477 |
+
#: templates/fields/customtabs.php:41 templates/fields/customtabs.php:82
|
478 |
+
msgid "Content of the tab. (HTML is supported)"
|
479 |
+
msgstr "Contenuto della scheda (codice HTML supportato)."
|
480 |
+
|
481 |
+
#: templates/fields/customtabs.php:52
|
482 |
+
msgid "Add custom product tab"
|
483 |
+
msgstr "Aggiungi scheda prodotto personalizzata"
|
484 |
+
|
485 |
+
#: templates/fields/customtabs.php:93
|
486 |
+
msgid "Do you want to remove the custom tab?"
|
487 |
+
msgstr "Vuoi rimuovere la scheda personalizzata?"
|
488 |
+
|
489 |
+
#: templates/fields/date-format.php:65
|
490 |
+
msgid "Custom:"
|
491 |
+
msgstr "Personalizzato:"
|
492 |
+
|
493 |
+
#: templates/fields/date-format.php:70
|
494 |
+
msgid "Preview:"
|
495 |
+
msgstr "Anteprima:"
|
496 |
+
|
497 |
+
#: templates/fields/icons.php:78
|
498 |
+
msgid "Set Default"
|
499 |
+
msgstr "Ripristina impostazioni iniziali"
|
500 |
+
|
501 |
+
#: templates/fields/image-gallery.php:29 templates/fields/image-gallery.php:40
|
502 |
+
msgid "Delete image"
|
503 |
+
msgstr "Rimuovi immagine"
|
504 |
+
|
505 |
+
#: templates/fields/image-gallery.php:37
|
506 |
+
msgid "Add Images to Gallery"
|
507 |
+
msgstr "Aggiungi immagini alla galleria"
|
508 |
+
|
509 |
+
#: templates/fields/image-gallery.php:38
|
510 |
+
msgid "Add to gallery"
|
511 |
+
msgstr "Aggiungi alla galleria"
|
512 |
+
|
513 |
+
#: templates/fields/image-gallery.php:39
|
514 |
+
msgid "Add images"
|
515 |
+
msgstr "Aggiungi immagini"
|
516 |
+
|
517 |
+
#: templates/fields/image-gallery.php:41
|
518 |
+
msgid "Delete"
|
519 |
+
msgstr "Rimuovi"
|
520 |
+
|
521 |
+
#: templates/fields/select-buttons.php:19
|
522 |
+
msgid "Add All"
|
523 |
+
msgstr "Aggiungi tutti"
|
524 |
+
|
525 |
+
#: templates/fields/select-buttons.php:20
|
526 |
+
msgid "Remove All"
|
527 |
+
msgstr "Rimuovi tutti"
|
528 |
+
|
529 |
+
#: templates/fields/sidebars.php:20
|
530 |
+
msgid "Left sidebar"
|
531 |
+
msgstr "Barra laterale sinistra"
|
532 |
+
|
533 |
+
#: templates/fields/sidebars.php:23
|
534 |
+
msgid "Right sidebar"
|
535 |
+
msgstr "Barra laterale destra"
|
536 |
+
|
537 |
+
#: templates/fields/sidebars.php:26 templates/fields/sidebars.php:29
|
538 |
+
msgid "No sidebar"
|
539 |
+
msgstr "Nessuna barra laterale"
|
540 |
+
|
541 |
+
#: templates/fields/sidebars.php:39
|
542 |
+
msgid "Left Sidebar"
|
543 |
+
msgstr "Barra laterale sinistra"
|
544 |
+
|
545 |
+
#: templates/fields/sidebars.php:41 templates/fields/sidebars.php:56
|
546 |
+
msgid "Choose a sidebar"
|
547 |
+
msgstr "Scegli una barra laterale"
|
548 |
+
|
549 |
+
#: templates/fields/sidebars.php:54
|
550 |
+
msgid "Right Sidebar"
|
551 |
+
msgstr "Barra laterale destra"
|
552 |
+
|
553 |
+
#: templates/fields/upload.php:34
|
554 |
+
#: templates/panel/woocommerce/woocommerce-upload.php:37
|
555 |
+
msgid "Upload"
|
556 |
+
msgstr "Carica"
|
557 |
+
|
558 |
+
#: templates/fields/upload.php:39
|
559 |
+
msgid "Reset"
|
560 |
+
msgstr "Ripristina"
|
561 |
+
|
562 |
+
#. translators: %s is the plugin version.
|
563 |
+
#: templates/panel/welcome-modals/update.php:34
|
564 |
+
msgid "is successfully updated to version %s."
|
565 |
+
msgstr "è stato aggiornato alla versione %s."
|
566 |
+
|
567 |
+
#. translators: %s is the plugin version.
|
568 |
+
#: templates/panel/welcome-modals/update.php:44
|
569 |
+
msgid "What's new in version %s"
|
570 |
+
msgstr "Novità nella versione %s"
|
571 |
+
|
572 |
+
#: templates/panel/welcome-modals/update.php:49
|
573 |
+
msgid "Check the changelog >"
|
574 |
+
msgstr "Vedi tutte le modifiche >"
|
575 |
+
|
576 |
+
#: templates/panel/welcome-modals/update.php:64
|
577 |
+
#: templates/panel/welcome-modals/welcome.php:60
|
578 |
+
msgid "Got it, close this window"
|
579 |
+
msgstr "Ho capito, chiudi questa finestra"
|
580 |
+
|
581 |
+
#: templates/panel/welcome-modals/welcome.php:30
|
582 |
+
msgid "Thank you for using our plugin"
|
583 |
+
msgstr "Grazie per aver scelto di usare il nostro plugin"
|
584 |
+
|
585 |
+
#. translators: %s is the number of steps.
|
586 |
+
#: templates/panel/welcome-modals/welcome.php:45
|
587 |
+
msgid "Start with these %s steps:"
|
588 |
+
msgstr "Inizia da questi %s step:"
|
589 |
+
|
590 |
+
#: templates/panel/woocommerce/woocommerce-form.php:29
|
591 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
592 |
+
msgid "Save Options"
|
593 |
+
msgstr "Salva le opzioni"
|
594 |
+
|
595 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
596 |
+
msgid "Options Saved"
|
597 |
+
msgstr "Opzioni salvate"
|
598 |
+
|
599 |
+
#: templates/panel/woocommerce/woocommerce-form.php:43
|
600 |
+
msgid "Reset Defaults"
|
601 |
+
msgstr "Ripristina impostazioni iniziali"
|
602 |
+
|
603 |
+
#: templates/sysinfo/system-information-panel.php:12
|
604 |
+
msgid "PHPInfo"
|
605 |
+
msgstr "PHPInfo"
|
606 |
+
|
607 |
+
#: templates/sysinfo/system-information-panel.php:13
|
608 |
+
#: templates/sysinfo/tabs/error-log.php:25
|
609 |
+
msgid "Log Files"
|
610 |
+
msgstr "File log"
|
611 |
+
|
612 |
+
#: templates/sysinfo/system-information-panel.php:22
|
613 |
+
msgid "YITH System Information"
|
614 |
+
msgstr "YITH System Information"
|
615 |
+
|
616 |
+
#: templates/sysinfo/tabs/error-log.php:13
|
617 |
+
msgid "WP debug.log file"
|
618 |
+
msgstr "WP debug.log file"
|
619 |
+
|
620 |
+
#: templates/sysinfo/tabs/error-log.php:18
|
621 |
+
msgid "PHP error_log file"
|
622 |
+
msgstr "PHP error_log file"
|
623 |
+
|
624 |
+
#: templates/sysinfo/tabs/error-log.php:60
|
625 |
+
msgid "Download"
|
626 |
+
msgstr "Scarica"
|
627 |
+
|
628 |
+
#: templates/sysinfo/tabs/error-log.php:73
|
629 |
+
msgid "The file size exceeds 8 megabytes so it must be downloaded"
|
630 |
+
msgstr ""
|
631 |
+
"La dimensione del file supera gli 8 megabyte ed è quindi necessario "
|
632 |
+
"scaricarlo"
|
633 |
+
|
634 |
+
#. translators: %s file name.
|
635 |
+
#: templates/sysinfo/tabs/error-log.php:97
|
636 |
+
msgid ""
|
637 |
+
"No Log file available. Enable the WordPress debug by adding this in the %s "
|
638 |
+
"file of your installation"
|
639 |
+
msgstr ""
|
640 |
+
"Nessun file log disponibile. Abilita il debug WordPress aggiungendo questo "
|
641 |
+
"nel file %s della tua installazione"
|
642 |
+
|
643 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
644 |
+
msgid "Copied!"
|
645 |
+
msgstr "Copiato!"
|
646 |
+
|
647 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
648 |
+
msgid "Copy Code"
|
649 |
+
msgstr "Copia codice"
|
650 |
+
|
651 |
+
#: templates/sysinfo/tabs/main.php:17
|
652 |
+
msgid "Site Info"
|
653 |
+
msgstr "Info sito"
|
654 |
+
|
655 |
+
#: templates/sysinfo/tabs/main.php:22
|
656 |
+
msgid "Site URL"
|
657 |
+
msgstr "URL del sito"
|
658 |
+
|
659 |
+
#: templates/sysinfo/tabs/main.php:31
|
660 |
+
msgid "Output IP Address"
|
661 |
+
msgstr "Indirizzo IP di output"
|
662 |
+
|
663 |
+
#: templates/sysinfo/tabs/main.php:39
|
664 |
+
msgid "Defined WP_CACHE"
|
665 |
+
msgstr "Defined WP_CACHE"
|
666 |
+
|
667 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
668 |
+
msgid "Yes"
|
669 |
+
msgstr "Sì"
|
670 |
+
|
671 |
+
#: templates/sysinfo/tabs/main.php:47
|
672 |
+
msgid "External object cache"
|
673 |
+
msgstr "External object cache"
|
674 |
+
|
675 |
+
#: templates/sysinfo/tabs/main.php:55
|
676 |
+
msgid "YITH Plugin Framework Version"
|
677 |
+
msgstr "YITH Plugin Framework Version"
|
678 |
+
|
679 |
+
#. translators: %s is the name of the plugin that is loading the framework.
|
680 |
+
#: templates/sysinfo/tabs/main.php:64
|
681 |
+
msgid "loaded by %s"
|
682 |
+
msgstr "caricato da %s"
|
683 |
+
|
684 |
+
#: templates/sysinfo/tabs/main.php:73
|
685 |
+
msgid "Plugins Requirements"
|
686 |
+
msgstr "Requisiti plugin"
|
687 |
+
|
688 |
+
#: templates/sysinfo/tabs/main.php:108
|
689 |
+
msgid "Database Info"
|
690 |
+
msgstr "Info database"
|
691 |
+
|
692 |
+
#: templates/sysinfo/tabs/main.php:113
|
693 |
+
msgid "MySQL version"
|
694 |
+
msgstr "Versione MySQL"
|
695 |
+
|
696 |
+
#. Translators: %s: Codex link.
|
697 |
+
#: templates/sysinfo/tabs/main.php:123
|
698 |
+
msgid "WordPress recommends a minimum MySQL version of 5.6. See: %s"
|
699 |
+
msgstr "WordPress consiglia una versione minima 5.6 di MySQL. Vedi: %s"
|
700 |
+
|
701 |
+
#: templates/sysinfo/tabs/main.php:123
|
702 |
+
msgid "WordPress requirements"
|
703 |
+
msgstr "Requisiti WordPress"
|
704 |
+
|
705 |
+
#: templates/sysinfo/tabs/main.php:130
|
706 |
+
msgid "Total Database Size"
|
707 |
+
msgstr "Dimensione totale database"
|
708 |
+
|
709 |
+
#: templates/sysinfo/tabs/main.php:138
|
710 |
+
msgid "Database Data Size"
|
711 |
+
msgstr "Dimensione dati database"
|
712 |
+
|
713 |
+
#: templates/sysinfo/tabs/main.php:146
|
714 |
+
msgid "Database Index Size"
|
715 |
+
msgstr "Dimensione indice database"
|
716 |
+
|
717 |
+
#: templates/sysinfo/tabs/main.php:154
|
718 |
+
msgid "Database Free Size"
|
719 |
+
msgstr "Dimensione spazio libero database"
|
720 |
+
|
721 |
+
#. Translators: %1$f: Table size, %2$f: Index size, %3$f: Free size, %4$s
|
722 |
+
#. Engine.
|
723 |
+
#: templates/sysinfo/tabs/main.php:168
|
724 |
+
msgid "Data: %1$.2fMB | Index: %2$.2fMB | Free: %3$.2fMB | Engine: %4$s"
|
725 |
+
msgstr "Dati: %1$.2fMB | Indice: %2$.2fMB | Libero: %3$.2fMB | Engine: %4$s"
|
726 |
+
|
727 |
+
#. translators: %s is the title of the post object.
|
728 |
+
#: yit-functions.php:1938
|
729 |
+
msgid "Are you sure you want to move \"%s\" to trash?"
|
730 |
+
msgstr "Sei sicuro di voler spostare \"%s\" nel cestino?"
|
731 |
+
|
732 |
+
#. translators: %s is the title of the post object.
|
733 |
+
#: yit-functions.php:1940 yit-functions.php:2100
|
734 |
+
msgid "Are you sure you want to delete \"%s\"?"
|
735 |
+
msgstr "Sei sicuro di voler eliminare \"%s\"?"
|
736 |
+
|
737 |
+
#: yit-functions.php:2038 yit-functions.php:2046 yit-functions.php:2163
|
738 |
+
msgid "Further actions"
|
739 |
+
msgstr "Altre azioni"
|
740 |
+
|
741 |
+
#: yit-plugin.php:233
|
742 |
+
msgid "License"
|
743 |
+
msgstr "Chiave di licenza"
|
744 |
+
|
745 |
+
#. translators: 1. Plugin(s) name(s).
|
746 |
+
#: yit-plugin.php:272
|
747 |
+
msgid ""
|
748 |
+
"%s was deactivated as you're running an higher tier version of the same "
|
749 |
+
"plugin."
|
750 |
+
msgid_plural ""
|
751 |
+
"%s were deactivated as you're running higher tier versions of the same "
|
752 |
+
"plugins."
|
753 |
+
msgstr[0] ""
|
754 |
+
"%s è stato disattivato poiché stai usando una versione superiore dello "
|
755 |
+
"stesso plugin. "
|
756 |
+
msgstr[1] ""
|
757 |
+
"%s sono stati disattivati poiché stai usando una versione superiore degli "
|
758 |
+
"stessi plugin. "
|
759 |
+
|
760 |
+
#. Author of the plugin/theme
|
761 |
+
msgid "YITH"
|
762 |
+
msgstr "YITH"
|
763 |
+
|
764 |
+
#. translators: %s it the Elementor Widget title.
|
765 |
+
#: includes/builders/elementor/class-yith-elementor-widget.php:252
|
766 |
+
msgctxt "Elementor Widget - section title"
|
767 |
+
msgid "%s - Options"
|
768 |
+
msgstr "%s - Opzioni"
|
769 |
+
|
770 |
+
#: includes/builders/gutenberg/class-yith-gutenberg.php:152
|
771 |
+
msgctxt "[gutenberg]: Category Name"
|
772 |
+
msgid "YITH"
|
773 |
+
msgstr "YITH"
|
774 |
+
|
775 |
+
#: includes/class-yit-assets.php:136
|
776 |
+
msgctxt "Button text"
|
777 |
+
msgid "Confirm"
|
778 |
+
msgstr "Conferma"
|
779 |
+
|
780 |
+
#: includes/class-yit-assets.php:137
|
781 |
+
msgctxt "Button text"
|
782 |
+
msgid "Cancel"
|
783 |
+
msgstr "Annulla"
|
784 |
+
|
785 |
+
#: includes/class-yit-assets.php:150 yit-functions.php:2009
|
786 |
+
msgctxt "Trash confirmation action"
|
787 |
+
msgid "Yes, move to trash"
|
788 |
+
msgstr "Sì, sposta nel cestino"
|
789 |
+
|
790 |
+
#: includes/class-yit-assets.php:154 yit-functions.php:2027
|
791 |
+
#: yit-functions.php:2154
|
792 |
+
msgctxt "Delete confirmation action"
|
793 |
+
msgid "Yes, delete"
|
794 |
+
msgstr "Sì, elimina"
|
795 |
+
|
796 |
+
#. translators: 1. Plugin name.
|
797 |
+
#: includes/class-yit-plugin-panel.php:804
|
798 |
+
msgctxt "Help tab default title"
|
799 |
+
msgid "Thank you for purchasing %s!"
|
800 |
+
msgstr "Grazie per aver acquistato %s!"
|
801 |
+
|
802 |
+
#: includes/class-yit-plugin-panel.php:804
|
803 |
+
msgctxt "Help tab default title"
|
804 |
+
msgid "Thank you for using %s!"
|
805 |
+
msgstr "Grazie per aver scelto %s!"
|
806 |
+
|
807 |
+
#: includes/class-yit-plugin-panel.php:812
|
808 |
+
msgctxt "Help tab default description"
|
809 |
+
msgid ""
|
810 |
+
"We want to help you enjoy a wonderful experience with all of our products."
|
811 |
+
msgstr ""
|
812 |
+
"Vogliamo aiutarti ad avere un'esperienza fantastica con tutti i nostri "
|
813 |
+
"prodotti."
|
814 |
+
|
815 |
+
#: includes/class-yit-plugin-panel.php:863
|
816 |
+
msgctxt "Premium tab name"
|
817 |
+
msgid "Get premium"
|
818 |
+
msgstr "Diventa premium"
|
819 |
+
|
820 |
+
#: includes/class-yit-plugin-panel.php:875
|
821 |
+
msgctxt "Help tab name"
|
822 |
+
msgid "Help"
|
823 |
+
msgstr "Help"
|
824 |
+
|
825 |
+
#: includes/class-yith-dashboard.php:96
|
826 |
+
msgctxt "Plugin FW"
|
827 |
+
msgid "View Changelog"
|
828 |
+
msgstr "Visualizza il changelog"
|
829 |
+
|
830 |
+
#: includes/class-yith-dashboard.php:97
|
831 |
+
msgctxt "Plugin FW"
|
832 |
+
msgid "Latest update released on"
|
833 |
+
msgstr "Ultimo aggiornamento rilasciato il"
|
834 |
+
|
835 |
+
#: includes/class-yith-dashboard.php:137
|
836 |
+
msgctxt "Button label"
|
837 |
+
msgid "Close"
|
838 |
+
msgstr "Chiudi"
|
839 |
+
|
840 |
+
#: includes/privacy/class-yith-privacy.php:61
|
841 |
+
msgctxt "Privacy Policy Guide Title"
|
842 |
+
msgid "YITH Plugins"
|
843 |
+
msgstr "YITH Plugins"
|
844 |
+
|
845 |
+
#: includes/privacy/class-yith-privacy.php:93
|
846 |
+
msgctxt "Privacy Policy Content"
|
847 |
+
msgid ""
|
848 |
+
"This sample language includes the basics around what personal data your "
|
849 |
+
"store may be collecting, storing and sharing, as well as who may have access "
|
850 |
+
"to that data. Depending on what settings are enabled and which additional "
|
851 |
+
"plugins are used, the specific information shared by your store will vary. "
|
852 |
+
"We recommend consulting with a lawyer when deciding what information to "
|
853 |
+
"disclose on your privacy policy."
|
854 |
+
msgstr ""
|
855 |
+
"Questo esempio include gli elementi di base sulla raccolta dei dati "
|
856 |
+
"personali, la memorizzazione e la condivisione, nonché su chi è autorizzato "
|
857 |
+
"ad accedere a tali dati. In base alle impostazioni abilitate e ai moduli di "
|
858 |
+
"estensione aggiuntivi utilizzati, le informazioni specifiche condivise dal "
|
859 |
+
"nostro negozio possono variare. Ti consigliamo di consultare un legale al "
|
860 |
+
"momento di decidere quali informazioni divulgare nell'informativa sulla "
|
861 |
+
"privacy."
|
862 |
+
|
863 |
+
#: includes/privacy/class-yith-privacy.php:97
|
864 |
+
msgctxt "Privacy Policy Content"
|
865 |
+
msgid "What we collect and store"
|
866 |
+
msgstr "Cosa raccogliamo e salviamo"
|
867 |
+
|
868 |
+
#: includes/privacy/class-yith-privacy.php:100
|
869 |
+
msgctxt "Privacy Policy Content"
|
870 |
+
msgid "Who on our team has access"
|
871 |
+
msgstr "Persone del nostro gruppo di lavoro che hanno accesso"
|
872 |
+
|
873 |
+
#: includes/privacy/class-yith-privacy.php:103
|
874 |
+
msgctxt "Privacy Policy Content"
|
875 |
+
msgid "What we share with others"
|
876 |
+
msgstr "Cosa condividiamo con gli altri"
|
877 |
+
|
878 |
+
#: includes/privacy/class-yith-privacy.php:106
|
879 |
+
msgctxt "Privacy Policy Content"
|
880 |
+
msgid "Payments"
|
881 |
+
msgstr "Pagamenti"
|
882 |
+
|
883 |
+
#: templates/fields/copy-to-clipboard.php:41
|
884 |
+
msgctxt "Copy-to-clipboard message"
|
885 |
+
msgid "Copied!"
|
886 |
+
msgstr "Copiato!"
|
887 |
+
|
888 |
+
#: templates/fields/copy-to-clipboard.php:45
|
889 |
+
msgctxt "Copy-to-clipboard button text"
|
890 |
+
msgid "Copy"
|
891 |
+
msgstr "Copia"
|
892 |
+
|
893 |
+
#: templates/fields/dimensions.php:13
|
894 |
+
msgctxt "Position in the \"Dimensions\" field"
|
895 |
+
msgid "Top"
|
896 |
+
msgstr "In alto"
|
897 |
+
|
898 |
+
#: templates/fields/dimensions.php:14
|
899 |
+
msgctxt "Position in the \"Dimensions\" field"
|
900 |
+
msgid "Right"
|
901 |
+
msgstr "A destra"
|
902 |
+
|
903 |
+
#: templates/fields/dimensions.php:15
|
904 |
+
msgctxt "Position in the \"Dimensions\" field"
|
905 |
+
msgid "Bottom"
|
906 |
+
msgstr "In basso"
|
907 |
+
|
908 |
+
#: templates/fields/dimensions.php:16
|
909 |
+
msgctxt "Position in the \"Dimensions\" field"
|
910 |
+
msgid "Left"
|
911 |
+
msgstr "A sinistra"
|
912 |
+
|
913 |
+
#: templates/fields/dimensions.php:94
|
914 |
+
msgctxt "Tooltip in the \"Dimensions\" field"
|
915 |
+
msgid "Link values together"
|
916 |
+
msgstr "Collega i valori"
|
917 |
+
|
918 |
+
#: templates/fields/image-dimensions.php:18
|
919 |
+
msgctxt "Image width field label"
|
920 |
+
msgid "Width"
|
921 |
+
msgstr "Larghezza"
|
922 |
+
|
923 |
+
#: templates/fields/image-dimensions.php:23
|
924 |
+
msgctxt "Image height field label"
|
925 |
+
msgid "Height"
|
926 |
+
msgstr "Altezza"
|
927 |
+
|
928 |
+
#: templates/fields/onoff.php:28
|
929 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
930 |
+
msgid "YES"
|
931 |
+
msgstr "SÌ"
|
932 |
+
|
933 |
+
#: templates/fields/onoff.php:29
|
934 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
935 |
+
msgid "NO"
|
936 |
+
msgstr "NO"
|
937 |
+
|
938 |
+
#. translators: 1. Url to EN playlist.
|
939 |
+
#: templates/panel/help-tab.php:89
|
940 |
+
msgctxt "Help tab view all video link"
|
941 |
+
msgid ""
|
942 |
+
"Check the full <a href=\"%s\" target=\"_blank\">Playlist on Youtube</a> to "
|
943 |
+
"learn more >"
|
944 |
+
msgstr ""
|
945 |
+
"Per saperne di più, vedi la <a href=\"%s\" target=\"_blank\">Playlist "
|
946 |
+
"completa su Youtube</a>>"
|
947 |
+
|
948 |
+
#: templates/panel/help-tab.php:96
|
949 |
+
msgctxt "Help tab Watch Videotutorials link"
|
950 |
+
msgid "Videos are also available in:"
|
951 |
+
msgstr "I video sono disponibili anche in:"
|
952 |
+
|
953 |
+
#: templates/panel/help-tab.php:126
|
954 |
+
msgctxt "Help tab Read Documentation link"
|
955 |
+
msgid "Read the documentation"
|
956 |
+
msgstr "Consulta la documentazione"
|
957 |
+
|
958 |
+
#: templates/panel/help-tab.php:129
|
959 |
+
msgctxt "Help tab Read Documentation link"
|
960 |
+
msgid "to learn how the plugin works from the basics."
|
961 |
+
msgstr "per scoprire dalle basi come funziona il plugin."
|
962 |
+
|
963 |
+
#: templates/panel/help-tab.php:139
|
964 |
+
msgctxt "Help tab Watch video tutorials link"
|
965 |
+
msgid "Watch our video tutorials"
|
966 |
+
msgstr "Guarda i nostri video tutorial"
|
967 |
+
|
968 |
+
#: templates/panel/help-tab.php:142
|
969 |
+
msgctxt "Help tab Watch video tutorials link"
|
970 |
+
msgid "to see some helpful use cases."
|
971 |
+
msgstr "per vedere dei casi d'utilizzo utili."
|
972 |
+
|
973 |
+
#: templates/panel/help-tab.php:152
|
974 |
+
msgctxt "Help tab view FAQs link"
|
975 |
+
msgid "Check the FAQs"
|
976 |
+
msgstr "Controlla le FAQ"
|
977 |
+
|
978 |
+
#: templates/panel/help-tab.php:155
|
979 |
+
msgctxt "Help tab view FAQs link"
|
980 |
+
msgid "to find answers to your doubts."
|
981 |
+
msgstr "per trovare le risposte ai tuoi dubbi."
|
982 |
+
|
983 |
+
#: templates/panel/help-tab.php:170
|
984 |
+
msgctxt "Help tab FAQ title"
|
985 |
+
msgid "Last FAQs in our Help Center"
|
986 |
+
msgstr "Ultime FAQ nel nostro Centro Assistenza"
|
987 |
+
|
988 |
+
#: templates/panel/help-tab.php:184
|
989 |
+
msgctxt "Help tab FAQ link"
|
990 |
+
msgid "View all FAQs >"
|
991 |
+
msgstr "Vedi tutte le FAQ"
|
992 |
+
|
993 |
+
#: templates/panel/help-tab.php:193
|
994 |
+
msgctxt "Help tab submit ticket title"
|
995 |
+
msgid "Need help?"
|
996 |
+
msgstr "Ti serve aiuto?"
|
997 |
+
|
998 |
+
#: templates/panel/help-tab.php:196
|
999 |
+
msgctxt "Help tab submit ticket description"
|
1000 |
+
msgid ""
|
1001 |
+
"If you are experiencing any technical issues, ask for help from our "
|
1002 |
+
"developers. Submit a ticket through our support desk and we will help you as "
|
1003 |
+
"soon as possible."
|
1004 |
+
msgstr ""
|
1005 |
+
"Se stai riscontrando problemi tecnici chiedi aiuto ai nostri sviluppatori. "
|
1006 |
+
"Invia un ticket dalla nostra piattaforma di supporto e ti daremo assistenza "
|
1007 |
+
"il più presto possibile."
|
1008 |
+
|
1009 |
+
#: templates/panel/help-tab.php:204
|
1010 |
+
msgctxt "Help tab submit ticket button"
|
1011 |
+
msgid "Submit a ticket"
|
1012 |
+
msgstr "Invia un ticket"
|
1013 |
+
|
1014 |
+
#: templates/panel/help-tab.php:216 templates/panel/help-tab.php:218
|
1015 |
+
#: templates/panel/help-tab.php:223
|
1016 |
+
msgctxt "Help tab documentation"
|
1017 |
+
msgid "Read the plugin documentation"
|
1018 |
+
msgstr "Leggi la documentazione del plugin"
|
1019 |
+
|
1020 |
+
#: templates/panel/help-tab.php:220
|
1021 |
+
msgctxt "Help tab documentation"
|
1022 |
+
msgid "to learn how it works from the basics."
|
1023 |
+
msgstr "per vedere come funziona nel dettaglio."
|
1024 |
+
|
1025 |
+
#: templates/panel/help-tab.php:231 templates/panel/help-tab.php:233
|
1026 |
+
msgctxt "Help tab support"
|
1027 |
+
msgid "Need some help?"
|
1028 |
+
msgstr "Ti serve aiuto?"
|
1029 |
+
|
1030 |
+
#: templates/panel/help-tab.php:235
|
1031 |
+
msgctxt "Help tab support"
|
1032 |
+
msgid "From DIY to full-service help"
|
1033 |
+
msgstr "Dal fai-da-te a un servizio completo"
|
1034 |
+
|
1035 |
+
#: templates/panel/help-tab.php:238
|
1036 |
+
msgctxt "Help tab support"
|
1037 |
+
msgid ""
|
1038 |
+
"Call or chat 24/7 with our support agents, or let our experts build your "
|
1039 |
+
"site."
|
1040 |
+
msgstr ""
|
1041 |
+
"Chiamaci o avvia una chat con i nostri agenti disponibili 24/7 oppure "
|
1042 |
+
"lasciati aiutare dai nostri esperti a configurare il tuo sito."
|
1043 |
+
|
1044 |
+
#: templates/panel/help-tab.php:241
|
1045 |
+
msgctxt "Help tab support"
|
1046 |
+
msgid "Yes, I need help"
|
1047 |
+
msgstr "Sì, mi serve aiuto"
|
1048 |
+
|
1049 |
+
#: templates/panel/premium-tab.php:30
|
1050 |
+
msgctxt "Premium Tab"
|
1051 |
+
msgid "Get the premium version to unlock advanced features"
|
1052 |
+
msgstr "Ottieni la versione premium per sbloccare le funzionalità avanzate"
|
1053 |
+
|
1054 |
+
#: templates/panel/premium-tab.php:34
|
1055 |
+
msgctxt "Premium Tab"
|
1056 |
+
msgid "Get premium"
|
1057 |
+
msgstr "Diventa premium"
|
1058 |
+
|
1059 |
+
#: templates/panel/premium-tab.php:39
|
1060 |
+
msgctxt "Premium Tab"
|
1061 |
+
msgid "Plugin premium features images"
|
1062 |
+
msgstr "Immagini funzionalità premium"
|
1063 |
+
|
1064 |
+
#. translators: alt attribute of main image tag.
|
1065 |
+
#: templates/panel/premium-tab.php:51 templates/panel/premium-tab.php:58
|
1066 |
+
msgctxt "Premium Tab"
|
1067 |
+
msgid "And so much more!"
|
1068 |
+
msgstr "E molto altro!"
|
1069 |
+
|
1070 |
+
#: templates/panel/premium-tab.php:53
|
1071 |
+
msgctxt "Premium Tab"
|
1072 |
+
msgid "Check the premium features >"
|
1073 |
+
msgstr "Scopri le funzionalità premium >"
|
1074 |
+
|
1075 |
+
#: templates/panel/premium-tab.php:60
|
1076 |
+
msgctxt "Premium Tab"
|
1077 |
+
msgid "Check the free vs premium features >"
|
1078 |
+
msgstr "Confronta le funzionalità gratuite e premium >"
|
1079 |
+
|
1080 |
+
#: templates/panel/premium-tab.php:65
|
1081 |
+
msgctxt "Premium Tab"
|
1082 |
+
msgid "Get the premium version"
|
1083 |
+
msgstr "Ottieni la versione premium"
|
1084 |
+
|
1085 |
+
#: yit-functions.php:1952
|
1086 |
+
msgctxt "Post action"
|
1087 |
+
msgid "Preview"
|
1088 |
+
msgstr "Anteprima"
|
1089 |
+
|
1090 |
+
#: yit-functions.php:1961
|
1091 |
+
msgctxt "Post action"
|
1092 |
+
msgid "View"
|
1093 |
+
msgstr "Visualizza"
|
1094 |
+
|
1095 |
+
#: yit-functions.php:1972
|
1096 |
+
msgctxt "Post action"
|
1097 |
+
msgid "Edit"
|
1098 |
+
msgstr "Modifica"
|
1099 |
+
|
1100 |
+
#: yit-functions.php:1980
|
1101 |
+
msgctxt "Post action"
|
1102 |
+
msgid "Duplicate"
|
1103 |
+
msgstr "Duplica"
|
1104 |
+
|
1105 |
+
#: yit-functions.php:1992
|
1106 |
+
msgctxt "Post action"
|
1107 |
+
msgid "Restore"
|
1108 |
+
msgstr "Ripristina"
|
1109 |
+
|
1110 |
+
#: yit-functions.php:2000
|
1111 |
+
msgctxt "Post action"
|
1112 |
+
msgid "Trash"
|
1113 |
+
msgstr "Cestina"
|
1114 |
+
|
1115 |
+
#: yit-functions.php:2017
|
1116 |
+
msgctxt "Post action"
|
1117 |
+
msgid "Delete Permanently"
|
1118 |
+
msgstr "Cancella definitivamente"
|
1119 |
+
|
1120 |
+
#: yit-functions.php:2114
|
1121 |
+
msgctxt "Term action"
|
1122 |
+
msgid "View"
|
1123 |
+
msgstr "Visualizza"
|
1124 |
+
|
1125 |
+
#: yit-functions.php:2124
|
1126 |
+
msgctxt "Term action"
|
1127 |
+
msgid "Edit"
|
1128 |
+
msgstr "Modifica"
|
1129 |
+
|
1130 |
+
#: yit-functions.php:2132
|
1131 |
+
msgctxt "Term action"
|
1132 |
+
msgid "Duplicate"
|
1133 |
+
msgstr "Duplica"
|
1134 |
+
|
1135 |
+
#: yit-functions.php:2145
|
1136 |
+
msgctxt "Term action"
|
1137 |
+
msgid "Delete"
|
1138 |
+
msgstr "Elimina"
|
1139 |
+
|
1140 |
+
#: yit-plugin.php:85
|
1141 |
+
msgctxt "Plugin Row Meta"
|
1142 |
+
msgid "Live Demo"
|
1143 |
+
msgstr "Live Demo"
|
1144 |
+
|
1145 |
+
#: yit-plugin.php:89
|
1146 |
+
msgctxt "Plugin Row Meta"
|
1147 |
+
msgid "Documentation"
|
1148 |
+
msgstr "Documentazione"
|
1149 |
+
|
1150 |
+
#: yit-plugin.php:93
|
1151 |
+
msgctxt "Plugin Row Meta"
|
1152 |
+
msgid "Support"
|
1153 |
+
msgstr "Assistenza"
|
1154 |
+
|
1155 |
+
#: yit-plugin.php:97
|
1156 |
+
msgctxt "Plugin Row Meta"
|
1157 |
+
msgid "Premium version"
|
1158 |
+
msgstr "Versione premium"
|
1159 |
+
|
1160 |
+
#: yit-plugin.php:229
|
1161 |
+
msgctxt "Action links"
|
1162 |
+
msgid "Settings"
|
1163 |
+
msgstr "Impostazioni"
|
plugin-fw/languages/yith-plugin-fw-nl_NL 2.mo
ADDED
Binary file
|
plugin-fw/languages/yith-plugin-fw-nl_NL 2.po
ADDED
@@ -0,0 +1,1151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Translation of YITH Framework in Dutch
|
2 |
+
# This file is distributed under the same license as the YITH Framework package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: YITH Framework\n"
|
6 |
+
"Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
|
7 |
+
"POT-Creation-Date: 2022-11-11 07:31:10+00:00\n"
|
8 |
+
"PO-Revision-Date: 2021-12-13 12:45:02+0000\n"
|
9 |
+
"Language: nl\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
14 |
+
"X-Generator: GlotPress/3.0.0-alpha.2\n"
|
15 |
+
|
16 |
+
#: includes/class-yit-assets.php:148 yit-functions.php:2006
|
17 |
+
msgid "Confirm trash"
|
18 |
+
msgstr "Verplaatsen naar prullenbak bevestigen"
|
19 |
+
|
20 |
+
#: includes/class-yit-assets.php:149
|
21 |
+
msgid "Are you sure you want to trash the selected items?"
|
22 |
+
msgstr ""
|
23 |
+
"Weet je zeker dat je het geselecteerde item naar de prullenbak wilt "
|
24 |
+
"verplaatsen?"
|
25 |
+
|
26 |
+
#: includes/class-yit-assets.php:151 includes/class-yit-assets.php:155
|
27 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
28 |
+
#: yit-functions.php:2008 yit-functions.php:2026
|
29 |
+
msgid "No"
|
30 |
+
msgstr "Nee"
|
31 |
+
|
32 |
+
#: includes/class-yit-assets.php:152 yit-functions.php:2024
|
33 |
+
#: yit-functions.php:2152
|
34 |
+
msgid "Confirm delete"
|
35 |
+
msgstr "Verwijderen bevestigen"
|
36 |
+
|
37 |
+
#: includes/class-yit-assets.php:153
|
38 |
+
msgid "Are you sure you want to delete the selected items?"
|
39 |
+
msgstr "Weet je zeker dat je de geselecteerde items wilt verwijderen?"
|
40 |
+
|
41 |
+
#: includes/class-yit-assets.php:153 yit-functions.php:1940
|
42 |
+
#: yit-functions.php:2100
|
43 |
+
msgid ""
|
44 |
+
"This action cannot be undone and you will not be able to recover this data."
|
45 |
+
msgstr ""
|
46 |
+
"Deze actie kan niet ongedaan gemaakt worden en je zult deze gegevens niet "
|
47 |
+
"kunnen herstellen."
|
48 |
+
|
49 |
+
#: includes/class-yit-assets.php:174
|
50 |
+
msgid "Clear"
|
51 |
+
msgstr "Wissen"
|
52 |
+
|
53 |
+
#: includes/class-yit-assets.php:175
|
54 |
+
msgid "Clear color"
|
55 |
+
msgstr "Kleur wissen"
|
56 |
+
|
57 |
+
#: includes/class-yit-assets.php:176
|
58 |
+
msgid "Default"
|
59 |
+
msgstr "Standaard"
|
60 |
+
|
61 |
+
#: includes/class-yit-assets.php:177
|
62 |
+
msgid "Select default color"
|
63 |
+
msgstr "Standaardkleur selecteren"
|
64 |
+
|
65 |
+
#: includes/class-yit-assets.php:178
|
66 |
+
msgid "Select Color"
|
67 |
+
msgstr "Kleur selecteren"
|
68 |
+
|
69 |
+
#: includes/class-yit-assets.php:179
|
70 |
+
msgid "Color value"
|
71 |
+
msgstr "Kleurwaarde"
|
72 |
+
|
73 |
+
#: includes/class-yit-help-desk.php:152
|
74 |
+
msgid "There was an error with your request; please try again later."
|
75 |
+
msgstr ""
|
76 |
+
"Er is een fout opgetreden met je verzoek, probeer het later opnieuw a.u.b."
|
77 |
+
|
78 |
+
#: includes/class-yit-plugin-panel-woocommerce.php:437
|
79 |
+
msgid "The changes you have made will be lost if you leave this page."
|
80 |
+
msgstr "Als je deze pagina verlaat zullen alle wijzigingen verloren gaan."
|
81 |
+
|
82 |
+
#: includes/class-yit-plugin-panel.php:83
|
83 |
+
msgid "Plugin Settings"
|
84 |
+
msgstr "Plugin instellingen"
|
85 |
+
|
86 |
+
#: includes/class-yit-plugin-panel.php:84
|
87 |
+
msgid "Settings"
|
88 |
+
msgstr "Instellingen"
|
89 |
+
|
90 |
+
#: includes/class-yit-plugin-panel.php:456
|
91 |
+
#: includes/class-yit-plugin-panel.php:459
|
92 |
+
msgid "How to install premium version"
|
93 |
+
msgstr "Hoe installeer ik de premium versie"
|
94 |
+
|
95 |
+
#: includes/class-yit-plugin-panel.php:656
|
96 |
+
#: includes/class-yit-plugin-subpanel.php:133
|
97 |
+
msgid "Save Changes"
|
98 |
+
msgstr "Wijzigingen opslaan"
|
99 |
+
|
100 |
+
#: includes/class-yit-plugin-panel.php:664
|
101 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
102 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
103 |
+
msgid ""
|
104 |
+
"If you continue with this action, you will reset all options in this page."
|
105 |
+
msgstr ""
|
106 |
+
"Als je doorgaat met deze actie, zal je alle opties op deze pagina resetten."
|
107 |
+
|
108 |
+
#: includes/class-yit-plugin-panel.php:664
|
109 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
110 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
111 |
+
msgid "Are you sure?"
|
112 |
+
msgstr "Weet je het zeker?"
|
113 |
+
|
114 |
+
#: includes/class-yit-plugin-panel.php:668
|
115 |
+
#: includes/class-yit-plugin-subpanel.php:143
|
116 |
+
msgid "Reset to default"
|
117 |
+
msgstr "Resetten naar standaard"
|
118 |
+
|
119 |
+
#: includes/class-yit-plugin-panel.php:1039
|
120 |
+
msgid "Read the <mark>plugin documentation</mark>"
|
121 |
+
msgstr ""
|
122 |
+
|
123 |
+
#: includes/class-yit-plugin-panel.php:1040
|
124 |
+
msgid "Learn what you can really do with this powerful tool"
|
125 |
+
msgstr ""
|
126 |
+
|
127 |
+
#: includes/class-yit-plugin-panel.php:1050
|
128 |
+
msgid "Watch our <mark>\"First Steps\" video</mark>"
|
129 |
+
msgstr ""
|
130 |
+
|
131 |
+
#: includes/class-yit-plugin-panel.php:1051
|
132 |
+
msgid "See how it works before you start using it"
|
133 |
+
msgstr ""
|
134 |
+
|
135 |
+
#: includes/class-yit-plugin-panel.php:1307
|
136 |
+
msgid ""
|
137 |
+
"The element you have entered already exists. Please, enter another name."
|
138 |
+
msgstr "Het element dat je hebt ingevoerd bestaat al. Voer een andere naam in."
|
139 |
+
|
140 |
+
#: includes/class-yit-plugin-panel.php:1308
|
141 |
+
msgid "Settings saved"
|
142 |
+
msgstr "Instellingen opgeslagen"
|
143 |
+
|
144 |
+
#: includes/class-yit-plugin-panel.php:1309
|
145 |
+
msgid "Settings reset"
|
146 |
+
msgstr "Instellingen resetten"
|
147 |
+
|
148 |
+
#: includes/class-yit-plugin-panel.php:1310
|
149 |
+
msgid "Element deleted correctly."
|
150 |
+
msgstr "Element juist verwijderd."
|
151 |
+
|
152 |
+
#: includes/class-yit-plugin-panel.php:1311
|
153 |
+
#: includes/class-yit-plugin-panel.php:1312
|
154 |
+
msgid "Element updated correctly."
|
155 |
+
msgstr "Element juist geüpdatet."
|
156 |
+
|
157 |
+
#: includes/class-yit-plugin-panel.php:1313
|
158 |
+
msgid "Database imported correctly."
|
159 |
+
msgstr "Database juist geïmporteerd."
|
160 |
+
|
161 |
+
#: includes/class-yit-plugin-panel.php:1314
|
162 |
+
msgid "An error has occurred during import. Please try again."
|
163 |
+
msgstr "Er is een fout opgetreden tijdens importeren. Probeer opnieuw."
|
164 |
+
|
165 |
+
#: includes/class-yit-plugin-panel.php:1315
|
166 |
+
msgid "The added file is not valid."
|
167 |
+
msgstr "Het toegevoegde bestand is niet geldig."
|
168 |
+
|
169 |
+
#: includes/class-yit-plugin-panel.php:1316
|
170 |
+
msgid "Sorry, import is disabled."
|
171 |
+
msgstr "Sorry, importeren is uitgeschakeld."
|
172 |
+
|
173 |
+
#: includes/class-yit-plugin-panel.php:1317
|
174 |
+
msgid "Sorting successful."
|
175 |
+
msgstr "Succesvol gesorteerd."
|
176 |
+
|
177 |
+
#: includes/class-yit-plugin-panel.php:1806
|
178 |
+
msgid "We need your support"
|
179 |
+
msgstr "We hebben je hulp nodig"
|
180 |
+
|
181 |
+
#: includes/class-yit-plugin-panel.php:1807
|
182 |
+
msgid "to keep updating and improving the plugin. Please,"
|
183 |
+
msgstr "om de plugin te blijven bijwerken en verbeteren. A.u.b.,"
|
184 |
+
|
185 |
+
#: includes/class-yit-plugin-panel.php:1809
|
186 |
+
msgid "help us by leaving a good review"
|
187 |
+
msgstr "help ons door een goede beoordeling achter te laten"
|
188 |
+
|
189 |
+
#: includes/class-yit-plugin-panel.php:1810
|
190 |
+
msgid ":) Thanks!"
|
191 |
+
msgstr ":) Bedankt!"
|
192 |
+
|
193 |
+
#: includes/class-yit-pointers.php:80
|
194 |
+
msgid "Plugins Activated"
|
195 |
+
msgstr "Plugins geactiveerd"
|
196 |
+
|
197 |
+
#: includes/class-yit-pointers.php:81
|
198 |
+
msgid ""
|
199 |
+
"From now on, you can find all plugin options in YITH menu. Plugin "
|
200 |
+
"customization settings will be available as a new entry in YITH menu."
|
201 |
+
msgstr ""
|
202 |
+
"Vanaf nu kun je alle plugin opties vinden in het YITH Plugins menu. Plugin "
|
203 |
+
"aanpassingen instellingen zullen beschikbaar zijn als nieuwe toegang in het "
|
204 |
+
"YITH menu."
|
205 |
+
|
206 |
+
#. translators: 1. YITH site link; 2. WordPress site link.
|
207 |
+
#: includes/class-yit-pointers.php:84 includes/class-yit-pointers.php:100
|
208 |
+
msgid "Discover all our plugins available on: %1$s and %2$s"
|
209 |
+
msgstr "Ontdek al onze beschikbare plugins op: %1$s and %2$s"
|
210 |
+
|
211 |
+
#: includes/class-yit-pointers.php:96
|
212 |
+
msgid "Plugins Upgraded"
|
213 |
+
msgstr "Plugins Upgraded"
|
214 |
+
|
215 |
+
#: includes/class-yit-pointers.php:97
|
216 |
+
msgid ""
|
217 |
+
"From now on, you can find the option panel of YITH plugins in YITH menu. "
|
218 |
+
"Every time one of our plugins is added, a new entry will be added to this "
|
219 |
+
"menu. For example, after the update, plugin options (such as for YITH "
|
220 |
+
"WooCommerce Wishlist, YITH WooCommerce Ajax Search, etc.) will be moved from "
|
221 |
+
"previous location to YITH menu."
|
222 |
+
msgstr ""
|
223 |
+
"Vanaf nu kun je het optiepaneel van YITH plugins vinden in het YITH menu. "
|
224 |
+
"Elke keer dat een van onze plugins wordt toegevoegd, wordt er een nieuw item "
|
225 |
+
"aan dit menu toegevoegd. Bijvoorbeeld na de update worden plugin opties "
|
226 |
+
"(zoals voor YITH WooCommerce Wishlist, YITH WooCommerce Ajax Search, enz.) "
|
227 |
+
"verplaatst van de vorige locatie naar het YITH menu."
|
228 |
+
|
229 |
+
#: includes/class-yith-bh-onboarding.php:85
|
230 |
+
msgid "It is not possible save the options"
|
231 |
+
msgstr ""
|
232 |
+
|
233 |
+
#: includes/class-yith-dashboard.php:35
|
234 |
+
msgid "YITH Latest Updates"
|
235 |
+
msgstr "YITH laatste updates"
|
236 |
+
|
237 |
+
#: includes/class-yith-dashboard.php:36
|
238 |
+
msgid "Latest news from YITH Blog"
|
239 |
+
msgstr "Laatste nieuws van YITH Blog"
|
240 |
+
|
241 |
+
#: includes/class-yith-dashboard.php:56
|
242 |
+
msgid "RSS Error:"
|
243 |
+
msgstr "RSS-fout:"
|
244 |
+
|
245 |
+
#: includes/class-yith-dashboard.php:63
|
246 |
+
msgid ""
|
247 |
+
"An error has occurred, which probably means the feed is down. Try again "
|
248 |
+
"later."
|
249 |
+
msgstr ""
|
250 |
+
"Er is een fout opgetreden, wat waarschijnlijk betekent dat de feed niet "
|
251 |
+
"werkt. Probeer het later opnieuw."
|
252 |
+
|
253 |
+
#. translators: %s is the name of the post type (example Back to "Membership
|
254 |
+
#. Plans").
|
255 |
+
#: includes/class-yith-post-type-admin.php:286
|
256 |
+
msgid "Back to \"%s\""
|
257 |
+
msgstr "Terug naar \"%s\""
|
258 |
+
|
259 |
+
#: includes/class-yith-post-type-admin.php:286
|
260 |
+
msgid "Back to the list"
|
261 |
+
msgstr "Terug naar de lijst"
|
262 |
+
|
263 |
+
#: includes/class-yith-system-status.php:110
|
264 |
+
msgid "WordPress Version"
|
265 |
+
msgstr "WordPress Versie"
|
266 |
+
|
267 |
+
#: includes/class-yith-system-status.php:111
|
268 |
+
msgid "WooCommerce Version"
|
269 |
+
msgstr "WooCommerce Versie"
|
270 |
+
|
271 |
+
#: includes/class-yith-system-status.php:112
|
272 |
+
msgid "Available Memory"
|
273 |
+
msgstr "Beschikbaar geheugen"
|
274 |
+
|
275 |
+
#: includes/class-yith-system-status.php:113
|
276 |
+
msgid "PHP Version"
|
277 |
+
msgstr "PHP Versie"
|
278 |
+
|
279 |
+
#: includes/class-yith-system-status.php:114
|
280 |
+
msgid "TLS Version"
|
281 |
+
msgstr "TLS Versie"
|
282 |
+
|
283 |
+
#: includes/class-yith-system-status.php:115
|
284 |
+
msgid "WordPress Cron"
|
285 |
+
msgstr "WordPress Cron"
|
286 |
+
|
287 |
+
#: includes/class-yith-system-status.php:116
|
288 |
+
msgid "SimpleXML"
|
289 |
+
msgstr "SimpleXML"
|
290 |
+
|
291 |
+
#: includes/class-yith-system-status.php:117
|
292 |
+
msgid "MultiByte String"
|
293 |
+
msgstr "MultiByte String"
|
294 |
+
|
295 |
+
#: includes/class-yith-system-status.php:118
|
296 |
+
msgid "ImageMagick Version"
|
297 |
+
msgstr "ImageMagick Versie"
|
298 |
+
|
299 |
+
#: includes/class-yith-system-status.php:119
|
300 |
+
msgid "GD Library"
|
301 |
+
msgstr "GD Library"
|
302 |
+
|
303 |
+
#: includes/class-yith-system-status.php:120
|
304 |
+
msgid "Iconv Module"
|
305 |
+
msgstr "Verzendmodule inschakelen"
|
306 |
+
|
307 |
+
#: includes/class-yith-system-status.php:121
|
308 |
+
msgid "OPCache Save Comments"
|
309 |
+
msgstr "OPCache Opmerkingen opslaan"
|
310 |
+
|
311 |
+
#: includes/class-yith-system-status.php:122
|
312 |
+
msgid "URL FOpen"
|
313 |
+
msgstr "URL FOpen"
|
314 |
+
|
315 |
+
#: includes/class-yith-system-status.php:140
|
316 |
+
#: includes/class-yith-system-status.php:141
|
317 |
+
#: templates/sysinfo/system-information-panel.php:11
|
318 |
+
msgid "System Status"
|
319 |
+
msgstr "Systeem Status"
|
320 |
+
|
321 |
+
#: includes/class-yith-system-status.php:183
|
322 |
+
msgid "YITH Plugins"
|
323 |
+
msgstr "YITH Plugins"
|
324 |
+
|
325 |
+
#: includes/class-yith-system-status.php:191
|
326 |
+
msgid "WooCommerce"
|
327 |
+
msgstr "WooCommerce"
|
328 |
+
|
329 |
+
#: includes/class-yith-system-status.php:342
|
330 |
+
msgid "Warning!"
|
331 |
+
msgstr "Waarschuwing!"
|
332 |
+
|
333 |
+
#. translators: %1$s open link tag, %2$s open link tag
|
334 |
+
#: includes/class-yith-system-status.php:346
|
335 |
+
msgid ""
|
336 |
+
"The system check has detected some compatibility issues on your installation."
|
337 |
+
"%1$sClick here%2$s to know more"
|
338 |
+
msgstr ""
|
339 |
+
"Het systeem heeft enkele compatibiliteitsproblemen gevonden op uw "
|
340 |
+
"installatie.%1$sklik hier%2$s om meer te weten te komen"
|
341 |
+
|
342 |
+
#: includes/class-yith-system-status.php:496
|
343 |
+
msgid "Enabled"
|
344 |
+
msgstr "Ingeschakeld"
|
345 |
+
|
346 |
+
#: includes/class-yith-system-status.php:496
|
347 |
+
msgid "Disabled"
|
348 |
+
msgstr "Uitgeschakeld"
|
349 |
+
|
350 |
+
#: includes/class-yith-system-status.php:501
|
351 |
+
msgid "N/A"
|
352 |
+
msgstr "N.v.t"
|
353 |
+
|
354 |
+
#. translators: %1$s plugin name, %2$s requirement name
|
355 |
+
#: includes/class-yith-system-status.php:528
|
356 |
+
msgid "%1$s needs %2$s enabled"
|
357 |
+
msgstr "%1$s heeft nodig %2$s ingeschakeld"
|
358 |
+
|
359 |
+
#. translators: %1$s plugin name, %2$s required memory amount
|
360 |
+
#: includes/class-yith-system-status.php:531
|
361 |
+
msgid "%1$s needs at least %2$s of available memory"
|
362 |
+
msgstr "%1$ss heeft ten minste %2$s beschikbaar geheugen nodig"
|
363 |
+
|
364 |
+
#. translators: %1$s plugin name, %2$s version number
|
365 |
+
#: includes/class-yith-system-status.php:534
|
366 |
+
msgid "%1$s needs at least %2$s version"
|
367 |
+
msgstr "%1$s heeft minstens %2$s versie nodig"
|
368 |
+
|
369 |
+
#: includes/class-yith-system-status.php:558
|
370 |
+
msgid ""
|
371 |
+
"Update it to the latest version in order to benefit of all new features and "
|
372 |
+
"security updates."
|
373 |
+
msgstr ""
|
374 |
+
"Bijwerken naar de laatste versie, om te profiteren van alle nieuwe opties en "
|
375 |
+
"veiligheidsupdates."
|
376 |
+
|
377 |
+
#: includes/class-yith-system-status.php:562
|
378 |
+
#: includes/class-yith-system-status.php:568
|
379 |
+
msgid "Contact your hosting company in order to update it."
|
380 |
+
msgstr "Neem contact op met uw hosting provider om het bij te werken."
|
381 |
+
|
382 |
+
#: includes/class-yith-system-status.php:566
|
383 |
+
msgid "Contact your hosting company in order to install it."
|
384 |
+
msgstr "Neem contact op met je hostingbedrijf om het te installeren."
|
385 |
+
|
386 |
+
#. translators: %1$s code, %2$s file name
|
387 |
+
#: includes/class-yith-system-status.php:573
|
388 |
+
msgid "Remove %1$s from %2$s file"
|
389 |
+
msgstr "Verwijder %1$s uit %2$s bestand"
|
390 |
+
|
391 |
+
#: includes/class-yith-system-status.php:581
|
392 |
+
msgid "Contact your hosting company in order to enable it."
|
393 |
+
msgstr "Neem contact op met uw hosting provider om het in te schakelen."
|
394 |
+
|
395 |
+
#. translators: %1$s opening link tag, %2$s closing link tag
|
396 |
+
#: includes/class-yith-system-status.php:585
|
397 |
+
#: includes/class-yith-system-status.php:608
|
398 |
+
msgid ""
|
399 |
+
"Read more %1$shere%2$s or contact your hosting company in order to increase "
|
400 |
+
"it."
|
401 |
+
msgstr ""
|
402 |
+
"Lees %1$s hier%2$s meer, of neem contact op met uw hostingmaatschappij om "
|
403 |
+
"het te verhogen."
|
404 |
+
|
405 |
+
#. translators: %s recommended memory amount
|
406 |
+
#: includes/class-yith-system-status.php:605
|
407 |
+
msgid ""
|
408 |
+
"For optimal functioning of our plugins, we suggest setting at least %s of "
|
409 |
+
"available memory"
|
410 |
+
msgstr ""
|
411 |
+
"Om de plugins optimaal te laten functioneren, adviseren wij minstens %s "
|
412 |
+
"beschikbaar geheugen"
|
413 |
+
|
414 |
+
#. translators: %1$s TLS label, %2$s cURL label
|
415 |
+
#: includes/class-yith-system-status.php:613
|
416 |
+
msgid ""
|
417 |
+
"The system check cannot determine which %1$s version is installed because "
|
418 |
+
"%2$s module is disabled. Ask your hosting company to enable it."
|
419 |
+
msgstr ""
|
420 |
+
"We kunnen niet bepalen welke %1$s versie is geïnstalleerd omdat %2$s de "
|
421 |
+
"module is uitgeschakeld. Vraag je hostingmaatschappij om het in te schakelen."
|
422 |
+
|
423 |
+
#. translators: %1$s TLS label
|
424 |
+
#: includes/class-yith-system-status.php:616
|
425 |
+
msgid ""
|
426 |
+
"The system check cannot determine which %1$s version is installed due to a "
|
427 |
+
"connection issue between your site and our server."
|
428 |
+
msgstr ""
|
429 |
+
"De systeemcontrole kan niet bepalen welke versie van %1$s is geïnstalleerd "
|
430 |
+
"vanwege een verbindingsprobleem tussen je site en onze server."
|
431 |
+
|
432 |
+
#: templates/bh-onboarding/onboarding-tabs.php:63
|
433 |
+
msgid "Save"
|
434 |
+
msgstr ""
|
435 |
+
|
436 |
+
#: templates/fields/ajax-customers.php:41
|
437 |
+
msgid "Search for a customer..."
|
438 |
+
msgstr ""
|
439 |
+
|
440 |
+
#. translators: 1. user display name; 2. user ID; 3. user email.
|
441 |
+
#: templates/fields/ajax-customers.php:68
|
442 |
+
#: templates/fields/ajax-customers.php:79
|
443 |
+
msgid "%1$s (#%2$s – %3$s)"
|
444 |
+
msgstr "%1$s (#%2$s – %3$s)"
|
445 |
+
|
446 |
+
#: templates/fields/ajax-posts.php:41
|
447 |
+
msgid "Search for a post..."
|
448 |
+
msgstr ""
|
449 |
+
|
450 |
+
#: templates/fields/ajax-products.php:16
|
451 |
+
msgid "Search for a product..."
|
452 |
+
msgstr ""
|
453 |
+
|
454 |
+
#: templates/fields/ajax-terms.php:41
|
455 |
+
msgid "Search for a category..."
|
456 |
+
msgstr ""
|
457 |
+
|
458 |
+
#: templates/fields/customtabs.php:17
|
459 |
+
msgid "Close all"
|
460 |
+
msgstr "Sluit allen"
|
461 |
+
|
462 |
+
#: templates/fields/customtabs.php:17
|
463 |
+
msgid "Expand all"
|
464 |
+
msgstr "Open allen"
|
465 |
+
|
466 |
+
#: templates/fields/customtabs.php:25 templates/fields/customtabs.php:68
|
467 |
+
msgid "Remove"
|
468 |
+
msgstr "Verwijderen"
|
469 |
+
|
470 |
+
#: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
|
471 |
+
msgid "Name"
|
472 |
+
msgstr "Name"
|
473 |
+
|
474 |
+
#: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
|
475 |
+
msgid "Value"
|
476 |
+
msgstr "Waarde"
|
477 |
+
|
478 |
+
#: templates/fields/customtabs.php:41 templates/fields/customtabs.php:82
|
479 |
+
msgid "Content of the tab. (HTML is supported)"
|
480 |
+
msgstr "Inhoud van het tabblad. (HTML wordt ondersteund)"
|
481 |
+
|
482 |
+
#: templates/fields/customtabs.php:52
|
483 |
+
msgid "Add custom product tab"
|
484 |
+
msgstr "Aangepaste product tabblad toevoegen"
|
485 |
+
|
486 |
+
#: templates/fields/customtabs.php:93
|
487 |
+
msgid "Do you want to remove the custom tab?"
|
488 |
+
msgstr "Wil je dit aangepaste tabblad verwijderen?"
|
489 |
+
|
490 |
+
#: templates/fields/date-format.php:65
|
491 |
+
msgid "Custom:"
|
492 |
+
msgstr "Aangepast:"
|
493 |
+
|
494 |
+
#: templates/fields/date-format.php:70
|
495 |
+
msgid "Preview:"
|
496 |
+
msgstr "Voorbeeld:"
|
497 |
+
|
498 |
+
#: templates/fields/icons.php:78
|
499 |
+
msgid "Set Default"
|
500 |
+
msgstr "Op standaard instellen"
|
501 |
+
|
502 |
+
#: templates/fields/image-gallery.php:29 templates/fields/image-gallery.php:40
|
503 |
+
msgid "Delete image"
|
504 |
+
msgstr "Afbeelding verwijderen"
|
505 |
+
|
506 |
+
#: templates/fields/image-gallery.php:37
|
507 |
+
msgid "Add Images to Gallery"
|
508 |
+
msgstr "Afbeeldingen toevoegen aan galerij"
|
509 |
+
|
510 |
+
#: templates/fields/image-gallery.php:38
|
511 |
+
msgid "Add to gallery"
|
512 |
+
msgstr "Aan galerij toevoegen"
|
513 |
+
|
514 |
+
#: templates/fields/image-gallery.php:39
|
515 |
+
msgid "Add images"
|
516 |
+
msgstr "Voeg images toe"
|
517 |
+
|
518 |
+
#: templates/fields/image-gallery.php:41
|
519 |
+
msgid "Delete"
|
520 |
+
msgstr "Verwijderen"
|
521 |
+
|
522 |
+
#: templates/fields/select-buttons.php:19
|
523 |
+
msgid "Add All"
|
524 |
+
msgstr "Allen toevoegen"
|
525 |
+
|
526 |
+
#: templates/fields/select-buttons.php:20
|
527 |
+
msgid "Remove All"
|
528 |
+
msgstr "Allen verwijderen"
|
529 |
+
|
530 |
+
#: templates/fields/sidebars.php:20
|
531 |
+
msgid "Left sidebar"
|
532 |
+
msgstr "Linker sidebar"
|
533 |
+
|
534 |
+
#: templates/fields/sidebars.php:23
|
535 |
+
msgid "Right sidebar"
|
536 |
+
msgstr "Rechter sidebar"
|
537 |
+
|
538 |
+
#: templates/fields/sidebars.php:26 templates/fields/sidebars.php:29
|
539 |
+
msgid "No sidebar"
|
540 |
+
msgstr "Geen sidebar"
|
541 |
+
|
542 |
+
#: templates/fields/sidebars.php:39
|
543 |
+
msgid "Left Sidebar"
|
544 |
+
msgstr "Linker sidebar"
|
545 |
+
|
546 |
+
#: templates/fields/sidebars.php:41 templates/fields/sidebars.php:56
|
547 |
+
msgid "Choose a sidebar"
|
548 |
+
msgstr "Kies een sidebar"
|
549 |
+
|
550 |
+
#: templates/fields/sidebars.php:54
|
551 |
+
msgid "Right Sidebar"
|
552 |
+
msgstr "Rechter sidebar"
|
553 |
+
|
554 |
+
#: templates/fields/upload.php:34
|
555 |
+
#: templates/panel/woocommerce/woocommerce-upload.php:37
|
556 |
+
msgid "Upload"
|
557 |
+
msgstr "Upload"
|
558 |
+
|
559 |
+
#: templates/fields/upload.php:39
|
560 |
+
msgid "Reset"
|
561 |
+
msgstr "Resetten"
|
562 |
+
|
563 |
+
#. translators: %s is the plugin version.
|
564 |
+
#: templates/panel/welcome-modals/update.php:34
|
565 |
+
msgid "is successfully updated to version %s."
|
566 |
+
msgstr ""
|
567 |
+
|
568 |
+
#. translators: %s is the plugin version.
|
569 |
+
#: templates/panel/welcome-modals/update.php:44
|
570 |
+
msgid "What's new in version %s"
|
571 |
+
msgstr ""
|
572 |
+
|
573 |
+
#: templates/panel/welcome-modals/update.php:49
|
574 |
+
msgid "Check the changelog >"
|
575 |
+
msgstr ""
|
576 |
+
|
577 |
+
#: templates/panel/welcome-modals/update.php:64
|
578 |
+
#: templates/panel/welcome-modals/welcome.php:60
|
579 |
+
msgid "Got it, close this window"
|
580 |
+
msgstr ""
|
581 |
+
|
582 |
+
#: templates/panel/welcome-modals/welcome.php:30
|
583 |
+
msgid "Thank you for using our plugin"
|
584 |
+
msgstr ""
|
585 |
+
|
586 |
+
#. translators: %s is the number of steps.
|
587 |
+
#: templates/panel/welcome-modals/welcome.php:45
|
588 |
+
msgid "Start with these %s steps:"
|
589 |
+
msgstr ""
|
590 |
+
|
591 |
+
#: templates/panel/woocommerce/woocommerce-form.php:29
|
592 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
593 |
+
msgid "Save Options"
|
594 |
+
msgstr "Opties opslaan"
|
595 |
+
|
596 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
597 |
+
msgid "Options Saved"
|
598 |
+
msgstr "Opties opgeslagen"
|
599 |
+
|
600 |
+
#: templates/panel/woocommerce/woocommerce-form.php:43
|
601 |
+
msgid "Reset Defaults"
|
602 |
+
msgstr "Reset Standaard instellingen"
|
603 |
+
|
604 |
+
#: templates/sysinfo/system-information-panel.php:12
|
605 |
+
msgid "PHPInfo"
|
606 |
+
msgstr "PHPInfo"
|
607 |
+
|
608 |
+
#: templates/sysinfo/system-information-panel.php:13
|
609 |
+
#: templates/sysinfo/tabs/error-log.php:25
|
610 |
+
msgid "Log Files"
|
611 |
+
msgstr "Log bestanden"
|
612 |
+
|
613 |
+
#: templates/sysinfo/system-information-panel.php:22
|
614 |
+
msgid "YITH System Information"
|
615 |
+
msgstr "YITH Systeem Informatie"
|
616 |
+
|
617 |
+
#: templates/sysinfo/tabs/error-log.php:13
|
618 |
+
msgid "WP debug.log file"
|
619 |
+
msgstr "WP debug.log bestand"
|
620 |
+
|
621 |
+
#: templates/sysinfo/tabs/error-log.php:18
|
622 |
+
msgid "PHP error_log file"
|
623 |
+
msgstr "PHP error_log bestand"
|
624 |
+
|
625 |
+
#: templates/sysinfo/tabs/error-log.php:60
|
626 |
+
msgid "Download"
|
627 |
+
msgstr "Download"
|
628 |
+
|
629 |
+
#: templates/sysinfo/tabs/error-log.php:73
|
630 |
+
msgid "The file size exceeds 8 megabytes so it must be downloaded"
|
631 |
+
msgstr ""
|
632 |
+
"De bestandsgrootte overschrijd 8 megabytes, dus het moet worden gedownload "
|
633 |
+
|
634 |
+
#. translators: %s file name.
|
635 |
+
#: templates/sysinfo/tabs/error-log.php:97
|
636 |
+
msgid ""
|
637 |
+
"No Log file available. Enable the WordPress debug by adding this in the %s "
|
638 |
+
"file of your installation"
|
639 |
+
msgstr ""
|
640 |
+
"Geen log bestand beschikbaar. WordPress debug inschakelen door dit bestand "
|
641 |
+
"toe te voegen aan het %s bestand van je installatie "
|
642 |
+
|
643 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
644 |
+
msgid "Copied!"
|
645 |
+
msgstr "Gekopieerd!"
|
646 |
+
|
647 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
648 |
+
msgid "Copy Code"
|
649 |
+
msgstr "Code kopiëren"
|
650 |
+
|
651 |
+
#: templates/sysinfo/tabs/main.php:17
|
652 |
+
msgid "Site Info"
|
653 |
+
msgstr "Site informatie"
|
654 |
+
|
655 |
+
#: templates/sysinfo/tabs/main.php:22
|
656 |
+
msgid "Site URL"
|
657 |
+
msgstr "Site URL"
|
658 |
+
|
659 |
+
#: templates/sysinfo/tabs/main.php:31
|
660 |
+
msgid "Output IP Address"
|
661 |
+
msgstr "Output IP Adres"
|
662 |
+
|
663 |
+
#: templates/sysinfo/tabs/main.php:39
|
664 |
+
msgid "Defined WP_CACHE"
|
665 |
+
msgstr "Gedefinieerde WP_CACHE"
|
666 |
+
|
667 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
668 |
+
msgid "Yes"
|
669 |
+
msgstr "Ja"
|
670 |
+
|
671 |
+
#: templates/sysinfo/tabs/main.php:47
|
672 |
+
msgid "External object cache"
|
673 |
+
msgstr "Externe object cache"
|
674 |
+
|
675 |
+
#: templates/sysinfo/tabs/main.php:55
|
676 |
+
msgid "YITH Plugin Framework Version"
|
677 |
+
msgstr "YITH Plugin Framework Versie"
|
678 |
+
|
679 |
+
#. translators: %s is the name of the plugin that is loading the framework.
|
680 |
+
#: templates/sysinfo/tabs/main.php:64
|
681 |
+
msgid "loaded by %s"
|
682 |
+
msgstr "geladen door %s"
|
683 |
+
|
684 |
+
#: templates/sysinfo/tabs/main.php:73
|
685 |
+
msgid "Plugins Requirements"
|
686 |
+
msgstr "Plugin benodigdheden"
|
687 |
+
|
688 |
+
#: templates/sysinfo/tabs/main.php:108
|
689 |
+
msgid "Database Info"
|
690 |
+
msgstr "Database Info"
|
691 |
+
|
692 |
+
#: templates/sysinfo/tabs/main.php:113
|
693 |
+
msgid "MySQL version"
|
694 |
+
msgstr "MySQL versie"
|
695 |
+
|
696 |
+
#. Translators: %s: Codex link.
|
697 |
+
#: templates/sysinfo/tabs/main.php:123
|
698 |
+
msgid "WordPress recommends a minimum MySQL version of 5.6. See: %s"
|
699 |
+
msgstr "WordPress raadt een minimale MySQL versie aan van 5.6. Bekijk: %s"
|
700 |
+
|
701 |
+
#: templates/sysinfo/tabs/main.php:123
|
702 |
+
msgid "WordPress requirements"
|
703 |
+
msgstr "WordPress vereisten"
|
704 |
+
|
705 |
+
#: templates/sysinfo/tabs/main.php:130
|
706 |
+
msgid "Total Database Size"
|
707 |
+
msgstr "Totale Database grootte"
|
708 |
+
|
709 |
+
#: templates/sysinfo/tabs/main.php:138
|
710 |
+
msgid "Database Data Size"
|
711 |
+
msgstr "Database Data grootte"
|
712 |
+
|
713 |
+
#: templates/sysinfo/tabs/main.php:146
|
714 |
+
msgid "Database Index Size"
|
715 |
+
msgstr "Database Index grootte"
|
716 |
+
|
717 |
+
#: templates/sysinfo/tabs/main.php:154
|
718 |
+
msgid "Database Free Size"
|
719 |
+
msgstr "Database gratis grootte"
|
720 |
+
|
721 |
+
#. Translators: %1$f: Table size, %2$f: Index size, %3$f: Free size, %4$s
|
722 |
+
#. Engine.
|
723 |
+
#: templates/sysinfo/tabs/main.php:168
|
724 |
+
msgid "Data: %1$.2fMB | Index: %2$.2fMB | Free: %3$.2fMB | Engine: %4$s"
|
725 |
+
msgstr "Data: %1$.2fMB | Index: %2$.2fMB | Free: %3$.2fMB | Engine: %4$s"
|
726 |
+
|
727 |
+
#. translators: %s is the title of the post object.
|
728 |
+
#: yit-functions.php:1938
|
729 |
+
msgid "Are you sure you want to move \"%s\" to trash?"
|
730 |
+
msgstr "Weet je zeker dat je \"%s\" naar de prullenbak wilt verplaatsen?"
|
731 |
+
|
732 |
+
#. translators: %s is the title of the post object.
|
733 |
+
#: yit-functions.php:1940 yit-functions.php:2100
|
734 |
+
msgid "Are you sure you want to delete \"%s\"?"
|
735 |
+
msgstr "Weet je zeker dat je \"%s\" wilt verwijderen?"
|
736 |
+
|
737 |
+
#: yit-functions.php:2038 yit-functions.php:2046 yit-functions.php:2163
|
738 |
+
msgid "Further actions"
|
739 |
+
msgstr "Verdere acties"
|
740 |
+
|
741 |
+
#: yit-plugin.php:233
|
742 |
+
msgid "License"
|
743 |
+
msgstr "Licentie"
|
744 |
+
|
745 |
+
#. translators: 1. Plugin(s) name(s).
|
746 |
+
#: yit-plugin.php:272
|
747 |
+
msgid ""
|
748 |
+
"%s was deactivated as you're running an higher tier version of the same "
|
749 |
+
"plugin."
|
750 |
+
msgid_plural ""
|
751 |
+
"%s were deactivated as you're running higher tier versions of the same "
|
752 |
+
"plugins."
|
753 |
+
msgstr[0] ""
|
754 |
+
msgstr[1] ""
|
755 |
+
|
756 |
+
#. Author of the plugin/theme
|
757 |
+
msgid "YITH"
|
758 |
+
msgstr "YITH"
|
759 |
+
|
760 |
+
#. translators: %s it the Elementor Widget title.
|
761 |
+
#: includes/builders/elementor/class-yith-elementor-widget.php:252
|
762 |
+
msgctxt "Elementor Widget - section title"
|
763 |
+
msgid "%s - Options"
|
764 |
+
msgstr "%s - Opties"
|
765 |
+
|
766 |
+
#: includes/builders/gutenberg/class-yith-gutenberg.php:152
|
767 |
+
msgctxt "[gutenberg]: Category Name"
|
768 |
+
msgid "YITH"
|
769 |
+
msgstr "YITH"
|
770 |
+
|
771 |
+
#: includes/class-yit-assets.php:136
|
772 |
+
msgctxt "Button text"
|
773 |
+
msgid "Confirm"
|
774 |
+
msgstr "Bevestigen"
|
775 |
+
|
776 |
+
#: includes/class-yit-assets.php:137
|
777 |
+
msgctxt "Button text"
|
778 |
+
msgid "Cancel"
|
779 |
+
msgstr "Annuleren"
|
780 |
+
|
781 |
+
#: includes/class-yit-assets.php:150 yit-functions.php:2009
|
782 |
+
msgctxt "Trash confirmation action"
|
783 |
+
msgid "Yes, move to trash"
|
784 |
+
msgstr "Ja, verplaatsen naar prullenbak"
|
785 |
+
|
786 |
+
#: includes/class-yit-assets.php:154 yit-functions.php:2027
|
787 |
+
#: yit-functions.php:2154
|
788 |
+
msgctxt "Delete confirmation action"
|
789 |
+
msgid "Yes, delete"
|
790 |
+
msgstr "Ja, verwijderen"
|
791 |
+
|
792 |
+
#. translators: 1. Plugin name.
|
793 |
+
#: includes/class-yit-plugin-panel.php:804
|
794 |
+
msgctxt "Help tab default title"
|
795 |
+
msgid "Thank you for purchasing %s!"
|
796 |
+
msgstr "Bedankt voor het kopen van %s!"
|
797 |
+
|
798 |
+
#: includes/class-yit-plugin-panel.php:804
|
799 |
+
msgctxt "Help tab default title"
|
800 |
+
msgid "Thank you for using %s!"
|
801 |
+
msgstr ""
|
802 |
+
|
803 |
+
#: includes/class-yit-plugin-panel.php:812
|
804 |
+
msgctxt "Help tab default description"
|
805 |
+
msgid ""
|
806 |
+
"We want to help you enjoy a wonderful experience with all of our products."
|
807 |
+
msgstr ""
|
808 |
+
|
809 |
+
#: includes/class-yit-plugin-panel.php:863
|
810 |
+
msgctxt "Premium tab name"
|
811 |
+
msgid "Get premium"
|
812 |
+
msgstr "Neem premium"
|
813 |
+
|
814 |
+
#: includes/class-yit-plugin-panel.php:875
|
815 |
+
msgctxt "Help tab name"
|
816 |
+
msgid "Help"
|
817 |
+
msgstr "Help"
|
818 |
+
|
819 |
+
#: includes/class-yith-dashboard.php:96
|
820 |
+
msgctxt "Plugin FW"
|
821 |
+
msgid "View Changelog"
|
822 |
+
msgstr "Bekijk wijzigingenlogboek"
|
823 |
+
|
824 |
+
#: includes/class-yith-dashboard.php:97
|
825 |
+
msgctxt "Plugin FW"
|
826 |
+
msgid "Latest update released on"
|
827 |
+
msgstr "Laatste update uitgebracht op"
|
828 |
+
|
829 |
+
#: includes/class-yith-dashboard.php:137
|
830 |
+
msgctxt "Button label"
|
831 |
+
msgid "Close"
|
832 |
+
msgstr "Sluiten"
|
833 |
+
|
834 |
+
#: includes/privacy/class-yith-privacy.php:61
|
835 |
+
msgctxt "Privacy Policy Guide Title"
|
836 |
+
msgid "YITH Plugins"
|
837 |
+
msgstr "YITH Plugins"
|
838 |
+
|
839 |
+
#: includes/privacy/class-yith-privacy.php:93
|
840 |
+
msgctxt "Privacy Policy Content"
|
841 |
+
msgid ""
|
842 |
+
"This sample language includes the basics around what personal data your "
|
843 |
+
"store may be collecting, storing and sharing, as well as who may have access "
|
844 |
+
"to that data. Depending on what settings are enabled and which additional "
|
845 |
+
"plugins are used, the specific information shared by your store will vary. "
|
846 |
+
"We recommend consulting with a lawyer when deciding what information to "
|
847 |
+
"disclose on your privacy policy."
|
848 |
+
msgstr ""
|
849 |
+
"Dit geschreven voorbeeld bevat de basis rondom welke persoonlijke gegevens "
|
850 |
+
"je winkel mag verzamelen, bewaren en delen, en wie toegang heeft tot deze "
|
851 |
+
"gegevens. Afhankelijk van welke instellingen zijn ingeschakeld en welke "
|
852 |
+
"aanvullende plugins worden gebruikt, zal de informatie die wordt gedeeld "
|
853 |
+
"door je winkel variëren. We raden aan om een advocaat te raadplegen wanneer "
|
854 |
+
"je besluit je privacy beleid op te stellen."
|
855 |
+
|
856 |
+
#: includes/privacy/class-yith-privacy.php:97
|
857 |
+
msgctxt "Privacy Policy Content"
|
858 |
+
msgid "What we collect and store"
|
859 |
+
msgstr "Wat we verzamelen en bewaren"
|
860 |
+
|
861 |
+
#: includes/privacy/class-yith-privacy.php:100
|
862 |
+
msgctxt "Privacy Policy Content"
|
863 |
+
msgid "Who on our team has access"
|
864 |
+
msgstr "Wie van ons team heeft toegang"
|
865 |
+
|
866 |
+
#: includes/privacy/class-yith-privacy.php:103
|
867 |
+
msgctxt "Privacy Policy Content"
|
868 |
+
msgid "What we share with others"
|
869 |
+
msgstr "Wat wij delen met anderen"
|
870 |
+
|
871 |
+
#: includes/privacy/class-yith-privacy.php:106
|
872 |
+
msgctxt "Privacy Policy Content"
|
873 |
+
msgid "Payments"
|
874 |
+
msgstr "Betalingen"
|
875 |
+
|
876 |
+
#: templates/fields/copy-to-clipboard.php:41
|
877 |
+
msgctxt "Copy-to-clipboard message"
|
878 |
+
msgid "Copied!"
|
879 |
+
msgstr "Gekopieerd!"
|
880 |
+
|
881 |
+
#: templates/fields/copy-to-clipboard.php:45
|
882 |
+
msgctxt "Copy-to-clipboard button text"
|
883 |
+
msgid "Copy"
|
884 |
+
msgstr "Kopieer"
|
885 |
+
|
886 |
+
#: templates/fields/dimensions.php:13
|
887 |
+
msgctxt "Position in the \"Dimensions\" field"
|
888 |
+
msgid "Top"
|
889 |
+
msgstr "Boven"
|
890 |
+
|
891 |
+
#: templates/fields/dimensions.php:14
|
892 |
+
msgctxt "Position in the \"Dimensions\" field"
|
893 |
+
msgid "Right"
|
894 |
+
msgstr "Rechts"
|
895 |
+
|
896 |
+
#: templates/fields/dimensions.php:15
|
897 |
+
msgctxt "Position in the \"Dimensions\" field"
|
898 |
+
msgid "Bottom"
|
899 |
+
msgstr "Onder"
|
900 |
+
|
901 |
+
#: templates/fields/dimensions.php:16
|
902 |
+
msgctxt "Position in the \"Dimensions\" field"
|
903 |
+
msgid "Left"
|
904 |
+
msgstr "Links"
|
905 |
+
|
906 |
+
#: templates/fields/dimensions.php:94
|
907 |
+
msgctxt "Tooltip in the \"Dimensions\" field"
|
908 |
+
msgid "Link values together"
|
909 |
+
msgstr "Waarden aan elkaar koppelen"
|
910 |
+
|
911 |
+
#: templates/fields/image-dimensions.php:18
|
912 |
+
msgctxt "Image width field label"
|
913 |
+
msgid "Width"
|
914 |
+
msgstr "Breedte"
|
915 |
+
|
916 |
+
#: templates/fields/image-dimensions.php:23
|
917 |
+
msgctxt "Image height field label"
|
918 |
+
msgid "Height"
|
919 |
+
msgstr "Hoogte"
|
920 |
+
|
921 |
+
#: templates/fields/onoff.php:28
|
922 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
923 |
+
msgid "YES"
|
924 |
+
msgstr "JA"
|
925 |
+
|
926 |
+
#: templates/fields/onoff.php:29
|
927 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
928 |
+
msgid "NO"
|
929 |
+
msgstr "NEE"
|
930 |
+
|
931 |
+
#. translators: 1. Url to EN playlist.
|
932 |
+
#: templates/panel/help-tab.php:89
|
933 |
+
msgctxt "Help tab view all video link"
|
934 |
+
msgid ""
|
935 |
+
"Check the full <a href=\"%s\" target=\"_blank\">Playlist on Youtube</a> to "
|
936 |
+
"learn more >"
|
937 |
+
msgstr ""
|
938 |
+
"Bekijk de volledige <a href=\"%s\" target=\"_blank\">Playlist op Youtube</a> "
|
939 |
+
"om meer te weten te komen >"
|
940 |
+
|
941 |
+
#: templates/panel/help-tab.php:96
|
942 |
+
msgctxt "Help tab Watch Videotutorials link"
|
943 |
+
msgid "Videos are also available in:"
|
944 |
+
msgstr "Videos zijn ook beschikbaar in:"
|
945 |
+
|
946 |
+
#: templates/panel/help-tab.php:126
|
947 |
+
msgctxt "Help tab Read Documentation link"
|
948 |
+
msgid "Read the documentation"
|
949 |
+
msgstr "Lees de documentatie"
|
950 |
+
|
951 |
+
#: templates/panel/help-tab.php:129
|
952 |
+
msgctxt "Help tab Read Documentation link"
|
953 |
+
msgid "to learn how the plugin works from the basics."
|
954 |
+
msgstr ""
|
955 |
+
|
956 |
+
#: templates/panel/help-tab.php:139
|
957 |
+
msgctxt "Help tab Watch video tutorials link"
|
958 |
+
msgid "Watch our video tutorials"
|
959 |
+
msgstr ""
|
960 |
+
|
961 |
+
#: templates/panel/help-tab.php:142
|
962 |
+
msgctxt "Help tab Watch video tutorials link"
|
963 |
+
msgid "to see some helpful use cases."
|
964 |
+
msgstr ""
|
965 |
+
|
966 |
+
#: templates/panel/help-tab.php:152
|
967 |
+
msgctxt "Help tab view FAQs link"
|
968 |
+
msgid "Check the FAQs"
|
969 |
+
msgstr "Check de FAQs"
|
970 |
+
|
971 |
+
#: templates/panel/help-tab.php:155
|
972 |
+
msgctxt "Help tab view FAQs link"
|
973 |
+
msgid "to find answers to your doubts."
|
974 |
+
msgstr ""
|
975 |
+
|
976 |
+
#: templates/panel/help-tab.php:170
|
977 |
+
msgctxt "Help tab FAQ title"
|
978 |
+
msgid "Last FAQs in our Help Center"
|
979 |
+
msgstr "Laatste FAQs in ons Help Center"
|
980 |
+
|
981 |
+
#: templates/panel/help-tab.php:184
|
982 |
+
msgctxt "Help tab FAQ link"
|
983 |
+
msgid "View all FAQs >"
|
984 |
+
msgstr "Bekijk alle FAQs >"
|
985 |
+
|
986 |
+
#: templates/panel/help-tab.php:193
|
987 |
+
msgctxt "Help tab submit ticket title"
|
988 |
+
msgid "Need help?"
|
989 |
+
msgstr "Hulp nodig?"
|
990 |
+
|
991 |
+
#: templates/panel/help-tab.php:196
|
992 |
+
msgctxt "Help tab submit ticket description"
|
993 |
+
msgid ""
|
994 |
+
"If you are experiencing any technical issues, ask for help from our "
|
995 |
+
"developers. Submit a ticket through our support desk and we will help you as "
|
996 |
+
"soon as possible."
|
997 |
+
msgstr ""
|
998 |
+
|
999 |
+
#: templates/panel/help-tab.php:204
|
1000 |
+
msgctxt "Help tab submit ticket button"
|
1001 |
+
msgid "Submit a ticket"
|
1002 |
+
msgstr "Verstuur een ticket"
|
1003 |
+
|
1004 |
+
#: templates/panel/help-tab.php:216 templates/panel/help-tab.php:218
|
1005 |
+
#: templates/panel/help-tab.php:223
|
1006 |
+
msgctxt "Help tab documentation"
|
1007 |
+
msgid "Read the plugin documentation"
|
1008 |
+
msgstr ""
|
1009 |
+
|
1010 |
+
#: templates/panel/help-tab.php:220
|
1011 |
+
msgctxt "Help tab documentation"
|
1012 |
+
msgid "to learn how it works from the basics."
|
1013 |
+
msgstr ""
|
1014 |
+
|
1015 |
+
#: templates/panel/help-tab.php:231 templates/panel/help-tab.php:233
|
1016 |
+
msgctxt "Help tab support"
|
1017 |
+
msgid "Need some help?"
|
1018 |
+
msgstr ""
|
1019 |
+
|
1020 |
+
#: templates/panel/help-tab.php:235
|
1021 |
+
msgctxt "Help tab support"
|
1022 |
+
msgid "From DIY to full-service help"
|
1023 |
+
msgstr ""
|
1024 |
+
|
1025 |
+
#: templates/panel/help-tab.php:238
|
1026 |
+
msgctxt "Help tab support"
|
1027 |
+
msgid ""
|
1028 |
+
"Call or chat 24/7 with our support agents, or let our experts build your "
|
1029 |
+
"site."
|
1030 |
+
msgstr ""
|
1031 |
+
|
1032 |
+
#: templates/panel/help-tab.php:241
|
1033 |
+
msgctxt "Help tab support"
|
1034 |
+
msgid "Yes, I need help"
|
1035 |
+
msgstr ""
|
1036 |
+
|
1037 |
+
#: templates/panel/premium-tab.php:30
|
1038 |
+
msgctxt "Premium Tab"
|
1039 |
+
msgid "Get the premium version to unlock advanced features"
|
1040 |
+
msgstr "Neem de premium versie om geavanceerde opties te deblokkeren"
|
1041 |
+
|
1042 |
+
#: templates/panel/premium-tab.php:34
|
1043 |
+
msgctxt "Premium Tab"
|
1044 |
+
msgid "Get premium"
|
1045 |
+
msgstr "Neem premium"
|
1046 |
+
|
1047 |
+
#: templates/panel/premium-tab.php:39
|
1048 |
+
msgctxt "Premium Tab"
|
1049 |
+
msgid "Plugin premium features images"
|
1050 |
+
msgstr "Plugin premium opties afbeeldingen"
|
1051 |
+
|
1052 |
+
#. translators: alt attribute of main image tag.
|
1053 |
+
#: templates/panel/premium-tab.php:51 templates/panel/premium-tab.php:58
|
1054 |
+
msgctxt "Premium Tab"
|
1055 |
+
msgid "And so much more!"
|
1056 |
+
msgstr "En zo veel meer!"
|
1057 |
+
|
1058 |
+
#: templates/panel/premium-tab.php:53
|
1059 |
+
msgctxt "Premium Tab"
|
1060 |
+
msgid "Check the premium features >"
|
1061 |
+
msgstr ""
|
1062 |
+
|
1063 |
+
#: templates/panel/premium-tab.php:60
|
1064 |
+
msgctxt "Premium Tab"
|
1065 |
+
msgid "Check the free vs premium features >"
|
1066 |
+
msgstr "Bekijk de gratis vs premium opties >"
|
1067 |
+
|
1068 |
+
#: templates/panel/premium-tab.php:65
|
1069 |
+
msgctxt "Premium Tab"
|
1070 |
+
msgid "Get the premium version"
|
1071 |
+
msgstr "Krijg de premium versie"
|
1072 |
+
|
1073 |
+
#: yit-functions.php:1952
|
1074 |
+
msgctxt "Post action"
|
1075 |
+
msgid "Preview"
|
1076 |
+
msgstr "Voorbeeld"
|
1077 |
+
|
1078 |
+
#: yit-functions.php:1961
|
1079 |
+
msgctxt "Post action"
|
1080 |
+
msgid "View"
|
1081 |
+
msgstr "Bekijken"
|
1082 |
+
|
1083 |
+
#: yit-functions.php:1972
|
1084 |
+
msgctxt "Post action"
|
1085 |
+
msgid "Edit"
|
1086 |
+
msgstr "Bewerken"
|
1087 |
+
|
1088 |
+
#: yit-functions.php:1980
|
1089 |
+
msgctxt "Post action"
|
1090 |
+
msgid "Duplicate"
|
1091 |
+
msgstr "Dupliceren"
|
1092 |
+
|
1093 |
+
#: yit-functions.php:1992
|
1094 |
+
msgctxt "Post action"
|
1095 |
+
msgid "Restore"
|
1096 |
+
msgstr "Herstellen"
|
1097 |
+
|
1098 |
+
#: yit-functions.php:2000
|
1099 |
+
msgctxt "Post action"
|
1100 |
+
msgid "Trash"
|
1101 |
+
msgstr "Prullenbak"
|
1102 |
+
|
1103 |
+
#: yit-functions.php:2017
|
1104 |
+
msgctxt "Post action"
|
1105 |
+
msgid "Delete Permanently"
|
1106 |
+
msgstr "Permanent verijwderen"
|
1107 |
+
|
1108 |
+
#: yit-functions.php:2114
|
1109 |
+
msgctxt "Term action"
|
1110 |
+
msgid "View"
|
1111 |
+
msgstr "Bekijken"
|
1112 |
+
|
1113 |
+
#: yit-functions.php:2124
|
1114 |
+
msgctxt "Term action"
|
1115 |
+
msgid "Edit"
|
1116 |
+
msgstr "Bewerken"
|
1117 |
+
|
1118 |
+
#: yit-functions.php:2132
|
1119 |
+
msgctxt "Term action"
|
1120 |
+
msgid "Duplicate"
|
1121 |
+
msgstr "Dupliceren"
|
1122 |
+
|
1123 |
+
#: yit-functions.php:2145
|
1124 |
+
msgctxt "Term action"
|
1125 |
+
msgid "Delete"
|
1126 |
+
msgstr "Verwijderen"
|
1127 |
+
|
1128 |
+
#: yit-plugin.php:85
|
1129 |
+
msgctxt "Plugin Row Meta"
|
1130 |
+
msgid "Live Demo"
|
1131 |
+
msgstr "Live Demo"
|
1132 |
+
|
1133 |
+
#: yit-plugin.php:89
|
1134 |
+
msgctxt "Plugin Row Meta"
|
1135 |
+
msgid "Documentation"
|
1136 |
+
msgstr "Documentatie"
|
1137 |
+
|
1138 |
+
#: yit-plugin.php:93
|
1139 |
+
msgctxt "Plugin Row Meta"
|
1140 |
+
msgid "Support"
|
1141 |
+
msgstr "Ondersteuning"
|
1142 |
+
|
1143 |
+
#: yit-plugin.php:97
|
1144 |
+
msgctxt "Plugin Row Meta"
|
1145 |
+
msgid "Premium version"
|
1146 |
+
msgstr "Premium versie"
|
1147 |
+
|
1148 |
+
#: yit-plugin.php:229
|
1149 |
+
msgctxt "Action links"
|
1150 |
+
msgid "Settings"
|
1151 |
+
msgstr "Instellingen"
|
plugin-fw/languages/yith-plugin-fw-ru_RU 2.mo
ADDED
Binary file
|
plugin-fw/languages/yith-plugin-fw-ru_RU 2.po
ADDED
@@ -0,0 +1,1157 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Translation of YITH Framework in Russian
|
2 |
+
# This file is distributed under the same license as the YITH Framework package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: YITH Framework\n"
|
6 |
+
"Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
|
7 |
+
"POT-Creation-Date: 2022-11-11 07:31:10+00:00\n"
|
8 |
+
"PO-Revision-Date: 2022-04-05 17:22:32+0000\n"
|
9 |
+
"Language: ru\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % "
|
14 |
+
"10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2);\n"
|
15 |
+
"X-Generator: GlotPress/3.0.0-alpha.2\n"
|
16 |
+
|
17 |
+
#: includes/class-yit-assets.php:148 yit-functions.php:2006
|
18 |
+
msgid "Confirm trash"
|
19 |
+
msgstr "Подтвердить корзину"
|
20 |
+
|
21 |
+
#: includes/class-yit-assets.php:149
|
22 |
+
msgid "Are you sure you want to trash the selected items?"
|
23 |
+
msgstr "Вы уверены, что хотите переместить в корзину выбранные элементы?"
|
24 |
+
|
25 |
+
#: includes/class-yit-assets.php:151 includes/class-yit-assets.php:155
|
26 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
27 |
+
#: yit-functions.php:2008 yit-functions.php:2026
|
28 |
+
msgid "No"
|
29 |
+
msgstr "Нет"
|
30 |
+
|
31 |
+
#: includes/class-yit-assets.php:152 yit-functions.php:2024
|
32 |
+
#: yit-functions.php:2152
|
33 |
+
msgid "Confirm delete"
|
34 |
+
msgstr "Подтвердите удаление"
|
35 |
+
|
36 |
+
#: includes/class-yit-assets.php:153
|
37 |
+
msgid "Are you sure you want to delete the selected items?"
|
38 |
+
msgstr "Вы уверены, что хотите удалить выбранные элементы?"
|
39 |
+
|
40 |
+
#: includes/class-yit-assets.php:153 yit-functions.php:1940
|
41 |
+
#: yit-functions.php:2100
|
42 |
+
msgid ""
|
43 |
+
"This action cannot be undone and you will not be able to recover this data."
|
44 |
+
msgstr "Это действие нельзя отменить, и вы не сможете восстановить эти данные."
|
45 |
+
|
46 |
+
#: includes/class-yit-assets.php:174
|
47 |
+
msgid "Clear"
|
48 |
+
msgstr "Очистить"
|
49 |
+
|
50 |
+
#: includes/class-yit-assets.php:175
|
51 |
+
msgid "Clear color"
|
52 |
+
msgstr "Очистить цвет"
|
53 |
+
|
54 |
+
#: includes/class-yit-assets.php:176
|
55 |
+
msgid "Default"
|
56 |
+
msgstr "По умолчанию"
|
57 |
+
|
58 |
+
#: includes/class-yit-assets.php:177
|
59 |
+
msgid "Select default color"
|
60 |
+
msgstr "Выберите цвет по умолчанию"
|
61 |
+
|
62 |
+
#: includes/class-yit-assets.php:178
|
63 |
+
msgid "Select Color"
|
64 |
+
msgstr "Выберите цвет"
|
65 |
+
|
66 |
+
#: includes/class-yit-assets.php:179
|
67 |
+
msgid "Color value"
|
68 |
+
msgstr "Цвет значения"
|
69 |
+
|
70 |
+
#: includes/class-yit-help-desk.php:152
|
71 |
+
msgid "There was an error with your request; please try again later."
|
72 |
+
msgstr ""
|
73 |
+
"При выполнении вашего запроса произошла ошибка; пожалуйста, повторите "
|
74 |
+
"попытку позже."
|
75 |
+
|
76 |
+
#: includes/class-yit-plugin-panel-woocommerce.php:437
|
77 |
+
msgid "The changes you have made will be lost if you leave this page."
|
78 |
+
msgstr ""
|
79 |
+
"Внесенные вами изменения будут потеряны, если вы покинете эту страницу."
|
80 |
+
|
81 |
+
#: includes/class-yit-plugin-panel.php:83
|
82 |
+
msgid "Plugin Settings"
|
83 |
+
msgstr "Настройки Плагина"
|
84 |
+
|
85 |
+
#: includes/class-yit-plugin-panel.php:84
|
86 |
+
msgid "Settings"
|
87 |
+
msgstr "Настройки"
|
88 |
+
|
89 |
+
#: includes/class-yit-plugin-panel.php:456
|
90 |
+
#: includes/class-yit-plugin-panel.php:459
|
91 |
+
msgid "How to install premium version"
|
92 |
+
msgstr "Как установить премиум версию"
|
93 |
+
|
94 |
+
#: includes/class-yit-plugin-panel.php:656
|
95 |
+
#: includes/class-yit-plugin-subpanel.php:133
|
96 |
+
msgid "Save Changes"
|
97 |
+
msgstr "Сохранить Изменения"
|
98 |
+
|
99 |
+
#: includes/class-yit-plugin-panel.php:664
|
100 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
101 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
102 |
+
msgid ""
|
103 |
+
"If you continue with this action, you will reset all options in this page."
|
104 |
+
msgstr ""
|
105 |
+
"Если вы продолжите это действие, вы сбросите все параметры на этой странице."
|
106 |
+
|
107 |
+
#: includes/class-yit-plugin-panel.php:664
|
108 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
109 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
110 |
+
msgid "Are you sure?"
|
111 |
+
msgstr "Вы уверены?"
|
112 |
+
|
113 |
+
#: includes/class-yit-plugin-panel.php:668
|
114 |
+
#: includes/class-yit-plugin-subpanel.php:143
|
115 |
+
msgid "Reset to default"
|
116 |
+
msgstr "Сброс до заводских настроек"
|
117 |
+
|
118 |
+
#: includes/class-yit-plugin-panel.php:1039
|
119 |
+
msgid "Read the <mark>plugin documentation</mark>"
|
120 |
+
msgstr ""
|
121 |
+
|
122 |
+
#: includes/class-yit-plugin-panel.php:1040
|
123 |
+
msgid "Learn what you can really do with this powerful tool"
|
124 |
+
msgstr ""
|
125 |
+
|
126 |
+
#: includes/class-yit-plugin-panel.php:1050
|
127 |
+
msgid "Watch our <mark>\"First Steps\" video</mark>"
|
128 |
+
msgstr ""
|
129 |
+
|
130 |
+
#: includes/class-yit-plugin-panel.php:1051
|
131 |
+
msgid "See how it works before you start using it"
|
132 |
+
msgstr ""
|
133 |
+
|
134 |
+
#: includes/class-yit-plugin-panel.php:1307
|
135 |
+
msgid ""
|
136 |
+
"The element you have entered already exists. Please, enter another name."
|
137 |
+
msgstr "Введенный вами элемент уже существует. Пожалуйста, введите другое имя."
|
138 |
+
|
139 |
+
#: includes/class-yit-plugin-panel.php:1308
|
140 |
+
msgid "Settings saved"
|
141 |
+
msgstr "Настройки сохранены"
|
142 |
+
|
143 |
+
#: includes/class-yit-plugin-panel.php:1309
|
144 |
+
msgid "Settings reset"
|
145 |
+
msgstr "Сбросить настройки"
|
146 |
+
|
147 |
+
#: includes/class-yit-plugin-panel.php:1310
|
148 |
+
msgid "Element deleted correctly."
|
149 |
+
msgstr "Элемент удален правильно."
|
150 |
+
|
151 |
+
#: includes/class-yit-plugin-panel.php:1311
|
152 |
+
#: includes/class-yit-plugin-panel.php:1312
|
153 |
+
msgid "Element updated correctly."
|
154 |
+
msgstr "Элемент обновлен правильно."
|
155 |
+
|
156 |
+
#: includes/class-yit-plugin-panel.php:1313
|
157 |
+
msgid "Database imported correctly."
|
158 |
+
msgstr "База данных импортирована правильно."
|
159 |
+
|
160 |
+
#: includes/class-yit-plugin-panel.php:1314
|
161 |
+
msgid "An error has occurred during import. Please try again."
|
162 |
+
msgstr "Во время импорта произошла ошибка. Пожалуйста, попробуйте еще раз."
|
163 |
+
|
164 |
+
#: includes/class-yit-plugin-panel.php:1315
|
165 |
+
msgid "The added file is not valid."
|
166 |
+
msgstr "Добавленный файл недействителен."
|
167 |
+
|
168 |
+
#: includes/class-yit-plugin-panel.php:1316
|
169 |
+
msgid "Sorry, import is disabled."
|
170 |
+
msgstr "Извините, импорт отключен."
|
171 |
+
|
172 |
+
#: includes/class-yit-plugin-panel.php:1317
|
173 |
+
msgid "Sorting successful."
|
174 |
+
msgstr "Сортировка выполнена успешно."
|
175 |
+
|
176 |
+
#: includes/class-yit-plugin-panel.php:1806
|
177 |
+
msgid "We need your support"
|
178 |
+
msgstr "Нам нужна ваша поддержка"
|
179 |
+
|
180 |
+
#: includes/class-yit-plugin-panel.php:1807
|
181 |
+
msgid "to keep updating and improving the plugin. Please,"
|
182 |
+
msgstr "чтобы продолжать обновлять и улучшать плагин. Пожалуйста,"
|
183 |
+
|
184 |
+
#: includes/class-yit-plugin-panel.php:1809
|
185 |
+
msgid "help us by leaving a good review"
|
186 |
+
msgstr "помогите нам, оставив хороший отзыв"
|
187 |
+
|
188 |
+
#: includes/class-yit-plugin-panel.php:1810
|
189 |
+
msgid ":) Thanks!"
|
190 |
+
msgstr ":) Благодарим!"
|
191 |
+
|
192 |
+
#: includes/class-yit-pointers.php:80
|
193 |
+
msgid "Plugins Activated"
|
194 |
+
msgstr "Плагины Активированы"
|
195 |
+
|
196 |
+
#: includes/class-yit-pointers.php:81
|
197 |
+
msgid ""
|
198 |
+
"From now on, you can find all plugin options in YITH menu. Plugin "
|
199 |
+
"customization settings will be available as a new entry in YITH menu."
|
200 |
+
msgstr ""
|
201 |
+
"Отныне все опции плагина можно найти в меню YITH. Настройки кастомизации "
|
202 |
+
"плагина будут доступны как новый пункт в меню YITH."
|
203 |
+
|
204 |
+
#. translators: 1. YITH site link; 2. WordPress site link.
|
205 |
+
#: includes/class-yit-pointers.php:84 includes/class-yit-pointers.php:100
|
206 |
+
msgid "Discover all our plugins available on: %1$s and %2$s"
|
207 |
+
msgstr "Откройте для себя все наши плагины, доступные на: %1$s и %2$s"
|
208 |
+
|
209 |
+
#: includes/class-yit-pointers.php:96
|
210 |
+
msgid "Plugins Upgraded"
|
211 |
+
msgstr "Плагины Обновлены"
|
212 |
+
|
213 |
+
#: includes/class-yit-pointers.php:97
|
214 |
+
msgid ""
|
215 |
+
"From now on, you can find the option panel of YITH plugins in YITH menu. "
|
216 |
+
"Every time one of our plugins is added, a new entry will be added to this "
|
217 |
+
"menu. For example, after the update, plugin options (such as for YITH "
|
218 |
+
"WooCommerce Wishlist, YITH WooCommerce Ajax Search, etc.) will be moved from "
|
219 |
+
"previous location to YITH menu."
|
220 |
+
msgstr ""
|
221 |
+
"С этого момента вы можете найти панель опций плагинов YITH в меню YITH. "
|
222 |
+
"Каждый раз, когда добавляется один из наших плагинов, в это меню будет "
|
223 |
+
"добавляться новый пункт. Например, после обновления, опции плагинов (такие "
|
224 |
+
"как для YITH WooCommerce Wishlist, YITH WooCommerce Ajax Search и т.д.) "
|
225 |
+
"будут перемещены из предыдущего места в меню YITH."
|
226 |
+
|
227 |
+
#: includes/class-yith-bh-onboarding.php:85
|
228 |
+
msgid "It is not possible save the options"
|
229 |
+
msgstr ""
|
230 |
+
|
231 |
+
#: includes/class-yith-dashboard.php:35
|
232 |
+
msgid "YITH Latest Updates"
|
233 |
+
msgstr "Последние обновления YITH"
|
234 |
+
|
235 |
+
#: includes/class-yith-dashboard.php:36
|
236 |
+
msgid "Latest news from YITH Blog"
|
237 |
+
msgstr "Последние новости из блога YITH"
|
238 |
+
|
239 |
+
#: includes/class-yith-dashboard.php:56
|
240 |
+
msgid "RSS Error:"
|
241 |
+
msgstr "Ошибка RSS:"
|
242 |
+
|
243 |
+
#: includes/class-yith-dashboard.php:63
|
244 |
+
msgid ""
|
245 |
+
"An error has occurred, which probably means the feed is down. Try again "
|
246 |
+
"later."
|
247 |
+
msgstr ""
|
248 |
+
"Произошла ошибка, которая, вероятно, означает, что канал не работает. "
|
249 |
+
"Повторите попытку позже."
|
250 |
+
|
251 |
+
#. translators: %s is the name of the post type (example Back to "Membership
|
252 |
+
#. Plans").
|
253 |
+
#: includes/class-yith-post-type-admin.php:286
|
254 |
+
msgid "Back to \"%s\""
|
255 |
+
msgstr "Вернуться к \"%s\""
|
256 |
+
|
257 |
+
#: includes/class-yith-post-type-admin.php:286
|
258 |
+
msgid "Back to the list"
|
259 |
+
msgstr "Вернуться к списку"
|
260 |
+
|
261 |
+
#: includes/class-yith-system-status.php:110
|
262 |
+
msgid "WordPress Version"
|
263 |
+
msgstr "Версия WordPress"
|
264 |
+
|
265 |
+
#: includes/class-yith-system-status.php:111
|
266 |
+
msgid "WooCommerce Version"
|
267 |
+
msgstr "Версия WooCommerce"
|
268 |
+
|
269 |
+
#: includes/class-yith-system-status.php:112
|
270 |
+
msgid "Available Memory"
|
271 |
+
msgstr "Доступная Памяти"
|
272 |
+
|
273 |
+
#: includes/class-yith-system-status.php:113
|
274 |
+
msgid "PHP Version"
|
275 |
+
msgstr "Версия PHP"
|
276 |
+
|
277 |
+
#: includes/class-yith-system-status.php:114
|
278 |
+
msgid "TLS Version"
|
279 |
+
msgstr "Версия TLS"
|
280 |
+
|
281 |
+
#: includes/class-yith-system-status.php:115
|
282 |
+
msgid "WordPress Cron"
|
283 |
+
msgstr "Ядро WordPress"
|
284 |
+
|
285 |
+
#: includes/class-yith-system-status.php:116
|
286 |
+
msgid "SimpleXML"
|
287 |
+
msgstr "SimpleXML"
|
288 |
+
|
289 |
+
#: includes/class-yith-system-status.php:117
|
290 |
+
msgid "MultiByte String"
|
291 |
+
msgstr "MultiByte String"
|
292 |
+
|
293 |
+
#: includes/class-yith-system-status.php:118
|
294 |
+
msgid "ImageMagick Version"
|
295 |
+
msgstr "Версия ImageMagick"
|
296 |
+
|
297 |
+
#: includes/class-yith-system-status.php:119
|
298 |
+
msgid "GD Library"
|
299 |
+
msgstr "Библиотека GD"
|
300 |
+
|
301 |
+
#: includes/class-yith-system-status.php:120
|
302 |
+
msgid "Iconv Module"
|
303 |
+
msgstr "Модуль Iconv"
|
304 |
+
|
305 |
+
#: includes/class-yith-system-status.php:121
|
306 |
+
msgid "OPCache Save Comments"
|
307 |
+
msgstr "OPCache Сохранить комментарии"
|
308 |
+
|
309 |
+
#: includes/class-yith-system-status.php:122
|
310 |
+
msgid "URL FOpen"
|
311 |
+
msgstr "URL FOpen"
|
312 |
+
|
313 |
+
#: includes/class-yith-system-status.php:140
|
314 |
+
#: includes/class-yith-system-status.php:141
|
315 |
+
#: templates/sysinfo/system-information-panel.php:11
|
316 |
+
msgid "System Status"
|
317 |
+
msgstr "Состояние Системы"
|
318 |
+
|
319 |
+
#: includes/class-yith-system-status.php:183
|
320 |
+
msgid "YITH Plugins"
|
321 |
+
msgstr "Плагины YITH"
|
322 |
+
|
323 |
+
#: includes/class-yith-system-status.php:191
|
324 |
+
msgid "WooCommerce"
|
325 |
+
msgstr "WooCommerce"
|
326 |
+
|
327 |
+
#: includes/class-yith-system-status.php:342
|
328 |
+
msgid "Warning!"
|
329 |
+
msgstr "Внимание!"
|
330 |
+
|
331 |
+
#. translators: %1$s open link tag, %2$s open link tag
|
332 |
+
#: includes/class-yith-system-status.php:346
|
333 |
+
msgid ""
|
334 |
+
"The system check has detected some compatibility issues on your installation."
|
335 |
+
"%1$sClick here%2$s to know more"
|
336 |
+
msgstr ""
|
337 |
+
"Проверка системы обнаружила некоторые проблемы совместимости в вашей "
|
338 |
+
"установке.%1$sНажмите сюда%2$s чтобы узнать больше"
|
339 |
+
|
340 |
+
#: includes/class-yith-system-status.php:496
|
341 |
+
msgid "Enabled"
|
342 |
+
msgstr "Включено"
|
343 |
+
|
344 |
+
#: includes/class-yith-system-status.php:496
|
345 |
+
msgid "Disabled"
|
346 |
+
msgstr "Отключено"
|
347 |
+
|
348 |
+
#: includes/class-yith-system-status.php:501
|
349 |
+
msgid "N/A"
|
350 |
+
msgstr "Б/н"
|
351 |
+
|
352 |
+
#. translators: %1$s plugin name, %2$s requirement name
|
353 |
+
#: includes/class-yith-system-status.php:528
|
354 |
+
msgid "%1$s needs %2$s enabled"
|
355 |
+
msgstr "%1$s требует включения %2$s"
|
356 |
+
|
357 |
+
#. translators: %1$s plugin name, %2$s required memory amount
|
358 |
+
#: includes/class-yith-system-status.php:531
|
359 |
+
msgid "%1$s needs at least %2$s of available memory"
|
360 |
+
msgstr "%1$s требуется не менее %2$s доступной памяти"
|
361 |
+
|
362 |
+
#. translators: %1$s plugin name, %2$s version number
|
363 |
+
#: includes/class-yith-system-status.php:534
|
364 |
+
msgid "%1$s needs at least %2$s version"
|
365 |
+
msgstr "%1$s требует как минимум %2$s версии"
|
366 |
+
|
367 |
+
#: includes/class-yith-system-status.php:558
|
368 |
+
msgid ""
|
369 |
+
"Update it to the latest version in order to benefit of all new features and "
|
370 |
+
"security updates."
|
371 |
+
msgstr ""
|
372 |
+
"Обновите его до последней версии, чтобы воспользоваться всеми новыми "
|
373 |
+
"функциями и обновлениями безопасности."
|
374 |
+
|
375 |
+
#: includes/class-yith-system-status.php:562
|
376 |
+
#: includes/class-yith-system-status.php:568
|
377 |
+
msgid "Contact your hosting company in order to update it."
|
378 |
+
msgstr "Свяжитесь с вашей хостинговой компанией, чтобы обновить его."
|
379 |
+
|
380 |
+
#: includes/class-yith-system-status.php:566
|
381 |
+
msgid "Contact your hosting company in order to install it."
|
382 |
+
msgstr "Для его установки обратитесь в свою хостинговую компанию."
|
383 |
+
|
384 |
+
#. translators: %1$s code, %2$s file name
|
385 |
+
#: includes/class-yith-system-status.php:573
|
386 |
+
msgid "Remove %1$s from %2$s file"
|
387 |
+
msgstr "Удалить %1$s из файла %2$s"
|
388 |
+
|
389 |
+
#: includes/class-yith-system-status.php:581
|
390 |
+
msgid "Contact your hosting company in order to enable it."
|
391 |
+
msgstr "Свяжитесь с вашей хостинговой компанией, чтобы включить его."
|
392 |
+
|
393 |
+
#. translators: %1$s opening link tag, %2$s closing link tag
|
394 |
+
#: includes/class-yith-system-status.php:585
|
395 |
+
#: includes/class-yith-system-status.php:608
|
396 |
+
msgid ""
|
397 |
+
"Read more %1$shere%2$s or contact your hosting company in order to increase "
|
398 |
+
"it."
|
399 |
+
msgstr ""
|
400 |
+
"Узнайте больше %1$sздесь%2$s или свяжитесь с вашей хостинговой компанией, "
|
401 |
+
"чтобы увеличить его."
|
402 |
+
|
403 |
+
#. translators: %s recommended memory amount
|
404 |
+
#: includes/class-yith-system-status.php:605
|
405 |
+
msgid ""
|
406 |
+
"For optimal functioning of our plugins, we suggest setting at least %s of "
|
407 |
+
"available memory"
|
408 |
+
msgstr ""
|
409 |
+
"Для оптимального функционирования наших плагинов мы рекомендуем установить "
|
410 |
+
"не менее %s доступной памяти"
|
411 |
+
|
412 |
+
#. translators: %1$s TLS label, %2$s cURL label
|
413 |
+
#: includes/class-yith-system-status.php:613
|
414 |
+
msgid ""
|
415 |
+
"The system check cannot determine which %1$s version is installed because "
|
416 |
+
"%2$s module is disabled. Ask your hosting company to enable it."
|
417 |
+
msgstr ""
|
418 |
+
"Системная проверка не может определить, какая версия %1$s установлена, "
|
419 |
+
"потому что модуль %2$s отключен. Попросите вашу хостинг-компанию включить "
|
420 |
+
"его."
|
421 |
+
|
422 |
+
#. translators: %1$s TLS label
|
423 |
+
#: includes/class-yith-system-status.php:616
|
424 |
+
msgid ""
|
425 |
+
"The system check cannot determine which %1$s version is installed due to a "
|
426 |
+
"connection issue between your site and our server."
|
427 |
+
msgstr ""
|
428 |
+
"Системная проверка не может определить, какая версия %1$s установлена, из-за "
|
429 |
+
"проблемы с соединением между вашим сайтом и нашим сервером."
|
430 |
+
|
431 |
+
#: templates/bh-onboarding/onboarding-tabs.php:63
|
432 |
+
msgid "Save"
|
433 |
+
msgstr ""
|
434 |
+
|
435 |
+
#: templates/fields/ajax-customers.php:41
|
436 |
+
msgid "Search for a customer..."
|
437 |
+
msgstr ""
|
438 |
+
|
439 |
+
#. translators: 1. user display name; 2. user ID; 3. user email.
|
440 |
+
#: templates/fields/ajax-customers.php:68
|
441 |
+
#: templates/fields/ajax-customers.php:79
|
442 |
+
msgid "%1$s (#%2$s – %3$s)"
|
443 |
+
msgstr "%1$s (#%2$s – %3$s)"
|
444 |
+
|
445 |
+
#: templates/fields/ajax-posts.php:41
|
446 |
+
msgid "Search for a post..."
|
447 |
+
msgstr ""
|
448 |
+
|
449 |
+
#: templates/fields/ajax-products.php:16
|
450 |
+
msgid "Search for a product..."
|
451 |
+
msgstr ""
|
452 |
+
|
453 |
+
#: templates/fields/ajax-terms.php:41
|
454 |
+
msgid "Search for a category..."
|
455 |
+
msgstr ""
|
456 |
+
|
457 |
+
#: templates/fields/customtabs.php:17
|
458 |
+
msgid "Close all"
|
459 |
+
msgstr "Закрыть все"
|
460 |
+
|
461 |
+
#: templates/fields/customtabs.php:17
|
462 |
+
msgid "Expand all"
|
463 |
+
msgstr "Развернуть все"
|
464 |
+
|
465 |
+
#: templates/fields/customtabs.php:25 templates/fields/customtabs.php:68
|
466 |
+
msgid "Remove"
|
467 |
+
msgstr "Стереть"
|
468 |
+
|
469 |
+
#: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
|
470 |
+
msgid "Name"
|
471 |
+
msgstr "Имя"
|
472 |
+
|
473 |
+
#: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
|
474 |
+
msgid "Value"
|
475 |
+
msgstr "Значение"
|
476 |
+
|
477 |
+
#: templates/fields/customtabs.php:41 templates/fields/customtabs.php:82
|
478 |
+
msgid "Content of the tab. (HTML is supported)"
|
479 |
+
msgstr "Содержание вкладки. (Поддерживается HTML)"
|
480 |
+
|
481 |
+
#: templates/fields/customtabs.php:52
|
482 |
+
msgid "Add custom product tab"
|
483 |
+
msgstr "Добавить пользовательскую вкладку товара"
|
484 |
+
|
485 |
+
#: templates/fields/customtabs.php:93
|
486 |
+
msgid "Do you want to remove the custom tab?"
|
487 |
+
msgstr "Вы хотите удалить пользовательскую вкладку?"
|
488 |
+
|
489 |
+
#: templates/fields/date-format.php:65
|
490 |
+
msgid "Custom:"
|
491 |
+
msgstr "Обычай:"
|
492 |
+
|
493 |
+
#: templates/fields/date-format.php:70
|
494 |
+
msgid "Preview:"
|
495 |
+
msgstr "Предпросмотр:"
|
496 |
+
|
497 |
+
#: templates/fields/icons.php:78
|
498 |
+
msgid "Set Default"
|
499 |
+
msgstr "Установить по умолчанию"
|
500 |
+
|
501 |
+
#: templates/fields/image-gallery.php:29 templates/fields/image-gallery.php:40
|
502 |
+
msgid "Delete image"
|
503 |
+
msgstr "Удалить Излображение"
|
504 |
+
|
505 |
+
#: templates/fields/image-gallery.php:37
|
506 |
+
msgid "Add Images to Gallery"
|
507 |
+
msgstr "Добавить Изображения в Галерею"
|
508 |
+
|
509 |
+
#: templates/fields/image-gallery.php:38
|
510 |
+
msgid "Add to gallery"
|
511 |
+
msgstr "Добавить галерею"
|
512 |
+
|
513 |
+
#: templates/fields/image-gallery.php:39
|
514 |
+
msgid "Add images"
|
515 |
+
msgstr "Добавить Изображения"
|
516 |
+
|
517 |
+
#: templates/fields/image-gallery.php:41
|
518 |
+
msgid "Delete"
|
519 |
+
msgstr "Удалить"
|
520 |
+
|
521 |
+
#: templates/fields/select-buttons.php:19
|
522 |
+
msgid "Add All"
|
523 |
+
msgstr "Добавить Все"
|
524 |
+
|
525 |
+
#: templates/fields/select-buttons.php:20
|
526 |
+
msgid "Remove All"
|
527 |
+
msgstr "Стереть Все"
|
528 |
+
|
529 |
+
#: templates/fields/sidebars.php:20
|
530 |
+
msgid "Left sidebar"
|
531 |
+
msgstr "Левая боковая панель"
|
532 |
+
|
533 |
+
#: templates/fields/sidebars.php:23
|
534 |
+
msgid "Right sidebar"
|
535 |
+
msgstr "Правая боковая панель"
|
536 |
+
|
537 |
+
#: templates/fields/sidebars.php:26 templates/fields/sidebars.php:29
|
538 |
+
msgid "No sidebar"
|
539 |
+
msgstr "Без боковой панели"
|
540 |
+
|
541 |
+
#: templates/fields/sidebars.php:39
|
542 |
+
msgid "Left Sidebar"
|
543 |
+
msgstr "Левая Боковая панель"
|
544 |
+
|
545 |
+
#: templates/fields/sidebars.php:41 templates/fields/sidebars.php:56
|
546 |
+
msgid "Choose a sidebar"
|
547 |
+
msgstr "Выберите боковую панель"
|
548 |
+
|
549 |
+
#: templates/fields/sidebars.php:54
|
550 |
+
msgid "Right Sidebar"
|
551 |
+
msgstr "Правая Боковая панель"
|
552 |
+
|
553 |
+
#: templates/fields/upload.php:34
|
554 |
+
#: templates/panel/woocommerce/woocommerce-upload.php:37
|
555 |
+
msgid "Upload"
|
556 |
+
msgstr "Загрузить"
|
557 |
+
|
558 |
+
#: templates/fields/upload.php:39
|
559 |
+
msgid "Reset"
|
560 |
+
msgstr "Сброс"
|
561 |
+
|
562 |
+
#. translators: %s is the plugin version.
|
563 |
+
#: templates/panel/welcome-modals/update.php:34
|
564 |
+
msgid "is successfully updated to version %s."
|
565 |
+
msgstr ""
|
566 |
+
|
567 |
+
#. translators: %s is the plugin version.
|
568 |
+
#: templates/panel/welcome-modals/update.php:44
|
569 |
+
msgid "What's new in version %s"
|
570 |
+
msgstr ""
|
571 |
+
|
572 |
+
#: templates/panel/welcome-modals/update.php:49
|
573 |
+
msgid "Check the changelog >"
|
574 |
+
msgstr ""
|
575 |
+
|
576 |
+
#: templates/panel/welcome-modals/update.php:64
|
577 |
+
#: templates/panel/welcome-modals/welcome.php:60
|
578 |
+
msgid "Got it, close this window"
|
579 |
+
msgstr ""
|
580 |
+
|
581 |
+
#: templates/panel/welcome-modals/welcome.php:30
|
582 |
+
msgid "Thank you for using our plugin"
|
583 |
+
msgstr ""
|
584 |
+
|
585 |
+
#. translators: %s is the number of steps.
|
586 |
+
#: templates/panel/welcome-modals/welcome.php:45
|
587 |
+
msgid "Start with these %s steps:"
|
588 |
+
msgstr ""
|
589 |
+
|
590 |
+
#: templates/panel/woocommerce/woocommerce-form.php:29
|
591 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
592 |
+
msgid "Save Options"
|
593 |
+
msgstr "Сохранить Настройки"
|
594 |
+
|
595 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
596 |
+
msgid "Options Saved"
|
597 |
+
msgstr "Настройки Сохранены"
|
598 |
+
|
599 |
+
#: templates/panel/woocommerce/woocommerce-form.php:43
|
600 |
+
msgid "Reset Defaults"
|
601 |
+
msgstr "Сброс до настроек по умолчанию"
|
602 |
+
|
603 |
+
#: templates/sysinfo/system-information-panel.php:12
|
604 |
+
msgid "PHPInfo"
|
605 |
+
msgstr "PHPInfo"
|
606 |
+
|
607 |
+
#: templates/sysinfo/system-information-panel.php:13
|
608 |
+
#: templates/sysinfo/tabs/error-log.php:25
|
609 |
+
msgid "Log Files"
|
610 |
+
msgstr "Файлы журнала"
|
611 |
+
|
612 |
+
#: templates/sysinfo/system-information-panel.php:22
|
613 |
+
msgid "YITH System Information"
|
614 |
+
msgstr "Системная информация YITH"
|
615 |
+
|
616 |
+
#: templates/sysinfo/tabs/error-log.php:13
|
617 |
+
msgid "WP debug.log file"
|
618 |
+
msgstr "WP debug.log file"
|
619 |
+
|
620 |
+
#: templates/sysinfo/tabs/error-log.php:18
|
621 |
+
msgid "PHP error_log file"
|
622 |
+
msgstr "PHP error_log file"
|
623 |
+
|
624 |
+
#: templates/sysinfo/tabs/error-log.php:60
|
625 |
+
msgid "Download"
|
626 |
+
msgstr "Загрузка"
|
627 |
+
|
628 |
+
#: templates/sysinfo/tabs/error-log.php:73
|
629 |
+
msgid "The file size exceeds 8 megabytes so it must be downloaded"
|
630 |
+
msgstr "Размер файла превышает 8 мегабайт, поэтому его необходимо загрузить"
|
631 |
+
|
632 |
+
#. translators: %s file name.
|
633 |
+
#: templates/sysinfo/tabs/error-log.php:97
|
634 |
+
msgid ""
|
635 |
+
"No Log file available. Enable the WordPress debug by adding this in the %s "
|
636 |
+
"file of your installation"
|
637 |
+
msgstr ""
|
638 |
+
"Файл журнала недоступен. Включите отладку WordPress, добавив следующее в "
|
639 |
+
"файл %s вашей установки"
|
640 |
+
|
641 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
642 |
+
msgid "Copied!"
|
643 |
+
msgstr "Скопирован!"
|
644 |
+
|
645 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
646 |
+
msgid "Copy Code"
|
647 |
+
msgstr "Копировать Код"
|
648 |
+
|
649 |
+
#: templates/sysinfo/tabs/main.php:17
|
650 |
+
msgid "Site Info"
|
651 |
+
msgstr "Информация о сайте"
|
652 |
+
|
653 |
+
#: templates/sysinfo/tabs/main.php:22
|
654 |
+
msgid "Site URL"
|
655 |
+
msgstr "Адрес сайта"
|
656 |
+
|
657 |
+
#: templates/sysinfo/tabs/main.php:31
|
658 |
+
msgid "Output IP Address"
|
659 |
+
msgstr "Выходной IP-адрес"
|
660 |
+
|
661 |
+
#: templates/sysinfo/tabs/main.php:39
|
662 |
+
msgid "Defined WP_CACHE"
|
663 |
+
msgstr "Определён WP_CACHE"
|
664 |
+
|
665 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
666 |
+
msgid "Yes"
|
667 |
+
msgstr "Да"
|
668 |
+
|
669 |
+
#: templates/sysinfo/tabs/main.php:47
|
670 |
+
msgid "External object cache"
|
671 |
+
msgstr "Кэш внешних объектов"
|
672 |
+
|
673 |
+
#: templates/sysinfo/tabs/main.php:55
|
674 |
+
msgid "YITH Plugin Framework Version"
|
675 |
+
msgstr "Версия YITH Plugin Framework"
|
676 |
+
|
677 |
+
#. translators: %s is the name of the plugin that is loading the framework.
|
678 |
+
#: templates/sysinfo/tabs/main.php:64
|
679 |
+
msgid "loaded by %s"
|
680 |
+
msgstr "загружен %s"
|
681 |
+
|
682 |
+
#: templates/sysinfo/tabs/main.php:73
|
683 |
+
msgid "Plugins Requirements"
|
684 |
+
msgstr "Требования к Плагинам"
|
685 |
+
|
686 |
+
#: templates/sysinfo/tabs/main.php:108
|
687 |
+
msgid "Database Info"
|
688 |
+
msgstr "Информация о БД"
|
689 |
+
|
690 |
+
#: templates/sysinfo/tabs/main.php:113
|
691 |
+
msgid "MySQL version"
|
692 |
+
msgstr "Версия MySQL"
|
693 |
+
|
694 |
+
#. Translators: %s: Codex link.
|
695 |
+
#: templates/sysinfo/tabs/main.php:123
|
696 |
+
msgid "WordPress recommends a minimum MySQL version of 5.6. See: %s"
|
697 |
+
msgstr "WordPress рекомендует минимальную версию MySQL 5.6. См: %s"
|
698 |
+
|
699 |
+
#: templates/sysinfo/tabs/main.php:123
|
700 |
+
msgid "WordPress requirements"
|
701 |
+
msgstr "Требования WordPress"
|
702 |
+
|
703 |
+
#: templates/sysinfo/tabs/main.php:130
|
704 |
+
msgid "Total Database Size"
|
705 |
+
msgstr "Общий размер базы данных"
|
706 |
+
|
707 |
+
#: templates/sysinfo/tabs/main.php:138
|
708 |
+
msgid "Database Data Size"
|
709 |
+
msgstr "Размер данных базы данных"
|
710 |
+
|
711 |
+
#: templates/sysinfo/tabs/main.php:146
|
712 |
+
msgid "Database Index Size"
|
713 |
+
msgstr "Размер индекса базы данных "
|
714 |
+
|
715 |
+
#: templates/sysinfo/tabs/main.php:154
|
716 |
+
msgid "Database Free Size"
|
717 |
+
msgstr "Свободный размер базы данных"
|
718 |
+
|
719 |
+
#. Translators: %1$f: Table size, %2$f: Index size, %3$f: Free size, %4$s
|
720 |
+
#. Engine.
|
721 |
+
#: templates/sysinfo/tabs/main.php:168
|
722 |
+
msgid "Data: %1$.2fMB | Index: %2$.2fMB | Free: %3$.2fMB | Engine: %4$s"
|
723 |
+
msgstr ""
|
724 |
+
"Данные: %1$.2fMB | Индекс: %2$.2fMB | Свободно: %3$.2fMB | Движок: %4$s"
|
725 |
+
|
726 |
+
#. translators: %s is the title of the post object.
|
727 |
+
#: yit-functions.php:1938
|
728 |
+
msgid "Are you sure you want to move \"%s\" to trash?"
|
729 |
+
msgstr "Вы уверены, что хотите переместить в корзину \"%s\"?"
|
730 |
+
|
731 |
+
#. translators: %s is the title of the post object.
|
732 |
+
#: yit-functions.php:1940 yit-functions.php:2100
|
733 |
+
msgid "Are you sure you want to delete \"%s\"?"
|
734 |
+
msgstr "Вы уверены, что хотите удалить \"%s\"?"
|
735 |
+
|
736 |
+
#: yit-functions.php:2038 yit-functions.php:2046 yit-functions.php:2163
|
737 |
+
msgid "Further actions"
|
738 |
+
msgstr "Дальнейшие действия"
|
739 |
+
|
740 |
+
#: yit-plugin.php:233
|
741 |
+
msgid "License"
|
742 |
+
msgstr "Лицензия"
|
743 |
+
|
744 |
+
#. translators: 1. Plugin(s) name(s).
|
745 |
+
#: yit-plugin.php:272
|
746 |
+
msgid ""
|
747 |
+
"%s was deactivated as you're running an higher tier version of the same "
|
748 |
+
"plugin."
|
749 |
+
msgid_plural ""
|
750 |
+
"%s were deactivated as you're running higher tier versions of the same "
|
751 |
+
"plugins."
|
752 |
+
msgstr[0] ""
|
753 |
+
msgstr[1] ""
|
754 |
+
msgstr[2] ""
|
755 |
+
|
756 |
+
#. Author of the plugin/theme
|
757 |
+
msgid "YITH"
|
758 |
+
msgstr "YITH"
|
759 |
+
|
760 |
+
#. translators: %s it the Elementor Widget title.
|
761 |
+
#: includes/builders/elementor/class-yith-elementor-widget.php:252
|
762 |
+
msgctxt "Elementor Widget - section title"
|
763 |
+
msgid "%s - Options"
|
764 |
+
msgstr "%s - Параметры"
|
765 |
+
|
766 |
+
#: includes/builders/gutenberg/class-yith-gutenberg.php:152
|
767 |
+
msgctxt "[gutenberg]: Category Name"
|
768 |
+
msgid "YITH"
|
769 |
+
msgstr "YITH"
|
770 |
+
|
771 |
+
#: includes/class-yit-assets.php:136
|
772 |
+
msgctxt "Button text"
|
773 |
+
msgid "Confirm"
|
774 |
+
msgstr "Подтвердить"
|
775 |
+
|
776 |
+
#: includes/class-yit-assets.php:137
|
777 |
+
msgctxt "Button text"
|
778 |
+
msgid "Cancel"
|
779 |
+
msgstr "Отмена"
|
780 |
+
|
781 |
+
#: includes/class-yit-assets.php:150 yit-functions.php:2009
|
782 |
+
msgctxt "Trash confirmation action"
|
783 |
+
msgid "Yes, move to trash"
|
784 |
+
msgstr "Да, удалить в корзину"
|
785 |
+
|
786 |
+
#: includes/class-yit-assets.php:154 yit-functions.php:2027
|
787 |
+
#: yit-functions.php:2154
|
788 |
+
msgctxt "Delete confirmation action"
|
789 |
+
msgid "Yes, delete"
|
790 |
+
msgstr "Да, удалить"
|
791 |
+
|
792 |
+
#. translators: 1. Plugin name.
|
793 |
+
#: includes/class-yit-plugin-panel.php:804
|
794 |
+
msgctxt "Help tab default title"
|
795 |
+
msgid "Thank you for purchasing %s!"
|
796 |
+
msgstr "Благодарим вас за покупку %s!"
|
797 |
+
|
798 |
+
#: includes/class-yit-plugin-panel.php:804
|
799 |
+
msgctxt "Help tab default title"
|
800 |
+
msgid "Thank you for using %s!"
|
801 |
+
msgstr ""
|
802 |
+
|
803 |
+
#: includes/class-yit-plugin-panel.php:812
|
804 |
+
msgctxt "Help tab default description"
|
805 |
+
msgid ""
|
806 |
+
"We want to help you enjoy a wonderful experience with all of our products."
|
807 |
+
msgstr ""
|
808 |
+
"Мы хотим помочь вам получить удовольствие от использования всех наших "
|
809 |
+
"продуктов."
|
810 |
+
|
811 |
+
#: includes/class-yit-plugin-panel.php:863
|
812 |
+
msgctxt "Premium tab name"
|
813 |
+
msgid "Get premium"
|
814 |
+
msgstr "Получите премиум"
|
815 |
+
|
816 |
+
#: includes/class-yit-plugin-panel.php:875
|
817 |
+
msgctxt "Help tab name"
|
818 |
+
msgid "Help"
|
819 |
+
msgstr "Помощь"
|
820 |
+
|
821 |
+
#: includes/class-yith-dashboard.php:96
|
822 |
+
msgctxt "Plugin FW"
|
823 |
+
msgid "View Changelog"
|
824 |
+
msgstr "Посмотреть журнал изменений"
|
825 |
+
|
826 |
+
#: includes/class-yith-dashboard.php:97
|
827 |
+
msgctxt "Plugin FW"
|
828 |
+
msgid "Latest update released on"
|
829 |
+
msgstr "Последнее обновление выпущено на"
|
830 |
+
|
831 |
+
#: includes/class-yith-dashboard.php:137
|
832 |
+
msgctxt "Button label"
|
833 |
+
msgid "Close"
|
834 |
+
msgstr "Закрыть"
|
835 |
+
|
836 |
+
#: includes/privacy/class-yith-privacy.php:61
|
837 |
+
msgctxt "Privacy Policy Guide Title"
|
838 |
+
msgid "YITH Plugins"
|
839 |
+
msgstr "Плагины YITH"
|
840 |
+
|
841 |
+
#: includes/privacy/class-yith-privacy.php:93
|
842 |
+
msgctxt "Privacy Policy Content"
|
843 |
+
msgid ""
|
844 |
+
"This sample language includes the basics around what personal data your "
|
845 |
+
"store may be collecting, storing and sharing, as well as who may have access "
|
846 |
+
"to that data. Depending on what settings are enabled and which additional "
|
847 |
+
"plugins are used, the specific information shared by your store will vary. "
|
848 |
+
"We recommend consulting with a lawyer when deciding what information to "
|
849 |
+
"disclose on your privacy policy."
|
850 |
+
msgstr ""
|
851 |
+
"Этот образец формулировки включает в себя основные положения о том, какие "
|
852 |
+
"личные данные может собирать, хранить и передавать ваш магазин, а также кто "
|
853 |
+
"может иметь доступ к этим данным. В зависимости от того, какие настройки "
|
854 |
+
"включены и какие дополнительные плагины используются, конкретная информация, "
|
855 |
+
"передаваемая вашим магазином, будет отличаться. Мы рекомендуем "
|
856 |
+
"проконсультироваться с юристом при принятии решения о том, какую информацию "
|
857 |
+
"раскрывать в политике конфиденциальности."
|
858 |
+
|
859 |
+
#: includes/privacy/class-yith-privacy.php:97
|
860 |
+
msgctxt "Privacy Policy Content"
|
861 |
+
msgid "What we collect and store"
|
862 |
+
msgstr "Что мы собираем и храним"
|
863 |
+
|
864 |
+
#: includes/privacy/class-yith-privacy.php:100
|
865 |
+
msgctxt "Privacy Policy Content"
|
866 |
+
msgid "Who on our team has access"
|
867 |
+
msgstr "Кто в нашей команде имеет доступ"
|
868 |
+
|
869 |
+
#: includes/privacy/class-yith-privacy.php:103
|
870 |
+
msgctxt "Privacy Policy Content"
|
871 |
+
msgid "What we share with others"
|
872 |
+
msgstr "Чем мы делимся с другими"
|
873 |
+
|
874 |
+
#: includes/privacy/class-yith-privacy.php:106
|
875 |
+
msgctxt "Privacy Policy Content"
|
876 |
+
msgid "Payments"
|
877 |
+
msgstr "Оплата"
|
878 |
+
|
879 |
+
#: templates/fields/copy-to-clipboard.php:41
|
880 |
+
msgctxt "Copy-to-clipboard message"
|
881 |
+
msgid "Copied!"
|
882 |
+
msgstr "Скопировано!"
|
883 |
+
|
884 |
+
#: templates/fields/copy-to-clipboard.php:45
|
885 |
+
msgctxt "Copy-to-clipboard button text"
|
886 |
+
msgid "Copy"
|
887 |
+
msgstr "Копировать"
|
888 |
+
|
889 |
+
#: templates/fields/dimensions.php:13
|
890 |
+
msgctxt "Position in the \"Dimensions\" field"
|
891 |
+
msgid "Top"
|
892 |
+
msgstr "Сверху"
|
893 |
+
|
894 |
+
#: templates/fields/dimensions.php:14
|
895 |
+
msgctxt "Position in the \"Dimensions\" field"
|
896 |
+
msgid "Right"
|
897 |
+
msgstr "Справа"
|
898 |
+
|
899 |
+
#: templates/fields/dimensions.php:15
|
900 |
+
msgctxt "Position in the \"Dimensions\" field"
|
901 |
+
msgid "Bottom"
|
902 |
+
msgstr "Снизу"
|
903 |
+
|
904 |
+
#: templates/fields/dimensions.php:16
|
905 |
+
msgctxt "Position in the \"Dimensions\" field"
|
906 |
+
msgid "Left"
|
907 |
+
msgstr "Слева"
|
908 |
+
|
909 |
+
#: templates/fields/dimensions.php:94
|
910 |
+
msgctxt "Tooltip in the \"Dimensions\" field"
|
911 |
+
msgid "Link values together"
|
912 |
+
msgstr "Свяжите ценности вместе"
|
913 |
+
|
914 |
+
#: templates/fields/image-dimensions.php:18
|
915 |
+
msgctxt "Image width field label"
|
916 |
+
msgid "Width"
|
917 |
+
msgstr "Ширина"
|
918 |
+
|
919 |
+
#: templates/fields/image-dimensions.php:23
|
920 |
+
msgctxt "Image height field label"
|
921 |
+
msgid "Height"
|
922 |
+
msgstr "Высота"
|
923 |
+
|
924 |
+
#: templates/fields/onoff.php:28
|
925 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
926 |
+
msgid "YES"
|
927 |
+
msgstr "ДА"
|
928 |
+
|
929 |
+
#: templates/fields/onoff.php:29
|
930 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
931 |
+
msgid "NO"
|
932 |
+
msgstr "НЕТ"
|
933 |
+
|
934 |
+
#. translators: 1. Url to EN playlist.
|
935 |
+
#: templates/panel/help-tab.php:89
|
936 |
+
msgctxt "Help tab view all video link"
|
937 |
+
msgid ""
|
938 |
+
"Check the full <a href=\"%s\" target=\"_blank\">Playlist on Youtube</a> to "
|
939 |
+
"learn more >"
|
940 |
+
msgstr ""
|
941 |
+
"Посмотрите полный <a href=\"%s\" target=\"_blank\">плейлист на Youtube</a>, "
|
942 |
+
"чтобы узнать больше >"
|
943 |
+
|
944 |
+
#: templates/panel/help-tab.php:96
|
945 |
+
msgctxt "Help tab Watch Videotutorials link"
|
946 |
+
msgid "Videos are also available in:"
|
947 |
+
msgstr "Видеоматериалы также доступны в:"
|
948 |
+
|
949 |
+
#: templates/panel/help-tab.php:126
|
950 |
+
msgctxt "Help tab Read Documentation link"
|
951 |
+
msgid "Read the documentation"
|
952 |
+
msgstr "Прочтите документацию"
|
953 |
+
|
954 |
+
#: templates/panel/help-tab.php:129
|
955 |
+
msgctxt "Help tab Read Documentation link"
|
956 |
+
msgid "to learn how the plugin works from the basics."
|
957 |
+
msgstr ""
|
958 |
+
|
959 |
+
#: templates/panel/help-tab.php:139
|
960 |
+
msgctxt "Help tab Watch video tutorials link"
|
961 |
+
msgid "Watch our video tutorials"
|
962 |
+
msgstr "Посмотрите наши видеоуроки"
|
963 |
+
|
964 |
+
#: templates/panel/help-tab.php:142
|
965 |
+
msgctxt "Help tab Watch video tutorials link"
|
966 |
+
msgid "to see some helpful use cases."
|
967 |
+
msgstr ""
|
968 |
+
|
969 |
+
#: templates/panel/help-tab.php:152
|
970 |
+
msgctxt "Help tab view FAQs link"
|
971 |
+
msgid "Check the FAQs"
|
972 |
+
msgstr "Проверьте ответы на часто задаваемые вопросы"
|
973 |
+
|
974 |
+
#: templates/panel/help-tab.php:155
|
975 |
+
msgctxt "Help tab view FAQs link"
|
976 |
+
msgid "to find answers to your doubts."
|
977 |
+
msgstr "найти ответы на свои сомнения."
|
978 |
+
|
979 |
+
#: templates/panel/help-tab.php:170
|
980 |
+
msgctxt "Help tab FAQ title"
|
981 |
+
msgid "Last FAQs in our Help Center"
|
982 |
+
msgstr "Последние часто задаваемые вопросы в нашем Справочном Центре"
|
983 |
+
|
984 |
+
#: templates/panel/help-tab.php:184
|
985 |
+
msgctxt "Help tab FAQ link"
|
986 |
+
msgid "View all FAQs >"
|
987 |
+
msgstr "Просмотреть все часто задаваемые вопросы >"
|
988 |
+
|
989 |
+
#: templates/panel/help-tab.php:193
|
990 |
+
msgctxt "Help tab submit ticket title"
|
991 |
+
msgid "Need help?"
|
992 |
+
msgstr "Нужна помощь?"
|
993 |
+
|
994 |
+
#: templates/panel/help-tab.php:196
|
995 |
+
msgctxt "Help tab submit ticket description"
|
996 |
+
msgid ""
|
997 |
+
"If you are experiencing any technical issues, ask for help from our "
|
998 |
+
"developers. Submit a ticket through our support desk and we will help you as "
|
999 |
+
"soon as possible."
|
1000 |
+
msgstr ""
|
1001 |
+
"Если у вас возникли технические проблемы, обратитесь за помощью к нашим "
|
1002 |
+
"разработчикам. Отправьте заявку через нашу службу поддержки, и мы поможем "
|
1003 |
+
"вам как можно скорее."
|
1004 |
+
|
1005 |
+
#: templates/panel/help-tab.php:204
|
1006 |
+
msgctxt "Help tab submit ticket button"
|
1007 |
+
msgid "Submit a ticket"
|
1008 |
+
msgstr "Отправить обращение"
|
1009 |
+
|
1010 |
+
#: templates/panel/help-tab.php:216 templates/panel/help-tab.php:218
|
1011 |
+
#: templates/panel/help-tab.php:223
|
1012 |
+
msgctxt "Help tab documentation"
|
1013 |
+
msgid "Read the plugin documentation"
|
1014 |
+
msgstr ""
|
1015 |
+
|
1016 |
+
#: templates/panel/help-tab.php:220
|
1017 |
+
msgctxt "Help tab documentation"
|
1018 |
+
msgid "to learn how it works from the basics."
|
1019 |
+
msgstr ""
|
1020 |
+
|
1021 |
+
#: templates/panel/help-tab.php:231 templates/panel/help-tab.php:233
|
1022 |
+
msgctxt "Help tab support"
|
1023 |
+
msgid "Need some help?"
|
1024 |
+
msgstr ""
|
1025 |
+
|
1026 |
+
#: templates/panel/help-tab.php:235
|
1027 |
+
msgctxt "Help tab support"
|
1028 |
+
msgid "From DIY to full-service help"
|
1029 |
+
msgstr ""
|
1030 |
+
|
1031 |
+
#: templates/panel/help-tab.php:238
|
1032 |
+
msgctxt "Help tab support"
|
1033 |
+
msgid ""
|
1034 |
+
"Call or chat 24/7 with our support agents, or let our experts build your "
|
1035 |
+
"site."
|
1036 |
+
msgstr ""
|
1037 |
+
|
1038 |
+
#: templates/panel/help-tab.php:241
|
1039 |
+
msgctxt "Help tab support"
|
1040 |
+
msgid "Yes, I need help"
|
1041 |
+
msgstr ""
|
1042 |
+
|
1043 |
+
#: templates/panel/premium-tab.php:30
|
1044 |
+
msgctxt "Premium Tab"
|
1045 |
+
msgid "Get the premium version to unlock advanced features"
|
1046 |
+
msgstr "Получите премиум-версию, чтобы разблокировать расширенные возможности"
|
1047 |
+
|
1048 |
+
#: templates/panel/premium-tab.php:34
|
1049 |
+
msgctxt "Premium Tab"
|
1050 |
+
msgid "Get premium"
|
1051 |
+
msgstr "Получите премиум"
|
1052 |
+
|
1053 |
+
#: templates/panel/premium-tab.php:39
|
1054 |
+
msgctxt "Premium Tab"
|
1055 |
+
msgid "Plugin premium features images"
|
1056 |
+
msgstr "Изображения премиум-функций плагина"
|
1057 |
+
|
1058 |
+
#. translators: alt attribute of main image tag.
|
1059 |
+
#: templates/panel/premium-tab.php:51 templates/panel/premium-tab.php:58
|
1060 |
+
msgctxt "Premium Tab"
|
1061 |
+
msgid "And so much more!"
|
1062 |
+
msgstr "И многое другое!"
|
1063 |
+
|
1064 |
+
#: templates/panel/premium-tab.php:53
|
1065 |
+
msgctxt "Premium Tab"
|
1066 |
+
msgid "Check the premium features >"
|
1067 |
+
msgstr ""
|
1068 |
+
|
1069 |
+
#: templates/panel/premium-tab.php:60
|
1070 |
+
msgctxt "Premium Tab"
|
1071 |
+
msgid "Check the free vs premium features >"
|
1072 |
+
msgstr "Проверьте бесплатные и премиум функции >"
|
1073 |
+
|
1074 |
+
#: templates/panel/premium-tab.php:65
|
1075 |
+
msgctxt "Premium Tab"
|
1076 |
+
msgid "Get the premium version"
|
1077 |
+
msgstr "Получите премиум-версию"
|
1078 |
+
|
1079 |
+
#: yit-functions.php:1952
|
1080 |
+
msgctxt "Post action"
|
1081 |
+
msgid "Preview"
|
1082 |
+
msgstr "Предварительный просмотр"
|
1083 |
+
|
1084 |
+
#: yit-functions.php:1961
|
1085 |
+
msgctxt "Post action"
|
1086 |
+
msgid "View"
|
1087 |
+
msgstr "Просмотреть"
|
1088 |
+
|
1089 |
+
#: yit-functions.php:1972
|
1090 |
+
msgctxt "Post action"
|
1091 |
+
msgid "Edit"
|
1092 |
+
msgstr "Изменить"
|
1093 |
+
|
1094 |
+
#: yit-functions.php:1980
|
1095 |
+
msgctxt "Post action"
|
1096 |
+
msgid "Duplicate"
|
1097 |
+
msgstr "Дублировать"
|
1098 |
+
|
1099 |
+
#: yit-functions.php:1992
|
1100 |
+
msgctxt "Post action"
|
1101 |
+
msgid "Restore"
|
1102 |
+
msgstr "Восстановить"
|
1103 |
+
|
1104 |
+
#: yit-functions.php:2000
|
1105 |
+
msgctxt "Post action"
|
1106 |
+
msgid "Trash"
|
1107 |
+
msgstr "Корзина"
|
1108 |
+
|
1109 |
+
#: yit-functions.php:2017
|
1110 |
+
msgctxt "Post action"
|
1111 |
+
msgid "Delete Permanently"
|
1112 |
+
msgstr "Удалить навсегда"
|
1113 |
+
|
1114 |
+
#: yit-functions.php:2114
|
1115 |
+
msgctxt "Term action"
|
1116 |
+
msgid "View"
|
1117 |
+
msgstr "Просмотреть"
|
1118 |
+
|
1119 |
+
#: yit-functions.php:2124
|
1120 |
+
msgctxt "Term action"
|
1121 |
+
msgid "Edit"
|
1122 |
+
msgstr "Изменить"
|
1123 |
+
|
1124 |
+
#: yit-functions.php:2132
|
1125 |
+
msgctxt "Term action"
|
1126 |
+
msgid "Duplicate"
|
1127 |
+
msgstr "Дублировать"
|
1128 |
+
|
1129 |
+
#: yit-functions.php:2145
|
1130 |
+
msgctxt "Term action"
|
1131 |
+
msgid "Delete"
|
1132 |
+
msgstr "Удалить"
|
1133 |
+
|
1134 |
+
#: yit-plugin.php:85
|
1135 |
+
msgctxt "Plugin Row Meta"
|
1136 |
+
msgid "Live Demo"
|
1137 |
+
msgstr "Живая Демонстрация"
|
1138 |
+
|
1139 |
+
#: yit-plugin.php:89
|
1140 |
+
msgctxt "Plugin Row Meta"
|
1141 |
+
msgid "Documentation"
|
1142 |
+
msgstr "Документация"
|
1143 |
+
|
1144 |
+
#: yit-plugin.php:93
|
1145 |
+
msgctxt "Plugin Row Meta"
|
1146 |
+
msgid "Support"
|
1147 |
+
msgstr "Поддержка"
|
1148 |
+
|
1149 |
+
#: yit-plugin.php:97
|
1150 |
+
msgctxt "Plugin Row Meta"
|
1151 |
+
msgid "Premium version"
|
1152 |
+
msgstr "Премиум версия"
|
1153 |
+
|
1154 |
+
#: yit-plugin.php:229
|
1155 |
+
msgctxt "Action links"
|
1156 |
+
msgid "Settings"
|
1157 |
+
msgstr "Настройки"
|
plugin-fw/languages/yith-plugin-fw-zh_CN 2.mo
ADDED
Binary file
|
plugin-fw/languages/yith-plugin-fw-zh_CN 2.po
ADDED
@@ -0,0 +1,1129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Translation of YITH Framework in Chinese
|
2 |
+
# This file is distributed under the same license as the YITH Framework package.
|
3 |
+
msgid ""
|
4 |
+
msgstr ""
|
5 |
+
"Project-Id-Version: YITH Framework\n"
|
6 |
+
"Report-Msgid-Bugs-To: YITH <plugins@yithemes.com>\n"
|
7 |
+
"POT-Creation-Date: 2022-11-11 07:31:10+00:00\n"
|
8 |
+
"PO-Revision-Date: 2022-06-29 13:12:18+0000\n"
|
9 |
+
"Language: zh\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"Plural-Forms: nplurals=1; plural=0;\n"
|
14 |
+
"X-Generator: GlotPress/3.0.0-alpha.2\n"
|
15 |
+
|
16 |
+
#: includes/class-yit-assets.php:148 yit-functions.php:2006
|
17 |
+
msgid "Confirm trash"
|
18 |
+
msgstr "確認丟棄"
|
19 |
+
|
20 |
+
#: includes/class-yit-assets.php:149
|
21 |
+
msgid "Are you sure you want to trash the selected items?"
|
22 |
+
msgstr "你確定要將所選的項目移至垃圾桶嗎?"
|
23 |
+
|
24 |
+
#: includes/class-yit-assets.php:151 includes/class-yit-assets.php:155
|
25 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
26 |
+
#: yit-functions.php:2008 yit-functions.php:2026
|
27 |
+
msgid "No"
|
28 |
+
msgstr "不"
|
29 |
+
|
30 |
+
#: includes/class-yit-assets.php:152 yit-functions.php:2024
|
31 |
+
#: yit-functions.php:2152
|
32 |
+
msgid "Confirm delete"
|
33 |
+
msgstr "確認刪除"
|
34 |
+
|
35 |
+
#: includes/class-yit-assets.php:153
|
36 |
+
msgid "Are you sure you want to delete the selected items?"
|
37 |
+
msgstr "你確定要刪除所選的項目嗎?"
|
38 |
+
|
39 |
+
#: includes/class-yit-assets.php:153 yit-functions.php:1940
|
40 |
+
#: yit-functions.php:2100
|
41 |
+
msgid ""
|
42 |
+
"This action cannot be undone and you will not be able to recover this data."
|
43 |
+
msgstr "此操作無法撤消,您將無法恢復此數據。"
|
44 |
+
|
45 |
+
#: includes/class-yit-assets.php:174
|
46 |
+
msgid "Clear"
|
47 |
+
msgstr "清除"
|
48 |
+
|
49 |
+
#: includes/class-yit-assets.php:175
|
50 |
+
msgid "Clear color"
|
51 |
+
msgstr "清除顏色"
|
52 |
+
|
53 |
+
#: includes/class-yit-assets.php:176
|
54 |
+
msgid "Default"
|
55 |
+
msgstr "預設"
|
56 |
+
|
57 |
+
#: includes/class-yit-assets.php:177
|
58 |
+
msgid "Select default color"
|
59 |
+
msgstr "選擇預設顏色"
|
60 |
+
|
61 |
+
#: includes/class-yit-assets.php:178
|
62 |
+
msgid "Select Color"
|
63 |
+
msgstr "選擇顏色"
|
64 |
+
|
65 |
+
#: includes/class-yit-assets.php:179
|
66 |
+
msgid "Color value"
|
67 |
+
msgstr "顏色數值"
|
68 |
+
|
69 |
+
#: includes/class-yit-help-desk.php:152
|
70 |
+
msgid "There was an error with your request; please try again later."
|
71 |
+
msgstr "您的請求有誤; 請稍後再試。"
|
72 |
+
|
73 |
+
#: includes/class-yit-plugin-panel-woocommerce.php:437
|
74 |
+
msgid "The changes you have made will be lost if you leave this page."
|
75 |
+
msgstr "如果你離開這個頁面,這些改變將會遺失"
|
76 |
+
|
77 |
+
#: includes/class-yit-plugin-panel.php:83
|
78 |
+
msgid "Plugin Settings"
|
79 |
+
msgstr "外掛設定"
|
80 |
+
|
81 |
+
#: includes/class-yit-plugin-panel.php:84
|
82 |
+
msgid "Settings"
|
83 |
+
msgstr "設定"
|
84 |
+
|
85 |
+
#: includes/class-yit-plugin-panel.php:456
|
86 |
+
#: includes/class-yit-plugin-panel.php:459
|
87 |
+
msgid "How to install premium version"
|
88 |
+
msgstr "如何安裝高級版"
|
89 |
+
|
90 |
+
#: includes/class-yit-plugin-panel.php:656
|
91 |
+
#: includes/class-yit-plugin-subpanel.php:133
|
92 |
+
msgid "Save Changes"
|
93 |
+
msgstr "儲存變更"
|
94 |
+
|
95 |
+
#: includes/class-yit-plugin-panel.php:664
|
96 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
97 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
98 |
+
msgid ""
|
99 |
+
"If you continue with this action, you will reset all options in this page."
|
100 |
+
msgstr "如果你繼續這個動作,你將會重設這個頁面所有的選項"
|
101 |
+
|
102 |
+
#: includes/class-yit-plugin-panel.php:664
|
103 |
+
#: includes/class-yit-plugin-subpanel.php:140
|
104 |
+
#: templates/panel/woocommerce/woocommerce-form.php:15
|
105 |
+
msgid "Are you sure?"
|
106 |
+
msgstr "你確定嗎?"
|
107 |
+
|
108 |
+
#: includes/class-yit-plugin-panel.php:668
|
109 |
+
#: includes/class-yit-plugin-subpanel.php:143
|
110 |
+
msgid "Reset to default"
|
111 |
+
msgstr "重置為預設值"
|
112 |
+
|
113 |
+
#: includes/class-yit-plugin-panel.php:1039
|
114 |
+
msgid "Read the <mark>plugin documentation</mark>"
|
115 |
+
msgstr ""
|
116 |
+
|
117 |
+
#: includes/class-yit-plugin-panel.php:1040
|
118 |
+
msgid "Learn what you can really do with this powerful tool"
|
119 |
+
msgstr ""
|
120 |
+
|
121 |
+
#: includes/class-yit-plugin-panel.php:1050
|
122 |
+
msgid "Watch our <mark>\"First Steps\" video</mark>"
|
123 |
+
msgstr ""
|
124 |
+
|
125 |
+
#: includes/class-yit-plugin-panel.php:1051
|
126 |
+
msgid "See how it works before you start using it"
|
127 |
+
msgstr ""
|
128 |
+
|
129 |
+
#: includes/class-yit-plugin-panel.php:1307
|
130 |
+
msgid ""
|
131 |
+
"The element you have entered already exists. Please, enter another name."
|
132 |
+
msgstr "你輸入的這個元素已經存在,請輸入另一個名稱"
|
133 |
+
|
134 |
+
#: includes/class-yit-plugin-panel.php:1308
|
135 |
+
msgid "Settings saved"
|
136 |
+
msgstr "設定已經儲存"
|
137 |
+
|
138 |
+
#: includes/class-yit-plugin-panel.php:1309
|
139 |
+
msgid "Settings reset"
|
140 |
+
msgstr "重置設定"
|
141 |
+
|
142 |
+
#: includes/class-yit-plugin-panel.php:1310
|
143 |
+
msgid "Element deleted correctly."
|
144 |
+
msgstr "元素已被確實刪除"
|
145 |
+
|
146 |
+
#: includes/class-yit-plugin-panel.php:1311
|
147 |
+
#: includes/class-yit-plugin-panel.php:1312
|
148 |
+
msgid "Element updated correctly."
|
149 |
+
msgstr "元素已正確更新。"
|
150 |
+
|
151 |
+
#: includes/class-yit-plugin-panel.php:1313
|
152 |
+
msgid "Database imported correctly."
|
153 |
+
msgstr "資料庫已被正確匯入"
|
154 |
+
|
155 |
+
#: includes/class-yit-plugin-panel.php:1314
|
156 |
+
msgid "An error has occurred during import. Please try again."
|
157 |
+
msgstr "匯入過程中發生一個錯誤,請再試一次"
|
158 |
+
|
159 |
+
#: includes/class-yit-plugin-panel.php:1315
|
160 |
+
msgid "The added file is not valid."
|
161 |
+
msgstr "添加的檔案無效"
|
162 |
+
|
163 |
+
#: includes/class-yit-plugin-panel.php:1316
|
164 |
+
msgid "Sorry, import is disabled."
|
165 |
+
msgstr "抱歉,匯入功能被關閉"
|
166 |
+
|
167 |
+
#: includes/class-yit-plugin-panel.php:1317
|
168 |
+
msgid "Sorting successful."
|
169 |
+
msgstr "已順利排序"
|
170 |
+
|
171 |
+
#: includes/class-yit-plugin-panel.php:1806
|
172 |
+
msgid "We need your support"
|
173 |
+
msgstr "我們需要你的支援"
|
174 |
+
|
175 |
+
#: includes/class-yit-plugin-panel.php:1807
|
176 |
+
msgid "to keep updating and improving the plugin. Please,"
|
177 |
+
msgstr "請不斷保持更新與改進外掛"
|
178 |
+
|
179 |
+
#: includes/class-yit-plugin-panel.php:1809
|
180 |
+
msgid "help us by leaving a good review"
|
181 |
+
msgstr "留下好的評論幫助我們更進步"
|
182 |
+
|
183 |
+
#: includes/class-yit-plugin-panel.php:1810
|
184 |
+
msgid ":) Thanks!"
|
185 |
+
msgstr ":) 謝謝!"
|
186 |
+
|
187 |
+
#: includes/class-yit-pointers.php:80
|
188 |
+
msgid "Plugins Activated"
|
189 |
+
msgstr "外掛已啟動"
|
190 |
+
|
191 |
+
#: includes/class-yit-pointers.php:81
|
192 |
+
msgid ""
|
193 |
+
"From now on, you can find all plugin options in YITH menu. Plugin "
|
194 |
+
"customization settings will be available as a new entry in YITH menu."
|
195 |
+
msgstr ""
|
196 |
+
"從現在開始,您可以在 YITH 選單中找到所有外掛選項。 外掛預設在 YITH 選單下的新"
|
197 |
+
"項目。"
|
198 |
+
|
199 |
+
#. translators: 1. YITH site link; 2. WordPress site link.
|
200 |
+
#: includes/class-yit-pointers.php:84 includes/class-yit-pointers.php:100
|
201 |
+
msgid "Discover all our plugins available on: %1$s and %2$s"
|
202 |
+
msgstr "探索我們所有可用的外掛:%1$s 和 %2$s"
|
203 |
+
|
204 |
+
#: includes/class-yit-pointers.php:96
|
205 |
+
msgid "Plugins Upgraded"
|
206 |
+
msgstr "外掛已升級"
|
207 |
+
|
208 |
+
#: includes/class-yit-pointers.php:97
|
209 |
+
msgid ""
|
210 |
+
"From now on, you can find the option panel of YITH plugins in YITH menu. "
|
211 |
+
"Every time one of our plugins is added, a new entry will be added to this "
|
212 |
+
"menu. For example, after the update, plugin options (such as for YITH "
|
213 |
+
"WooCommerce Wishlist, YITH WooCommerce Ajax Search, etc.) will be moved from "
|
214 |
+
"previous location to YITH menu."
|
215 |
+
msgstr ""
|
216 |
+
"從現在開始,您可以在 YITH 選單中找到 YITH 外掛的選項面板。 每次添加我們的外掛"
|
217 |
+
"時,都會在此選單中添加一個新條目。 例如,更新後,外掛選項(例如 YITH "
|
218 |
+
"WooCommerce Wishlist、YITH WooCommerce Ajax 搜尋等)將從之前的位置移動到 "
|
219 |
+
"YITH 選單。"
|
220 |
+
|
221 |
+
#: includes/class-yith-bh-onboarding.php:85
|
222 |
+
msgid "It is not possible save the options"
|
223 |
+
msgstr ""
|
224 |
+
|
225 |
+
#: includes/class-yith-dashboard.php:35
|
226 |
+
msgid "YITH Latest Updates"
|
227 |
+
msgstr "YITH 最新更新"
|
228 |
+
|
229 |
+
#: includes/class-yith-dashboard.php:36
|
230 |
+
msgid "Latest news from YITH Blog"
|
231 |
+
msgstr "來自 YITH 部落格的最新消息"
|
232 |
+
|
233 |
+
#: includes/class-yith-dashboard.php:56
|
234 |
+
msgid "RSS Error:"
|
235 |
+
msgstr "RSS 錯誤:"
|
236 |
+
|
237 |
+
#: includes/class-yith-dashboard.php:63
|
238 |
+
msgid ""
|
239 |
+
"An error has occurred, which probably means the feed is down. Try again "
|
240 |
+
"later."
|
241 |
+
msgstr "發生錯誤,這可能意味著 Feed 已關閉。 稍後再試。"
|
242 |
+
|
243 |
+
#. translators: %s is the name of the post type (example Back to "Membership
|
244 |
+
#. Plans").
|
245 |
+
#: includes/class-yith-post-type-admin.php:286
|
246 |
+
msgid "Back to \"%s\""
|
247 |
+
msgstr "返回至 \"%s\""
|
248 |
+
|
249 |
+
#: includes/class-yith-post-type-admin.php:286
|
250 |
+
msgid "Back to the list"
|
251 |
+
msgstr "返回至列表"
|
252 |
+
|
253 |
+
#: includes/class-yith-system-status.php:110
|
254 |
+
msgid "WordPress Version"
|
255 |
+
msgstr "WordPress 版本"
|
256 |
+
|
257 |
+
#: includes/class-yith-system-status.php:111
|
258 |
+
msgid "WooCommerce Version"
|
259 |
+
msgstr "WooCommerce 版本"
|
260 |
+
|
261 |
+
#: includes/class-yith-system-status.php:112
|
262 |
+
msgid "Available Memory"
|
263 |
+
msgstr "可用記憶體"
|
264 |
+
|
265 |
+
#: includes/class-yith-system-status.php:113
|
266 |
+
msgid "PHP Version"
|
267 |
+
msgstr "PHP 版本"
|
268 |
+
|
269 |
+
#: includes/class-yith-system-status.php:114
|
270 |
+
msgid "TLS Version"
|
271 |
+
msgstr "TLS 版本"
|
272 |
+
|
273 |
+
#: includes/class-yith-system-status.php:115
|
274 |
+
msgid "WordPress Cron"
|
275 |
+
msgstr "WordPress Cron 工作排程"
|
276 |
+
|
277 |
+
#: includes/class-yith-system-status.php:116
|
278 |
+
msgid "SimpleXML"
|
279 |
+
msgstr "SimpleXML"
|
280 |
+
|
281 |
+
#: includes/class-yith-system-status.php:117
|
282 |
+
msgid "MultiByte String"
|
283 |
+
msgstr "MultiByte 字串"
|
284 |
+
|
285 |
+
#: includes/class-yith-system-status.php:118
|
286 |
+
msgid "ImageMagick Version"
|
287 |
+
msgstr "ImageMagick 版本"
|
288 |
+
|
289 |
+
#: includes/class-yith-system-status.php:119
|
290 |
+
msgid "GD Library"
|
291 |
+
msgstr "GD 圖形庫"
|
292 |
+
|
293 |
+
#: includes/class-yith-system-status.php:120
|
294 |
+
msgid "Iconv Module"
|
295 |
+
msgstr "Iconv 模組"
|
296 |
+
|
297 |
+
#: includes/class-yith-system-status.php:121
|
298 |
+
msgid "OPCache Save Comments"
|
299 |
+
msgstr "OPCache 儲存評論"
|
300 |
+
|
301 |
+
#: includes/class-yith-system-status.php:122
|
302 |
+
msgid "URL FOpen"
|
303 |
+
msgstr "URL FOpen"
|
304 |
+
|
305 |
+
#: includes/class-yith-system-status.php:140
|
306 |
+
#: includes/class-yith-system-status.php:141
|
307 |
+
#: templates/sysinfo/system-information-panel.php:11
|
308 |
+
msgid "System Status"
|
309 |
+
msgstr "系統狀態"
|
310 |
+
|
311 |
+
#: includes/class-yith-system-status.php:183
|
312 |
+
msgid "YITH Plugins"
|
313 |
+
msgstr "YITH 外掛"
|
314 |
+
|
315 |
+
#: includes/class-yith-system-status.php:191
|
316 |
+
msgid "WooCommerce"
|
317 |
+
msgstr "WooCommerce"
|
318 |
+
|
319 |
+
#: includes/class-yith-system-status.php:342
|
320 |
+
msgid "Warning!"
|
321 |
+
msgstr "警告!"
|
322 |
+
|
323 |
+
#. translators: %1$s open link tag, %2$s open link tag
|
324 |
+
#: includes/class-yith-system-status.php:346
|
325 |
+
msgid ""
|
326 |
+
"The system check has detected some compatibility issues on your installation."
|
327 |
+
"%1$sClick here%2$s to know more"
|
328 |
+
msgstr ""
|
329 |
+
"系統檢查檢測到您的安裝存在一些相容性問題。%1$s 點擊此處 %2$s 了解更多訊息"
|
330 |
+
|
331 |
+
#: includes/class-yith-system-status.php:496
|
332 |
+
msgid "Enabled"
|
333 |
+
msgstr "啟用"
|
334 |
+
|
335 |
+
#: includes/class-yith-system-status.php:496
|
336 |
+
msgid "Disabled"
|
337 |
+
msgstr "關閉"
|
338 |
+
|
339 |
+
#: includes/class-yith-system-status.php:501
|
340 |
+
msgid "N/A"
|
341 |
+
msgstr "不詳"
|
342 |
+
|
343 |
+
#. translators: %1$s plugin name, %2$s requirement name
|
344 |
+
#: includes/class-yith-system-status.php:528
|
345 |
+
msgid "%1$s needs %2$s enabled"
|
346 |
+
msgstr "%1$s 需要 %2$s 啟動"
|
347 |
+
|
348 |
+
#. translators: %1$s plugin name, %2$s required memory amount
|
349 |
+
#: includes/class-yith-system-status.php:531
|
350 |
+
msgid "%1$s needs at least %2$s of available memory"
|
351 |
+
msgstr "%1$s 需要最少 %2$s 的可用記憶體"
|
352 |
+
|
353 |
+
#. translators: %1$s plugin name, %2$s version number
|
354 |
+
#: includes/class-yith-system-status.php:534
|
355 |
+
msgid "%1$s needs at least %2$s version"
|
356 |
+
msgstr "%1$s 需要最低 %2$s 的版本"
|
357 |
+
|
358 |
+
#: includes/class-yith-system-status.php:558
|
359 |
+
msgid ""
|
360 |
+
"Update it to the latest version in order to benefit of all new features and "
|
361 |
+
"security updates."
|
362 |
+
msgstr "將其更新到最新版本,以便從所有新功能和安全更新中受益。"
|
363 |
+
|
364 |
+
#: includes/class-yith-system-status.php:562
|
365 |
+
#: includes/class-yith-system-status.php:568
|
366 |
+
msgid "Contact your hosting company in order to update it."
|
367 |
+
msgstr "聯絡您的網站主機托管公司進行更新"
|
368 |
+
|
369 |
+
#: includes/class-yith-system-status.php:566
|
370 |
+
msgid "Contact your hosting company in order to install it."
|
371 |
+
msgstr "聯絡您的網站主機托管公司進行安裝"
|
372 |
+
|
373 |
+
#. translators: %1$s code, %2$s file name
|
374 |
+
#: includes/class-yith-system-status.php:573
|
375 |
+
msgid "Remove %1$s from %2$s file"
|
376 |
+
msgstr "從 %1$s 到 %2$s 移除這些檔案"
|
377 |
+
|
378 |
+
#: includes/class-yith-system-status.php:581
|
379 |
+
msgid "Contact your hosting company in order to enable it."
|
380 |
+
msgstr "聯絡你的主機托管公司去啟動"
|
381 |
+
|
382 |
+
#. translators: %1$s opening link tag, %2$s closing link tag
|
383 |
+
#: includes/class-yith-system-status.php:585
|
384 |
+
#: includes/class-yith-system-status.php:608
|
385 |
+
msgid ""
|
386 |
+
"Read more %1$shere%2$s or contact your hosting company in order to increase "
|
387 |
+
"it."
|
388 |
+
msgstr "閱讀更多 %1$shere%2$s 或聯繫您的託管公司以增加它。"
|
389 |
+
|
390 |
+
#. translators: %s recommended memory amount
|
391 |
+
#: includes/class-yith-system-status.php:605
|
392 |
+
msgid ""
|
393 |
+
"For optimal functioning of our plugins, we suggest setting at least %s of "
|
394 |
+
"available memory"
|
395 |
+
msgstr "為了使我們的外掛發揮最佳功能,我們建議至少設置 %s 的可用記憶體"
|
396 |
+
|
397 |
+
#. translators: %1$s TLS label, %2$s cURL label
|
398 |
+
#: includes/class-yith-system-status.php:613
|
399 |
+
msgid ""
|
400 |
+
"The system check cannot determine which %1$s version is installed because "
|
401 |
+
"%2$s module is disabled. Ask your hosting company to enable it."
|
402 |
+
msgstr ""
|
403 |
+
"系統檢查無法確定安裝了哪個 %1$s 版本,因為 %2$s 模組已禁用。 要求您的主機託管"
|
404 |
+
"公司啟用它。"
|
405 |
+
|
406 |
+
#. translators: %1$s TLS label
|
407 |
+
#: includes/class-yith-system-status.php:616
|
408 |
+
msgid ""
|
409 |
+
"The system check cannot determine which %1$s version is installed due to a "
|
410 |
+
"connection issue between your site and our server."
|
411 |
+
msgstr ""
|
412 |
+
"由於您的網站和我們的伺服器之間的連接問題,系統檢查無法確定安裝了哪個 %1$s 版"
|
413 |
+
"本。"
|
414 |
+
|
415 |
+
#: templates/bh-onboarding/onboarding-tabs.php:63
|
416 |
+
msgid "Save"
|
417 |
+
msgstr ""
|
418 |
+
|
419 |
+
#: templates/fields/ajax-customers.php:41
|
420 |
+
msgid "Search for a customer..."
|
421 |
+
msgstr "搜尋顧客..."
|
422 |
+
|
423 |
+
#. translators: 1. user display name; 2. user ID; 3. user email.
|
424 |
+
#: templates/fields/ajax-customers.php:68
|
425 |
+
#: templates/fields/ajax-customers.php:79
|
426 |
+
msgid "%1$s (#%2$s – %3$s)"
|
427 |
+
msgstr "%1$s (#%2$s – %3$s)"
|
428 |
+
|
429 |
+
#: templates/fields/ajax-posts.php:41
|
430 |
+
msgid "Search for a post..."
|
431 |
+
msgstr "搜尋文章..."
|
432 |
+
|
433 |
+
#: templates/fields/ajax-products.php:16
|
434 |
+
msgid "Search for a product..."
|
435 |
+
msgstr "搜尋商品..."
|
436 |
+
|
437 |
+
#: templates/fields/ajax-terms.php:41
|
438 |
+
msgid "Search for a category..."
|
439 |
+
msgstr "搜尋分類..."
|
440 |
+
|
441 |
+
#: templates/fields/customtabs.php:17
|
442 |
+
msgid "Close all"
|
443 |
+
msgstr "全部關閉"
|
444 |
+
|
445 |
+
#: templates/fields/customtabs.php:17
|
446 |
+
msgid "Expand all"
|
447 |
+
msgstr "全部展開"
|
448 |
+
|
449 |
+
#: templates/fields/customtabs.php:25 templates/fields/customtabs.php:68
|
450 |
+
msgid "Remove"
|
451 |
+
msgstr "移除"
|
452 |
+
|
453 |
+
#: templates/fields/customtabs.php:34 templates/fields/customtabs.php:76
|
454 |
+
msgid "Name"
|
455 |
+
msgstr "名字"
|
456 |
+
|
457 |
+
#: templates/fields/customtabs.php:40 templates/fields/customtabs.php:81
|
458 |
+
msgid "Value"
|
459 |
+
msgstr "數值"
|
460 |
+
|
461 |
+
#: templates/fields/customtabs.php:41 templates/fields/customtabs.php:82
|
462 |
+
msgid "Content of the tab. (HTML is supported)"
|
463 |
+
msgstr "頁籤內容(支援 HTML)"
|
464 |
+
|
465 |
+
#: templates/fields/customtabs.php:52
|
466 |
+
msgid "Add custom product tab"
|
467 |
+
msgstr "增加自訂商品頁籤"
|
468 |
+
|
469 |
+
#: templates/fields/customtabs.php:93
|
470 |
+
msgid "Do you want to remove the custom tab?"
|
471 |
+
msgstr "請問你想要移除這個自訂的頁籤嗎?"
|
472 |
+
|
473 |
+
#: templates/fields/date-format.php:65
|
474 |
+
msgid "Custom:"
|
475 |
+
msgstr "自訂:"
|
476 |
+
|
477 |
+
#: templates/fields/date-format.php:70
|
478 |
+
msgid "Preview:"
|
479 |
+
msgstr "預覽:"
|
480 |
+
|
481 |
+
#: templates/fields/icons.php:78
|
482 |
+
msgid "Set Default"
|
483 |
+
msgstr "設成預設"
|
484 |
+
|
485 |
+
#: templates/fields/image-gallery.php:29 templates/fields/image-gallery.php:40
|
486 |
+
msgid "Delete image"
|
487 |
+
msgstr "刪除圖片"
|
488 |
+
|
489 |
+
#: templates/fields/image-gallery.php:37
|
490 |
+
msgid "Add Images to Gallery"
|
491 |
+
msgstr "增加圖片至藝廊"
|
492 |
+
|
493 |
+
#: templates/fields/image-gallery.php:38
|
494 |
+
msgid "Add to gallery"
|
495 |
+
msgstr "增加至藝廊"
|
496 |
+
|
497 |
+
#: templates/fields/image-gallery.php:39
|
498 |
+
msgid "Add images"
|
499 |
+
msgstr "增加圖片"
|
500 |
+
|
501 |
+
#: templates/fields/image-gallery.php:41
|
502 |
+
msgid "Delete"
|
503 |
+
msgstr "刪除"
|
504 |
+
|
505 |
+
#: templates/fields/select-buttons.php:19
|
506 |
+
msgid "Add All"
|
507 |
+
msgstr "增加全部"
|
508 |
+
|
509 |
+
#: templates/fields/select-buttons.php:20
|
510 |
+
msgid "Remove All"
|
511 |
+
msgstr "移除全部"
|
512 |
+
|
513 |
+
#: templates/fields/sidebars.php:20
|
514 |
+
msgid "Left sidebar"
|
515 |
+
msgstr "左側小工具"
|
516 |
+
|
517 |
+
#: templates/fields/sidebars.php:23
|
518 |
+
msgid "Right sidebar"
|
519 |
+
msgstr "右側小工具"
|
520 |
+
|
521 |
+
#: templates/fields/sidebars.php:26 templates/fields/sidebars.php:29
|
522 |
+
msgid "No sidebar"
|
523 |
+
msgstr "沒有小工具"
|
524 |
+
|
525 |
+
#: templates/fields/sidebars.php:39
|
526 |
+
msgid "Left Sidebar"
|
527 |
+
msgstr "左側小工具"
|
528 |
+
|
529 |
+
#: templates/fields/sidebars.php:41 templates/fields/sidebars.php:56
|
530 |
+
msgid "Choose a sidebar"
|
531 |
+
msgstr "選擇一個小工具"
|
532 |
+
|
533 |
+
#: templates/fields/sidebars.php:54
|
534 |
+
msgid "Right Sidebar"
|
535 |
+
msgstr "右側小工具"
|
536 |
+
|
537 |
+
#: templates/fields/upload.php:34
|
538 |
+
#: templates/panel/woocommerce/woocommerce-upload.php:37
|
539 |
+
msgid "Upload"
|
540 |
+
msgstr "上傳"
|
541 |
+
|
542 |
+
#: templates/fields/upload.php:39
|
543 |
+
msgid "Reset"
|
544 |
+
msgstr "重置"
|
545 |
+
|
546 |
+
#. translators: %s is the plugin version.
|
547 |
+
#: templates/panel/welcome-modals/update.php:34
|
548 |
+
msgid "is successfully updated to version %s."
|
549 |
+
msgstr ""
|
550 |
+
|
551 |
+
#. translators: %s is the plugin version.
|
552 |
+
#: templates/panel/welcome-modals/update.php:44
|
553 |
+
msgid "What's new in version %s"
|
554 |
+
msgstr ""
|
555 |
+
|
556 |
+
#: templates/panel/welcome-modals/update.php:49
|
557 |
+
msgid "Check the changelog >"
|
558 |
+
msgstr ""
|
559 |
+
|
560 |
+
#: templates/panel/welcome-modals/update.php:64
|
561 |
+
#: templates/panel/welcome-modals/welcome.php:60
|
562 |
+
msgid "Got it, close this window"
|
563 |
+
msgstr ""
|
564 |
+
|
565 |
+
#: templates/panel/welcome-modals/welcome.php:30
|
566 |
+
msgid "Thank you for using our plugin"
|
567 |
+
msgstr ""
|
568 |
+
|
569 |
+
#. translators: %s is the number of steps.
|
570 |
+
#: templates/panel/welcome-modals/welcome.php:45
|
571 |
+
msgid "Start with these %s steps:"
|
572 |
+
msgstr ""
|
573 |
+
|
574 |
+
#: templates/panel/woocommerce/woocommerce-form.php:29
|
575 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
576 |
+
msgid "Save Options"
|
577 |
+
msgstr "儲存選項"
|
578 |
+
|
579 |
+
#: templates/panel/woocommerce/woocommerce-form.php:33
|
580 |
+
msgid "Options Saved"
|
581 |
+
msgstr "選項已儲存"
|
582 |
+
|
583 |
+
#: templates/panel/woocommerce/woocommerce-form.php:43
|
584 |
+
msgid "Reset Defaults"
|
585 |
+
msgstr "重置為預設值"
|
586 |
+
|
587 |
+
#: templates/sysinfo/system-information-panel.php:12
|
588 |
+
msgid "PHPInfo"
|
589 |
+
msgstr "PHP 信息"
|
590 |
+
|
591 |
+
#: templates/sysinfo/system-information-panel.php:13
|
592 |
+
#: templates/sysinfo/tabs/error-log.php:25
|
593 |
+
msgid "Log Files"
|
594 |
+
msgstr "紀錄檔"
|
595 |
+
|
596 |
+
#: templates/sysinfo/system-information-panel.php:22
|
597 |
+
msgid "YITH System Information"
|
598 |
+
msgstr "YITH 系統信息"
|
599 |
+
|
600 |
+
#: templates/sysinfo/tabs/error-log.php:13
|
601 |
+
msgid "WP debug.log file"
|
602 |
+
msgstr "WP 除錯日誌檔"
|
603 |
+
|
604 |
+
#: templates/sysinfo/tabs/error-log.php:18
|
605 |
+
msgid "PHP error_log file"
|
606 |
+
msgstr "PHP 錯誤日誌檔"
|
607 |
+
|
608 |
+
#: templates/sysinfo/tabs/error-log.php:60
|
609 |
+
msgid "Download"
|
610 |
+
msgstr "下載"
|
611 |
+
|
612 |
+
#: templates/sysinfo/tabs/error-log.php:73
|
613 |
+
msgid "The file size exceeds 8 megabytes so it must be downloaded"
|
614 |
+
msgstr "檔案大小超過 8 兆位元,因此必須下載"
|
615 |
+
|
616 |
+
#. translators: %s file name.
|
617 |
+
#: templates/sysinfo/tabs/error-log.php:97
|
618 |
+
msgid ""
|
619 |
+
"No Log file available. Enable the WordPress debug by adding this in the %s "
|
620 |
+
"file of your installation"
|
621 |
+
msgstr ""
|
622 |
+
"沒有可用的日誌文件。 通過將其添加到安裝的 %s 文件中來啟用 WordPress 除錯"
|
623 |
+
|
624 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
625 |
+
msgid "Copied!"
|
626 |
+
msgstr "已複製!"
|
627 |
+
|
628 |
+
#: templates/sysinfo/tabs/error-log.php:106
|
629 |
+
msgid "Copy Code"
|
630 |
+
msgstr "複製程式碼"
|
631 |
+
|
632 |
+
#: templates/sysinfo/tabs/main.php:17
|
633 |
+
msgid "Site Info"
|
634 |
+
msgstr "網站信息"
|
635 |
+
|
636 |
+
#: templates/sysinfo/tabs/main.php:22
|
637 |
+
msgid "Site URL"
|
638 |
+
msgstr "網站網址"
|
639 |
+
|
640 |
+
#: templates/sysinfo/tabs/main.php:31
|
641 |
+
msgid "Output IP Address"
|
642 |
+
msgstr "輸出 IP 位置"
|
643 |
+
|
644 |
+
#: templates/sysinfo/tabs/main.php:39
|
645 |
+
msgid "Defined WP_CACHE"
|
646 |
+
msgstr "已定義 WP_CACHE"
|
647 |
+
|
648 |
+
#: templates/sysinfo/tabs/main.php:42 templates/sysinfo/tabs/main.php:50
|
649 |
+
msgid "Yes"
|
650 |
+
msgstr "是"
|
651 |
+
|
652 |
+
#: templates/sysinfo/tabs/main.php:47
|
653 |
+
msgid "External object cache"
|
654 |
+
msgstr "外部物件快取"
|
655 |
+
|
656 |
+
#: templates/sysinfo/tabs/main.php:55
|
657 |
+
msgid "YITH Plugin Framework Version"
|
658 |
+
msgstr "YITH 外掛 Framework 版本"
|
659 |
+
|
660 |
+
#. translators: %s is the name of the plugin that is loading the framework.
|
661 |
+
#: templates/sysinfo/tabs/main.php:64
|
662 |
+
msgid "loaded by %s"
|
663 |
+
msgstr "讀取了 %s"
|
664 |
+
|
665 |
+
#: templates/sysinfo/tabs/main.php:73
|
666 |
+
msgid "Plugins Requirements"
|
667 |
+
msgstr "外掛需求"
|
668 |
+
|
669 |
+
#: templates/sysinfo/tabs/main.php:108
|
670 |
+
msgid "Database Info"
|
671 |
+
msgstr "資料庫信息"
|
672 |
+
|
673 |
+
#: templates/sysinfo/tabs/main.php:113
|
674 |
+
msgid "MySQL version"
|
675 |
+
msgstr "MySQL 版本"
|
676 |
+
|
677 |
+
#. Translators: %s: Codex link.
|
678 |
+
#: templates/sysinfo/tabs/main.php:123
|
679 |
+
msgid "WordPress recommends a minimum MySQL version of 5.6. See: %s"
|
680 |
+
msgstr "WordPress 建議至少要有 MySQL 5.6. 以上版本,請查看: %s"
|
681 |
+
|
682 |
+
#: templates/sysinfo/tabs/main.php:123
|
683 |
+
msgid "WordPress requirements"
|
684 |
+
msgstr "WordPress 要求"
|
685 |
+
|
686 |
+
#: templates/sysinfo/tabs/main.php:130
|
687 |
+
msgid "Total Database Size"
|
688 |
+
msgstr "總資料庫大小"
|
689 |
+
|
690 |
+
#: templates/sysinfo/tabs/main.php:138
|
691 |
+
msgid "Database Data Size"
|
692 |
+
msgstr "資料庫數據大小"
|
693 |
+
|
694 |
+
#: templates/sysinfo/tabs/main.php:146
|
695 |
+
msgid "Database Index Size"
|
696 |
+
msgstr "資料庫索引大小"
|
697 |
+
|
698 |
+
#: templates/sysinfo/tabs/main.php:154
|
699 |
+
msgid "Database Free Size"
|
700 |
+
msgstr "資料庫可用大小"
|
701 |
+
|
702 |
+
#. Translators: %1$f: Table size, %2$f: Index size, %3$f: Free size, %4$s
|
703 |
+
#. Engine.
|
704 |
+
#: templates/sysinfo/tabs/main.php:168
|
705 |
+
msgid "Data: %1$.2fMB | Index: %2$.2fMB | Free: %3$.2fMB | Engine: %4$s"
|
706 |
+
msgstr "資料數據: %1$.2fMB | 索引: %2$.2fMB | 可用: %3$.2fMB | 引擎: %4$s"
|
707 |
+
|
708 |
+
#. translators: %s is the title of the post object.
|
709 |
+
#: yit-functions.php:1938
|
710 |
+
msgid "Are you sure you want to move \"%s\" to trash?"
|
711 |
+
msgstr "您確定要將 \"%s\" 丟進垃圾桶嗎?"
|
712 |
+
|
713 |
+
#. translators: %s is the title of the post object.
|
714 |
+
#: yit-functions.php:1940 yit-functions.php:2100
|
715 |
+
msgid "Are you sure you want to delete \"%s\"?"
|
716 |
+
msgstr "您確定要刪除 \"%s\" 嗎?"
|
717 |
+
|
718 |
+
#: yit-functions.php:2038 yit-functions.php:2046 yit-functions.php:2163
|
719 |
+
msgid "Further actions"
|
720 |
+
msgstr "進一步動作"
|
721 |
+
|
722 |
+
#: yit-plugin.php:233
|
723 |
+
msgid "License"
|
724 |
+
msgstr "授權"
|
725 |
+
|
726 |
+
#. translators: 1. Plugin(s) name(s).
|
727 |
+
#: yit-plugin.php:272
|
728 |
+
msgid ""
|
729 |
+
"%s was deactivated as you're running an higher tier version of the same "
|
730 |
+
"plugin."
|
731 |
+
msgid_plural ""
|
732 |
+
"%s were deactivated as you're running higher tier versions of the same "
|
733 |
+
"plugins."
|
734 |
+
msgstr[0] ""
|
735 |
+
|
736 |
+
#. Author of the plugin/theme
|
737 |
+
msgid "YITH"
|
738 |
+
msgstr "YITH"
|
739 |
+
|
740 |
+
#. translators: %s it the Elementor Widget title.
|
741 |
+
#: includes/builders/elementor/class-yith-elementor-widget.php:252
|
742 |
+
msgctxt "Elementor Widget - section title"
|
743 |
+
msgid "%s - Options"
|
744 |
+
msgstr "%s - 選項"
|
745 |
+
|
746 |
+
#: includes/builders/gutenberg/class-yith-gutenberg.php:152
|
747 |
+
msgctxt "[gutenberg]: Category Name"
|
748 |
+
msgid "YITH"
|
749 |
+
msgstr "YITH"
|
750 |
+
|
751 |
+
#: includes/class-yit-assets.php:136
|
752 |
+
msgctxt "Button text"
|
753 |
+
msgid "Confirm"
|
754 |
+
msgstr "確認"
|
755 |
+
|
756 |
+
#: includes/class-yit-assets.php:137
|
757 |
+
msgctxt "Button text"
|
758 |
+
msgid "Cancel"
|
759 |
+
msgstr "取消"
|
760 |
+
|
761 |
+
#: includes/class-yit-assets.php:150 yit-functions.php:2009
|
762 |
+
msgctxt "Trash confirmation action"
|
763 |
+
msgid "Yes, move to trash"
|
764 |
+
msgstr "是的,將它移至垃圾桶"
|
765 |
+
|
766 |
+
#: includes/class-yit-assets.php:154 yit-functions.php:2027
|
767 |
+
#: yit-functions.php:2154
|
768 |
+
msgctxt "Delete confirmation action"
|
769 |
+
msgid "Yes, delete"
|
770 |
+
msgstr "是的,刪除"
|
771 |
+
|
772 |
+
#. translators: 1. Plugin name.
|
773 |
+
#: includes/class-yit-plugin-panel.php:804
|
774 |
+
msgctxt "Help tab default title"
|
775 |
+
msgid "Thank you for purchasing %s!"
|
776 |
+
msgstr "感謝您購買 %s !"
|
777 |
+
|
778 |
+
#: includes/class-yit-plugin-panel.php:804
|
779 |
+
msgctxt "Help tab default title"
|
780 |
+
msgid "Thank you for using %s!"
|
781 |
+
msgstr ""
|
782 |
+
|
783 |
+
#: includes/class-yit-plugin-panel.php:812
|
784 |
+
msgctxt "Help tab default description"
|
785 |
+
msgid ""
|
786 |
+
"We want to help you enjoy a wonderful experience with all of our products."
|
787 |
+
msgstr "我們希望幫助您享受我們所有產品的美妙體驗。"
|
788 |
+
|
789 |
+
#: includes/class-yit-plugin-panel.php:863
|
790 |
+
msgctxt "Premium tab name"
|
791 |
+
msgid "Get premium"
|
792 |
+
msgstr "取得高級版"
|
793 |
+
|
794 |
+
#: includes/class-yit-plugin-panel.php:875
|
795 |
+
msgctxt "Help tab name"
|
796 |
+
msgid "Help"
|
797 |
+
msgstr "幫助"
|
798 |
+
|
799 |
+
#: includes/class-yith-dashboard.php:96
|
800 |
+
msgctxt "Plugin FW"
|
801 |
+
msgid "View Changelog"
|
802 |
+
msgstr "查看修改紀錄"
|
803 |
+
|
804 |
+
#: includes/class-yith-dashboard.php:97
|
805 |
+
msgctxt "Plugin FW"
|
806 |
+
msgid "Latest update released on"
|
807 |
+
msgstr "最近一次更新於"
|
808 |
+
|
809 |
+
#: includes/class-yith-dashboard.php:137
|
810 |
+
msgctxt "Button label"
|
811 |
+
msgid "Close"
|
812 |
+
msgstr "關閉"
|
813 |
+
|
814 |
+
#: includes/privacy/class-yith-privacy.php:61
|
815 |
+
msgctxt "Privacy Policy Guide Title"
|
816 |
+
msgid "YITH Plugins"
|
817 |
+
msgstr "YITH 外掛"
|
818 |
+
|
819 |
+
#: includes/privacy/class-yith-privacy.php:93
|
820 |
+
msgctxt "Privacy Policy Content"
|
821 |
+
msgid ""
|
822 |
+
"This sample language includes the basics around what personal data your "
|
823 |
+
"store may be collecting, storing and sharing, as well as who may have access "
|
824 |
+
"to that data. Depending on what settings are enabled and which additional "
|
825 |
+
"plugins are used, the specific information shared by your store will vary. "
|
826 |
+
"We recommend consulting with a lawyer when deciding what information to "
|
827 |
+
"disclose on your privacy policy."
|
828 |
+
msgstr ""
|
829 |
+
"此示例語言包括有關您的商店可能收集、保存和共享哪些個人數據以及誰可以訪問該數"
|
830 |
+
"據的基礎知識。 根據啟用的設置和使用的附加外掛,您的商店共享的具體信息會有所不"
|
831 |
+
"同。 在決定在您的隱私政策中披露哪些信息時,我們建議您諮詢律師。"
|
832 |
+
|
833 |
+
#: includes/privacy/class-yith-privacy.php:97
|
834 |
+
msgctxt "Privacy Policy Content"
|
835 |
+
msgid "What we collect and store"
|
836 |
+
msgstr "我們收集和保存的內容"
|
837 |
+
|
838 |
+
#: includes/privacy/class-yith-privacy.php:100
|
839 |
+
msgctxt "Privacy Policy Content"
|
840 |
+
msgid "Who on our team has access"
|
841 |
+
msgstr "我們團隊中的哪些人有權訪問"
|
842 |
+
|
843 |
+
#: includes/privacy/class-yith-privacy.php:103
|
844 |
+
msgctxt "Privacy Policy Content"
|
845 |
+
msgid "What we share with others"
|
846 |
+
msgstr "我們與他人分享的內容"
|
847 |
+
|
848 |
+
#: includes/privacy/class-yith-privacy.php:106
|
849 |
+
msgctxt "Privacy Policy Content"
|
850 |
+
msgid "Payments"
|
851 |
+
msgstr "付款"
|
852 |
+
|
853 |
+
#: templates/fields/copy-to-clipboard.php:41
|
854 |
+
msgctxt "Copy-to-clipboard message"
|
855 |
+
msgid "Copied!"
|
856 |
+
msgstr "已複製!"
|
857 |
+
|
858 |
+
#: templates/fields/copy-to-clipboard.php:45
|
859 |
+
msgctxt "Copy-to-clipboard button text"
|
860 |
+
msgid "Copy"
|
861 |
+
msgstr "複製"
|
862 |
+
|
863 |
+
#: templates/fields/dimensions.php:13
|
864 |
+
msgctxt "Position in the \"Dimensions\" field"
|
865 |
+
msgid "Top"
|
866 |
+
msgstr "上"
|
867 |
+
|
868 |
+
#: templates/fields/dimensions.php:14
|
869 |
+
msgctxt "Position in the \"Dimensions\" field"
|
870 |
+
msgid "Right"
|
871 |
+
msgstr "右"
|
872 |
+
|
873 |
+
#: templates/fields/dimensions.php:15
|
874 |
+
msgctxt "Position in the \"Dimensions\" field"
|
875 |
+
msgid "Bottom"
|
876 |
+
msgstr "下"
|
877 |
+
|
878 |
+
#: templates/fields/dimensions.php:16
|
879 |
+
msgctxt "Position in the \"Dimensions\" field"
|
880 |
+
msgid "Left"
|
881 |
+
msgstr "左"
|
882 |
+
|
883 |
+
#: templates/fields/dimensions.php:94
|
884 |
+
msgctxt "Tooltip in the \"Dimensions\" field"
|
885 |
+
msgid "Link values together"
|
886 |
+
msgstr "一起連接的數值"
|
887 |
+
|
888 |
+
#: templates/fields/image-dimensions.php:18
|
889 |
+
msgctxt "Image width field label"
|
890 |
+
msgid "Width"
|
891 |
+
msgstr "寬"
|
892 |
+
|
893 |
+
#: templates/fields/image-dimensions.php:23
|
894 |
+
msgctxt "Image height field label"
|
895 |
+
msgid "Height"
|
896 |
+
msgstr "高"
|
897 |
+
|
898 |
+
#: templates/fields/onoff.php:28
|
899 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
900 |
+
msgid "YES"
|
901 |
+
msgstr "是"
|
902 |
+
|
903 |
+
#: templates/fields/onoff.php:29
|
904 |
+
msgctxt "YES/NO button: use MAX 4 characters!"
|
905 |
+
msgid "NO"
|
906 |
+
msgstr "不"
|
907 |
+
|
908 |
+
#. translators: 1. Url to EN playlist.
|
909 |
+
#: templates/panel/help-tab.php:89
|
910 |
+
msgctxt "Help tab view all video link"
|
911 |
+
msgid ""
|
912 |
+
"Check the full <a href=\"%s\" target=\"_blank\">Playlist on Youtube</a> to "
|
913 |
+
"learn more >"
|
914 |
+
msgstr ""
|
915 |
+
"查看全部的 <a href=\"%s\" target=\"_blank\">Youtube</a> 播放清單去學習更多 >"
|
916 |
+
|
917 |
+
#: templates/panel/help-tab.php:96
|
918 |
+
msgctxt "Help tab Watch Videotutorials link"
|
919 |
+
msgid "Videos are also available in:"
|
920 |
+
msgstr "影片也可用於:"
|
921 |
+
|
922 |
+
#: templates/panel/help-tab.php:126
|
923 |
+
msgctxt "Help tab Read Documentation link"
|
924 |
+
msgid "Read the documentation"
|
925 |
+
msgstr "閱讀說明文件"
|
926 |
+
|
927 |
+
#: templates/panel/help-tab.php:129
|
928 |
+
msgctxt "Help tab Read Documentation link"
|
929 |
+
msgid "to learn how the plugin works from the basics."
|
930 |
+
msgstr "了解外掛的基礎工作原理"
|
931 |
+
|
932 |
+
#: templates/panel/help-tab.php:139
|
933 |
+
msgctxt "Help tab Watch video tutorials link"
|
934 |
+
msgid "Watch our video tutorials"
|
935 |
+
msgstr "查看我們的教學影片"
|
936 |
+
|
937 |
+
#: templates/panel/help-tab.php:142
|
938 |
+
msgctxt "Help tab Watch video tutorials link"
|
939 |
+
msgid "to see some helpful use cases."
|
940 |
+
msgstr "查看一些有用的案例"
|
941 |
+
|
942 |
+
#: templates/panel/help-tab.php:152
|
943 |
+
msgctxt "Help tab view FAQs link"
|
944 |
+
msgid "Check the FAQs"
|
945 |
+
msgstr "檢查問與答"
|
946 |
+
|
947 |
+
#: templates/panel/help-tab.php:155
|
948 |
+
msgctxt "Help tab view FAQs link"
|
949 |
+
msgid "to find answers to your doubts."
|
950 |
+
msgstr "找到你的問題答案"
|
951 |
+
|
952 |
+
#: templates/panel/help-tab.php:170
|
953 |
+
msgctxt "Help tab FAQ title"
|
954 |
+
msgid "Last FAQs in our Help Center"
|
955 |
+
msgstr "在我們的幫助中心的最新問答"
|
956 |
+
|
957 |
+
#: templates/panel/help-tab.php:184
|
958 |
+
msgctxt "Help tab FAQ link"
|
959 |
+
msgid "View all FAQs >"
|
960 |
+
msgstr "查看所有的問與答 >"
|
961 |
+
|
962 |
+
#: templates/panel/help-tab.php:193
|
963 |
+
msgctxt "Help tab submit ticket title"
|
964 |
+
msgid "Need help?"
|
965 |
+
msgstr "需要幫忙?"
|
966 |
+
|
967 |
+
#: templates/panel/help-tab.php:196
|
968 |
+
msgctxt "Help tab submit ticket description"
|
969 |
+
msgid ""
|
970 |
+
"If you are experiencing any technical issues, ask for help from our "
|
971 |
+
"developers. Submit a ticket through our support desk and we will help you as "
|
972 |
+
"soon as possible."
|
973 |
+
msgstr ""
|
974 |
+
"如果您遇到任何技術問題,請向我們的開發人員尋求幫助。 通過我們的支援後台提交工"
|
975 |
+
"作單,我們將盡快為您提供幫助。"
|
976 |
+
|
977 |
+
#: templates/panel/help-tab.php:204
|
978 |
+
msgctxt "Help tab submit ticket button"
|
979 |
+
msgid "Submit a ticket"
|
980 |
+
msgstr "提交一張工作單"
|
981 |
+
|
982 |
+
#: templates/panel/help-tab.php:216 templates/panel/help-tab.php:218
|
983 |
+
#: templates/panel/help-tab.php:223
|
984 |
+
msgctxt "Help tab documentation"
|
985 |
+
msgid "Read the plugin documentation"
|
986 |
+
msgstr ""
|
987 |
+
|
988 |
+
#: templates/panel/help-tab.php:220
|
989 |
+
msgctxt "Help tab documentation"
|
990 |
+
msgid "to learn how it works from the basics."
|
991 |
+
msgstr ""
|
992 |
+
|
993 |
+
#: templates/panel/help-tab.php:231 templates/panel/help-tab.php:233
|
994 |
+
msgctxt "Help tab support"
|
995 |
+
msgid "Need some help?"
|
996 |
+
msgstr ""
|
997 |
+
|
998 |
+
#: templates/panel/help-tab.php:235
|
999 |
+
msgctxt "Help tab support"
|
1000 |
+
msgid "From DIY to full-service help"
|
1001 |
+
msgstr ""
|
1002 |
+
|
1003 |
+
#: templates/panel/help-tab.php:238
|
1004 |
+
msgctxt "Help tab support"
|
1005 |
+
msgid ""
|
1006 |
+
"Call or chat 24/7 with our support agents, or let our experts build your "
|
1007 |
+
"site."
|
1008 |
+
msgstr ""
|
1009 |
+
|
1010 |
+
#: templates/panel/help-tab.php:241
|
1011 |
+
msgctxt "Help tab support"
|
1012 |
+
msgid "Yes, I need help"
|
1013 |
+
msgstr ""
|
1014 |
+
|
1015 |
+
#: templates/panel/premium-tab.php:30
|
1016 |
+
msgctxt "Premium Tab"
|
1017 |
+
msgid "Get the premium version to unlock advanced features"
|
1018 |
+
msgstr "取得高級版來解鎖進階的功能特色"
|
1019 |
+
|
1020 |
+
#: templates/panel/premium-tab.php:34
|
1021 |
+
msgctxt "Premium Tab"
|
1022 |
+
msgid "Get premium"
|
1023 |
+
msgstr "取得高級版"
|
1024 |
+
|
1025 |
+
#: templates/panel/premium-tab.php:39
|
1026 |
+
msgctxt "Premium Tab"
|
1027 |
+
msgid "Plugin premium features images"
|
1028 |
+
msgstr "高級版外掛特色圖片"
|
1029 |
+
|
1030 |
+
#. translators: alt attribute of main image tag.
|
1031 |
+
#: templates/panel/premium-tab.php:51 templates/panel/premium-tab.php:58
|
1032 |
+
msgctxt "Premium Tab"
|
1033 |
+
msgid "And so much more!"
|
1034 |
+
msgstr "還有更多!"
|
1035 |
+
|
1036 |
+
#: templates/panel/premium-tab.php:53
|
1037 |
+
msgctxt "Premium Tab"
|
1038 |
+
msgid "Check the premium features >"
|
1039 |
+
msgstr ""
|
1040 |
+
|
1041 |
+
#: templates/panel/premium-tab.php:60
|
1042 |
+
msgctxt "Premium Tab"
|
1043 |
+
msgid "Check the free vs premium features >"
|
1044 |
+
msgstr "查看免費板與高級版的特色比較"
|
1045 |
+
|
1046 |
+
#: templates/panel/premium-tab.php:65
|
1047 |
+
msgctxt "Premium Tab"
|
1048 |
+
msgid "Get the premium version"
|
1049 |
+
msgstr "取得高級版本"
|
1050 |
+
|
1051 |
+
#: yit-functions.php:1952
|
1052 |
+
msgctxt "Post action"
|
1053 |
+
msgid "Preview"
|
1054 |
+
msgstr "預覽"
|
1055 |
+
|
1056 |
+
#: yit-functions.php:1961
|
1057 |
+
msgctxt "Post action"
|
1058 |
+
msgid "View"
|
1059 |
+
msgstr "查看"
|
1060 |
+
|
1061 |
+
#: yit-functions.php:1972
|
1062 |
+
msgctxt "Post action"
|
1063 |
+
msgid "Edit"
|
1064 |
+
msgstr "編輯"
|
1065 |
+
|
1066 |
+
#: yit-functions.php:1980
|
1067 |
+
msgctxt "Post action"
|
1068 |
+
msgid "Duplicate"
|
1069 |
+
msgstr "複製"
|
1070 |
+
|
1071 |
+
#: yit-functions.php:1992
|
1072 |
+
msgctxt "Post action"
|
1073 |
+
msgid "Restore"
|
1074 |
+
msgstr "還原"
|
1075 |
+
|
1076 |
+
#: yit-functions.php:2000
|
1077 |
+
msgctxt "Post action"
|
1078 |
+
msgid "Trash"
|
1079 |
+
msgstr "垃圾桶"
|
1080 |
+
|
1081 |
+
#: yit-functions.php:2017
|
1082 |
+
msgctxt "Post action"
|
1083 |
+
msgid "Delete Permanently"
|
1084 |
+
msgstr "永久刪除"
|
1085 |
+
|
1086 |
+
#: yit-functions.php:2114
|
1087 |
+
msgctxt "Term action"
|
1088 |
+
msgid "View"
|
1089 |
+
msgstr "查看"
|
1090 |
+
|
1091 |
+
#: yit-functions.php:2124
|
1092 |
+
msgctxt "Term action"
|
1093 |
+
msgid "Edit"
|
1094 |
+
msgstr "編輯"
|
1095 |
+
|
1096 |
+
#: yit-functions.php:2132
|
1097 |
+
msgctxt "Term action"
|
1098 |
+
msgid "Duplicate"
|
1099 |
+
msgstr "複製"
|
1100 |
+
|
1101 |
+
#: yit-functions.php:2145
|
1102 |
+
msgctxt "Term action"
|
1103 |
+
msgid "Delete"
|
1104 |
+
msgstr "刪除"
|
1105 |
+
|
1106 |
+
#: yit-plugin.php:85
|
1107 |
+
msgctxt "Plugin Row Meta"
|
1108 |
+
msgid "Live Demo"
|
1109 |
+
msgstr "即時演示"
|
1110 |
+
|
1111 |
+
#: yit-plugin.php:89
|
1112 |
+
msgctxt "Plugin Row Meta"
|
1113 |
+
msgid "Documentation"
|
1114 |
+
msgstr "說明文件"
|
1115 |
+
|
1116 |
+
#: yit-plugin.php:93
|
1117 |
+
msgctxt "Plugin Row Meta"
|
1118 |
+
msgid "Support"
|
1119 |
+
msgstr "支援"
|
1120 |
+
|
1121 |
+
#: yit-plugin.php:97
|
1122 |
+
msgctxt "Plugin Row Meta"
|
1123 |
+
msgid "Premium version"
|
1124 |
+
msgstr "高級版本"
|
1125 |
+
|
1126 |
+
#: yit-plugin.php:229
|
1127 |
+
msgctxt "Action links"
|
1128 |
+
msgid "Settings"
|
1129 |
+
msgstr "設定"
|
plugin-fw/lib/privacy/yit-privacy 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../../includes/privacy/class-yith-privacy.php';
|
plugin-fw/lib/privacy/yit-privacy-plugin-abstract 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../../includes/privacy/class-yith-privacy-plugin-abstract.php';
|
plugin-fw/lib/yit-ajax 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-ajax.php';
|
plugin-fw/lib/yit-assets 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-assets.php';
|
plugin-fw/lib/yit-cpt-unlimited 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-cpt-unlimited.php';
|
plugin-fw/lib/yit-debug 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yith-debug.php';
|
plugin-fw/lib/yit-icons 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-icons.php';
|
plugin-fw/lib/yit-metabox 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-metabox.php';
|
plugin-fw/lib/yit-plugin-common 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-plugin-common.php';
|
plugin-fw/lib/yit-plugin-gradients 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-gradients.php';
|
plugin-fw/lib/yit-plugin-licence 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-plugin-licence.php';
|
plugin-fw/lib/yit-plugin-panel 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-plugin-panel.php';
|
plugin-fw/lib/yit-plugin-panel-wc 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-plugin-panel-woocommerce.php';
|
plugin-fw/lib/yit-plugin-subpanel 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-plugin-subpanel.php';
|
plugin-fw/lib/yit-pointers 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-pointers.php';
|
plugin-fw/lib/yit-theme-licence 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-theme-licence.php';
|
plugin-fw/lib/yit-upgrade 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-upgrade.php';
|
plugin-fw/lib/yit-video 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yit-video.php';
|
plugin-fw/lib/yith-dashboard 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yith-dashboard.php';
|
plugin-fw/lib/yith-gutenberg 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/builders/gutenberg/class-yith-gutenberg.php';
|
plugin-fw/lib/yith-system-status 2.php
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated file. Use the correct one in includes folder instead
|
4 |
+
*
|
5 |
+
* @package YITH\PluginFramework\Classes
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Require the correct file
|
10 |
+
*/
|
11 |
+
require_once __DIR__ . '/../includes/class-yith-system-status.php';
|
plugin-fw/license 2.txt
ADDED
@@ -0,0 +1,740 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
YITH Plugin Framework
|
2 |
+
|
3 |
+
Copyright 2015-2021 Your Inspiration Solutions (email : plugins@yithemes.com)
|
4 |
+
|
5 |
+
This program is free software; you can redistribute it and/or modify
|
6 |
+
it under the terms of the GNU General Public License as published by
|
7 |
+
the Free Software Foundation; either version 3 of the License, or
|
8 |
+
(at your option) any later version.
|
9 |
+
|
10 |
+
This program is distributed in the hope that it will be useful,
|
11 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13 |
+
GNU General Public License for more details.
|
14 |
+
|
15 |
+
You should have received a copy of the GNU General Public License
|
16 |
+
along with this program; if not, write to the Free Software
|
17 |
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
18 |
+
|
19 |
+
YITH Plugin Framework is released under the GPL
|
20 |
+
|
21 |
+
This program incorporates work covered by the following copyright and
|
22 |
+
permission notices:
|
23 |
+
|
24 |
+
node-md5 is Copyright (c) 2011-2015, Paul Vorbach - (c) 2009, Jeff Mott.
|
25 |
+
https://github.com/pvorb/node-md5
|
26 |
+
This package is licensed under the BSD 3-Clause "New" or "Revised" License (the complete text of this license is shown below):
|
27 |
+
https://github.com/pvorb/node-md5/blob/master/LICENSE
|
28 |
+
|
29 |
+
Wherever third party code has been used, credit has been given in the code's
|
30 |
+
comments.
|
31 |
+
|
32 |
+
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
33 |
+
|
34 |
+
GNU GENERAL PUBLIC LICENSE
|
35 |
+
Version 3, 29 June 2007
|
36 |
+
|
37 |
+
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
38 |
+
Everyone is permitted to copy and distribute verbatim copies
|
39 |
+
of this license document, but changing it is not allowed.
|
40 |
+
|
41 |
+
Preamble
|
42 |
+
|
43 |
+
The GNU General Public License is a free, copyleft license for
|
44 |
+
software and other kinds of works.
|
45 |
+
|
46 |
+
The licenses for most software and other practical works are designed
|
47 |
+
to take away your freedom to share and change the works. By contrast,
|
48 |
+
the GNU General Public License is intended to guarantee your freedom to
|
49 |
+
share and change all versions of a program--to make sure it remains free
|
50 |
+
software for all its users. We, the Free Software Foundation, use the
|
51 |
+
GNU General Public License for most of our software; it applies also to
|
52 |
+
any other work released this way by its authors. You can apply it to
|
53 |
+
your programs, too.
|
54 |
+
|
55 |
+
When we speak of free software, we are referring to freedom, not
|
56 |
+
price. Our General Public Licenses are designed to make sure that you
|
57 |
+
have the freedom to distribute copies of free software (and charge for
|
58 |
+
them if you wish), that you receive source code or can get it if you
|
59 |
+
want it, that you can change the software or use pieces of it in new
|
60 |
+
free programs, and that you know you can do these things.
|
61 |
+
|
62 |
+
To protect your rights, we need to prevent others from denying you
|
63 |
+
these rights or asking you to surrender the rights. Therefore, you have
|
64 |
+
certain responsibilities if you distribute copies of the software, or if
|
65 |
+
you modify it: responsibilities to respect the freedom of others.
|
66 |
+
|
67 |
+
For example, if you distribute copies of such a program, whether
|
68 |
+
gratis or for a fee, you must pass on to the recipients the same
|
69 |
+
freedoms that you received. You must make sure that they, too, receive
|
70 |
+
or can get the source code. And you must show them these terms so they
|
71 |
+
know their rights.
|
72 |
+
|
73 |
+
Developers that use the GNU GPL protect your rights with two steps:
|
74 |
+
(1) assert copyright on the software, and (2) offer you this License
|
75 |
+
giving you legal permission to copy, distribute and/or modify it.
|
76 |
+
|
77 |
+
For the developers' and authors' protection, the GPL clearly explains
|
78 |
+
that there is no warranty for this free software. For both users' and
|
79 |
+
authors' sake, the GPL requires that modified versions be marked as
|
80 |
+
changed, so that their problems will not be attributed erroneously to
|
81 |
+
authors of previous versions.
|
82 |
+
|
83 |
+
Some devices are designed to deny users access to install or run
|
84 |
+
modified versions of the software inside them, although the manufacturer
|
85 |
+
can do so. This is fundamentally incompatible with the aim of
|
86 |
+
protecting users' freedom to change the software. The systematic
|
87 |
+
pattern of such abuse occurs in the area of products for individuals to
|
88 |
+
use, which is precisely where it is most unacceptable. Therefore, we
|
89 |
+
have designed this version of the GPL to prohibit the practice for those
|
90 |
+
products. If such problems arise substantially in other domains, we
|
91 |
+
stand ready to extend this provision to those domains in future versions
|
92 |
+
of the GPL, as needed to protect the freedom of users.
|
93 |
+
|
94 |
+
Finally, every program is threatened constantly by software patents.
|
95 |
+
States should not allow patents to restrict development and use of
|
96 |
+
software on general-purpose computers, but in those that do, we wish to
|
97 |
+
avoid the special danger that patents applied to a free program could
|
98 |
+
make it effectively proprietary. To prevent this, the GPL assures that
|
99 |
+
patents cannot be used to render the program non-free.
|
100 |
+
|
101 |
+
The precise terms and conditions for copying, distribution and
|
102 |
+
modification follow.
|
103 |
+
|
104 |
+
TERMS AND CONDITIONS
|
105 |
+
|
106 |
+
0. Definitions.
|
107 |
+
|
108 |
+
"This License" refers to version 3 of the GNU General Public License.
|
109 |
+
|
110 |
+
"Copyright" also means copyright-like laws that apply to other kinds of
|
111 |
+
works, such as semiconductor masks.
|
112 |
+
|
113 |
+
"The Program" refers to any copyrightable work licensed under this
|
114 |
+
License. Each licensee is addressed as "you". "Licensees" and
|
115 |
+
"recipients" may be individuals or organizations.
|
116 |
+
|
117 |
+
To "modify" a work means to copy from or adapt all or part of the work
|
118 |
+
in a fashion requiring copyright permission, other than the making of an
|
119 |
+
exact copy. The resulting work is called a "modified version" of the
|
120 |
+
earlier work or a work "based on" the earlier work.
|
121 |
+
|
122 |
+
A "covered work" means either the unmodified Program or a work based
|
123 |
+
on the Program.
|
124 |
+
|
125 |
+
To "propagate" a work means to do anything with it that, without
|
126 |
+
permission, would make you directly or secondarily liable for
|
127 |
+
infringement under applicable copyright law, except executing it on a
|
128 |
+
computer or modifying a private copy. Propagation includes copying,
|
129 |
+
distribution (with or without modification), making available to the
|
130 |
+
public, and in some countries other activities as well.
|
131 |
+
|
132 |
+
To "convey" a work means any kind of propagation that enables other
|
133 |
+
parties to make or receive copies. Mere interaction with a user through
|
134 |
+
a computer network, with no transfer of a copy, is not conveying.
|
135 |
+
|
136 |
+
An interactive user interface displays "Appropriate Legal Notices"
|
137 |
+
to the extent that it includes a convenient and prominently visible
|
138 |
+
feature that (1) displays an appropriate copyright notice, and (2)
|
139 |
+
tells the user that there is no warranty for the work (except to the
|
140 |
+
extent that warranties are provided), that licensees may convey the
|
141 |
+
work under this License, and how to view a copy of this License. If
|
142 |
+
the interface presents a list of user commands or options, such as a
|
143 |
+
menu, a prominent item in the list meets this criterion.
|
144 |
+
|
145 |
+
1. Source Code.
|
146 |
+
|
147 |
+
The "source code" for a work means the preferred form of the work
|
148 |
+
for making modifications to it. "Object code" means any non-source
|
149 |
+
form of a work.
|
150 |
+
|
151 |
+
A "Standard Interface" means an interface that either is an official
|
152 |
+
standard defined by a recognized standards body, or, in the case of
|
153 |
+
interfaces specified for a particular programming language, one that
|
154 |
+
is widely used among developers working in that language.
|
155 |
+
|
156 |
+
The "System Libraries" of an executable work include anything, other
|
157 |
+
than the work as a whole, that (a) is included in the normal form of
|
158 |
+
packaging a Major Component, but which is not part of that Major
|
159 |
+
Component, and (b) serves only to enable use of the work with that
|
160 |
+
Major Component, or to implement a Standard Interface for which an
|
161 |
+
implementation is available to the public in source code form. A
|
162 |
+
"Major Component", in this context, means a major essential component
|
163 |
+
(kernel, window system, and so on) of the specific operating system
|
164 |
+
(if any) on which the executable work runs, or a compiler used to
|
165 |
+
produce the work, or an object code interpreter used to run it.
|
166 |
+
|
167 |
+
The "Corresponding Source" for a work in object code form means all
|
168 |
+
the source code needed to generate, install, and (for an executable
|
169 |
+
work) run the object code and to modify the work, including scripts to
|
170 |
+
control those activities. However, it does not include the work's
|
171 |
+
System Libraries, or general-purpose tools or generally available free
|
172 |
+
programs which are used unmodified in performing those activities but
|
173 |
+
which are not part of the work. For example, Corresponding Source
|
174 |
+
includes interface definition files associated with source files for
|
175 |
+
the work, and the source code for shared libraries and dynamically
|
176 |
+
linked subprograms that the work is specifically designed to require,
|
177 |
+
such as by intimate data communication or control flow between those
|
178 |
+
subprograms and other parts of the work.
|
179 |
+
|
180 |
+
The Corresponding Source need not include anything that users
|
181 |
+
can regenerate automatically from other parts of the Corresponding
|
182 |
+
Source.
|
183 |
+
|
184 |
+
The Corresponding Source for a work in source code form is that
|
185 |
+
same work.
|
186 |
+
|
187 |
+
2. Basic Permissions.
|
188 |
+
|
189 |
+
All rights granted under this License are granted for the term of
|
190 |
+
copyright on the Program, and are irrevocable provided the stated
|
191 |
+
conditions are met. This License explicitly affirms your unlimited
|
192 |
+
permission to run the unmodified Program. The output from running a
|
193 |
+
covered work is covered by this License only if the output, given its
|
194 |
+
content, constitutes a covered work. This License acknowledges your
|
195 |
+
rights of fair use or other equivalent, as provided by copyright law.
|
196 |
+
|
197 |
+
You may make, run and propagate covered works that you do not
|
198 |
+
convey, without conditions so long as your license otherwise remains
|
199 |
+
in force. You may convey covered works to others for the sole purpose
|
200 |
+
of having them make modifications exclusively for you, or provide you
|
201 |
+
with facilities for running those works, provided that you comply with
|
202 |
+
the terms of this License in conveying all material for which you do
|
203 |
+
not control copyright. Those thus making or running the covered works
|
204 |
+
for you must do so exclusively on your behalf, under your direction
|
205 |
+
and control, on terms that prohibit them from making any copies of
|
206 |
+
your copyrighted material outside their relationship with you.
|
207 |
+
|
208 |
+
Conveying under any other circumstances is permitted solely under
|
209 |
+
the conditions stated below. Sublicensing is not allowed; section 10
|
210 |
+
makes it unnecessary.
|
211 |
+
|
212 |
+
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
213 |
+
|
214 |
+
No covered work shall be deemed part of an effective technological
|
215 |
+
measure under any applicable law fulfilling obligations under article
|
216 |
+
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
217 |
+
similar laws prohibiting or restricting circumvention of such
|
218 |
+
measures.
|
219 |
+
|
220 |
+
When you convey a covered work, you waive any legal power to forbid
|
221 |
+
circumvention of technological measures to the extent such circumvention
|
222 |
+
is effected by exercising rights under this License with respect to
|
223 |
+
the covered work, and you disclaim any intention to limit operation or
|
224 |
+
modification of the work as a means of enforcing, against the work's
|
225 |
+
users, your or third parties' legal rights to forbid circumvention of
|
226 |
+
technological measures.
|
227 |
+
|
228 |
+
4. Conveying Verbatim Copies.
|
229 |
+
|
230 |
+
You may convey verbatim copies of the Program's source code as you
|
231 |
+
receive it, in any medium, provided that you conspicuously and
|
232 |
+
appropriately publish on each copy an appropriate copyright notice;
|
233 |
+
keep intact all notices stating that this License and any
|
234 |
+
non-permissive terms added in accord with section 7 apply to the code;
|
235 |
+
keep intact all notices of the absence of any warranty; and give all
|
236 |
+
recipients a copy of this License along with the Program.
|
237 |
+
|
238 |
+
You may charge any price or no price for each copy that you convey,
|
239 |
+
and you may offer support or warranty protection for a fee.
|
240 |
+
|
241 |
+
5. Conveying Modified Source Versions.
|
242 |
+
|
243 |
+
You may convey a work based on the Program, or the modifications to
|
244 |
+
produce it from the Program, in the form of source code under the
|
245 |
+
terms of section 4, provided that you also meet all of these conditions:
|
246 |
+
|
247 |
+
a) The work must carry prominent notices stating that you modified
|
248 |
+
it, and giving a relevant date.
|
249 |
+
|
250 |
+
b) The work must carry prominent notices stating that it is
|
251 |
+
released under this License and any conditions added under section
|
252 |
+
7. This requirement modifies the requirement in section 4 to
|
253 |
+
"keep intact all notices".
|
254 |
+
|
255 |
+
c) You must license the entire work, as a whole, under this
|
256 |
+
License to anyone who comes into possession of a copy. This
|
257 |
+
License will therefore apply, along with any applicable section 7
|
258 |
+
additional terms, to the whole of the work, and all its parts,
|
259 |
+
regardless of how they are packaged. This License gives no
|
260 |
+
permission to license the work in any other way, but it does not
|
261 |
+
invalidate such permission if you have separately received it.
|
262 |
+
|
263 |
+
d) If the work has interactive user interfaces, each must display
|
264 |
+
Appropriate Legal Notices; however, if the Program has interactive
|
265 |
+
interfaces that do not display Appropriate Legal Notices, your
|
266 |
+
work need not make them do so.
|
267 |
+
|
268 |
+
A compilation of a covered work with other separate and independent
|
269 |
+
works, which are not by their nature extensions of the covered work,
|
270 |
+
and which are not combined with it such as to form a larger program,
|
271 |
+
in or on a volume of a storage or distribution medium, is called an
|
272 |
+
"aggregate" if the compilation and its resulting copyright are not
|
273 |
+
used to limit the access or legal rights of the compilation's users
|
274 |
+
beyond what the individual works permit. Inclusion of a covered work
|
275 |
+
in an aggregate does not cause this License to apply to the other
|
276 |
+
parts of the aggregate.
|
277 |
+
|
278 |
+
6. Conveying Non-Source Forms.
|
279 |
+
|
280 |
+
You ma
|