Version Description
Download this release
Release Info
Developer | benjaminprojas |
Plugin | All in One SEO Pack |
Version | 3.4.2 |
Comparing to | |
See all releases |
Code changes from version 3.3.5 to 3.4.2
- admin/aioseop_module_class.php +48 -188
- admin/aioseop_module_manager.php +14 -1
- admin/class-aioseop-helper.php +172 -31
- admin/class-aioseop-notices.php +31 -32
- admin/display/credits-content.php +0 -96
- admin/display/general-metaboxes.php +44 -42
- admin/display/menu.php +26 -10
- admin/display/notice-aioseop.php +50 -4
- admin/display/notice-default.php +50 -4
- admin/display/notices/check-php-version-notice.php +37 -0
- admin/display/notices/conflicting-plugin-notice.php +45 -0
- admin/display/notices/review-plugin-cta-notice.php +116 -0
- admin/display/notices/wc-detected-notice.php +10 -14
- admin/display/welcome-content.php +1 -1
- admin/display/welcome.php +2 -2
- admin/meta_import.php +1 -1
- aioseop_class.php +264 -191
- all_in_one_seo_pack.php +18 -590
- build/aioseop-link-attributes-gutenberg-editor.asset.php +4 -0
- build/aioseop-link-attributes-gutenberg-editor.js +6 -0
- class-aioseop-core.php +786 -0
- css/admin-notice.css +26 -9
- css/admin-toolbar-menu.css +14 -0
- css/admin/aioseop-about.css +5361 -0
- css/admin/aioseop-flyout.css +163 -0
- css/admin/selectize-v0.12.6/selectize.css +333 -0
- css/admin/selectize-v0.12.6/selectize.default.css +403 -0
- css/admin/selectize-v0.12.6/selectize.default.min.css +1 -0
- css/admin/selectize-v0.12.6/selectize.min.css +1 -0
- css/aioseop-font-icons.css +1 -25
- css/aiosp_admin.css +417 -41
- css/modules/aioseop_module.css +18 -54
- images/about/about-team.jpg +0 -0
- images/about/icon-full.svg +1 -0
- images/about/icon-none.svg +1 -0
- images/about/icon-partial.svg +1 -0
- images/about/plugin-mi.png +0 -0
- images/about/plugin-om.png +0 -0
- images/about/plugin-rp.png +0 -0
- images/about/plugin-smtp.png +0 -0
- images/about/plugin-wpforms.png +0 -0
- images/flyout/comments-solid.svg +1 -0
- images/flyout/gear-default.png +0 -0
- images/flyout/life-ring-regular.svg +1 -0
- images/flyout/lightbulb-regular.svg +1 -0
- images/flyout/star-solid.svg +1 -0
- inc/admin/class-aioseop-education.php +964 -0
- inc/admin/class-aioseop-link-attributes.php +93 -0
- inc/admin/helpers/PluginSilentUpgrader.php +571 -0
- inc/admin/helpers/PluginSilentUpgraderSkin.php +56 -0
- inc/admin/helpers/class-install-skin.php +19 -0
- inc/admin/views/class-aioseop-about.php +830 -0
- inc/admin/views/class-aioseop-flyout.php +159 -0
- inc/aioseop_functions.php +245 -97
- inc/aioseop_updates_class.php +0 -20
- inc/compatibility/abstract/aiosep_compatible.php +1 -1
- inc/compatibility/class-aioseop-php-functions.php +196 -0
- inc/compatibility/compat-wpml.php +1 -1
- inc/compatibility/gutenberg-chrome.php +2 -2
- inc/schema/aioseop-context.php +877 -0
- inc/schema/graphs/graph-breadcrumblist.php +150 -0
- inc/schema/graphs/graph-itemlist.php +52 -0
- inc/schema/graphs/graph-webpage.php +29 -1
- inc/schema/graphs/graph.php +1 -1
- inc/schema/schema-builder.php +14 -1
- js/admin/aioseop-about.js +139 -0
- js/admin/aioseop-count-chars-old.js +1 -2
- js/admin/aioseop-flyout.js +74 -0
- js/admin/aioseop-link-attributes-classic-editor.js +886 -0
- js/admin/aioseop-preview-snippet.js +9 -4
- js/admin/aioseop-quickedit.js +171 -0
- js/admin/education/aioseop-deactivate-conflicting-plugins.js +41 -0
- js/admin/education/aioseop-license-box.js +66 -0
- js/admin/education/aioseop-notice-bar.js +98 -0
- js/admin/education/aioseop-sitemap-prio-upsell.js +33 -0
- js/admin/education/aioseop-taxonomies-upsell.js +59 -0
- js/admin/education/aioseop-video-sitemap-upsell.js +87 -0
- js/admin/selectize-v0.12.6/selectize.js +3891 -0
- js/admin/selectize-v0.12.6/selectize.min.js +4 -0
admin/aioseop_module_class.php
CHANGED
@@ -263,8 +263,8 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
263 |
* @throws BadMethodCallException
|
264 |
*/
|
265 |
function __call( $name, $arguments ) {
|
266 |
-
if (
|
267 |
-
return $this->display_settings_page(
|
268 |
}
|
269 |
$error = sprintf( __( "Method %s doesn't exist", 'all-in-one-seo-pack' ), $name );
|
270 |
if ( class_exists( 'BadMethodCallException' ) ) {
|
@@ -382,168 +382,6 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
382 |
return ( isset( $this->options[ $opt ] ) && $this->options[ $opt ] );
|
383 |
}
|
384 |
|
385 |
-
/**
|
386 |
-
* Case conversion; handle non UTF-8 encodings and fallback **
|
387 |
-
*
|
388 |
-
* @param $str
|
389 |
-
* @param string $mode
|
390 |
-
*
|
391 |
-
* @return string
|
392 |
-
*/
|
393 |
-
|
394 |
-
function convert_case( $str, $mode = 'upper' ) {
|
395 |
-
static $charset = null;
|
396 |
-
if ( null == $charset ) {
|
397 |
-
$charset = get_bloginfo( 'charset' );
|
398 |
-
}
|
399 |
-
$str = (string) $str;
|
400 |
-
if ( 'title' == $mode ) {
|
401 |
-
if ( function_exists( 'mb_convert_case' ) ) {
|
402 |
-
return mb_convert_case( $str, MB_CASE_TITLE, $charset );
|
403 |
-
} else {
|
404 |
-
return ucwords( $str );
|
405 |
-
}
|
406 |
-
}
|
407 |
-
|
408 |
-
if ( 'UTF-8' == $charset ) {
|
409 |
-
// phpcs:disable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
|
410 |
-
global $UTF8_TABLES;
|
411 |
-
include_once( AIOSEOP_PLUGIN_DIR . 'inc/aioseop_UTF8.php' );
|
412 |
-
if ( is_array( $UTF8_TABLES ) ) {
|
413 |
-
if ( 'upper' == $mode ) {
|
414 |
-
return strtr( $str, $UTF8_TABLES['strtoupper'] );
|
415 |
-
}
|
416 |
-
if ( 'lower' == $mode ) {
|
417 |
-
return strtr( $str, $UTF8_TABLES['strtolower'] );
|
418 |
-
}
|
419 |
-
}
|
420 |
-
// phpcs:enable
|
421 |
-
}
|
422 |
-
|
423 |
-
if ( 'upper' == $mode ) {
|
424 |
-
if ( function_exists( 'mb_strtoupper' ) ) {
|
425 |
-
return mb_strtoupper( $str, $charset );
|
426 |
-
} else {
|
427 |
-
return strtoupper( $str );
|
428 |
-
}
|
429 |
-
}
|
430 |
-
|
431 |
-
if ( 'lower' == $mode ) {
|
432 |
-
if ( function_exists( 'mb_strtolower' ) ) {
|
433 |
-
return mb_strtolower( $str, $charset );
|
434 |
-
} else {
|
435 |
-
return strtolower( $str );
|
436 |
-
}
|
437 |
-
}
|
438 |
-
|
439 |
-
return $str;
|
440 |
-
}
|
441 |
-
|
442 |
-
/**
|
443 |
-
* Convert a string to lower case
|
444 |
-
* Compatible with mb_strtolower(), an UTF-8 friendly replacement for strtolower()
|
445 |
-
*
|
446 |
-
* @param $str
|
447 |
-
*
|
448 |
-
* @return string
|
449 |
-
*/
|
450 |
-
function strtolower( $str ) {
|
451 |
-
return $this->convert_case( $str, 'lower' );
|
452 |
-
}
|
453 |
-
|
454 |
-
/**
|
455 |
-
* Convert a string to upper case
|
456 |
-
* Compatible with mb_strtoupper(), an UTF-8 friendly replacement for strtoupper()
|
457 |
-
*
|
458 |
-
* @param $str
|
459 |
-
*
|
460 |
-
* @return string
|
461 |
-
*/
|
462 |
-
function strtoupper( $str ) {
|
463 |
-
return $this->convert_case( $str, 'upper' );
|
464 |
-
}
|
465 |
-
|
466 |
-
/**
|
467 |
-
* Convert a string to title case
|
468 |
-
* Compatible with mb_convert_case(), an UTF-8 friendly replacement for ucwords()
|
469 |
-
*
|
470 |
-
* @param $str
|
471 |
-
*
|
472 |
-
* @return string
|
473 |
-
*/
|
474 |
-
function ucwords( $str ) {
|
475 |
-
return $this->convert_case( $str, 'title' );
|
476 |
-
}
|
477 |
-
|
478 |
-
/**
|
479 |
-
* Wrapper for strlen() - uses mb_strlen() if possible.
|
480 |
-
*
|
481 |
-
* @param $string
|
482 |
-
*
|
483 |
-
* @return int
|
484 |
-
*/
|
485 |
-
function strlen( $string ) {
|
486 |
-
if ( function_exists( 'mb_strlen' ) ) {
|
487 |
-
return mb_strlen( $string, 'UTF-8' );
|
488 |
-
}
|
489 |
-
|
490 |
-
return strlen( $string );
|
491 |
-
}
|
492 |
-
|
493 |
-
/**
|
494 |
-
* Wrapper for substr() - uses mb_substr() if possible.
|
495 |
-
*
|
496 |
-
* @param $string
|
497 |
-
* @param int $start
|
498 |
-
* @param int $length
|
499 |
-
*
|
500 |
-
* @return mixed
|
501 |
-
*/
|
502 |
-
function substr( $string, $start = 0, $length = 2147483647 ) {
|
503 |
-
$args = func_get_args();
|
504 |
-
if ( function_exists( 'mb_substr' ) ) {
|
505 |
-
return call_user_func_array( 'mb_substr', $args );
|
506 |
-
}
|
507 |
-
|
508 |
-
return call_user_func_array( 'substr', $args );
|
509 |
-
}
|
510 |
-
|
511 |
-
/**
|
512 |
-
* Wrapper for strpos() - uses mb_strpos() if possible.
|
513 |
-
*
|
514 |
-
* @param $haystack
|
515 |
-
* @param string $needle
|
516 |
-
*
|
517 |
-
* @param int $offset
|
518 |
-
*
|
519 |
-
* @return bool|int
|
520 |
-
*/
|
521 |
-
function strpos( $haystack, $needle, $offset = 0 ) {
|
522 |
-
if ( function_exists( 'mb_strpos' ) ) {
|
523 |
-
return mb_strpos( $haystack, $needle, $offset, 'UTF-8' );
|
524 |
-
}
|
525 |
-
|
526 |
-
return strpos( $haystack, $needle, $offset );
|
527 |
-
}
|
528 |
-
|
529 |
-
/**
|
530 |
-
* Wrapper for strrpos() - uses mb_strrpos() if possible.
|
531 |
-
*
|
532 |
-
* @param $haystack
|
533 |
-
* @param string $needle
|
534 |
-
*
|
535 |
-
* @param int $offset
|
536 |
-
*
|
537 |
-
* @return bool|int
|
538 |
-
*/
|
539 |
-
function strrpos( $haystack, $needle, $offset = 0 ) {
|
540 |
-
if ( function_exists( 'mb_strrpos' ) ) {
|
541 |
-
return mb_strrpos( $haystack, $needle, $offset, 'UTF-8' );
|
542 |
-
}
|
543 |
-
|
544 |
-
return strrpos( $haystack, $needle, $offset );
|
545 |
-
}
|
546 |
-
|
547 |
/**
|
548 |
* Convert html string to php array - useful to get a serializable value.
|
549 |
*
|
@@ -1172,7 +1010,7 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
1172 |
|
1173 |
if ( is_array( $post_custom_fields ) ) {
|
1174 |
foreach ( $post_custom_fields as $field_name => $field ) {
|
1175 |
-
if ( (
|
1176 |
$has_data = true;
|
1177 |
$data .= $field_name . " = '" . $field[0] . "'\n";
|
1178 |
}
|
@@ -1475,9 +1313,9 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
1475 |
return $file;
|
1476 |
}
|
1477 |
if ( 0 > $maxlen ) {
|
1478 |
-
return
|
1479 |
} else {
|
1480 |
-
return
|
1481 |
}
|
1482 |
} else {
|
1483 |
return $wpfs->get_contents( $filename );
|
@@ -1918,9 +1756,10 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
1918 |
* Get the Image by Attachment
|
1919 |
*
|
1920 |
* @since ?
|
|
|
1921 |
*
|
1922 |
-
* @param null $p
|
1923 |
-
* @return
|
1924 |
*/
|
1925 |
function get_the_image_by_attachment( $p = null ) {
|
1926 |
|
@@ -1930,6 +1769,10 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
1930 |
$post = $p;
|
1931 |
}
|
1932 |
|
|
|
|
|
|
|
|
|
1933 |
$attachments = get_children(
|
1934 |
array(
|
1935 |
'post_parent' => $post->ID,
|
@@ -1948,7 +1791,7 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
1948 |
|
1949 |
/* If no attachments or image is found, return false. */
|
1950 |
if ( empty( $attachments ) && empty( $image ) ) {
|
1951 |
-
return
|
1952 |
}
|
1953 |
|
1954 |
/* Set the default iterator to 0. */
|
@@ -1973,10 +1816,13 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
1973 |
/**
|
1974 |
* Get the Image by Scan
|
1975 |
*
|
|
|
|
|
1976 |
* @since ?
|
|
|
1977 |
*
|
1978 |
-
* @param null $p
|
1979 |
-
* @return
|
1980 |
*/
|
1981 |
function get_the_image_by_scan( $p = null ) {
|
1982 |
if ( null === $p ) {
|
@@ -1985,15 +1831,21 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
1985 |
$post = $p;
|
1986 |
}
|
1987 |
|
|
|
|
|
|
|
|
|
|
|
|
|
1988 |
/* Search the post's content for the <img /> tag and get its URL. */
|
1989 |
preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i', get_post_field( 'post_content', $post->ID ), $matches );
|
1990 |
|
1991 |
/* If there is a match for the image, return its URL. */
|
1992 |
if ( isset( $matches ) && ! empty( $matches[1][0] ) ) {
|
1993 |
-
|
1994 |
}
|
1995 |
|
1996 |
-
return
|
1997 |
}
|
1998 |
|
1999 |
/**
|
@@ -2222,8 +2074,8 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
2222 |
*/
|
2223 |
function add_page_hooks() {
|
2224 |
$hookname = current_filter();
|
2225 |
-
if (
|
2226 |
-
$this->pagehook =
|
2227 |
}
|
2228 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
2229 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_styles' ) );
|
@@ -2256,11 +2108,13 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
2256 |
$url = esc_url( admin_url( 'admin.php?page=' . $hookname ) );
|
2257 |
}
|
2258 |
|
|
|
|
|
2259 |
if ( null === $this->locations ) {
|
2260 |
array_unshift(
|
2261 |
$links,
|
2262 |
array(
|
2263 |
-
'parent' =>
|
2264 |
'title' => $name,
|
2265 |
'id' => $hookname,
|
2266 |
'href' => $url,
|
@@ -2274,7 +2128,7 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
2274 |
array_unshift(
|
2275 |
$links,
|
2276 |
array(
|
2277 |
-
'parent' =>
|
2278 |
'title' => $name,
|
2279 |
'id' => $hookname,
|
2280 |
'href' => $url,
|
@@ -2290,7 +2144,7 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
2290 |
array_unshift(
|
2291 |
$links,
|
2292 |
array(
|
2293 |
-
'parent' =>
|
2294 |
'title' => $name,
|
2295 |
'id' => $this->get_prefix( $k ) . $k,
|
2296 |
'href' => esc_url( admin_url( 'admin.php?page=' . $this->get_prefix( $k ) . $k ) ),
|
@@ -2341,6 +2195,12 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
2341 |
} else {
|
2342 |
$name = $this->name;
|
2343 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2344 |
if ( null === $this->locations ) {
|
2345 |
$hookname = add_submenu_page(
|
2346 |
$parent_slug,
|
@@ -2731,7 +2591,7 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
2731 |
wp_enqueue_script( 'jquery-ui-datepicker' );
|
2732 |
// fall through.
|
2733 |
default:
|
2734 |
-
$buf .= "<input name='" . esc_attr( $name ) . "' type='" . esc_attr( $options['type'] ) . "' " . wp_kses( $attr, wp_kses_allowed_html( 'data' ) ) . " value='" . esc_attr( $value ) . "' autocomplete='aioseop-" . time() .
|
2735 |
}
|
2736 |
|
2737 |
// TODO Maybe Change/Add a function for SEO character count.
|
@@ -2748,8 +2608,8 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
2748 |
/* translators: %1$s and %2$s are placeholders and should not be translated. %1$s is replaced with a number, %2$s is replaced with the name of an meta tag field (e.g; "Title", "Description", etc.). */
|
2749 |
$count_desc = __( ' characters. Most search engines use a maximum of %1$s chars for the %2$s.', 'all-in-one-seo-pack' );
|
2750 |
}
|
2751 |
-
$buf .= "<br /><input readonly tabindex='-1' type='text' name='{$prefix}length$n' size='3' maxlength='3' style='width:53px;height:23px;margin:0px;padding:0px 0px 0px 10px;' value='" .
|
2752 |
-
. sprintf( $count_desc, $size, trim(
|
2753 |
if ( ! empty( $onload ) ) {
|
2754 |
$buf .= "<script>jQuery( document ).ready(function() { {$onload} });</script>";
|
2755 |
}
|
@@ -2930,11 +2790,11 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
2930 |
*/
|
2931 |
function sanitize_domain( $domain ) {
|
2932 |
$domain = trim( $domain );
|
2933 |
-
$domain =
|
2934 |
-
if ( 0 ===
|
2935 |
-
$domain =
|
2936 |
-
} elseif ( 0 ===
|
2937 |
-
$domain =
|
2938 |
}
|
2939 |
$domain = untrailingslashit( $domain );
|
2940 |
|
@@ -3295,7 +3155,7 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module' ) ) {
|
|
3295 |
if ( ! empty( $options ) ) {
|
3296 |
foreach ( $options as $k => $v ) {
|
3297 |
if ( ! isset( $v['name'] ) ) {
|
3298 |
-
$v['name'] =
|
3299 |
}
|
3300 |
if ( ! isset( $v['type'] ) ) {
|
3301 |
$v['type'] = 'checkbox';
|
263 |
* @throws BadMethodCallException
|
264 |
*/
|
265 |
function __call( $name, $arguments ) {
|
266 |
+
if ( AIOSEOP_PHP_Functions::strpos( $name, 'display_settings_page_' ) === 0 ) {
|
267 |
+
return $this->display_settings_page( AIOSEOP_PHP_Functions::substr( $name, 22 ) );
|
268 |
}
|
269 |
$error = sprintf( __( "Method %s doesn't exist", 'all-in-one-seo-pack' ), $name );
|
270 |
if ( class_exists( 'BadMethodCallException' ) ) {
|
382 |
return ( isset( $this->options[ $opt ] ) && $this->options[ $opt ] );
|
383 |
}
|
384 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
385 |
/**
|
386 |
* Convert html string to php array - useful to get a serializable value.
|
387 |
*
|
1010 |
|
1011 |
if ( is_array( $post_custom_fields ) ) {
|
1012 |
foreach ( $post_custom_fields as $field_name => $field ) {
|
1013 |
+
if ( ( AIOSEOP_PHP_Functions::strpos( $field_name, $prefix ) === 0 ) && $field[0] ) {
|
1014 |
$has_data = true;
|
1015 |
$data .= $field_name . " = '" . $field[0] . "'\n";
|
1016 |
}
|
1313 |
return $file;
|
1314 |
}
|
1315 |
if ( 0 > $maxlen ) {
|
1316 |
+
return AIOSEOP_PHP_Functions::substr( $file, $offset );
|
1317 |
} else {
|
1318 |
+
return AIOSEOP_PHP_Functions::substr( $file, $offset, $maxlen );
|
1319 |
}
|
1320 |
} else {
|
1321 |
return $wpfs->get_contents( $filename );
|
1756 |
* Get the Image by Attachment
|
1757 |
*
|
1758 |
* @since ?
|
1759 |
+
* @since 3.4 Change return variable type bool|string to just string.
|
1760 |
*
|
1761 |
+
* @param null|WP_Post $p WP Post object.
|
1762 |
+
* @return string Image URL.
|
1763 |
*/
|
1764 |
function get_the_image_by_attachment( $p = null ) {
|
1765 |
|
1769 |
$post = $p;
|
1770 |
}
|
1771 |
|
1772 |
+
if ( empty( $post ) ) {
|
1773 |
+
return '';
|
1774 |
+
}
|
1775 |
+
|
1776 |
$attachments = get_children(
|
1777 |
array(
|
1778 |
'post_parent' => $post->ID,
|
1791 |
|
1792 |
/* If no attachments or image is found, return false. */
|
1793 |
if ( empty( $attachments ) && empty( $image ) ) {
|
1794 |
+
return '';
|
1795 |
}
|
1796 |
|
1797 |
/* Set the default iterator to 0. */
|
1816 |
/**
|
1817 |
* Get the Image by Scan
|
1818 |
*
|
1819 |
+
* Scans a Post's content by (regex) capturing an <img> element's source for the image URL.
|
1820 |
+
*
|
1821 |
* @since ?
|
1822 |
+
* @since 3.4 Change return variable type bool|string to just string.
|
1823 |
*
|
1824 |
+
* @param null|WP_Post $p WP Post object.
|
1825 |
+
* @return string Image URL source.
|
1826 |
*/
|
1827 |
function get_the_image_by_scan( $p = null ) {
|
1828 |
if ( null === $p ) {
|
1831 |
$post = $p;
|
1832 |
}
|
1833 |
|
1834 |
+
if ( empty( $post ) ) {
|
1835 |
+
return '';
|
1836 |
+
}
|
1837 |
+
|
1838 |
+
$rtn_url = '';
|
1839 |
+
|
1840 |
/* Search the post's content for the <img /> tag and get its URL. */
|
1841 |
preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i', get_post_field( 'post_content', $post->ID ), $matches );
|
1842 |
|
1843 |
/* If there is a match for the image, return its URL. */
|
1844 |
if ( isset( $matches ) && ! empty( $matches[1][0] ) ) {
|
1845 |
+
$rtn_url = $matches[1][0];
|
1846 |
}
|
1847 |
|
1848 |
+
return $rtn_url;
|
1849 |
}
|
1850 |
|
1851 |
/**
|
2074 |
*/
|
2075 |
function add_page_hooks() {
|
2076 |
$hookname = current_filter();
|
2077 |
+
if ( AIOSEOP_PHP_Functions::strpos( $hookname, 'load-' ) === 0 ) {
|
2078 |
+
$this->pagehook = AIOSEOP_PHP_Functions::substr( $hookname, 5 );
|
2079 |
}
|
2080 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
2081 |
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_styles' ) );
|
2108 |
$url = esc_url( admin_url( 'admin.php?page=' . $hookname ) );
|
2109 |
}
|
2110 |
|
2111 |
+
$parent = is_admin() ? AIOSEOP_PLUGIN_DIRNAME : 'aioseop-settings';
|
2112 |
+
|
2113 |
if ( null === $this->locations ) {
|
2114 |
array_unshift(
|
2115 |
$links,
|
2116 |
array(
|
2117 |
+
'parent' => $parent,
|
2118 |
'title' => $name,
|
2119 |
'id' => $hookname,
|
2120 |
'href' => $url,
|
2128 |
array_unshift(
|
2129 |
$links,
|
2130 |
array(
|
2131 |
+
'parent' => $parent,
|
2132 |
'title' => $name,
|
2133 |
'id' => $hookname,
|
2134 |
'href' => $url,
|
2144 |
array_unshift(
|
2145 |
$links,
|
2146 |
array(
|
2147 |
+
'parent' => $parent,
|
2148 |
'title' => $name,
|
2149 |
'id' => $this->get_prefix( $k ) . $k,
|
2150 |
'href' => esc_url( admin_url( 'admin.php?page=' . $this->get_prefix( $k ) . $k ) ),
|
2195 |
} else {
|
2196 |
$name = $this->name;
|
2197 |
}
|
2198 |
+
|
2199 |
+
// Don't add unlicensed addons to admin menu.
|
2200 |
+
if ( null === $name ) {
|
2201 |
+
return;
|
2202 |
+
}
|
2203 |
+
|
2204 |
if ( null === $this->locations ) {
|
2205 |
$hookname = add_submenu_page(
|
2206 |
$parent_slug,
|
2591 |
wp_enqueue_script( 'jquery-ui-datepicker' );
|
2592 |
// fall through.
|
2593 |
default:
|
2594 |
+
$buf .= "<input name='" . esc_attr( $name ) . "' type='" . esc_attr( $options['type'] ) . "' " . wp_kses( $attr, wp_kses_allowed_html( 'data' ) ) . " value='" . esc_attr( $value ) . "' autocomplete='aioseop-" . time() . "'>\n";
|
2595 |
}
|
2596 |
|
2597 |
// TODO Maybe Change/Add a function for SEO character count.
|
2608 |
/* translators: %1$s and %2$s are placeholders and should not be translated. %1$s is replaced with a number, %2$s is replaced with the name of an meta tag field (e.g; "Title", "Description", etc.). */
|
2609 |
$count_desc = __( ' characters. Most search engines use a maximum of %1$s chars for the %2$s.', 'all-in-one-seo-pack' );
|
2610 |
}
|
2611 |
+
$buf .= "<br /><input readonly tabindex='-1' type='text' name='{$prefix}length$n' size='3' maxlength='3' style='width:53px;height:23px;margin:0px;padding:0px 0px 0px 10px;' value='" . AIOSEOP_PHP_Functions::strlen( $value ) . "' />"
|
2612 |
+
. sprintf( $count_desc, $size, trim( AIOSEOP_PHP_Functions::strtolower( $options['name'] ), ':' ) );
|
2613 |
if ( ! empty( $onload ) ) {
|
2614 |
$buf .= "<script>jQuery( document ).ready(function() { {$onload} });</script>";
|
2615 |
}
|
2790 |
*/
|
2791 |
function sanitize_domain( $domain ) {
|
2792 |
$domain = trim( $domain );
|
2793 |
+
$domain = AIOSEOP_PHP_Functions::strtolower( $domain );
|
2794 |
+
if ( 0 === AIOSEOP_PHP_Functions::strpos( $domain, 'http://' ) ) {
|
2795 |
+
$domain = AIOSEOP_PHP_Functions::substr( $domain, 7 );
|
2796 |
+
} elseif ( 0 === AIOSEOP_PHP_Functions::strpos( $domain, 'https://' ) ) {
|
2797 |
+
$domain = AIOSEOP_PHP_Functions::substr( $domain, 8 );
|
2798 |
}
|
2799 |
$domain = untrailingslashit( $domain );
|
2800 |
|
3155 |
if ( ! empty( $options ) ) {
|
3156 |
foreach ( $options as $k => $v ) {
|
3157 |
if ( ! isset( $v['name'] ) ) {
|
3158 |
+
$v['name'] = AIOSEOP_PHP_Functions::ucwords( strtr( $k, '_', ' ' ) );
|
3159 |
}
|
3160 |
if ( ! isset( $v['type'] ) ) {
|
3161 |
$v['type'] = 'checkbox';
|
admin/aioseop_module_manager.php
CHANGED
@@ -255,7 +255,20 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Module_Manager' ) ) {
|
|
255 |
}
|
256 |
}
|
257 |
if ( $mod_enable ) {
|
258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
}
|
260 |
|
261 |
return false;
|
255 |
}
|
256 |
}
|
257 |
if ( $mod_enable ) {
|
258 |
+
if ( AIOSEOPPRO ) {
|
259 |
+
return $this->do_load_module( $mod );
|
260 |
+
}
|
261 |
+
|
262 |
+
// Don't load Pro modules if Pro was previously installed.
|
263 |
+
switch ( $mod ) {
|
264 |
+
case 'video_sitemap': // phpcs:ignore PSR2.ControlStructures.SwitchDeclaration
|
265 |
+
case 'image_seo': { // phpcs:ignore PSR2.ControlStructures.SwitchDeclaration
|
266 |
+
break;
|
267 |
+
}
|
268 |
+
default: { // phpcs:ignore PSR2.ControlStructures.SwitchDeclaration
|
269 |
+
return $this->do_load_module( $mod );
|
270 |
+
}
|
271 |
+
}
|
272 |
}
|
273 |
|
274 |
return false;
|
admin/class-aioseop-helper.php
CHANGED
@@ -62,6 +62,7 @@ class AIOSEOP_Helper {
|
|
62 |
$this->help_text = $this->help_text_performance();
|
63 |
break;
|
64 |
case 'All_in_One_SEO_Pack_Sitemap':
|
|
|
65 |
$this->help_text = $this->help_text_sitemap();
|
66 |
break;
|
67 |
case 'All_in_One_SEO_Pack_Opengraph':
|
@@ -79,6 +80,9 @@ class AIOSEOP_Helper {
|
|
79 |
case 'All_in_One_SEO_Pack_Bad_Robots':
|
80 |
$this->help_text = $this->help_text_bad_robots();
|
81 |
break;
|
|
|
|
|
|
|
82 |
}
|
83 |
|
84 |
/**
|
@@ -102,16 +106,6 @@ class AIOSEOP_Helper {
|
|
102 |
* @return array
|
103 |
*/
|
104 |
private function help_text_general() {
|
105 |
-
/*
|
106 |
-
* Consider changing the construction of the macros.
|
107 |
-
*
|
108 |
-
* The name of the macro should NOT be inside _e() or __() because it does not make sense as it
|
109 |
-
* won't change with the language.
|
110 |
-
*
|
111 |
-
* Moreover, it will confuse WPCS and it will try to replace %c (as in %category%) to %$1c.
|
112 |
-
* Placeholder %s (%something) has been bug fixed.
|
113 |
-
* @link https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/issues/698
|
114 |
-
*/
|
115 |
// phpcs:disable WordPress.WP.I18n.MissingTranslatorsComment
|
116 |
// phpcs:disable WordPress.WP.I18n.UnorderedPlaceholdersText
|
117 |
$rtn_help_text = array(
|
@@ -461,6 +455,23 @@ class AIOSEOP_Helper {
|
|
461 |
'aiosp_use_tags_as_keywords' => __( 'Check this if you want your tags for a given post used as the Meta Keywords for this post (in addition to any keywords you specify on the Edit Post screen).', 'all-in-one-seo-pack' ),
|
462 |
'aiosp_dynamic_postspage_keywords' => __( 'Check this if you want your keywords on your Posts page (set in WordPress under Settings, Reading, Front Page Displays) and your archive pages to be dynamically generated from the keywords of the posts showing on that page. If unchecked, it will use the keywords set in the edit page screen for the posts page.', 'all-in-one-seo-pack' ),
|
463 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
464 |
);
|
465 |
|
466 |
// phpcs:disable WordPress.WP.I18n.MissingTranslatorsComment
|
@@ -670,11 +681,7 @@ class AIOSEOP_Helper {
|
|
670 |
'aiosp_performance_force_rewrites' => 'https://semperplugins.com/documentation/performance-settings/#force-rewrites',
|
671 |
);
|
672 |
|
673 |
-
|
674 |
-
$rtn_help_text[ $k1_slug ] .= '<br /><br /><a href="' . $v1_url . '" target="_blank">' . __( 'Click here for documentation on this setting.', 'all-in-one-seo-pack' ) . '</a>';
|
675 |
-
}
|
676 |
-
|
677 |
-
return $rtn_help_text;
|
678 |
}
|
679 |
|
680 |
/**
|
@@ -800,11 +807,7 @@ class AIOSEOP_Helper {
|
|
800 |
}
|
801 |
*/
|
802 |
|
803 |
-
|
804 |
-
$rtn_help_text[ $k1_slug ] .= '<br /><br /><a href="' . $v1_url . '" target="_blank">' . __( 'Click here for documentation on this setting.', 'all-in-one-seo-pack' ) . '</a>';
|
805 |
-
}
|
806 |
-
|
807 |
-
return $rtn_help_text;
|
808 |
}
|
809 |
|
810 |
/**
|
@@ -943,11 +946,7 @@ class AIOSEOP_Helper {
|
|
943 |
'aioseop_opengraph_settings_customimg_twitter' => 'https://semperplugins.com/documentation/social-meta-settings-individual-pagepost-settings/#custom-twitter-image',
|
944 |
);
|
945 |
|
946 |
-
|
947 |
-
$rtn_help_text[ $k1_slug ] .= '<br /><br /><a href="' . $v1_url . '" target="_blank">' . __( 'Click here for documentation on this setting.', 'all-in-one-seo-pack' ) . '</a>';
|
948 |
-
}
|
949 |
-
|
950 |
-
return $rtn_help_text;
|
951 |
}
|
952 |
|
953 |
/**
|
@@ -1009,11 +1008,7 @@ class AIOSEOP_Helper {
|
|
1009 |
'aiosp_importer_exporter_export_post_types' => 'https://semperplugins.com/documentation/importer-exporter-module/',
|
1010 |
);
|
1011 |
|
1012 |
-
|
1013 |
-
$rtn_help_text[ $k1_slug ] .= '<br /><br /><a href="' . $v1_url . '" target="_blank">' . __( 'Click here for documentation on this setting.', 'all-in-one-seo-pack' ) . '</a>';
|
1014 |
-
}
|
1015 |
-
|
1016 |
-
return $rtn_help_text;
|
1017 |
}
|
1018 |
|
1019 |
/**
|
@@ -1037,6 +1032,120 @@ class AIOSEOP_Helper {
|
|
1037 |
);
|
1038 |
}
|
1039 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1040 |
/**
|
1041 |
* Help Text Post Meta (Core Module)
|
1042 |
*
|
@@ -1058,6 +1167,8 @@ class AIOSEOP_Helper {
|
|
1058 |
'aiosp_noindex' => __( 'Check this box to ask search engines not to index this page.', 'all-in-one-seo-pack' ),
|
1059 |
'aiosp_nofollow' => __( 'Check this box to ask search engines not to follow links from this page.', 'all-in-one-seo-pack' ),
|
1060 |
'aiosp_sitemap_exclude' => __( 'Don\'t display this page in the sitemap.', 'all-in-one-seo-pack' ),
|
|
|
|
|
1061 |
'aiosp_disable' => __( 'Disable SEO on this page.', 'all-in-one-seo-pack' ),
|
1062 |
'aiosp_disable_analytics' => __( 'Disable Google Analytics on this page.', 'all-in-one-seo-pack' ),
|
1063 |
);
|
@@ -1071,12 +1182,24 @@ class AIOSEOP_Helper {
|
|
1071 |
'aiosp_noindex' => 'https://semperplugins.com/documentation/post-settings/#robots-meta-noindex',
|
1072 |
'aiosp_nofollow' => 'https://semperplugins.com/documentation/post-settings/#robots-meta-nofollow',
|
1073 |
'aiosp_sitemap_exclude' => 'https://semperplugins.com/documentation/post-settings/#exclude-from-sitemap',
|
|
|
|
|
1074 |
'aiosp_disable' => 'https://semperplugins.com/documentation/post-settings/#disable-on-this-post',
|
1075 |
'aiosp_disable_analytics' => 'https://semperplugins.com/documentation/post-settings/#disable-google-analytics',
|
1076 |
);
|
1077 |
|
1078 |
foreach ( $help_doc_link as $k1_slug => $v1_url ) {
|
1079 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1080 |
}
|
1081 |
|
1082 |
return $rtn_help_text;
|
@@ -1100,4 +1223,22 @@ class AIOSEOP_Helper {
|
|
1100 |
}
|
1101 |
return 'DEV: Missing Help Text: ' . $slug;
|
1102 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1103 |
}
|
62 |
$this->help_text = $this->help_text_performance();
|
63 |
break;
|
64 |
case 'All_in_One_SEO_Pack_Sitemap':
|
65 |
+
case 'All_in_One_SEO_Pack_Sitemap_Pro':
|
66 |
$this->help_text = $this->help_text_sitemap();
|
67 |
break;
|
68 |
case 'All_in_One_SEO_Pack_Opengraph':
|
80 |
case 'All_in_One_SEO_Pack_Bad_Robots':
|
81 |
$this->help_text = $this->help_text_bad_robots();
|
82 |
break;
|
83 |
+
case 'All_in_One_SEO_Pack_Image_Seo':
|
84 |
+
$this->help_text = $this->help_text_image_seo();
|
85 |
+
break;
|
86 |
}
|
87 |
|
88 |
/**
|
106 |
* @return array
|
107 |
*/
|
108 |
private function help_text_general() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
// phpcs:disable WordPress.WP.I18n.MissingTranslatorsComment
|
110 |
// phpcs:disable WordPress.WP.I18n.UnorderedPlaceholdersText
|
111 |
$rtn_help_text = array(
|
455 |
'aiosp_use_tags_as_keywords' => __( 'Check this if you want your tags for a given post used as the Meta Keywords for this post (in addition to any keywords you specify on the Edit Post screen).', 'all-in-one-seo-pack' ),
|
456 |
'aiosp_dynamic_postspage_keywords' => __( 'Check this if you want your keywords on your Posts page (set in WordPress under Settings, Reading, Front Page Displays) and your archive pages to be dynamically generated from the keywords of the posts showing on that page. If unchecked, it will use the keywords set in the edit page screen for the posts page.', 'all-in-one-seo-pack' ),
|
457 |
|
458 |
+
'aiosp_license_key' => sprintf(
|
459 |
+
'%s</br></br>%s</br>',
|
460 |
+
sprintf(
|
461 |
+
esc_html__( 'To unlock more features consider %s.', 'all-in-one-seo-pack' ),
|
462 |
+
sprintf(
|
463 |
+
'<a href="%1$s" title="%2$s">%3$s</a>',
|
464 |
+
aioseop_get_utm_url( 'license-key-help-text' ),
|
465 |
+
sprintf( esc_html__( 'Upgrade to %s', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' ),
|
466 |
+
esc_html__( 'upgrading to PRO', 'all-in-one-seo-pack' )
|
467 |
+
)
|
468 |
+
),
|
469 |
+
sprintf(
|
470 |
+
esc_html__( 'As a valued %1$s user you receive %2$s, automatically applied at checkout!', 'all-in-one-seo-pack' ),
|
471 |
+
AIOSEOP_PLUGIN_NAME,
|
472 |
+
sprintf( '<span class="aioseop-upsell-discount-amount">%s</span>', esc_html__( '30% off', 'all-in-one-seo-pack' ) )
|
473 |
+
)
|
474 |
+
),
|
475 |
);
|
476 |
|
477 |
// phpcs:disable WordPress.WP.I18n.MissingTranslatorsComment
|
681 |
'aiosp_performance_force_rewrites' => 'https://semperplugins.com/documentation/performance-settings/#force-rewrites',
|
682 |
);
|
683 |
|
684 |
+
return $this->merge_text_with_links( $rtn_help_text, $help_doc_link );
|
|
|
|
|
|
|
|
|
685 |
}
|
686 |
|
687 |
/**
|
807 |
}
|
808 |
*/
|
809 |
|
810 |
+
return $this->merge_text_with_links( $rtn_help_text, $help_doc_link );
|
|
|
|
|
|
|
|
|
811 |
}
|
812 |
|
813 |
/**
|
946 |
'aioseop_opengraph_settings_customimg_twitter' => 'https://semperplugins.com/documentation/social-meta-settings-individual-pagepost-settings/#custom-twitter-image',
|
947 |
);
|
948 |
|
949 |
+
return $this->merge_text_with_links( $rtn_help_text, $help_doc_link );
|
|
|
|
|
|
|
|
|
950 |
}
|
951 |
|
952 |
/**
|
1008 |
'aiosp_importer_exporter_export_post_types' => 'https://semperplugins.com/documentation/importer-exporter-module/',
|
1009 |
);
|
1010 |
|
1011 |
+
return $this->merge_text_with_links( $rtn_help_text, $help_doc_link );
|
|
|
|
|
|
|
|
|
1012 |
}
|
1013 |
|
1014 |
/**
|
1032 |
);
|
1033 |
}
|
1034 |
|
1035 |
+
/**
|
1036 |
+
* Returns the tooltip help text for the Image SEO module screen.
|
1037 |
+
*
|
1038 |
+
* @ignore
|
1039 |
+
* @since 3.4.0
|
1040 |
+
*
|
1041 |
+
* @return array
|
1042 |
+
*/
|
1043 |
+
private function help_text_image_seo() {
|
1044 |
+
$rtn_help_text = array(
|
1045 |
+
'aiosp_image_seo_title_format' =>
|
1046 |
+
__( 'This controls the format of the title attribute of your images.', 'all-in-one-seo-pack' ) . '<br />' .
|
1047 |
+
__( 'The following macros are supported:', 'all-in-one-seo-pack' ) .
|
1048 |
+
'<dl>' .
|
1049 |
+
'<dt>%image_title%</dt>' .
|
1050 |
+
'<dd>' . __( 'Your image title', 'all-in-one-seo-pack' ) . '</dd>' .
|
1051 |
+
'<dt>%site_title%</dt>' .
|
1052 |
+
'<dd>' . __( 'Your site title', 'all-in-one-seo-pack' ) . '</dd>' .
|
1053 |
+
'<dt>%site_description%</dt>' .
|
1054 |
+
'<dd>' . __( 'Your site description', 'all-in-one-seo-pack' ) . '</dd>' .
|
1055 |
+
'<dt>%image_seo_title%</dt>' .
|
1056 |
+
'<dd>' . __( 'Your image SEO title. This is the title you enter in our metabox', 'all-in-one-seo-pack' ) . '</dd>' .
|
1057 |
+
'<dt>%image_seo_description%</dt>' .
|
1058 |
+
'<dd>' . __( 'Your image SEO description. This is the meta description you enter in our metabox', 'all-in-one-seo-pack' ) . '</dd>' .
|
1059 |
+
'<dt>%post_seo_title%</dt>' .
|
1060 |
+
'<dd>' . __( 'The SEO title set for the post or page', 'all-in-one-seo-pack' ) . '</dd>' .
|
1061 |
+
'<dt>%post_seo_description%</dt>' .
|
1062 |
+
'<dd>' . __( 'The SEO description set for the post or page', 'all-in-one-seo-pack' ) . '</dd>' .
|
1063 |
+
'<dt>%alt_tag%</dt>' .
|
1064 |
+
'<dd>' . __( "Your image's alt tag attribute", 'all-in-one-seo-pack' ) . '</dd>' .
|
1065 |
+
'<dt>%post_title%</dt>' .
|
1066 |
+
'<dd>' . __( 'The original title of the post or page', 'all-in-one-seo-pack' ) . '</dd>' .
|
1067 |
+
'<dt>%category_title%</dt>' .
|
1068 |
+
'<dd>' . __( 'The title of the category or taxonomy', 'all-in-one-seo-pack' ) . '</dd>' .
|
1069 |
+
'<dt>%post_date%</dt>' .
|
1070 |
+
'<dd>' . sprintf(
|
1071 |
+
__( 'The %1$s when the %2$s was published (localized)', 'all-in-one-seo-pack' ),
|
1072 |
+
__( 'date', 'all-in-one-seo-pack' ),
|
1073 |
+
__( 'image', 'all-in-one-seo-pack' )
|
1074 |
+
) . '</dd>' .
|
1075 |
+
'<dt>%post_year%</dt>' .
|
1076 |
+
'<dd>' . sprintf(
|
1077 |
+
__( 'The %1$s when the %2$s was published (localized)', 'all-in-one-seo-pack' ),
|
1078 |
+
__( 'year', 'all-in-one-seo-pack' ),
|
1079 |
+
__( 'image', 'all-in-one-seo-pack' )
|
1080 |
+
) . '</dd>' .
|
1081 |
+
'<dt>%post_month%</dt>' .
|
1082 |
+
'<dd>' . sprintf(
|
1083 |
+
__( 'The %1$s when the %2$s was published (localized)', 'all-in-one-seo-pack' ),
|
1084 |
+
__( 'month', 'all-in-one-seo-pack' ),
|
1085 |
+
__( 'image', 'all-in-one-seo-pack' )
|
1086 |
+
) . '</dd>' .
|
1087 |
+
'<dt>%tax_product_cat%</dt>' .
|
1088 |
+
'<dd>' . __( 'The title of the first WooCommerce Product Category the Product is assigned to', 'all-in-one-seo-pack' ) . '</dd>' .
|
1089 |
+
'<dt>%tax_product_tag%</dt>' .
|
1090 |
+
'<dd>' . __( 'The title of the first WooCommerce Product Tag the Product is assigned to', 'all-in-one-seo-pack' ) . '</dd>' .
|
1091 |
+
'</dl>',
|
1092 |
+
'aiosp_image_seo_title_strip_punc' => __( "Enable this setting to strip punctuation characters for your images' title attribute.", 'all-in-one-seo-pack' ),
|
1093 |
+
'aiosp_image_seo_alt_format' =>
|
1094 |
+
__( 'This controls the format of the alt tag attribute of your images.', 'all-in-one-seo-pack' ) . '<br />' .
|
1095 |
+
__( 'The following macros are supported:', 'all-in-one-seo-pack' ) .
|
1096 |
+
'<dl>' .
|
1097 |
+
'<dt>%image_title%</dt>' .
|
1098 |
+
'<dd>' . __( 'Your image title', 'all-in-one-seo-pack' ) . '</dd>' .
|
1099 |
+
'<dt>%site_title%</dt>' .
|
1100 |
+
'<dd>' . __( 'Your site title', 'all-in-one-seo-pack' ) . '</dd>' .
|
1101 |
+
'<dt>%site_description%</dt>' .
|
1102 |
+
'<dd>' . __( 'Your site description', 'all-in-one-seo-pack' ) . '</dd>' .
|
1103 |
+
'<dt>%image_seo_title%</dt>' .
|
1104 |
+
'<dd>' . __( 'Your image SEO title. This is the title you enter in our metabox', 'all-in-one-seo-pack' ) . '</dd>' .
|
1105 |
+
'<dt>%image_seo_description%</dt>' .
|
1106 |
+
'<dd>' . __( 'Your image SEO description. This is the meta description you enter in our metabox', 'all-in-one-seo-pack' ) . '</dd>' .
|
1107 |
+
'<dt>%post_seo_title%</dt>' .
|
1108 |
+
'<dd>' . __( 'The SEO title set for the post or page', 'all-in-one-seo-pack' ) . '</dd>' .
|
1109 |
+
'<dt>%post_seo_description%</dt>' .
|
1110 |
+
'<dd>' . __( 'The SEO description set for the post or page', 'all-in-one-seo-pack' ) . '</dd>' .
|
1111 |
+
'<dt>%alt_tag%</dt>' .
|
1112 |
+
'<dd>' . __( "Your image's alt tag attribute", 'all-in-one-seo-pack' ) . '</dd>' .
|
1113 |
+
'<dt>%post_title%</dt>' .
|
1114 |
+
'<dd>' . __( 'The original title of the post or page', 'all-in-one-seo-pack' ) . '</dd>' .
|
1115 |
+
'<dt>%category_title%</dt>' .
|
1116 |
+
'<dd>' . __( 'The title of the category or taxonomy', 'all-in-one-seo-pack' ) . '</dd>' .
|
1117 |
+
'<dt>%post_date%</dt>' .
|
1118 |
+
'<dd>' . sprintf(
|
1119 |
+
__( 'The %1$s when the %2$s was published (localized)', 'all-in-one-seo-pack' ),
|
1120 |
+
__( 'date', 'all-in-one-seo-pack' ),
|
1121 |
+
__( 'image', 'all-in-one-seo-pack' )
|
1122 |
+
) . '</dd>' .
|
1123 |
+
'<dt>%post_year%</dt>' .
|
1124 |
+
'<dd>' . sprintf(
|
1125 |
+
__( 'The %1$s when the %2$s was published (localized)', 'all-in-one-seo-pack' ),
|
1126 |
+
__( 'year', 'all-in-one-seo-pack' ),
|
1127 |
+
__( 'image', 'all-in-one-seo-pack' )
|
1128 |
+
) . '</dd>' .
|
1129 |
+
'<dt>%post_month%</dt>' .
|
1130 |
+
'<dd>' . sprintf(
|
1131 |
+
__( 'The %1$s when the %2$s was published (localized)', 'all-in-one-seo-pack' ),
|
1132 |
+
__( 'month', 'all-in-one-seo-pack' ),
|
1133 |
+
__( 'image', 'all-in-one-seo-pack' )
|
1134 |
+
) . '</dd>' .
|
1135 |
+
'</dl>',
|
1136 |
+
'aiosp_image_seo_alt_strip_punc' => __( "Enable this setting to strip punctuation characters for your images' alt tag attribute.", 'all-in-one-seo-pack' ),
|
1137 |
+
);
|
1138 |
+
|
1139 |
+
$help_doc_link = array(
|
1140 |
+
'aiosp_image_seo_title_format' => 'https://semperplugins.com/documentation/image-seo-module/#title-attribute-format',
|
1141 |
+
'aiosp_image_seo_title_strip_punc' => 'https://semperplugins.com/documentation/image-seo-module/#strip-punctuation-for-title-attributes',
|
1142 |
+
'aiosp_image_seo_alt_format' => 'https://semperplugins.com/documentation/image-seo-module/#alt-tag-attribute-format',
|
1143 |
+
'aiosp_image_seo_alt_strip_punc' => 'https://semperplugins.com/documentation/image-seo-module/#strip-punctuation-for-alt-tag-attributes',
|
1144 |
+
);
|
1145 |
+
|
1146 |
+
return $this->merge_text_with_links( $rtn_help_text, $help_doc_link );
|
1147 |
+
}
|
1148 |
+
|
1149 |
/**
|
1150 |
* Help Text Post Meta (Core Module)
|
1151 |
*
|
1167 |
'aiosp_noindex' => __( 'Check this box to ask search engines not to index this page.', 'all-in-one-seo-pack' ),
|
1168 |
'aiosp_nofollow' => __( 'Check this box to ask search engines not to follow links from this page.', 'all-in-one-seo-pack' ),
|
1169 |
'aiosp_sitemap_exclude' => __( 'Don\'t display this page in the sitemap.', 'all-in-one-seo-pack' ),
|
1170 |
+
'aiosp_sitemap_priority' => __( 'Override the default sitemap priority for this post.', 'all-in-one-seo-pack' ),
|
1171 |
+
'aiosp_sitemap_frequency' => __( 'Override the default sitemap frequency for this post.', 'all-in-one-seo-pack' ),
|
1172 |
'aiosp_disable' => __( 'Disable SEO on this page.', 'all-in-one-seo-pack' ),
|
1173 |
'aiosp_disable_analytics' => __( 'Disable Google Analytics on this page.', 'all-in-one-seo-pack' ),
|
1174 |
);
|
1182 |
'aiosp_noindex' => 'https://semperplugins.com/documentation/post-settings/#robots-meta-noindex',
|
1183 |
'aiosp_nofollow' => 'https://semperplugins.com/documentation/post-settings/#robots-meta-nofollow',
|
1184 |
'aiosp_sitemap_exclude' => 'https://semperplugins.com/documentation/post-settings/#exclude-from-sitemap',
|
1185 |
+
'aiosp_sitemap_priority' => 'https://semperplugins.com/documentation/post-settings/#sitemap-priority',
|
1186 |
+
'aiosp_sitemap_frequency' => 'https://semperplugins.com/documentation/post-settings/#sitemap-frequency',
|
1187 |
'aiosp_disable' => 'https://semperplugins.com/documentation/post-settings/#disable-on-this-post',
|
1188 |
'aiosp_disable_analytics' => 'https://semperplugins.com/documentation/post-settings/#disable-google-analytics',
|
1189 |
);
|
1190 |
|
1191 |
foreach ( $help_doc_link as $k1_slug => $v1_url ) {
|
1192 |
+
$link_text = __( 'Click here for documentation on this setting.', 'all-in-one-seo-pack' );
|
1193 |
+
$link_url = $v1_url;
|
1194 |
+
|
1195 |
+
if ( ! AIOSEOPPRO &&
|
1196 |
+
( 'aiosp_sitemap_priority' === $k1_slug || 'aiosp_sitemap_frequency' === $k1_slug )
|
1197 |
+
) {
|
1198 |
+
$link_text = sprintf( __( 'Upgrade to %s to unlock this feature.', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' );
|
1199 |
+
$link_url = "https://semperplugins.com/all-in-one-seo-pack-pro-version/?utm_source=WordPress&utm_campaign=liteplugin&utm_medium=$k1_slug";
|
1200 |
+
}
|
1201 |
+
|
1202 |
+
$rtn_help_text[ $k1_slug ] .= '<br /><br /><a href="' . $link_url . '" target="_blank">' . $link_text . '</a>';
|
1203 |
}
|
1204 |
|
1205 |
return $rtn_help_text;
|
1223 |
}
|
1224 |
return 'DEV: Missing Help Text: ' . $slug;
|
1225 |
}
|
1226 |
+
|
1227 |
+
/**
|
1228 |
+
* Returns the tooltip help text with their respective documentation links.
|
1229 |
+
*
|
1230 |
+
* @since 3.4.0
|
1231 |
+
*
|
1232 |
+
* @param array $doc_text The tooltip strings.
|
1233 |
+
* @param array $doc_links The links to the docs on our website.
|
1234 |
+
*
|
1235 |
+
* @return array $tooltip_content The tooltip strings paired with their respective documentation links.
|
1236 |
+
*/
|
1237 |
+
private function merge_text_with_links( $doc_text, $doc_links ) {
|
1238 |
+
|
1239 |
+
foreach ( $doc_links as $setting_slug => $url ) {
|
1240 |
+
$doc_text[ $setting_slug ] .= sprintf( "<br /><br /><a href='%s' target='_blank'>%s</a>", $url, __( 'Click here for documentation on this setting.', 'all-in-one-seo-pack' ) );
|
1241 |
+
}
|
1242 |
+
return $doc_text;
|
1243 |
+
}
|
1244 |
}
|
admin/class-aioseop-notices.php
CHANGED
@@ -106,32 +106,28 @@ if ( ! class_exists( 'AIOSEOP_Notices' ) ) {
|
|
106 |
*/
|
107 |
private $aioseop_screens = array();
|
108 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
/**
|
110 |
* __constructor.
|
111 |
*
|
112 |
* @since 3.0
|
113 |
*/
|
114 |
public function __construct() {
|
115 |
-
|
116 |
-
// DirectoryIterator::getExtension() was added in PHP 5.3.6. We can remove this once we drop support < PHP 5.3.
|
117 |
-
if ( version_compare( phpversion(), '5.3.6', '<' ) ) {
|
118 |
-
return false;
|
119 |
-
}
|
120 |
-
|
121 |
$this->_requires();
|
122 |
$this->obj_load_options();
|
123 |
|
124 |
if ( current_user_can( 'aiosp_manage_seo' ) ) {
|
125 |
-
$this->aioseop_screens
|
126 |
-
$this->aioseop_screens[] = 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_performance';
|
127 |
-
$this->aioseop_screens[] = 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_sitemap';
|
128 |
-
$this->aioseop_screens[] = 'all-in-one-seo_page_aiosp_opengraph';
|
129 |
-
$this->aioseop_screens[] = 'all-in-one-seo_page_aiosp_robots_generator';
|
130 |
-
$this->aioseop_screens[] = 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_robots';
|
131 |
-
$this->aioseop_screens[] = 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_file_editor';
|
132 |
-
$this->aioseop_screens[] = 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_importer_exporter';
|
133 |
-
$this->aioseop_screens[] = 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_bad_robots';
|
134 |
-
$this->aioseop_screens[] = 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_feature_manager';
|
135 |
|
136 |
add_action( 'admin_init', array( $this, 'init' ) );
|
137 |
add_action( 'current_screen', array( $this, 'admin_screen' ) );
|
@@ -161,7 +157,8 @@ if ( ! class_exists( 'AIOSEOP_Notices' ) ) {
|
|
161 |
*/
|
162 |
private function autoload_notice_files() {
|
163 |
foreach ( new DirectoryIterator( AIOSEOP_PLUGIN_DIR . 'admin/display/notices/' ) as $file ) {
|
164 |
-
|
|
|
165 |
$filename = $file->getFilename();
|
166 |
|
167 |
// Qualified file pattern; "*-notice.php".
|
@@ -339,6 +336,7 @@ if ( ! class_exists( 'AIOSEOP_Notices' ) ) {
|
|
339 |
'time' => 0,
|
340 |
'text' => __( 'Dismiss', 'all-in-one-seo-pack' ),
|
341 |
'link' => '#',
|
|
|
342 |
'dismiss' => true,
|
343 |
'class' => '',
|
344 |
);
|
@@ -730,31 +728,32 @@ if ( ! class_exists( 'AIOSEOP_Notices' ) ) {
|
|
730 |
$current_screen = get_current_screen();
|
731 |
$current_user_id = get_current_user_id();
|
732 |
foreach ( $this->active_notices as $a_notice_slug => $a_notice_time_display ) {
|
733 |
-
// vvv TEMP Avoid review notice.
|
734 |
-
if ( 'review_plugin' === $a_notice_slug ) {
|
735 |
-
continue;
|
736 |
-
}
|
737 |
-
// ^^^ TEMP Avoid review notice.
|
738 |
$notice_show = true;
|
739 |
$notice = $this->get_notice( $a_notice_slug );
|
740 |
|
|
|
|
|
|
|
|
|
|
|
|
|
741 |
// Screen Restriction.
|
742 |
if ( ! empty( $notice['screens'] ) ) {
|
743 |
-
|
744 |
if ( in_array( 'aioseop', $notice['screens'], true ) ) {
|
745 |
-
|
746 |
-
|
747 |
-
}
|
748 |
}
|
749 |
|
750 |
-
|
751 |
-
|
752 |
-
if ( ! in_array( $current_screen->id, $notice['screens'], true ) ) {
|
753 |
-
continue;
|
754 |
-
}
|
755 |
}
|
756 |
}
|
757 |
|
|
|
|
|
|
|
|
|
758 |
if ( isset( $this->dismissed[ $a_notice_slug ] ) && $this->dismissed[ $a_notice_slug ] ) {
|
759 |
$notice_show = false;
|
760 |
}
|
@@ -825,7 +824,7 @@ if ( ! class_exists( 'AIOSEOP_Notices' ) ) {
|
|
825 |
if ( empty( $notice_slug ) ) {
|
826 |
/* Translators: Displays the hordcoded slug that missing. */
|
827 |
wp_send_json_error( sprintf( __( 'Missing values from `%s`.', 'all-in-one-seo-pack' ), 'notice_slug' ) );
|
828 |
-
} elseif ( empty( $action_index ) && 0 !== $action_index ) {
|
829 |
/* Translators: Displays the hordcoded slug that missing. */
|
830 |
wp_send_json_error( sprintf( __( 'Missing values from `%s`.', 'all-in-one-seo-pack' ), 'action_index' ) );
|
831 |
}
|
106 |
*/
|
107 |
private $aioseop_screens = array();
|
108 |
|
109 |
+
/**
|
110 |
+
* List of screens that should be excluded.
|
111 |
+
*
|
112 |
+
* @var array
|
113 |
+
*
|
114 |
+
* @since 3.4.0
|
115 |
+
*/
|
116 |
+
private $excluded_screens = array(
|
117 |
+
'About Us' => 'all-in-one-seo_page_aioseop-about',
|
118 |
+
);
|
119 |
+
|
120 |
/**
|
121 |
* __constructor.
|
122 |
*
|
123 |
* @since 3.0
|
124 |
*/
|
125 |
public function __construct() {
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
$this->_requires();
|
127 |
$this->obj_load_options();
|
128 |
|
129 |
if ( current_user_can( 'aiosp_manage_seo' ) ) {
|
130 |
+
$this->aioseop_screens = aioseop_get_admin_screens();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
|
132 |
add_action( 'admin_init', array( $this, 'init' ) );
|
133 |
add_action( 'current_screen', array( $this, 'admin_screen' ) );
|
157 |
*/
|
158 |
private function autoload_notice_files() {
|
159 |
foreach ( new DirectoryIterator( AIOSEOP_PLUGIN_DIR . 'admin/display/notices/' ) as $file ) {
|
160 |
+
$extension = pathinfo( $file->getFilename(), PATHINFO_EXTENSION );
|
161 |
+
if ( $file->isFile() && 'php' === $extension ) {
|
162 |
$filename = $file->getFilename();
|
163 |
|
164 |
// Qualified file pattern; "*-notice.php".
|
336 |
'time' => 0,
|
337 |
'text' => __( 'Dismiss', 'all-in-one-seo-pack' ),
|
338 |
'link' => '#',
|
339 |
+
'new_tab' => true,
|
340 |
'dismiss' => true,
|
341 |
'class' => '',
|
342 |
);
|
728 |
$current_screen = get_current_screen();
|
729 |
$current_user_id = get_current_user_id();
|
730 |
foreach ( $this->active_notices as $a_notice_slug => $a_notice_time_display ) {
|
|
|
|
|
|
|
|
|
|
|
731 |
$notice_show = true;
|
732 |
$notice = $this->get_notice( $a_notice_slug );
|
733 |
|
734 |
+
// If we have no message or static HTML, this is a bad notice.
|
735 |
+
if ( empty( $notice['message'] ) && empty( $notice['html'] ) ) {
|
736 |
+
$this->remove_notice( $a_notice_slug );
|
737 |
+
continue;
|
738 |
+
}
|
739 |
+
|
740 |
// Screen Restriction.
|
741 |
if ( ! empty( $notice['screens'] ) ) {
|
742 |
+
|
743 |
if ( in_array( 'aioseop', $notice['screens'], true ) ) {
|
744 |
+
unset( $notice['screens']['aiosoep'] );
|
745 |
+
$notice['screens'] = array_merge( $notice['screens'], aioseop_get_admin_screens() );
|
|
|
746 |
}
|
747 |
|
748 |
+
if ( ! in_array( $current_screen->id, $notice['screens'], true ) ) {
|
749 |
+
continue;
|
|
|
|
|
|
|
750 |
}
|
751 |
}
|
752 |
|
753 |
+
if ( in_array( $current_screen->id, $this->excluded_screens, true ) ) {
|
754 |
+
continue;
|
755 |
+
}
|
756 |
+
|
757 |
if ( isset( $this->dismissed[ $a_notice_slug ] ) && $this->dismissed[ $a_notice_slug ] ) {
|
758 |
$notice_show = false;
|
759 |
}
|
824 |
if ( empty( $notice_slug ) ) {
|
825 |
/* Translators: Displays the hordcoded slug that missing. */
|
826 |
wp_send_json_error( sprintf( __( 'Missing values from `%s`.', 'all-in-one-seo-pack' ), 'notice_slug' ) );
|
827 |
+
} elseif ( empty( $action_index ) && 0 !== (int) $action_index ) {
|
828 |
/* Translators: Displays the hordcoded slug that missing. */
|
829 |
wp_send_json_error( sprintf( __( 'Missing values from `%s`.', 'all-in-one-seo-pack' ), 'action_index' ) );
|
830 |
}
|
admin/display/credits-content.php
CHANGED
@@ -22,26 +22,11 @@
|
|
22 |
|
23 |
<h3 class="wp-people-group"><?php _e( 'Project Leaders', 'all-in-one-seo-pack' ); ?></h3>
|
24 |
<ul class="wp-people-group " id="wp-people-group-project-leaders">
|
25 |
-
<li class="wp-person" id="wp-person-michaeltorbert">
|
26 |
-
<a class="web" href="https://twitter.com/michaeltorbert" target="_blank"><img alt="" class="gravatar" src="https://s.gravatar.com/avatar/f41419cf5cfdbb071a8d591ac9976bf3?s=60">
|
27 |
-
Michael Torbert</a>
|
28 |
-
<span class="title">
|
29 |
-
<?php
|
30 |
-
/* translators: This is our CEO and founder Michael Torbert who oversees everything that is related to All in One SEO Pack. Feel free to use a different term if this doesn't translate well. */
|
31 |
-
_e( 'Project Lead', 'all-in-one-seo-pack' );
|
32 |
-
?>
|
33 |
-
</span>
|
34 |
-
</li>
|
35 |
<li class="wp-person" id="wp-person-stevemortiboy">
|
36 |
<a class="web" target="_blank" href="https://twitter.com/wpsmort"><img alt="" class="gravatar" src="https://www.gravatar.com/avatar/40e33d813c16a63500675d851b0cbf3a?s=60">
|
37 |
Steve Mortiboy</a>
|
38 |
<span class="title"><?php _e( 'Project Manager', 'all-in-one-seo-pack' ); ?></span>
|
39 |
</li>
|
40 |
-
<li class="wp-person" id="wp-person-yuqianliu">
|
41 |
-
<a class="web" target="_blank" href="https://profiles.wordpress.org/yuqianl"><img alt="" class="gravatar" src="https://www.gravatar.com/avatar/8f971bea2b6c483fd1099e558013a7d0?s=60">
|
42 |
-
Yuqian Liu</a>
|
43 |
-
<span class="title"><?php _e( 'Project Manager', 'all-in-one-seo-pack' ); ?></span>
|
44 |
-
</li>
|
45 |
</ul>
|
46 |
|
47 |
<h3 class="wp-people-group"><?php printf( __( 'Core Team', 'all-in-one-seo-pack' ) ); ?></h3>
|
@@ -51,12 +36,6 @@
|
|
51 |
Arnaud Broes</a>
|
52 |
<span class="title"><?php _e( 'Team Lead', 'all-in-one-seo-pack' ); ?></span>
|
53 |
</li>
|
54 |
-
|
55 |
-
<li class="wp-person" id="rozroz">
|
56 |
-
<a class="web" target="_blank" href="https://github.com/contactashish13"><img alt="" class="gravatar" src="https://avatars2.githubusercontent.com/u/12953439?s=60">
|
57 |
-
Ashish Ravi</a>
|
58 |
-
<span class="title"><?php _e( 'Development Team', 'all-in-one-seo-pack' ); ?></span>
|
59 |
-
</li>
|
60 |
<li class="wp-person" id="EkoJR">
|
61 |
<a class="web" target="_blank" href="https://profiles.wordpress.org/EkoJR/"><img alt="" class="gravatar" src="https://secure.gravatar.com/avatar/bb4c78fe944b58bd5f127d836500c30a?s=200&d=mm&r=g">
|
62 |
Ben Reames</a>
|
@@ -65,81 +44,6 @@
|
|
65 |
|
66 |
</ul>
|
67 |
|
68 |
-
<h3 class="wp-people-group">🌟
|
69 |
-
<?php
|
70 |
-
/* translators: These are people who made an awesome contribution to All in One SEO Pack. Feel free to replace "Rockstar" with whatever works best in your language. */
|
71 |
-
_e( 'Recent Rockstar Contributors', 'all-in-one-seo-pack' );
|
72 |
-
?>
|
73 |
-
🌟</h3>
|
74 |
-
<ul class="wp-people-group " id="wp-people-group-rockstars">
|
75 |
-
<li>
|
76 |
-
<?php
|
77 |
-
/* translators: %1$s and %2$s are used as placeholders and should not be transalted. These are used to transform the text in between them into a clickable link. */
|
78 |
-
printf(
|
79 |
-
__( 'Want to see your name and picture here as a community developer? %1$sClick here%2$s to open an issue on GitHub to report a bug, request a feature or find an issue and submit code!', 'all-in-one-seo-pack' ),
|
80 |
-
'<a href="https://github.com/semperfiwebdesign/all-in-one-seo-pack" target="_blank">',
|
81 |
-
'</a>'
|
82 |
-
);
|
83 |
-
?>
|
84 |
-
</li>
|
85 |
-
<li class="wp-person" id="wp-person-mayukojpn">
|
86 |
-
<a class="web" target="_blank" href="https://github.com/rebeccahum"><img alt="" class="gravatar" src="https://2.gravatar.com/avatar/b57b5efcabe3e01833849390ad7d3129?s=60">
|
87 |
-
Rebecca Hum</a>
|
88 |
-
</li>
|
89 |
-
<li class="wp-person" id="wp-person-mayukojpn">
|
90 |
-
<a class="web" target="_blank" href="https://profiles.wordpress.org/mayukojpn/"><img alt="" class="gravatar" src="https://secure.gravatar.com/avatar/79294868a241e80ea4fda34c618b8a11?s=60">
|
91 |
-
Mayo Moriyama</a>
|
92 |
-
</li>
|
93 |
-
<li class="wp-person" id="wp-person-dougalcampbell">
|
94 |
-
<a class="web" target="_blank" href="https://profiles.wordpress.org/dougal/"><img alt="" class="gravatar" src="https://www.gravatar.com/avatar/81717a172b6918071fbea1a52483294b?s=60">
|
95 |
-
Dougal Campbell</a>
|
96 |
-
</li>
|
97 |
-
<li class="wp-person" id="wp-person-alejandromostajo">
|
98 |
-
<a class="web" target="_blank" href="https://github.com/amostajo"><img alt="" class="gravatar" src="https://avatars1.githubusercontent.com/u/1645908?s=60">
|
99 |
-
Alejandro Mostajo</a>
|
100 |
-
</li>
|
101 |
-
<li class="wp-person" id="wp-person-aaronbrodney">
|
102 |
-
<a class="web" target="_blank" href="https://github.com/theycalledmetaz"><img alt="" class="gravatar" src="https://avatars3.githubusercontent.com/u/8225725?v=3&s=60">
|
103 |
-
Aaron Brodney</a>
|
104 |
-
</li>
|
105 |
-
<li class="wp-person" id="rozroz">
|
106 |
-
<a class="web" target="_blank" href="https://profiles.wordpress.org/yummy-wp/"><img alt="" class="gravatar" src="https://avatars0.githubusercontent.com/u/22232968?v=3&s=460">
|
107 |
-
Stanislav Samoilenko</a>
|
108 |
-
</li>
|
109 |
-
<li class="wp-person" id="shoheitanaka">
|
110 |
-
<a class="web" target="_blank" href="https://profiles.wordpress.org/shoheitanaka"><img alt="" class="gravatar" src="https://secure.gravatar.com/avatar/677e512c803c40c0180d4514f876a21f?s=200&d=mm&r=g">
|
111 |
-
Shohei Tanaka</a>
|
112 |
-
</li>
|
113 |
-
<li class="wp-person" id="webaware">
|
114 |
-
<a class="web" target="_blank" href="https://profiles.wordpress.org/webaware/"><img alt="" class="gravatar" src="https://secure.gravatar.com/avatar/aee800bc3644d9ebfa33c1ed9df5d958?s=200&d=mm&r=g">
|
115 |
-
Ross McKay</a>
|
116 |
-
</li>
|
117 |
-
<li class="wp-person" id="webaware">
|
118 |
-
<a class="web" target="_blank" href="https://github.com/jWright-Freelance/"><img alt="" class="gravatar" src="https://avatars1.githubusercontent.com/u/11382307?s=200&v=4">
|
119 |
-
John Wright</a>
|
120 |
-
</li>
|
121 |
-
<li class="wp-person" id="webaware">
|
122 |
-
<a class="web" target="_blank" href="https://wordpress.org/support/users/onetarek/"><img alt="" class="gravatar" src="https://secure.gravatar.com/avatar/dc4d0f0561009cc18c8d1cdfc760b2f1?s=200&d=retro&r=g">
|
123 |
-
Md Jahidul Islam</a>
|
124 |
-
</li>
|
125 |
-
<li class="wp-person" id="adamsilverstein">
|
126 |
-
<a class="web" target="_blank" href="https://profiles.wordpress.org/adamsilverstein/"><img alt=""class="gravatar" src="https://secure.gravatar.com/avatar/fddbd6c3e1c3d971aa732b9346aeb433?s=200&d=mm&r=g">
|
127 |
-
Adam Silverstein</a>
|
128 |
-
</li>
|
129 |
-
<li class="wp-person" id="vschettino">
|
130 |
-
<a class="web" target="_blank" href="https://github.com/vschettino/"><img alt="" class="gravatar" src="https://avatars2.githubusercontent.com/u/7289698?s=460&v=4">
|
131 |
-
Vinicius Schettino</a>
|
132 |
-
</li>
|
133 |
-
<li class="wp-person" id="vschettino">
|
134 |
-
<a class="web" target="_blank" href="https://github.com/srdjan-jcc"><img alt="" class="gravatar" src="https://avatars2.githubusercontent.com/u/3109112?s=460&v=4">
|
135 |
-
Srdjan Jocic</a>
|
136 |
-
</li>
|
137 |
-
<li class="wp-person" id="vschettino">
|
138 |
-
<a class="web" target="_blank" href="https://profiles.wordpress.org/soulseekah/"><img alt="" class="gravatar" src="https://avatars0.githubusercontent.com/u/685880?s=460&v=4">
|
139 |
-
Gennady Kovshenin</a>
|
140 |
-
</li>
|
141 |
-
</ul>
|
142 |
-
|
143 |
<h3 class="wp-people-group dashicons-before dashicons-translation">
|
144 |
<?php
|
145 |
/* translators: In this context, "translation contributors" are translators who submit strings on translate.wordpress.org and "translation editors" are those who proofread and approve them (also known as PTEs - Project Translation Editors).*/
|
22 |
|
23 |
<h3 class="wp-people-group"><?php _e( 'Project Leaders', 'all-in-one-seo-pack' ); ?></h3>
|
24 |
<ul class="wp-people-group " id="wp-people-group-project-leaders">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
<li class="wp-person" id="wp-person-stevemortiboy">
|
26 |
<a class="web" target="_blank" href="https://twitter.com/wpsmort"><img alt="" class="gravatar" src="https://www.gravatar.com/avatar/40e33d813c16a63500675d851b0cbf3a?s=60">
|
27 |
Steve Mortiboy</a>
|
28 |
<span class="title"><?php _e( 'Project Manager', 'all-in-one-seo-pack' ); ?></span>
|
29 |
</li>
|
|
|
|
|
|
|
|
|
|
|
30 |
</ul>
|
31 |
|
32 |
<h3 class="wp-people-group"><?php printf( __( 'Core Team', 'all-in-one-seo-pack' ) ); ?></h3>
|
36 |
Arnaud Broes</a>
|
37 |
<span class="title"><?php _e( 'Team Lead', 'all-in-one-seo-pack' ); ?></span>
|
38 |
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
<li class="wp-person" id="EkoJR">
|
40 |
<a class="web" target="_blank" href="https://profiles.wordpress.org/EkoJR/"><img alt="" class="gravatar" src="https://secure.gravatar.com/avatar/bb4c78fe944b58bd5f127d836500c30a?s=200&d=mm&r=g">
|
41 |
Ben Reames</a>
|
44 |
|
45 |
</ul>
|
46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
<h3 class="wp-people-group dashicons-before dashicons-translation">
|
48 |
<?php
|
49 |
/* translators: In this context, "translation contributors" are translators who submit strings on translate.wordpress.org and "translation editors" are those who proofread and approve them (also known as PTEs - Project Translation Editors).*/
|
admin/display/general-metaboxes.php
CHANGED
@@ -35,7 +35,6 @@ class aiosp_metaboxes {
|
|
35 |
case 'aioseop-about':
|
36 |
?>
|
37 |
<div class="aioseop_metabox_text">
|
38 |
-
<h2 style="display:inline;"><?php echo AIOSEOP_PLUGIN_NAME; ?></h2>
|
39 |
<?php
|
40 |
global $current_user;
|
41 |
$user_id = $current_user->ID;
|
@@ -52,9 +51,7 @@ class aiosp_metaboxes {
|
|
52 |
<p>
|
53 |
<strong>
|
54 |
<?php
|
55 |
-
|
56 |
-
/* translators: after this string comes a list of exclusive features that are not included in the free version of the plugin */
|
57 |
-
echo ' ' . __( 'to upgrade to Pro Version and get:', 'all-in-one-seo-pack' );
|
58 |
?>
|
59 |
</strong>
|
60 |
</p>
|
@@ -69,41 +66,35 @@ class aiosp_metaboxes {
|
|
69 |
<div class="aioseop_metabox_text">
|
70 |
<?php self::pro_meta_content(); ?>
|
71 |
</div>
|
72 |
-
<?php endif; ?>
|
73 |
-
<div class="aioseop_metabox_feature">
|
74 |
-
<div class="aiosp-di">
|
75 |
-
<a class="dashicons di-twitter" target="_blank" href="https://twitter.com/aioseopack" title="Follow me on Twitter"></a>
|
76 |
-
<a class="dashicons di-facebook" target="_blank" href="https://www.facebook.com/aioseopack" title="Follow me on Facebook"></a>
|
77 |
-
</div>
|
78 |
-
</div>
|
79 |
<?php
|
|
|
80 |
$aiosp_trans = new AIOSEOP_Translations();
|
81 |
// Eventually if nothing is returned we should just remove this section.
|
82 |
-
|
83 |
-
|
84 |
<div class="aioseop_translations">
|
85 |
<strong>
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
}
|
93 |
-
|
94 |
-
/* translators: %1$s, %2$s, etc. are placeholders and shouldn't be translated. %1$s expands to the number of languages All in One SEO Pack has been translated into, %2$s to the name of the plugin, $3%s to the percentage translated of the current language, $4%s to the language name, %5$s and %6$s to anchor tags with link to the translation page at translate.wordpress.org */
|
95 |
-
printf(
|
96 |
-
__( '%1$s has been translated into %2$s languages, but currently the %3$s translation is only %4$s percent complete. %5$sClick here%6$s to help get it to 100 percent.', 'all-in-one-seo-pack' ),
|
97 |
-
AIOSEOP_PLUGIN_NAME,
|
98 |
-
$aiosp_trans->translated_count,
|
99 |
-
$maybe_native_name,
|
100 |
-
$aiosp_trans->percent_translated,
|
101 |
-
"<a href=\"$aiosp_trans->translation_url\" target=\"_BLANK\">",
|
102 |
-
'</a>'
|
103 |
-
);
|
104 |
}
|
105 |
|
106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
</strong>
|
108 |
</div>
|
109 |
<?php endif; ?>
|
@@ -157,22 +148,22 @@ class aiosp_metaboxes {
|
|
157 |
title="<?php _e( 'All in One SEO Pro Plugin Support Forum', 'all-in-one-seo-pack' ); ?>"
|
158 |
href="https://semperplugins.com/support/"><?php _e( 'Access our Premium Support Forums', 'all-in-one-seo-pack' ); ?></a>
|
159 |
</li>
|
160 |
-
<li>
|
161 |
<div class="aioseop_icon aioseop-icon-cog"></div>
|
162 |
<a target="_blank" rel="noopener noreferrer" title="<?php _e( 'All in One SEO Pro Plugin Changelog', 'all-in-one-seo-pack' ); ?>"
|
163 |
href="https://semperplugins.com/all-in-one-seo-pack-changelog/"><?php _e( 'View the Changelog', 'all-in-one-seo-pack' ); ?></a>
|
164 |
</li>
|
165 |
-
<li>
|
166 |
<div class="aioseop_icon aioseop-icon-youtube"></div>
|
167 |
<a target="_blank" rel="noopener noreferrer"
|
168 |
href="https://semperplugins.com/doc-type/video/"><?php _e( 'Watch video tutorials', 'all-in-one-seo-pack' ); ?></a>
|
169 |
</li>
|
170 |
-
<li>
|
171 |
<div class="aioseop_icon aioseop-icon-book"></div>
|
172 |
<a target="_blank" rel="noopener noreferrer"
|
173 |
href="https://semperplugins.com/documentation/quick-start-guide/"><?php _e( 'Getting started? Read the Beginners Guide', 'all-in-one-seo-pack' ); ?></a>
|
174 |
</li>
|
175 |
-
</ul>
|
176 |
</div>
|
177 |
<?php break; ?>
|
178 |
<?php endswitch; ?>
|
@@ -189,26 +180,37 @@ class aiosp_metaboxes {
|
|
189 |
|
190 |
echo '<ul>';
|
191 |
|
|
|
|
|
|
|
192 |
if ( class_exists( 'WooCommerce' ) ) {
|
193 |
echo '<li>' . __( 'Advanced support for WooCommerce', 'all-in-one-seo-pack' ) . '</li>';
|
194 |
} else {
|
195 |
-
echo '<li>' . __( 'Advanced support for
|
196 |
}
|
197 |
|
198 |
echo '<li>' . __( 'Video SEO Module', 'all-in-one-seo-pack' ) . '</li>';
|
199 |
-
echo '<li>' . __( 'SEO
|
200 |
-
echo '<li>' . __( 'Social Meta for Categories, Tags and Custom Taxonomies', 'all-in-one-seo-pack' ) . '</li>';
|
201 |
echo '<li>' . __( 'Advanced Google Analytics tracking', 'all-in-one-seo-pack' ) . '</li>';
|
|
|
|
|
202 |
echo '<li>' . __( 'Greater control over display settings', 'all-in-one-seo-pack' ) . '</li>';
|
203 |
-
echo '<li>' . __( 'Ad free (no banner adverts)', 'all-in-one-seo-pack' ) . '</li>';
|
204 |
echo '<li>' . __( 'Access to Video Screencasts', 'all-in-one-seo-pack' ) . '</li>';
|
205 |
-
echo '<li>' . __( 'Access to Premium Support
|
206 |
echo '<li>' . __( 'Access to Knowledge Center', 'all-in-one-seo-pack' ) . '</li>';
|
207 |
|
208 |
echo '</ul>';
|
209 |
|
210 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
|
|
|
212 |
}
|
213 |
|
214 |
}
|
35 |
case 'aioseop-about':
|
36 |
?>
|
37 |
<div class="aioseop_metabox_text">
|
|
|
38 |
<?php
|
39 |
global $current_user;
|
40 |
$user_id = $current_user->ID;
|
51 |
<p>
|
52 |
<strong>
|
53 |
<?php
|
54 |
+
_e( 'Upgrade to our premium version and unlock:', 'all-in-one-seo-pack' );
|
|
|
|
|
55 |
?>
|
56 |
</strong>
|
57 |
</p>
|
66 |
<div class="aioseop_metabox_text">
|
67 |
<?php self::pro_meta_content(); ?>
|
68 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
<?php
|
70 |
+
endif;
|
71 |
$aiosp_trans = new AIOSEOP_Translations();
|
72 |
// Eventually if nothing is returned we should just remove this section.
|
73 |
+
if ( get_locale() != 'en_US' ) :
|
74 |
+
?>
|
75 |
<div class="aioseop_translations">
|
76 |
<strong>
|
77 |
+
<?php
|
78 |
+
if ( $aiosp_trans->percent_translated < 100 ) {
|
79 |
+
if ( ! empty( $aiosp_trans->native_name ) ) {
|
80 |
+
$maybe_native_name = $aiosp_trans->native_name;
|
81 |
+
} else {
|
82 |
+
$maybe_native_name = $aiosp_trans->name;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
}
|
84 |
|
85 |
+
/* translators: %1$s, %2$s, etc. are placeholders and shouldn't be translated. %1$s expands to the number of languages All in One SEO Pack has been translated into, %2$s to the name of the plugin, $3%s to the percentage translated of the current language, $4%s to the language name, %5$s and %6$s to anchor tags with link to the translation page at translate.wordpress.org */
|
86 |
+
printf(
|
87 |
+
__( '%1$s has been translated into %2$s languages, but currently the %3$s translation is only %4$s percent complete. %5$sClick here%6$s to help get it to 100 percent.', 'all-in-one-seo-pack' ),
|
88 |
+
AIOSEOP_PLUGIN_NAME,
|
89 |
+
$aiosp_trans->translated_count,
|
90 |
+
$maybe_native_name,
|
91 |
+
$aiosp_trans->percent_translated,
|
92 |
+
"<a href=\"$aiosp_trans->translation_url\" target=\"_BLANK\">",
|
93 |
+
'</a>'
|
94 |
+
);
|
95 |
+
}
|
96 |
+
|
97 |
+
?>
|
98 |
</strong>
|
99 |
</div>
|
100 |
<?php endif; ?>
|
148 |
title="<?php _e( 'All in One SEO Pro Plugin Support Forum', 'all-in-one-seo-pack' ); ?>"
|
149 |
href="https://semperplugins.com/support/"><?php _e( 'Access our Premium Support Forums', 'all-in-one-seo-pack' ); ?></a>
|
150 |
</li>
|
151 |
+
<li>
|
152 |
<div class="aioseop_icon aioseop-icon-cog"></div>
|
153 |
<a target="_blank" rel="noopener noreferrer" title="<?php _e( 'All in One SEO Pro Plugin Changelog', 'all-in-one-seo-pack' ); ?>"
|
154 |
href="https://semperplugins.com/all-in-one-seo-pack-changelog/"><?php _e( 'View the Changelog', 'all-in-one-seo-pack' ); ?></a>
|
155 |
</li>
|
156 |
+
<li>
|
157 |
<div class="aioseop_icon aioseop-icon-youtube"></div>
|
158 |
<a target="_blank" rel="noopener noreferrer"
|
159 |
href="https://semperplugins.com/doc-type/video/"><?php _e( 'Watch video tutorials', 'all-in-one-seo-pack' ); ?></a>
|
160 |
</li>
|
161 |
+
<li>
|
162 |
<div class="aioseop_icon aioseop-icon-book"></div>
|
163 |
<a target="_blank" rel="noopener noreferrer"
|
164 |
href="https://semperplugins.com/documentation/quick-start-guide/"><?php _e( 'Getting started? Read the Beginners Guide', 'all-in-one-seo-pack' ); ?></a>
|
165 |
</li>
|
166 |
+
</ul>
|
167 |
</div>
|
168 |
<?php break; ?>
|
169 |
<?php endswitch; ?>
|
180 |
|
181 |
echo '<ul>';
|
182 |
|
183 |
+
echo '<li>' . __( 'SEO for Categories, Tags and Custom Taxonomies', 'all-in-one-seo-pack' ) . '</li>';
|
184 |
+
echo '<li>' . __( 'Social Meta for Categories, Tags and Custom Taxonomies', 'all-in-one-seo-pack' ) . '</li>';
|
185 |
+
|
186 |
if ( class_exists( 'WooCommerce' ) ) {
|
187 |
echo '<li>' . __( 'Advanced support for WooCommerce', 'all-in-one-seo-pack' ) . '</li>';
|
188 |
} else {
|
189 |
+
echo '<li>' . __( 'Advanced support for eCommerce', 'all-in-one-seo-pack' ) . '</li>';
|
190 |
}
|
191 |
|
192 |
echo '<li>' . __( 'Video SEO Module', 'all-in-one-seo-pack' ) . '</li>';
|
193 |
+
echo '<li>' . __( 'Image SEO Module', 'all-in-one-seo-pack' ) . '</li>';
|
|
|
194 |
echo '<li>' . __( 'Advanced Google Analytics tracking', 'all-in-one-seo-pack' ) . '</li>';
|
195 |
+
echo '<li>' . __( 'Support for Google Tag Manager', 'all-in-one-seo-pack' ) . '</li>';
|
196 |
+
// echo '<li>' . __( 'Support for Local Business Schema', 'all-in-one-seo-pack' ) . '</li>'.
|
197 |
echo '<li>' . __( 'Greater control over display settings', 'all-in-one-seo-pack' ) . '</li>';
|
|
|
198 |
echo '<li>' . __( 'Access to Video Screencasts', 'all-in-one-seo-pack' ) . '</li>';
|
199 |
+
echo '<li>' . __( 'Access to Premium Support', 'all-in-one-seo-pack' ) . '</li>';
|
200 |
echo '<li>' . __( 'Access to Knowledge Center', 'all-in-one-seo-pack' ) . '</li>';
|
201 |
|
202 |
echo '</ul>';
|
203 |
|
204 |
+
/* translators: %s: "All in One SEO Pack Pro" */
|
205 |
+
$text = sprintf( esc_html__( 'Get %s Now', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' );
|
206 |
+
|
207 |
+
$link = sprintf(
|
208 |
+
'<a href="%s" class="button button-primary button-hero button-pro-cta" target="_blank">%s</a>',
|
209 |
+
aioseop_get_utm_url( 'sidebar-cta-button' ),
|
210 |
+
$text
|
211 |
+
);
|
212 |
|
213 |
+
echo $link;
|
214 |
}
|
215 |
|
216 |
}
|
admin/display/menu.php
CHANGED
@@ -24,13 +24,10 @@ class AIOSEOPAdminMenus {
|
|
24 |
return;
|
25 |
}
|
26 |
|
27 |
-
if (
|
28 |
-
add_action( 'admin_menu', array( $this, '
|
29 |
-
|
30 |
-
return;
|
31 |
}
|
32 |
-
|
33 |
-
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
34 |
}
|
35 |
|
36 |
function remove_menus() {
|
@@ -38,13 +35,32 @@ class AIOSEOPAdminMenus {
|
|
38 |
}
|
39 |
|
40 |
/**
|
41 |
-
* Adds
|
42 |
*
|
43 |
-
* @since
|
|
|
44 |
*/
|
45 |
-
function
|
46 |
global $submenu;
|
47 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
$upgrade_text = __( 'Upgrade to Pro', 'all-in-one-seo-pack' );
|
49 |
$submenu[ AIOSEOP_PLUGIN_DIRNAME . '/aioseop_class.php' ][] = array(
|
50 |
"<span class='upgrade_menu_link'>$upgrade_text</span>",
|
24 |
return;
|
25 |
}
|
26 |
|
27 |
+
if ( ( current_user_can( 'manage_options' ) || current_user_can( 'aiosp_manage_seo' ) ) ) {
|
28 |
+
add_action( 'admin_menu', array( $this, 'add_submenu_pages' ), 11 );
|
29 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
|
|
|
30 |
}
|
|
|
|
|
31 |
}
|
32 |
|
33 |
function remove_menus() {
|
35 |
}
|
36 |
|
37 |
/**
|
38 |
+
* Adds the submenu pages for Lite users.
|
39 |
*
|
40 |
+
* @since 2.3.11.5
|
41 |
+
* @since 3.4.0 Added About page to admin menu.
|
42 |
*/
|
43 |
+
function add_submenu_pages() {
|
44 |
global $submenu;
|
45 |
+
|
46 |
+
$plugin_base_dir = explode( '/', plugin_basename( __FILE__ ) );
|
47 |
+
$menu_slug = $plugin_base_dir[0] . '/aioseop_class.php';
|
48 |
+
|
49 |
+
add_submenu_page(
|
50 |
+
$menu_slug,
|
51 |
+
sprintf( __( 'About %s', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME ),
|
52 |
+
__( 'About Us', 'all-in-one-seo-pack' ),
|
53 |
+
apply_filters( 'manage_aiosp', 'aiosp_manage_seo' ),
|
54 |
+
'aioseop-about',
|
55 |
+
array( 'AIOSEOP_About', 'init' ),
|
56 |
+
null
|
57 |
+
);
|
58 |
+
|
59 |
+
if ( AIOSEOPPRO ) {
|
60 |
+
return;
|
61 |
+
}
|
62 |
+
|
63 |
+
$url = aioseop_get_utm_url( 'admin-menu' );
|
64 |
$upgrade_text = __( 'Upgrade to Pro', 'all-in-one-seo-pack' );
|
65 |
$submenu[ AIOSEOP_PLUGIN_DIRNAME . '/aioseop_class.php' ][] = array(
|
66 |
"<span class='upgrade_menu_link'>$upgrade_text</span>",
|
admin/display/notice-aioseop.php
CHANGED
@@ -16,10 +16,46 @@ if ( isset( $notice['class'] ) && ! empty( $notice['class'] ) ) {
|
|
16 |
$notice_class = $notice['class'];
|
17 |
}
|
18 |
|
|
|
|
|
|
|
|
|
19 |
?>
|
20 |
-
<div class="notice <?php echo esc_attr( $notice_class );
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
<?php foreach ( $notice['action_options'] as $key => $action_option ) : ?>
|
24 |
<?php
|
25 |
$link = $action_option['link'];
|
@@ -28,7 +64,17 @@ if ( isset( $notice['class'] ) && ! empty( $notice['class'] ) ) {
|
|
28 |
$class .= 'aioseop-delay-' . $key;
|
29 |
$class .= ' ' . $action_option['class'];
|
30 |
?>
|
31 |
-
<a
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
<?php endforeach; ?>
|
33 |
</p>
|
34 |
</div>
|
16 |
$notice_class = $notice['class'];
|
17 |
}
|
18 |
|
19 |
+
add_filter( 'safe_style_css', 'aioseop_filter_styles' );
|
20 |
+
|
21 |
+
$dismissible = ! isset( $notice['dismissible'] ) || $notice['dismissible'] ? ' is-dismissible' : '';
|
22 |
+
|
23 |
?>
|
24 |
+
<div class="notice <?php echo esc_attr( $notice_class ); ?><?php echo $dismissible; ?> aioseop-notice-container aioseop-notice-<?php echo esc_attr( $notice['slug'] ); ?>">
|
25 |
+
<?php if ( ! empty( $notice['html'] ) ) : ?>
|
26 |
+
<?php
|
27 |
+
echo wp_kses(
|
28 |
+
$notice['html'],
|
29 |
+
array(
|
30 |
+
'br' => array(),
|
31 |
+
'div' => array(
|
32 |
+
'class' => true,
|
33 |
+
'style' => true,
|
34 |
+
),
|
35 |
+
'p' => array(),
|
36 |
+
'strong' => array(),
|
37 |
+
'a' => array(
|
38 |
+
'href' => true,
|
39 |
+
'class' => true,
|
40 |
+
'data-*' => true,
|
41 |
+
'target' => true,
|
42 |
+
'rel' => true,
|
43 |
+
),
|
44 |
+
'style' => array(),
|
45 |
+
'script' => array(
|
46 |
+
'type' => true,
|
47 |
+
),
|
48 |
+
'ul' => array(
|
49 |
+
'class' => true,
|
50 |
+
),
|
51 |
+
'li' => array(),
|
52 |
+
)
|
53 |
+
);
|
54 |
+
?>
|
55 |
+
<?php else : ?>
|
56 |
+
<p><?php echo esc_html( $notice['message'] ); ?></p>
|
57 |
+
<?php endif; ?>
|
58 |
+
<p class="aioseo-action-buttons">
|
59 |
<?php foreach ( $notice['action_options'] as $key => $action_option ) : ?>
|
60 |
<?php
|
61 |
$link = $action_option['link'];
|
64 |
$class .= 'aioseop-delay-' . $key;
|
65 |
$class .= ' ' . $action_option['class'];
|
66 |
?>
|
67 |
+
<a
|
68 |
+
href="<?php echo esc_url( $link ); ?>"
|
69 |
+
id="<?php echo esc_attr( $id ); ?>"
|
70 |
+
class="aioseop-notice-delay <?php echo esc_attr( $class ); ?>"
|
71 |
+
<?php
|
72 |
+
if ( $action_option['new_tab'] ) {
|
73 |
+
echo 'target="_blank" rel="noopener"';}
|
74 |
+
?>
|
75 |
+
>
|
76 |
+
<?php echo esc_textarea( $action_option['text'] ); ?>
|
77 |
+
</a>
|
78 |
<?php endforeach; ?>
|
79 |
</p>
|
80 |
</div>
|
admin/display/notice-default.php
CHANGED
@@ -16,10 +16,46 @@ if ( isset( $notice['class'] ) && ! empty( $notice['class'] ) ) {
|
|
16 |
$notice_class = $notice['class'];
|
17 |
}
|
18 |
|
|
|
|
|
|
|
|
|
19 |
?>
|
20 |
-
<div class="notice <?php echo esc_attr( $notice_class );
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
<?php foreach ( $notice['action_options'] as $key => $action_option ) : ?>
|
24 |
<?php
|
25 |
$link = $action_option['link'];
|
@@ -28,7 +64,17 @@ if ( isset( $notice['class'] ) && ! empty( $notice['class'] ) ) {
|
|
28 |
$class .= 'aioseop-delay-' . $key;
|
29 |
$class .= ' ' . $action_option['class'];
|
30 |
?>
|
31 |
-
<a
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
<?php endforeach; ?>
|
33 |
</p>
|
34 |
</div>
|
16 |
$notice_class = $notice['class'];
|
17 |
}
|
18 |
|
19 |
+
add_filter( 'safe_style_css', 'aioseop_filter_styles' );
|
20 |
+
|
21 |
+
$dismissible = ! isset( $notice['dismissible'] ) || $notice['dismissible'] ? ' is-dismissible' : '';
|
22 |
+
|
23 |
?>
|
24 |
+
<div class="notice <?php echo esc_attr( $notice_class ); ?><?php echo $dismissible; ?> aioseop-notice-container aioseop-notice-<?php echo esc_attr( $notice['slug'] ); ?>">
|
25 |
+
<?php if ( ! empty( $notice['html'] ) ) : ?>
|
26 |
+
<?php
|
27 |
+
echo wp_kses(
|
28 |
+
$notice['html'],
|
29 |
+
array(
|
30 |
+
'br' => array(),
|
31 |
+
'div' => array(
|
32 |
+
'class' => true,
|
33 |
+
'style' => true,
|
34 |
+
),
|
35 |
+
'p' => array(),
|
36 |
+
'strong' => array(),
|
37 |
+
'a' => array(
|
38 |
+
'href' => true,
|
39 |
+
'class' => true,
|
40 |
+
'data-*' => true,
|
41 |
+
'target' => true,
|
42 |
+
'rel' => true,
|
43 |
+
),
|
44 |
+
'style' => array(),
|
45 |
+
'script' => array(
|
46 |
+
'type' => true,
|
47 |
+
),
|
48 |
+
'ul' => array(
|
49 |
+
'class' => true,
|
50 |
+
),
|
51 |
+
'li' => array(),
|
52 |
+
)
|
53 |
+
);
|
54 |
+
?>
|
55 |
+
<?php else : ?>
|
56 |
+
<p><?php echo esc_html( $notice['message'] ); ?></p>
|
57 |
+
<?php endif; ?>
|
58 |
+
<p class="aioseo-action-buttons">
|
59 |
<?php foreach ( $notice['action_options'] as $key => $action_option ) : ?>
|
60 |
<?php
|
61 |
$link = $action_option['link'];
|
64 |
$class .= 'aioseop-delay-' . $key;
|
65 |
$class .= ' ' . $action_option['class'];
|
66 |
?>
|
67 |
+
<a
|
68 |
+
href="<?php echo esc_url( $link ); ?>"
|
69 |
+
id="<?php echo esc_attr( $id ); ?>"
|
70 |
+
class="aioseop-notice-delay <?php echo esc_attr( $class ); ?>"
|
71 |
+
<?php
|
72 |
+
if ( $action_option['new_tab'] ) {
|
73 |
+
echo 'target="_blank" rel="noopener"';}
|
74 |
+
?>
|
75 |
+
>
|
76 |
+
<?php echo esc_textarea( $action_option['text'] ); ?>
|
77 |
+
</a>
|
78 |
<?php endforeach; ?>
|
79 |
</p>
|
80 |
</div>
|
admin/display/notices/check-php-version-notice.php
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Check PHP Version Notice.
|
4 |
+
*
|
5 |
+
* @since 3.4
|
6 |
+
*
|
7 |
+
* @package All-in-One-SEO-Pack
|
8 |
+
*/
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Notice - Check PHP Version
|
12 |
+
*
|
13 |
+
* @since 3.4
|
14 |
+
*
|
15 |
+
* @return array Notice configuration.
|
16 |
+
*/
|
17 |
+
function aioseop_notice_check_php_version() {
|
18 |
+
$medium = ( AIOSEOPPRO ) ? 'proplugin' : 'liteplugin';
|
19 |
+
return array(
|
20 |
+
'slug' => 'check_php_version',
|
21 |
+
'delay_time' => 0,
|
22 |
+
'target' => 'user',
|
23 |
+
'screens' => array(),
|
24 |
+
'class' => 'notice-error',
|
25 |
+
'dismissible' => false,
|
26 |
+
/* translators: %1$s is a placeholder, which means that it should not be translated. It will be replaced with the name of the plugin, All in One SEO Pack. */
|
27 |
+
'html' => '
|
28 |
+
<p>' . sprintf( __( 'Your site is running an outdated version of PHP that is no longer supported and may cause issues with %1$s. <a href="%2$s" target="_blank" rel="noopener noreferrer">Read more</a> for additional information.', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME, 'https://semperplugins.com/documentation/supported-php-version/?utm_source=WordPress&utm_medium=' . $medium . '&utm_campaign=outdated-php-notice' ) . '</p>
|
29 |
+
<style>
|
30 |
+
.aioseop-notice-check_php_version .aioseo-action-buttons {
|
31 |
+
display: none;
|
32 |
+
}
|
33 |
+
</style>
|
34 |
+
',
|
35 |
+
);
|
36 |
+
}
|
37 |
+
add_filter( 'aioseop_admin_notice-check_php_version', 'aioseop_notice_check_php_version' );
|
admin/display/notices/conflicting-plugin-notice.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Conflicting Plugin Notice
|
4 |
+
*
|
5 |
+
* @since 3.4.0
|
6 |
+
*
|
7 |
+
* @package All-in-One-SEO-Pack
|
8 |
+
* @subpackage AIOSEOP_Notices
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Returns the default values for our conflicting plugin notice.
|
13 |
+
*
|
14 |
+
* @since 3.4.0 Added UTM link and removed dismiss button.
|
15 |
+
*
|
16 |
+
* @return array
|
17 |
+
*/
|
18 |
+
function aioseop_conflicting_plugin_notice() {
|
19 |
+
return array(
|
20 |
+
'slug' => 'conflicting_plugin',
|
21 |
+
'delay_time' => 0,
|
22 |
+
'message' => '',
|
23 |
+
'target' => 'user',
|
24 |
+
'screens' => array(),
|
25 |
+
'class' => 'notice-error',
|
26 |
+
'action_options' => array(
|
27 |
+
array(
|
28 |
+
'time' => 0,
|
29 |
+
'link' => '#',
|
30 |
+
'new_tab' => false,
|
31 |
+
'text' => __( 'Deactivate plugins', 'all-in-one-seo-pack' ),
|
32 |
+
'dismiss' => false,
|
33 |
+
'class' => 'button-primary',
|
34 |
+
),
|
35 |
+
array(
|
36 |
+
'time' => 172800, // 48H
|
37 |
+
'text' => 'Remind me later',
|
38 |
+
'link' => '',
|
39 |
+
'dismiss' => false,
|
40 |
+
'class' => 'button-secondary',
|
41 |
+
),
|
42 |
+
),
|
43 |
+
);
|
44 |
+
}
|
45 |
+
add_filter( 'aioseop_admin_notice-conflicting_plugin', 'aioseop_conflicting_plugin_notice' );
|
admin/display/notices/review-plugin-cta-notice.php
ADDED
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Review Plugin Notice
|
4 |
+
*
|
5 |
+
* @since 3.4
|
6 |
+
*
|
7 |
+
* @package All-in-One-SEO-Pack
|
8 |
+
*/
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Notice - Review Plugin
|
12 |
+
*
|
13 |
+
* @since 3.4
|
14 |
+
*
|
15 |
+
* @return array Notice configuration.
|
16 |
+
*/
|
17 |
+
function aioseop_notice_review_plugin_cta() {
|
18 |
+
global $aioseop_options;
|
19 |
+
$feedback_url = add_query_arg(
|
20 |
+
array(
|
21 |
+
'wpf7528_24' => untrailingslashit( home_url() ),
|
22 |
+
'wpf7528_26' => ! empty( $aioseop_options['aiosp_license_key'] ) ? $aioseop_options['aiosp_license_key'] : null,
|
23 |
+
'wpf7528_27' => AIOSEOPPRO ? 'pro' : 'lite',
|
24 |
+
'wpf7528_28' => AIOSEOP_VERSION,
|
25 |
+
'utm_source' => AIOSEOPPRO ? 'proplugin' : 'liteplugin',
|
26 |
+
'utm_medium' => 'review-notice',
|
27 |
+
'utm_campaign' => 'feedback',
|
28 |
+
'utm_content' => AIOSEOP_VERSION,
|
29 |
+
),
|
30 |
+
'https://semperplugins.com/plugin-feedback/'
|
31 |
+
);
|
32 |
+
|
33 |
+
return array(
|
34 |
+
'slug' => 'review_plugin_cta',
|
35 |
+
'delay_time' => WEEK_IN_SECONDS * 2,
|
36 |
+
'target' => 'user',
|
37 |
+
'screens' => array(),
|
38 |
+
'class' => 'notice-info',
|
39 |
+
'html' => '
|
40 |
+
<div class="aioseo-review-plugin-cta">
|
41 |
+
<div class="step-1">' .
|
42 |
+
/* translators: %1$s is a placeholder, which means that it should not be translated. It will be replaced with the name of the plugin, All in One SEO Pack. */
|
43 |
+
'<p>' . sprintf( __( 'Are you enjoying %1$s?', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME ) . '</p>
|
44 |
+
<p>
|
45 |
+
<a href="#" class="aioseo-review-switch-step-2" data-step="2">Not Really</a>
|
46 |
+
<a href="#" class="aioseo-review-switch-step-3" data-step="3">Yes!</a>
|
47 |
+
</p>
|
48 |
+
</div>
|
49 |
+
<div class="step-2" style="display:none;">' .
|
50 |
+
/* translators: %1$s is a placeholder, which means that it should not be translated. It will be replaced with the name of the plugin, All in One SEO Pack. */
|
51 |
+
'<p>' . sprintf( __( 'We\'re sorry to hear you aren\'t enjoying %1$s. We would love a chance to improve. Could you take a minute and let us know what we can do better?', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME ) . '</p>
|
52 |
+
<p>
|
53 |
+
<a href="' . $feedback_url . '" class="aioseo-dismiss-review-notice" target="_blank" rel="noopener noreferrer">' . __( 'Give feedback', 'all-in-one-seo-pack' ) . '</a>
|
54 |
+
<a href="#" class="aioseo-dismiss-review-notice" target="_blank" rel="noopener noreferrer">' . __( 'No thanks', 'all-in-one-seo-pack' ) . '</a>
|
55 |
+
</p>
|
56 |
+
</div>
|
57 |
+
<div class="step-3" style="display:none;">
|
58 |
+
<p>' . __( 'That\'s awesome! Could you please do me a BIG favor and give it a 5-star rating on WordPress to help us spread the word and boost our motivation?', 'all-in-one-seo-pack' ) . '</p>' .
|
59 |
+
/* translators: %1$s is a placeholder, which means that it should not be translated. It will be replaced with the name of the plugin, All in One SEO Pack. */
|
60 |
+
'<p><strong>~ Syed Balkhi<br>' . sprintf( __( 'President of %1$s', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME ) . '</strong></p>
|
61 |
+
<p>
|
62 |
+
<a href="https://wordpress.org/support/plugin/all-in-one-seo-pack/reviews/?filter=5#new-post" class="aioseo-dismiss-review-notice" target="_blank" rel="noopener noreferrer">' . __( 'Ok, you deserve it', 'all-in-one-seo-pack' ) . '</a>
|
63 |
+
<a href="#" class="aioseo-dismiss-review-notice-delay" target="_blank" rel="noopener noreferrer">' . __( 'Nope, maybe later', 'all-in-one-seo-pack' ) . '</a>
|
64 |
+
<a href="#" class="aioseo-dismiss-review-notice" target="_blank" rel="noopener noreferrer">' . __( 'I already did', 'all-in-one-seo-pack' ) . '</a>
|
65 |
+
</p>
|
66 |
+
</div>
|
67 |
+
</div>
|
68 |
+
<style>
|
69 |
+
.aioseop-notice-review_plugin_cta .aioseo-action-buttons {
|
70 |
+
display: none;
|
71 |
+
}
|
72 |
+
</style>
|
73 |
+
<script type="text/javascript">
|
74 |
+
jQuery(document).on("click", ".aioseo-review-plugin-cta .aioseo-review-switch-step-3", function(event) {
|
75 |
+
event.preventDefault();
|
76 |
+
jQuery(".aioseo-review-plugin-cta .step-1, .aioseo-review-plugin-cta .step-2").hide();
|
77 |
+
jQuery(".aioseo-review-plugin-cta .step-3").show();
|
78 |
+
});
|
79 |
+
jQuery(document).on("click", ".aioseo-review-plugin-cta .aioseo-review-switch-step-2", function(event) {
|
80 |
+
event.preventDefault();
|
81 |
+
jQuery(".aioseo-review-plugin-cta .step-1, .aioseo-review-plugin-cta .step-3").hide();
|
82 |
+
jQuery(".aioseo-review-plugin-cta .step-2").show();
|
83 |
+
});
|
84 |
+
jQuery(document).on("click", ".aioseo-review-plugin-cta .aioseo-dismiss-review-notice-delay", function(event) {
|
85 |
+
event.preventDefault();
|
86 |
+
var element = jQuery(".aioseop-notice-review_plugin_cta .aioseo-action-buttons .aioseo-dismiss-review-notice-delay-button");
|
87 |
+
element.click();
|
88 |
+
});
|
89 |
+
jQuery(document).on("click", ".aioseo-review-plugin-cta .aioseo-dismiss-review-notice", function(event) {
|
90 |
+
if ("#" === jQuery(this).attr("href")) {
|
91 |
+
event.preventDefault();
|
92 |
+
}
|
93 |
+
var element = jQuery(".aioseop-notice-review_plugin_cta .aioseo-action-buttons .aioseo-dismiss-review-notice-button");
|
94 |
+
element.click();
|
95 |
+
});
|
96 |
+
</script>
|
97 |
+
',
|
98 |
+
'action_options' => array(
|
99 |
+
array(
|
100 |
+
'time' => 0,
|
101 |
+
'text' => '',
|
102 |
+
'link' => '',
|
103 |
+
'dismiss' => true,
|
104 |
+
'class' => 'aioseo-dismiss-review-notice-button',
|
105 |
+
),
|
106 |
+
array(
|
107 |
+
'time' => WEEK_IN_SECONDS,
|
108 |
+
'text' => '',
|
109 |
+
'link' => '',
|
110 |
+
'dismiss' => false,
|
111 |
+
'class' => 'aioseo-dismiss-review-notice-delay-button',
|
112 |
+
),
|
113 |
+
),
|
114 |
+
);
|
115 |
+
}
|
116 |
+
add_filter( 'aioseop_admin_notice-review_plugin_cta', 'aioseop_notice_review_plugin_cta' );
|
admin/display/notices/wc-detected-notice.php
CHANGED
@@ -2,15 +2,17 @@
|
|
2 |
/**
|
3 |
* WooCommerce Detected Notice
|
4 |
*
|
5 |
-
* @since 3.0
|
|
|
6 |
* @package All-in-One-SEO-Pack
|
7 |
* @subpackage AIOSEOP_Notices
|
8 |
*/
|
9 |
|
10 |
/**
|
11 |
-
*
|
12 |
*
|
13 |
-
* @since 3.0
|
|
|
14 |
*
|
15 |
* @return array
|
16 |
*/
|
@@ -19,27 +21,21 @@ function aioseop_notice_pro_promo_woocommerce() {
|
|
19 |
'slug' => 'woocommerce_detected',
|
20 |
'delay_time' => 0,
|
21 |
/* translators: %s is a placeholder, which means that it should not be translated. It will be replaced with the name of the premium version of the plugin, All in One SEO Pack Pro. */
|
22 |
-
'message' => sprintf( __( 'We have detected you are running WooCommerce. Upgrade to %s to unlock our advanced
|
23 |
|
24 |
'class' => 'notice-info',
|
25 |
'target' => 'site',
|
26 |
-
'screens' => array( 'aioseop' ),
|
27 |
'action_options' => array(
|
28 |
array(
|
29 |
'time' => 0,
|
30 |
-
'text' => __( 'Upgrade', 'all-in-one-seo-pack' ),
|
31 |
-
'link' => '
|
32 |
'dismiss' => false,
|
33 |
'class' => 'button-primary button-orange',
|
34 |
),
|
35 |
-
array(
|
36 |
-
'time' => 2592000, // 30 days.
|
37 |
-
'text' => __( 'No Thanks', 'all-in-one-seo-pack' ),
|
38 |
-
'link' => '',
|
39 |
-
'dismiss' => false,
|
40 |
-
'class' => 'button-secondary',
|
41 |
-
),
|
42 |
),
|
43 |
);
|
44 |
}
|
|
|
45 |
add_filter( 'aioseop_admin_notice-woocommerce_detected', 'aioseop_notice_pro_promo_woocommerce' );
|
2 |
/**
|
3 |
* WooCommerce Detected Notice
|
4 |
*
|
5 |
+
* @since 3.0.0
|
6 |
+
*
|
7 |
* @package All-in-One-SEO-Pack
|
8 |
* @subpackage AIOSEOP_Notices
|
9 |
*/
|
10 |
|
11 |
/**
|
12 |
+
* Returns the default values for our WooCommerce upsell notice.
|
13 |
*
|
14 |
+
* @since 3.0.0
|
15 |
+
* @since 3.4.0 Added UTM link and removed dismiss button.
|
16 |
*
|
17 |
* @return array
|
18 |
*/
|
21 |
'slug' => 'woocommerce_detected',
|
22 |
'delay_time' => 0,
|
23 |
/* translators: %s is a placeholder, which means that it should not be translated. It will be replaced with the name of the premium version of the plugin, All in One SEO Pack Pro. */
|
24 |
+
'message' => sprintf( __( 'We have detected you are running WooCommerce. Upgrade to %s to unlock our advanced eCommerce SEO features, including SEO for Product Categories and more.', 'all-in-one-seo-pack' ), 'All in One SEO Pack Pro' ),
|
25 |
|
26 |
'class' => 'notice-info',
|
27 |
'target' => 'site',
|
28 |
+
'screens' => array( 'aioseop', 'product', 'edit-product' ),
|
29 |
'action_options' => array(
|
30 |
array(
|
31 |
'time' => 0,
|
32 |
+
'text' => __( 'Upgrade to Pro', 'all-in-one-seo-pack' ),
|
33 |
+
'link' => aioseop_get_utm_url( 'woocommerce-upsell-notice' ),
|
34 |
'dismiss' => false,
|
35 |
'class' => 'button-primary button-orange',
|
36 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
),
|
38 |
);
|
39 |
}
|
40 |
+
|
41 |
add_filter( 'aioseop_admin_notice-woocommerce_detected', 'aioseop_notice_pro_promo_woocommerce' );
|
admin/display/welcome-content.php
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
<div class="welcome-panel-content">
|
12 |
<div class="welcome-panel-column-container">
|
13 |
<div>
|
14 |
-
<h3><a href="https://semperplugins.com/all-in-one-seo-pack-3-
|
15 |
</div>
|
16 |
<div class="welcome-panel-column">
|
17 |
<h3>
|
11 |
<div class="welcome-panel-content">
|
12 |
<div class="welcome-panel-column-container">
|
13 |
<div>
|
14 |
+
<h3><a href="https://semperplugins.com/all-in-one-seo-pack-3-4/" target="_blank"><?php echo esc_html( __( "Check out what's new in our latest release post!", 'all-in-one-seo-pack' ) ); ?></a></h3>
|
15 |
</div>
|
16 |
<div class="welcome-panel-column">
|
17 |
<h3>
|
admin/display/welcome.php
CHANGED
@@ -147,11 +147,11 @@ if ( ! class_exists( 'aioseop_welcome' ) ) {
|
|
147 |
href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'aioseop-about' ), 'index.php' ) ) ); ?>">
|
148 |
<?php esc_html_e( 'What’s New', 'all-in-one-seo-pack' ); ?>
|
149 |
</a>
|
150 |
-
|
151 |
class="nav-tab" id="aioseop-credits"
|
152 |
href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'aioseop-credits' ), 'index.php' ) ) ); ?>">
|
153 |
<?php esc_html_e( 'Credits', 'all-in-one-seo-pack' ); ?>
|
154 |
-
</a
|
155 |
</h2>
|
156 |
|
157 |
|
147 |
href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'aioseop-about' ), 'index.php' ) ) ); ?>">
|
148 |
<?php esc_html_e( 'What’s New', 'all-in-one-seo-pack' ); ?>
|
149 |
</a>
|
150 |
+
<!--a
|
151 |
class="nav-tab" id="aioseop-credits"
|
152 |
href="<?php echo esc_url( admin_url( add_query_arg( array( 'page' => 'aioseop-credits' ), 'index.php' ) ) ); ?>">
|
153 |
<?php esc_html_e( 'Credits', 'all-in-one-seo-pack' ); ?>
|
154 |
+
</a-->
|
155 |
</h2>
|
156 |
|
157 |
|
admin/meta_import.php
CHANGED
@@ -197,7 +197,7 @@ function aiosp_seometa_admin() {
|
|
197 |
</p>
|
198 |
|
199 |
<p><span
|
200 |
-
class="row-title"><?php printf( esc_html__( 'Before performing an import, we strongly recommend that you make a backup of your site. We use and recommend %1$s
|
201 |
</p>
|
202 |
|
203 |
|
197 |
</p>
|
198 |
|
199 |
<p><span
|
200 |
+
class="row-title"><?php printf( esc_html__( 'Before performing an import, we strongly recommend that you make a backup of your site. We use and recommend %1$s VaultPress by Jetpack %2$s for backups.', 'all-in-one-seo-pack' ), sprintf( '<a target="_blank" href="%s">', esc_url( 'https://www.wpbeginner.com/refer/jetpack/' ) ), '</a>' ); ?></span>
|
201 |
</p>
|
202 |
|
203 |
|
aioseop_class.php
CHANGED
@@ -399,13 +399,13 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
399 |
/* translators: This is a setting where users can indicate which post types they want to use All in One SEO Pack with. */
|
400 |
'name' => __( 'SEO on only these Content Types', 'all-in-one-seo-pack' ),
|
401 |
'type' => 'multicheckbox',
|
402 |
-
'default' => array( 'post', 'page' ),
|
403 |
),
|
404 |
'taxactive' => array(
|
405 |
/* translators: This is a setting where users can indicate which taxonomies they want to use All in One SEO Pack with. */
|
406 |
'name' => __( 'SEO on only these taxonomies', 'all-in-one-seo-pack' ),
|
407 |
'type' => 'multicheckbox',
|
408 |
-
'default' => array( 'category', 'post_tag' ),
|
409 |
),
|
410 |
'cpostnoindex' => array(
|
411 |
/* translators: This is a setting where users can indicate which post types they want to NOINDEX by default. NOINDEX is a value of the HTML robots meta tag that asks search engines not to index the page. */
|
@@ -516,7 +516,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
516 |
),
|
517 |
),
|
518 |
'ga_anonymize_ip' => array(
|
519 |
-
/* translators: This is a setting which tells Google Analytics not to track and store the IP addresses of website visitors.
|
520 |
'name' => __( 'Anonymize IP Addresses', 'all-in-one-seo-pack' ),
|
521 |
'type' => 'checkbox',
|
522 |
'condshow' => array(
|
@@ -867,7 +867,6 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
867 |
);
|
868 |
|
869 |
if ( ! AIOSEOPPRO ) {
|
870 |
-
unset( $this->default_options['license_key'] );
|
871 |
unset( $this->default_options['taxactive'] );
|
872 |
}
|
873 |
|
@@ -886,7 +885,6 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
886 |
'options' => array(
|
887 |
'edit',
|
888 |
'nonce-aioseop-edit',
|
889 |
-
AIOSEOPPRO ? 'support' : 'upgrade',
|
890 |
'snippet',
|
891 |
'title',
|
892 |
'description',
|
@@ -895,6 +893,8 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
895 |
'noindex',
|
896 |
'nofollow',
|
897 |
'sitemap_exclude',
|
|
|
|
|
898 |
'disable',
|
899 |
'disable_analytics',
|
900 |
),
|
@@ -914,23 +914,17 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
914 |
'upgrade' => array(
|
915 |
'type' => 'html',
|
916 |
'label' => 'none',
|
917 |
-
'default' =>
|
918 |
-
'
|
|
|
919 |
sprintf(
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
AIOSEOP_PLUGIN_NAME
|
924 |
),
|
925 |
-
__( 'UPGRADE TO PRO VERSION', 'all-in-one-seo-pack' )
|
926 |
-
'_blank'
|
927 |
),
|
928 |
),
|
929 |
-
'support' => array(
|
930 |
-
'type' => 'html',
|
931 |
-
'label' => 'none',
|
932 |
-
'default' => '<a target="_blank" href="https://semperplugins.com/support/">' . __( 'Support Forum', 'all-in-one-seo-pack' ) . '</a>',
|
933 |
-
),
|
934 |
'snippet' => array(
|
935 |
/* translators: The preview snippet shows how the page will look like in the search results (title, meta description and permalink). */
|
936 |
'name' => __( 'Preview Snippet', 'all-in-one-seo-pack' ),
|
@@ -966,16 +960,83 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
966 |
/* translators: This is a setting that allows users to add the NOINDEX robots meta tag value to the current post/page. */
|
967 |
'name' => __( 'NOINDEX this page/post', 'all-in-one-seo-pack' ),
|
968 |
'default' => '',
|
|
|
969 |
),
|
970 |
'nofollow' => array(
|
971 |
/* translators: This is a setting that allows users to add the NOFOLLOW robots meta tag value to the current post/page. */
|
972 |
'name' => __( 'NOFOLLOW this page/post', 'all-in-one-seo-pack' ),
|
973 |
'default' => '',
|
974 |
),
|
975 |
-
|
976 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
977 |
/* translators: This is a setting that allows users to disable All in One SEO Pack for the current post/page. */
|
978 |
'disable' => array( 'name' => __( 'Disable on this page/post', 'all-in-one-seo-pack' ) ),
|
|
|
979 |
'disable_analytics' => array(
|
980 |
/* translators: This is a setting that allows users to disable Google Analytics tracking for the current post/page. */
|
981 |
'name' => __( 'Disable Google Analytics', 'all-in-one-seo-pack' ),
|
@@ -987,6 +1048,12 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
987 |
),
|
988 |
);
|
989 |
|
|
|
|
|
|
|
|
|
|
|
|
|
990 |
$this->layout = array(
|
991 |
'default' => array(
|
992 |
/* translators: This is the name of the main menu. */
|
@@ -1167,11 +1234,12 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
1167 |
|
1168 |
if ( is_admin() ) {
|
1169 |
add_action( 'aioseop_global_settings_header', array( $this, 'display_right_sidebar' ) );
|
1170 |
-
add_action( 'aioseop_global_settings_footer', array( $this, 'display_settings_footer' ) );
|
1171 |
add_action( 'output_option', array( $this, 'custom_output_option' ), 10, 2 );
|
1172 |
add_action( 'admin_init', array( $this, 'visibility_warning' ) );
|
|
|
1173 |
add_action( 'admin_init', array( $this, 'woo_upgrade_notice' ) );
|
1174 |
-
|
|
|
1175 |
}
|
1176 |
if ( AIOSEOPPRO ) {
|
1177 |
add_action( 'split_shared_term', array( $this, 'split_shared_term' ), 10, 4 );
|
@@ -1214,13 +1282,13 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
1214 |
$w = $info['w'];
|
1215 |
$p = $info['p'];
|
1216 |
|
1217 |
-
if (
|
1218 |
$title = $this->trim_excerpt_without_filters(
|
1219 |
$this->html_entity_decode( $title ),
|
1220 |
70
|
1221 |
) . '...';
|
1222 |
}
|
1223 |
-
if (
|
1224 |
$description = $this->trim_excerpt_without_filters(
|
1225 |
$this->html_entity_decode( $description ),
|
1226 |
156
|
@@ -1619,6 +1687,8 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
1619 |
'disable_analytics',
|
1620 |
'noindex',
|
1621 |
'nofollow',
|
|
|
|
|
1622 |
);
|
1623 |
if ( ! ( ! empty( $this->options['aiosp_can'] ) ) ) {
|
1624 |
unset( $optlist['custom_link'] );
|
@@ -2131,7 +2201,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
2131 |
$search = esc_attr( stripslashes( $s ) );
|
2132 |
$title = $search;
|
2133 |
} elseif ( ( is_tax() || is_category() ) && ! is_feed() ) {
|
2134 |
-
$category_name =
|
2135 |
$title = $category_name;
|
2136 |
} elseif ( is_page() ) {
|
2137 |
$title = $this->internationalize( single_post_title( '', false ) );
|
@@ -2207,7 +2277,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
2207 |
$request_a = explode( ' ', $request );
|
2208 |
$request_new = array();
|
2209 |
foreach ( $request_a as $token ) {
|
2210 |
-
$request_new[] =
|
2211 |
}
|
2212 |
$request = implode( ' ', $request_new );
|
2213 |
|
@@ -2309,10 +2379,10 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
2309 |
$new_title = str_replace( "%{$type}_author_nicename%", $authordata->user_nicename, $new_title );
|
2310 |
}
|
2311 |
if ( false !== strpos( $new_title, "%{$type}_author_firstname%", 0 ) ) {
|
2312 |
-
$new_title = str_replace( "%{$type}_author_firstname%",
|
2313 |
}
|
2314 |
if ( false !== strpos( $new_title, "%{$type}_author_lastname%", 0 ) ) {
|
2315 |
-
$new_title = str_replace( "%{$type}_author_lastname%",
|
2316 |
}
|
2317 |
if ( false !== strpos( $new_title, '%current_date%', 0 ) ) {
|
2318 |
$new_title = str_replace( '%current_date%', aioseop_formatted_date(), $new_title );
|
@@ -2990,7 +3060,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
2990 |
$max = $this->maximum_description_length;
|
2991 |
}
|
2992 |
$max_orig = $max;
|
2993 |
-
$len =
|
2994 |
if ( $max < $len ) {
|
2995 |
if ( function_exists( 'mb_strrpos' ) ) {
|
2996 |
$pos = mb_strrpos( $text2, ' ', - ( $len - $max ), 'UTF-8' );
|
@@ -3013,7 +3083,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
3013 |
$max = $max_orig;
|
3014 |
}
|
3015 |
}
|
3016 |
-
$text =
|
3017 |
|
3018 |
return trim( $text );
|
3019 |
}
|
@@ -3045,15 +3115,15 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
3045 |
|
3046 |
if ( get_query_var( 'm' ) ) {
|
3047 |
$m = preg_replace( '/[^0-9]/', '', get_query_var( 'm' ) );
|
3048 |
-
switch (
|
3049 |
case 4:
|
3050 |
$link = get_year_link( $m );
|
3051 |
break;
|
3052 |
case 6:
|
3053 |
-
$link = get_month_link(
|
3054 |
break;
|
3055 |
case 8:
|
3056 |
-
$link = get_day_link(
|
3057 |
break;
|
3058 |
default:
|
3059 |
return false;
|
@@ -3354,7 +3424,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
3354 |
}
|
3355 |
if ( ! empty( $keywords ) ) {
|
3356 |
foreach ( $keywords as $word ) {
|
3357 |
-
$small_keywords[] = trim(
|
3358 |
}
|
3359 |
}
|
3360 |
|
@@ -3404,6 +3474,8 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
3404 |
'disable_analytics',
|
3405 |
'noindex',
|
3406 |
'nofollow',
|
|
|
|
|
3407 |
);
|
3408 |
foreach ( $optlist as $f ) {
|
3409 |
$meta = get_term_meta( $term_id, '_aioseop_' . $f, true );
|
@@ -3465,7 +3537,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
3465 |
?>
|
3466 |
});
|
3467 |
}
|
3468 |
-
<?php
|
3469 |
</script>
|
3470 |
<?php
|
3471 |
}
|
@@ -3677,11 +3749,12 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
3677 |
case 'post.php':
|
3678 |
case 'post-new.php':
|
3679 |
$title_format = $this->get_preview_snippet_title();
|
3680 |
-
$extra_title_length = strlen( preg_replace( '/<span.*\/span>/', '', $title_format ) );
|
3681 |
|
3682 |
$snippet_preview_data = array(
|
3683 |
'autogenerateDescriptions' => $aioseop_options['aiosp_generate_descriptions'],
|
3684 |
'skipExcerpt' => $aioseop_options['aiosp_skip_excerpt'],
|
|
|
3685 |
);
|
3686 |
|
3687 |
$count_chars_data['extraTitleLength'] = $extra_title_length;
|
@@ -3695,11 +3768,16 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
3695 |
);
|
3696 |
wp_localize_script( 'aioseop-preview-snippet', 'aioseop_preview_snippet', $snippet_preview_data );
|
3697 |
|
|
|
|
|
|
|
|
|
|
|
3698 |
wp_enqueue_script(
|
3699 |
'xregexp',
|
3700 |
-
'
|
3701 |
array(),
|
3702 |
-
|
3703 |
);
|
3704 |
// No break required.
|
3705 |
case 'toplevel_page_' . AIOSEOP_PLUGIN_DIRNAME . '/aioseop_class':
|
@@ -3867,6 +3945,8 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
3867 |
}
|
3868 |
|
3869 |
if ( ! is_object( $aioseop_sitemap ) ) {
|
|
|
|
|
3870 |
unset( $settings['aiosp_sitemap_exclude'] );
|
3871 |
}
|
3872 |
|
@@ -4084,8 +4164,8 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
4084 |
$title = trim( strip_tags( $title ) );
|
4085 |
$title_tag_start = '<title';
|
4086 |
$title_tag_end = '</title';
|
4087 |
-
$start =
|
4088 |
-
$end =
|
4089 |
$this->title_start = $start;
|
4090 |
$this->title_end = $end;
|
4091 |
$this->orig_title = $title;
|
@@ -4212,6 +4292,47 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
4212 |
}
|
4213 |
}
|
4214 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4215 |
/**
|
4216 |
* WooCommerce Upgrade Notice
|
4217 |
*
|
@@ -4288,7 +4409,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
4288 |
global $aioseop_options;
|
4289 |
|
4290 |
// Handle the description format.
|
4291 |
-
if ( isset( $description ) && false !== $description && (
|
4292 |
$description = $this->trim_description( $description );
|
4293 |
if ( ! isset( $meta_string ) ) {
|
4294 |
$meta_string = '';
|
@@ -4433,8 +4554,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
4433 |
// Logging - rewrite handler check for output buffering.
|
4434 |
$this->check_rewrite_handler();
|
4435 |
|
4436 |
-
|
4437 |
-
printf( "\n<!-- " . __( '%1$s by %2$s of %3$s', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' ' . $this->version, 'Michael Torbert', 'Semper Fi Web Design' );
|
4438 |
|
4439 |
if ( $this->ob_start_detected ) {
|
4440 |
echo 'ob_start_detected ';
|
@@ -4448,7 +4568,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
4448 |
$save_posts = $posts;
|
4449 |
|
4450 |
// This outputs robots meta tags and custom canonical URl on WooCommerce product archive page.
|
4451 |
-
// See Github issue https://github.com/
|
4452 |
if ( function_exists( 'wc_get_page_id' ) && is_post_type_archive( 'product' ) ) {
|
4453 |
$post_id = wc_get_page_id( 'shop' );
|
4454 |
if ( $post_id ) {
|
@@ -4653,7 +4773,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
4653 |
}
|
4654 |
if (
|
4655 |
sizeof( $active_handlers ) > 0 &&
|
4656 |
-
|
4657 |
) {
|
4658 |
ob_end_flush();
|
4659 |
} else {
|
@@ -4933,28 +5053,36 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
4933 |
}
|
4934 |
|
4935 |
/**
|
4936 |
-
*
|
4937 |
*
|
4938 |
-
* @since
|
|
|
4939 |
*
|
4940 |
-
* @param
|
4941 |
-
* @return
|
4942 |
*/
|
4943 |
function save_post_data( $id ) {
|
4944 |
$awmp_edit = null;
|
4945 |
$nonce = null;
|
|
|
4946 |
if ( empty( $_POST ) ) {
|
4947 |
return false;
|
4948 |
}
|
|
|
4949 |
if ( isset( $_POST['aiosp_edit'] ) ) {
|
4950 |
$awmp_edit = $_POST['aiosp_edit'];
|
4951 |
}
|
|
|
4952 |
if ( isset( $_POST['nonce-aioseop-edit'] ) ) {
|
4953 |
$nonce = $_POST['nonce-aioseop-edit'];
|
4954 |
}
|
4955 |
|
4956 |
if ( isset( $awmp_edit ) && ! empty( $awmp_edit ) && wp_verify_nonce( $nonce, 'edit-aioseop-nonce' ) ) {
|
4957 |
|
|
|
|
|
|
|
|
|
4958 |
$optlist = array(
|
4959 |
'keywords',
|
4960 |
'description',
|
@@ -4965,52 +5093,30 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
4965 |
'disable_analytics',
|
4966 |
'noindex',
|
4967 |
'nofollow',
|
|
|
|
|
4968 |
);
|
4969 |
-
|
4970 |
-
|
|
|
4971 |
}
|
4972 |
-
|
4973 |
-
|
|
|
4974 |
if ( isset( $_POST[ $field ] ) ) {
|
4975 |
$$field = $_POST[ $field ];
|
4976 |
}
|
4977 |
-
}
|
4978 |
|
4979 |
-
|
4980 |
-
'keywords',
|
4981 |
-
'description',
|
4982 |
-
'title',
|
4983 |
-
'custom_link',
|
4984 |
-
'noindex',
|
4985 |
-
'nofollow',
|
4986 |
-
);
|
4987 |
-
if ( ! ( ! empty( $this->options['aiosp_can'] ) ) ) {
|
4988 |
-
unset( $optlist['custom_link'] );
|
4989 |
}
|
4990 |
-
foreach ( $optlist as $f ) {
|
4991 |
-
delete_post_meta( $id, "_aioseop_{$f}" );
|
4992 |
-
}
|
4993 |
-
|
4994 |
-
delete_post_meta( $id, '_aioseop_sitemap_exclude' );
|
4995 |
-
delete_post_meta( $id, '_aioseop_disable' );
|
4996 |
-
delete_post_meta( $id, '_aioseop_disable_analytics' );
|
4997 |
|
4998 |
-
foreach ( $optlist as $
|
4999 |
-
$var = "aiosp_$
|
5000 |
-
$field = "_aioseop_$
|
5001 |
if ( isset( $$var ) && ! empty( $$var ) ) {
|
5002 |
add_post_meta( $id, $field, $$var );
|
5003 |
}
|
5004 |
}
|
5005 |
-
if ( isset( $aiosp_sitemap_exclude ) && ! empty( $aiosp_sitemap_exclude ) ) {
|
5006 |
-
add_post_meta( $id, '_aioseop_sitemap_exclude', $aiosp_sitemap_exclude );
|
5007 |
-
}
|
5008 |
-
if ( isset( $aiosp_disable ) && ! empty( $aiosp_disable ) ) {
|
5009 |
-
add_post_meta( $id, '_aioseop_disable', $aiosp_disable );
|
5010 |
-
if ( isset( $aiosp_disable_analytics ) && ! empty( $aiosp_disable_analytics ) ) {
|
5011 |
-
add_post_meta( $id, '_aioseop_disable_analytics', $aiosp_disable_analytics );
|
5012 |
-
}
|
5013 |
-
}
|
5014 |
}
|
5015 |
}
|
5016 |
|
@@ -5109,28 +5215,31 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5109 |
$wp_admin_bar->add_menu(
|
5110 |
array(
|
5111 |
'id' => AIOSEOP_PLUGIN_DIRNAME,
|
5112 |
-
'title' => __( 'SEO', 'all-in-one-seo-pack' ),
|
5113 |
-
'href' => $url,
|
5114 |
)
|
5115 |
);
|
5116 |
|
5117 |
-
if (
|
5118 |
$wp_admin_bar->add_menu(
|
5119 |
array(
|
|
|
5120 |
'parent' => AIOSEOP_PLUGIN_DIRNAME,
|
5121 |
-
|
5122 |
-
'title' => __( 'Upgrade To Pro', 'all-in-one-seo-pack' ),
|
5123 |
-
'id' => 'aioseop-pro-upgrade',
|
5124 |
-
'href' => 'https://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/?loc=menu',
|
5125 |
-
'meta' => array( 'target' => '_blank' ),
|
5126 |
)
|
5127 |
);
|
5128 |
-
// phpcs:ignore Squiz.Commenting.InlineComment.InvalidEndChar
|
5129 |
-
// add_action( 'admin_bar_menu', array( $this, 'admin_bar_upgrade_menu' ), 1101 );
|
5130 |
}
|
5131 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5132 |
$aioseop_admin_menu = 1;
|
5133 |
-
if ( !
|
5134 |
|
5135 |
$blog_page = aiosp_common::get_blog_page( $post );
|
5136 |
if ( ! empty( $blog_page ) ) {
|
@@ -5180,6 +5289,20 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5180 |
}
|
5181 |
}
|
5182 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5183 |
}
|
5184 |
}
|
5185 |
|
@@ -5195,13 +5318,14 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5195 |
}
|
5196 |
|
5197 |
/**
|
5198 |
-
*
|
5199 |
*
|
5200 |
-
* @since
|
|
|
5201 |
*
|
5202 |
-
* @param
|
5203 |
*/
|
5204 |
-
function
|
5205 |
$screen = 'edit-' . $tax->taxonomy;
|
5206 |
?>
|
5207 |
<div id="poststuff">
|
@@ -5211,81 +5335,71 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5211 |
}
|
5212 |
|
5213 |
/**
|
5214 |
-
*
|
5215 |
*
|
5216 |
-
* @since
|
|
|
5217 |
*
|
5218 |
-
* @param
|
|
|
5219 |
*/
|
5220 |
-
function
|
5221 |
$awmp_edit = null;
|
5222 |
$nonce = null;
|
|
|
5223 |
if ( isset( $_POST['aiosp_edit'] ) ) {
|
5224 |
$awmp_edit = $_POST['aiosp_edit'];
|
5225 |
}
|
|
|
5226 |
if ( isset( $_POST['nonce-aioseop-edit'] ) ) {
|
5227 |
$nonce = $_POST['nonce-aioseop-edit'];
|
5228 |
}
|
5229 |
|
5230 |
if ( isset( $awmp_edit ) && ! empty( $awmp_edit ) && wp_verify_nonce( $nonce, 'edit-aioseop-nonce' ) ) {
|
|
|
|
|
|
|
|
|
|
|
5231 |
$optlist = array(
|
5232 |
'keywords',
|
5233 |
'description',
|
5234 |
'title',
|
5235 |
'custom_link',
|
5236 |
-
'sitemap_exclude',
|
5237 |
'disable',
|
5238 |
'disable_analytics',
|
5239 |
'noindex',
|
5240 |
'nofollow',
|
|
|
|
|
|
|
5241 |
);
|
5242 |
-
|
5243 |
-
|
|
|
|
|
|
|
|
|
|
|
5244 |
if ( isset( $_POST[ $field ] ) ) {
|
5245 |
$$field = $_POST[ $field ];
|
5246 |
}
|
5247 |
-
}
|
5248 |
|
5249 |
-
|
5250 |
-
'keywords',
|
5251 |
-
'description',
|
5252 |
-
'title',
|
5253 |
-
'custom_link',
|
5254 |
-
'noindex',
|
5255 |
-
'nofollow',
|
5256 |
-
);
|
5257 |
-
if ( ! ( ! empty( $this->options['aiosp_can'] ) ) ) {
|
5258 |
-
unset( $optlist['custom_link'] );
|
5259 |
-
}
|
5260 |
-
foreach ( $optlist as $f ) {
|
5261 |
-
delete_term_meta( $id, "_aioseop_{$f}" );
|
5262 |
}
|
5263 |
|
5264 |
-
|
5265 |
-
|
5266 |
-
|
5267 |
-
delete_term_meta( $id, '_aioseop_disable_analytics' );
|
5268 |
-
}
|
5269 |
|
5270 |
-
foreach ( $optlist as $f ) {
|
5271 |
-
$var = "aiosp_$f";
|
5272 |
-
$field = "_aioseop_$f";
|
5273 |
if ( isset( $$var ) && ! empty( $$var ) ) {
|
5274 |
add_term_meta( $id, $field, $$var );
|
5275 |
}
|
5276 |
}
|
5277 |
-
if ( isset( $aiosp_sitemap_exclude ) && ! empty( $aiosp_sitemap_exclude ) && current_user_can( 'activate_plugins' ) ) {
|
5278 |
-
add_term_meta( $id, '_aioseop_sitemap_exclude', $aiosp_sitemap_exclude );
|
5279 |
-
}
|
5280 |
-
if ( isset( $aiosp_disable ) && ! empty( $aiosp_disable ) && current_user_can( 'activate_plugins' ) ) {
|
5281 |
-
add_term_meta( $id, '_aioseop_disable', $aiosp_disable );
|
5282 |
-
if ( isset( $aiosp_disable_analytics ) && ! empty( $aiosp_disable_analytics ) ) {
|
5283 |
-
add_term_meta( $id, '_aioseop_disable_analytics', $aiosp_disable_analytics );
|
5284 |
-
}
|
5285 |
-
}
|
5286 |
}
|
5287 |
}
|
5288 |
|
|
|
5289 |
/**
|
5290 |
* Admin Menu
|
5291 |
*
|
@@ -5305,18 +5419,6 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5305 |
|
5306 |
$this->update_options();
|
5307 |
|
5308 |
-
/*
|
5309 |
-
For now we're removing admin pointers.
|
5310 |
-
$this->add_admin_pointers();
|
5311 |
-
if ( ! empty( $this->pointers ) ) {
|
5312 |
-
foreach ( $this->pointers as $k => $p ) {
|
5313 |
-
if ( ! empty( $p['pointer_scope'] ) && ( $p['pointer_scope'] == 'global' ) ) {
|
5314 |
-
unset( $this->pointers[ $k ] );
|
5315 |
-
}
|
5316 |
-
}
|
5317 |
-
}
|
5318 |
-
*/
|
5319 |
-
|
5320 |
if ( isset( $_POST ) && isset( $_POST['module'] ) && isset( $_POST['nonce-aioseop'] ) && ( 'All_in_One_SEO_Pack' == $_POST['module'] ) && wp_verify_nonce( $_POST['nonce-aioseop'], 'aioseop-nonce' ) ) {
|
5321 |
if ( isset( $_POST['Submit'] ) && AIOSEOPPRO ) {
|
5322 |
if ( isset( $_POST['aiosp_custom_menu_order'] ) ) {
|
@@ -5360,8 +5462,8 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5360 |
if ( ! empty( $this->options['aiosp_taxactive'] ) ) {
|
5361 |
foreach ( $this->options['aiosp_taxactive'] as $tax ) {
|
5362 |
$this->locations['aiosp']['display'][] = 'edit-' . $tax;
|
5363 |
-
add_action( "{$tax}_edit_form", array( $this, '
|
5364 |
-
add_action( "edited_{$tax}", array( $this, '
|
5365 |
}
|
5366 |
}
|
5367 |
} else {
|
@@ -5381,27 +5483,10 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5381 |
aioseop_get_menu_icon()
|
5382 |
);
|
5383 |
|
5384 |
-
|
5385 |
-
'aioseop-list',
|
5386 |
-
__( 'Join Our Mailing List', 'all-in-one-seo-pack' ),
|
5387 |
-
array( 'aiosp_metaboxes', 'display_extra_metaboxes' ),
|
5388 |
-
'aioseop_metaboxes',
|
5389 |
-
'normal',
|
5390 |
-
'core'
|
5391 |
-
);
|
5392 |
-
if ( AIOSEOPPRO ) {
|
5393 |
-
add_meta_box(
|
5394 |
-
'aioseop-about',
|
5395 |
-
__( 'About', 'all-in-one-seo-pack' ),
|
5396 |
-
array( 'aiosp_metaboxes', 'display_extra_metaboxes' ),
|
5397 |
-
'aioseop_metaboxes',
|
5398 |
-
'side',
|
5399 |
-
'core'
|
5400 |
-
);
|
5401 |
-
} else {
|
5402 |
add_meta_box(
|
5403 |
'aioseop-about',
|
5404 |
-
|
5405 |
array( 'aiosp_metaboxes', 'display_extra_metaboxes' ),
|
5406 |
'aioseop_metaboxes',
|
5407 |
'side',
|
@@ -5410,7 +5495,15 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5410 |
}
|
5411 |
add_meta_box(
|
5412 |
'aioseop-support',
|
5413 |
-
__( 'Support', 'all-in-one-seo-pack' )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5414 |
array( 'aiosp_metaboxes', 'display_extra_metaboxes' ),
|
5415 |
'aioseop_metaboxes',
|
5416 |
'side',
|
@@ -5441,9 +5534,6 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5441 |
$title = $this->plugin_name . ' - ' . $title;
|
5442 |
}
|
5443 |
if ( $tab_num <= 1 ) {
|
5444 |
-
if ( ! empty( $m[0]['callback_args']['help_link'] ) ) {
|
5445 |
-
$title .= "<a class='aioseop_help_text_link aioseop_meta_box_help' target='_blank' href='" . $m[0]['callback_args']['help_link'] . "'><span>" . __( 'Help', 'all-in-one-seo-pack' ) . '</span></a>';
|
5446 |
-
}
|
5447 |
add_meta_box( $m[0]['id'], $title, $m[0]['callback'], $m[0]['post_type'], $m[0]['context'], $m[0]['priority'], $m[0]['callback_args'] );
|
5448 |
} elseif ( $tab_num > 1 ) {
|
5449 |
add_meta_box(
|
@@ -5496,12 +5586,6 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5496 |
return $order;
|
5497 |
}
|
5498 |
|
5499 |
-
function display_settings_header() {
|
5500 |
-
}
|
5501 |
-
|
5502 |
-
function display_settings_footer() {
|
5503 |
-
}
|
5504 |
-
|
5505 |
/**
|
5506 |
* Filters title and meta titles and applies cleanup.
|
5507 |
* - Decode HTML entities.
|
@@ -5639,7 +5723,7 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5639 |
<FORM action='' method='post' name='aioseop-migrate-options'>
|
5640 |
<input type='hidden' name='nonce-aioseop-migrate-options' value='" . wp_create_nonce( 'aioseop-migrate-nonce-options' ) . "' />
|
5641 |
<input type='submit' name='aioseop_migrate_options' class='button-primary' value='Update Database Options'>
|
5642 |
-
|
5643 |
</p></div>";
|
5644 |
aioseop_output_dismissable_notice( $msg, '', 'error' );
|
5645 |
}
|
@@ -5667,17 +5751,6 @@ class All_in_One_SEO_Pack extends All_in_One_SEO_Pack_Module {
|
|
5667 |
});
|
5668 |
//]]>
|
5669 |
</script>
|
5670 |
-
<?php if ( ! AIOSEOPPRO ) { ?>
|
5671 |
-
<div class="aioseop_advert aioseop_nopad_all">
|
5672 |
-
<?php $adid = mt_rand( 21, 22 ); ?>
|
5673 |
-
<a
|
5674 |
-
href="https://www.wincher.com/?referer=all-in-one-seo-pack&adreferer=banner<?php echo $adid; ?>"
|
5675 |
-
target="_blank" aria-label="<?php _e( 'Banner advert for free Wincher rank checker plugin', 'all-in-one-seo-pack' ); ?>">
|
5676 |
-
<div class=wincherad id=wincher<?php echo $adid; ?>>
|
5677 |
-
</div>
|
5678 |
-
</a>
|
5679 |
-
</div>
|
5680 |
-
<?php } ?>
|
5681 |
</div>
|
5682 |
</div>
|
5683 |
<?php
|
399 |
/* translators: This is a setting where users can indicate which post types they want to use All in One SEO Pack with. */
|
400 |
'name' => __( 'SEO on only these Content Types', 'all-in-one-seo-pack' ),
|
401 |
'type' => 'multicheckbox',
|
402 |
+
'default' => array( 'post', 'page', 'product' ),
|
403 |
),
|
404 |
'taxactive' => array(
|
405 |
/* translators: This is a setting where users can indicate which taxonomies they want to use All in One SEO Pack with. */
|
406 |
'name' => __( 'SEO on only these taxonomies', 'all-in-one-seo-pack' ),
|
407 |
'type' => 'multicheckbox',
|
408 |
+
'default' => array( 'category', 'post_tag', 'product_cat', 'product_tag' ),
|
409 |
),
|
410 |
'cpostnoindex' => array(
|
411 |
/* translators: This is a setting where users can indicate which post types they want to NOINDEX by default. NOINDEX is a value of the HTML robots meta tag that asks search engines not to index the page. */
|
516 |
),
|
517 |
),
|
518 |
'ga_anonymize_ip' => array(
|
519 |
+
/* translators: This is a setting which tells Google Analytics not to track and store the IP addresses of website visitors. This is required to be compliant with the GDPR for example. */
|
520 |
'name' => __( 'Anonymize IP Addresses', 'all-in-one-seo-pack' ),
|
521 |
'type' => 'checkbox',
|
522 |
'condshow' => array(
|
867 |
);
|
868 |
|
869 |
if ( ! AIOSEOPPRO ) {
|
|
|
870 |
unset( $this->default_options['taxactive'] );
|
871 |
}
|
872 |
|
885 |
'options' => array(
|
886 |
'edit',
|
887 |
'nonce-aioseop-edit',
|
|
|
888 |
'snippet',
|
889 |
'title',
|
890 |
'description',
|
893 |
'noindex',
|
894 |
'nofollow',
|
895 |
'sitemap_exclude',
|
896 |
+
'sitemap_priority',
|
897 |
+
'sitemap_frequency',
|
898 |
'disable',
|
899 |
'disable_analytics',
|
900 |
),
|
914 |
'upgrade' => array(
|
915 |
'type' => 'html',
|
916 |
'label' => 'none',
|
917 |
+
'default' => sprintf(
|
918 |
+
'<a href="%1$s" target="_blank" title="%2$s" class="aioseop-metabox-pro-cta">%3$s</a>',
|
919 |
+
aioseop_get_utm_url( 'metabox-main' ),
|
920 |
sprintf(
|
921 |
+
/* translators: %s: "All in One SEO Pack Pro". */
|
922 |
+
__( 'Upgrade to %s', 'all-in-one-seo-pack' ),
|
923 |
+
AIOSEOP_PLUGIN_NAME . ' Pro'
|
|
|
924 |
),
|
925 |
+
__( 'UPGRADE TO PRO VERSION', 'all-in-one-seo-pack' )
|
|
|
926 |
),
|
927 |
),
|
|
|
|
|
|
|
|
|
|
|
928 |
'snippet' => array(
|
929 |
/* translators: The preview snippet shows how the page will look like in the search results (title, meta description and permalink). */
|
930 |
'name' => __( 'Preview Snippet', 'all-in-one-seo-pack' ),
|
960 |
/* translators: This is a setting that allows users to add the NOINDEX robots meta tag value to the current post/page. */
|
961 |
'name' => __( 'NOINDEX this page/post', 'all-in-one-seo-pack' ),
|
962 |
'default' => '',
|
963 |
+
|
964 |
),
|
965 |
'nofollow' => array(
|
966 |
/* translators: This is a setting that allows users to add the NOFOLLOW robots meta tag value to the current post/page. */
|
967 |
'name' => __( 'NOFOLLOW this page/post', 'all-in-one-seo-pack' ),
|
968 |
'default' => '',
|
969 |
),
|
970 |
+
'sitemap_exclude' => array(
|
971 |
+
'name' => __( 'Exclude From Sitemap', 'all-in-one-seo-pack' ),
|
972 |
+
'condshow' => array(
|
973 |
+
'aiosp_noindex' => array(
|
974 |
+
'lhs' => 'aiosp_noindex',
|
975 |
+
'op' => '!=',
|
976 |
+
'rhs' => 'on',
|
977 |
+
),
|
978 |
+
),
|
979 |
+
),
|
980 |
+
'sitemap_priority' => array(
|
981 |
+
/* translators: This is a setting that allows users to override the global sitemap priority value for a given post/term. */
|
982 |
+
'name' => __( 'Sitemap Priority', 'all-in-one-seo-pack' ),
|
983 |
+
'type' => 'select',
|
984 |
+
'condshow' => array(
|
985 |
+
'aiosp_noindex' => array(
|
986 |
+
'lhs' => 'aiosp_noindex',
|
987 |
+
'op' => '!=',
|
988 |
+
'rhs' => 'on',
|
989 |
+
),
|
990 |
+
'aiosp_sitemap_exclude' => array(
|
991 |
+
'lhs' => 'aiosp_sitemap_exclude',
|
992 |
+
'op' => '!=',
|
993 |
+
'rhs' => 'on',
|
994 |
+
),
|
995 |
+
),
|
996 |
+
'initial_options' => array(
|
997 |
+
'' => __( 'Do Not Override', 'all-in-one-seo-pack' ),
|
998 |
+
'0.1' => '10%',
|
999 |
+
'0.2' => '20%',
|
1000 |
+
'0.3' => '30%',
|
1001 |
+
'0.4' => '40%',
|
1002 |
+
'0.5' => '50%',
|
1003 |
+
'0.6' => '60%',
|
1004 |
+
'0.7' => '70%',
|
1005 |
+
'0.8' => '80%',
|
1006 |
+
'0.9' => '90%',
|
1007 |
+
'1.0' => '100%',
|
1008 |
+
),
|
1009 |
+
),
|
1010 |
+
'sitemap_frequency' => array(
|
1011 |
+
/* translators: This is a setting that allows users to override the global sitemap frequency value for a given post/term. */
|
1012 |
+
'name' => __( 'Sitemap Frequency', 'all-in-one-seo-pack' ),
|
1013 |
+
'type' => 'select',
|
1014 |
+
'condshow' => array(
|
1015 |
+
'aiosp_noindex' => array(
|
1016 |
+
'lhs' => 'aiosp_noindex',
|
1017 |
+
'op' => '!=',
|
1018 |
+
'rhs' => 'on',
|
1019 |
+
),
|
1020 |
+
'aiosp_sitemap_exclude' => array(
|
1021 |
+
'lhs' => 'aiosp_sitemap_exclude',
|
1022 |
+
'op' => '!=',
|
1023 |
+
'rhs' => 'on',
|
1024 |
+
),
|
1025 |
+
),
|
1026 |
+
'initial_options' => array(
|
1027 |
+
'' => __( 'Do Not Override', 'all-in-one-seo-pack' ),
|
1028 |
+
'always' => __( 'Always', 'all-in-one-seo-pack' ),
|
1029 |
+
'hourly' => __( 'Hourly', 'all-in-one-seo-pack' ),
|
1030 |
+
'daily' => __( 'Daily', 'all-in-one-seo-pack' ),
|
1031 |
+
'weekly' => __( 'Weekly', 'all-in-one-seo-pack' ),
|
1032 |
+
'monthly' => __( 'Monthly', 'all-in-one-seo-pack' ),
|
1033 |
+
'yearly' => __( 'Yearly', 'all-in-one-seo-pack' ),
|
1034 |
+
'never' => __( 'Never', 'all-in-one-seo-pack' ),
|
1035 |
+
),
|
1036 |
+
),
|
1037 |
/* translators: This is a setting that allows users to disable All in One SEO Pack for the current post/page. */
|
1038 |
'disable' => array( 'name' => __( 'Disable on this page/post', 'all-in-one-seo-pack' ) ),
|
1039 |
+
/* translators: This is a setting that allows users to exclude the current post/page from the sitemap. */
|
1040 |
'disable_analytics' => array(
|
1041 |
/* translators: This is a setting that allows users to disable Google Analytics tracking for the current post/page. */
|
1042 |
'name' => __( 'Disable Google Analytics', 'all-in-one-seo-pack' ),
|
1048 |
),
|
1049 |
);
|
1050 |
|
1051 |
+
if ( ! AIOSEOPPRO ) {
|
1052 |
+
array_unshift( $this->locations['aiosp']['options'], 'upgrade' );
|
1053 |
+
$this->locations['aiosp']['default_options']['sitemap_priority']['disabled'] = 'disabled';
|
1054 |
+
$this->locations['aiosp']['default_options']['sitemap_frequency']['disabled'] = 'disabled';
|
1055 |
+
}
|
1056 |
+
|
1057 |
$this->layout = array(
|
1058 |
'default' => array(
|
1059 |
/* translators: This is the name of the main menu. */
|
1234 |
|
1235 |
if ( is_admin() ) {
|
1236 |
add_action( 'aioseop_global_settings_header', array( $this, 'display_right_sidebar' ) );
|
|
|
1237 |
add_action( 'output_option', array( $this, 'custom_output_option' ), 10, 2 );
|
1238 |
add_action( 'admin_init', array( $this, 'visibility_warning' ) );
|
1239 |
+
add_action( 'admin_init', array( $this, 'review_plugin_cta' ) );
|
1240 |
add_action( 'admin_init', array( $this, 'woo_upgrade_notice' ) );
|
1241 |
+
add_action( 'admin_init', array( $this, 'check_php_version' ) );
|
1242 |
+
add_action( 'admin_init', array( 'AIOSEOP_Education', 'register_conflicting_plugin_notice' ) );
|
1243 |
}
|
1244 |
if ( AIOSEOPPRO ) {
|
1245 |
add_action( 'split_shared_term', array( $this, 'split_shared_term' ), 10, 4 );
|
1282 |
$w = $info['w'];
|
1283 |
$p = $info['p'];
|
1284 |
|
1285 |
+
if ( AIOSEOP_PHP_Functions::strlen( $title ) > 70 ) {
|
1286 |
$title = $this->trim_excerpt_without_filters(
|
1287 |
$this->html_entity_decode( $title ),
|
1288 |
70
|
1289 |
) . '...';
|
1290 |
}
|
1291 |
+
if ( AIOSEOP_PHP_Functions::strlen( $description ) > 156 ) {
|
1292 |
$description = $this->trim_excerpt_without_filters(
|
1293 |
$this->html_entity_decode( $description ),
|
1294 |
156
|
1687 |
'disable_analytics',
|
1688 |
'noindex',
|
1689 |
'nofollow',
|
1690 |
+
'sitemap_priority',
|
1691 |
+
'sitemap_frequency',
|
1692 |
);
|
1693 |
if ( ! ( ! empty( $this->options['aiosp_can'] ) ) ) {
|
1694 |
unset( $optlist['custom_link'] );
|
2201 |
$search = esc_attr( stripslashes( $s ) );
|
2202 |
$title = $search;
|
2203 |
} elseif ( ( is_tax() || is_category() ) && ! is_feed() ) {
|
2204 |
+
$category_name = AIOSEOP_PHP_Functions::ucwords( $this->internationalize( single_cat_title( '', false ) ) );
|
2205 |
$title = $category_name;
|
2206 |
} elseif ( is_page() ) {
|
2207 |
$title = $this->internationalize( single_post_title( '', false ) );
|
2277 |
$request_a = explode( ' ', $request );
|
2278 |
$request_new = array();
|
2279 |
foreach ( $request_a as $token ) {
|
2280 |
+
$request_new[] = AIOSEOP_PHP_Functions::ucwords( trim( $token ) );
|
2281 |
}
|
2282 |
$request = implode( ' ', $request_new );
|
2283 |
|
2379 |
$new_title = str_replace( "%{$type}_author_nicename%", $authordata->user_nicename, $new_title );
|
2380 |
}
|
2381 |
if ( false !== strpos( $new_title, "%{$type}_author_firstname%", 0 ) ) {
|
2382 |
+
$new_title = str_replace( "%{$type}_author_firstname%", AIOSEOP_PHP_Functions::ucwords( $authordata->first_name ), $new_title );
|
2383 |
}
|
2384 |
if ( false !== strpos( $new_title, "%{$type}_author_lastname%", 0 ) ) {
|
2385 |
+
$new_title = str_replace( "%{$type}_author_lastname%", AIOSEOP_PHP_Functions::ucwords( $authordata->last_name ), $new_title );
|
2386 |
}
|
2387 |
if ( false !== strpos( $new_title, '%current_date%', 0 ) ) {
|
2388 |
$new_title = str_replace( '%current_date%', aioseop_formatted_date(), $new_title );
|
3060 |
$max = $this->maximum_description_length;
|
3061 |
}
|
3062 |
$max_orig = $max;
|
3063 |
+
$len = AIOSEOP_PHP_Functions::strlen( $text2 );
|
3064 |
if ( $max < $len ) {
|
3065 |
if ( function_exists( 'mb_strrpos' ) ) {
|
3066 |
$pos = mb_strrpos( $text2, ' ', - ( $len - $max ), 'UTF-8' );
|
3083 |
$max = $max_orig;
|
3084 |
}
|
3085 |
}
|
3086 |
+
$text = AIOSEOP_PHP_Functions::substr( $text, 0, $max );
|
3087 |
|
3088 |
return trim( $text );
|
3089 |
}
|
3115 |
|
3116 |
if ( get_query_var( 'm' ) ) {
|
3117 |
$m = preg_replace( '/[^0-9]/', '', get_query_var( 'm' ) );
|
3118 |
+
switch ( AIOSEOP_PHP_Functions::strlen( $m ) ) {
|
3119 |
case 4:
|
3120 |
$link = get_year_link( $m );
|
3121 |
break;
|
3122 |
case 6:
|
3123 |
+
$link = get_month_link( AIOSEOP_PHP_Functions::substr( $m, 0, 4 ), AIOSEOP_PHP_Functions::substr( $m, 4, 2 ) );
|
3124 |
break;
|
3125 |
case 8:
|
3126 |
+
$link = get_day_link( AIOSEOP_PHP_Functions::substr( $m, 0, 4 ), AIOSEOP_PHP_Functions::substr( $m, 4, 2 ), AIOSEOP_PHP_Functions::substr( $m, 6, 2 ) );
|
3127 |
break;
|
3128 |
default:
|
3129 |
return false;
|
3424 |
}
|
3425 |
if ( ! empty( $keywords ) ) {
|
3426 |
foreach ( $keywords as $word ) {
|
3427 |
+
$small_keywords[] = trim( AIOSEOP_PHP_Functions::strtolower( $word ) );
|
3428 |
}
|
3429 |
}
|
3430 |
|
3474 |
'disable_analytics',
|
3475 |
'noindex',
|
3476 |
'nofollow',
|
3477 |
+
'sitemap_priority',
|
3478 |
+
'sitemap_frequency',
|
3479 |
);
|
3480 |
foreach ( $optlist as $f ) {
|
3481 |
$meta = get_term_meta( $term_id, '_aioseop_' . $f, true );
|
3537 |
?>
|
3538 |
});
|
3539 |
}
|
3540 |
+
<?php } ?>
|
3541 |
</script>
|
3542 |
<?php
|
3543 |
}
|
3749 |
case 'post.php':
|
3750 |
case 'post-new.php':
|
3751 |
$title_format = $this->get_preview_snippet_title();
|
3752 |
+
$extra_title_length = strlen( preg_replace( '/<span.*\/span>/', '', html_entity_decode( $title_format, ENT_QUOTES ) ) );
|
3753 |
|
3754 |
$snippet_preview_data = array(
|
3755 |
'autogenerateDescriptions' => $aioseop_options['aiosp_generate_descriptions'],
|
3756 |
'skipExcerpt' => $aioseop_options['aiosp_skip_excerpt'],
|
3757 |
+
'dontTruncateDescriptions' => $aioseop_options['aiosp_dont_truncate_descriptions'],
|
3758 |
);
|
3759 |
|
3760 |
$count_chars_data['extraTitleLength'] = $extra_title_length;
|
3768 |
);
|
3769 |
wp_localize_script( 'aioseop-preview-snippet', 'aioseop_preview_snippet', $snippet_preview_data );
|
3770 |
|
3771 |
+
/*
|
3772 |
+
* @see XRegExp
|
3773 |
+
* @link http://xregexp.com/
|
3774 |
+
* @link https://github.com/slevithan/xregexp
|
3775 |
+
*/
|
3776 |
wp_enqueue_script(
|
3777 |
'xregexp',
|
3778 |
+
AIOSEOP_PLUGIN_URL . 'js/admin/xregexp-v3.2.0/xregexp-all.min.js',
|
3779 |
array(),
|
3780 |
+
AIOSEOP_VERSION
|
3781 |
);
|
3782 |
// No break required.
|
3783 |
case 'toplevel_page_' . AIOSEOP_PLUGIN_DIRNAME . '/aioseop_class':
|
3945 |
}
|
3946 |
|
3947 |
if ( ! is_object( $aioseop_sitemap ) ) {
|
3948 |
+
unset( $settings['aiosp_sitemap_priority'] );
|
3949 |
+
unset( $settings['aiosp_sitemap_frequency'] );
|
3950 |
unset( $settings['aiosp_sitemap_exclude'] );
|
3951 |
}
|
3952 |
|
4164 |
$title = trim( strip_tags( $title ) );
|
4165 |
$title_tag_start = '<title';
|
4166 |
$title_tag_end = '</title';
|
4167 |
+
$start = AIOSEOP_PHP_Functions::strpos( $content, $title_tag_start, 0 );
|
4168 |
+
$end = AIOSEOP_PHP_Functions::strpos( $content, $title_tag_end, 0 );
|
4169 |
$this->title_start = $start;
|
4170 |
$this->title_end = $end;
|
4171 |
$this->orig_title = $title;
|
4292 |
}
|
4293 |
}
|
4294 |
|
4295 |
+
/**
|
4296 |
+
* Check the current PHP version and display a notice if on unsupported PHP.
|
4297 |
+
*
|
4298 |
+
* @since 3.4.0
|
4299 |
+
*/
|
4300 |
+
function check_php_version() {
|
4301 |
+
|
4302 |
+
// Display for PHP below 5.6
|
4303 |
+
if ( version_compare( PHP_VERSION, '5.4', '>=' ) ) {
|
4304 |
+
return;
|
4305 |
+
}
|
4306 |
+
|
4307 |
+
// Display for admins only.
|
4308 |
+
if ( ! is_super_admin() ) {
|
4309 |
+
return;
|
4310 |
+
}
|
4311 |
+
|
4312 |
+
// Display on Dashboard page only.
|
4313 |
+
if ( isset( $GLOBALS['pagenow'] ) && 'index.php' !== $GLOBALS['pagenow'] ) {
|
4314 |
+
return;
|
4315 |
+
}
|
4316 |
+
|
4317 |
+
global $aioseop_notices;
|
4318 |
+
$aioseop_notices->reset_notice( 'check_php_version' );
|
4319 |
+
$aioseop_notices->activate_notice( 'check_php_version' );
|
4320 |
+
}
|
4321 |
+
|
4322 |
+
/**
|
4323 |
+
* Review CTA
|
4324 |
+
*
|
4325 |
+
* Asks user if they are enjoying the plugin and subsequently points them to a different URL for a review.
|
4326 |
+
*
|
4327 |
+
* @since 3.4
|
4328 |
+
*
|
4329 |
+
* @see `self::constructor()` with 'all_admin_notices' Filter Hook
|
4330 |
+
*/
|
4331 |
+
function review_plugin_cta() {
|
4332 |
+
global $aioseop_notices;
|
4333 |
+
$aioseop_notices->activate_notice( 'review_plugin_cta' );
|
4334 |
+
}
|
4335 |
+
|
4336 |
/**
|
4337 |
* WooCommerce Upgrade Notice
|
4338 |
*
|
4409 |
global $aioseop_options;
|
4410 |
|
4411 |
// Handle the description format.
|
4412 |
+
if ( isset( $description ) && false !== $description && ( AIOSEOP_PHP_Functions::strlen( $description ) > $this->minimum_description_length ) && ! ( is_front_page() && is_paged() ) ) {
|
4413 |
$description = $this->trim_description( $description );
|
4414 |
if ( ! isset( $meta_string ) ) {
|
4415 |
$meta_string = '';
|
4554 |
// Logging - rewrite handler check for output buffering.
|
4555 |
$this->check_rewrite_handler();
|
4556 |
|
4557 |
+
printf( "\n<!-- " . AIOSEOP_PLUGIN_NAME . ' ' . $this->version );
|
|
|
4558 |
|
4559 |
if ( $this->ob_start_detected ) {
|
4560 |
echo 'ob_start_detected ';
|
4568 |
$save_posts = $posts;
|
4569 |
|
4570 |
// This outputs robots meta tags and custom canonical URl on WooCommerce product archive page.
|
4571 |
+
// See Github issue https://github.com/awesomemotive/all-in-one-seo-pack/issues/755.
|
4572 |
if ( function_exists( 'wc_get_page_id' ) && is_post_type_archive( 'product' ) ) {
|
4573 |
$post_id = wc_get_page_id( 'shop' );
|
4574 |
if ( $post_id ) {
|
4773 |
}
|
4774 |
if (
|
4775 |
sizeof( $active_handlers ) > 0 &&
|
4776 |
+
AIOSEOP_PHP_Functions::strtolower( $active_handlers[ sizeof( $active_handlers ) - 1 ] ) == AIOSEOP_PHP_Functions::strtolower( 'All_in_One_SEO_Pack::output_callback_for_title' )
|
4777 |
) {
|
4778 |
ob_end_flush();
|
4779 |
} else {
|
5053 |
}
|
5054 |
|
5055 |
/**
|
5056 |
+
* Saves the data of our metabox settings for a post.
|
5057 |
*
|
5058 |
+
* @since ?
|
5059 |
+
* @since 3.4.0 Added support for priority/frequency + minor refactoring.
|
5060 |
*
|
5061 |
+
* @param int $id The ID of the post.
|
5062 |
+
* @return bool Returns false if there is no POST data.
|
5063 |
*/
|
5064 |
function save_post_data( $id ) {
|
5065 |
$awmp_edit = null;
|
5066 |
$nonce = null;
|
5067 |
+
|
5068 |
if ( empty( $_POST ) ) {
|
5069 |
return false;
|
5070 |
}
|
5071 |
+
|
5072 |
if ( isset( $_POST['aiosp_edit'] ) ) {
|
5073 |
$awmp_edit = $_POST['aiosp_edit'];
|
5074 |
}
|
5075 |
+
|
5076 |
if ( isset( $_POST['nonce-aioseop-edit'] ) ) {
|
5077 |
$nonce = $_POST['nonce-aioseop-edit'];
|
5078 |
}
|
5079 |
|
5080 |
if ( isset( $awmp_edit ) && ! empty( $awmp_edit ) && wp_verify_nonce( $nonce, 'edit-aioseop-nonce' ) ) {
|
5081 |
|
5082 |
+
if ( empty( $this->options['aiosp_can'] ) ) {
|
5083 |
+
unset( $optlist['custom_link'] );
|
5084 |
+
}
|
5085 |
+
|
5086 |
$optlist = array(
|
5087 |
'keywords',
|
5088 |
'description',
|
5093 |
'disable_analytics',
|
5094 |
'noindex',
|
5095 |
'nofollow',
|
5096 |
+
'sitemap_priority',
|
5097 |
+
'sitemap_frequency',
|
5098 |
);
|
5099 |
+
|
5100 |
+
if ( ! AIOSEOPPRO ) {
|
5101 |
+
$optlist = array_diff( $optlist, array( 'sitemap_priority', 'sitemap_frequency' ) );
|
5102 |
}
|
5103 |
+
|
5104 |
+
foreach ( $optlist as $field_name ) {
|
5105 |
+
$field = "aiosp_$field_name";
|
5106 |
if ( isset( $_POST[ $field ] ) ) {
|
5107 |
$$field = $_POST[ $field ];
|
5108 |
}
|
|
|
5109 |
|
5110 |
+
delete_post_meta( $id, "_aioseop_{$field_name}" );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5111 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5112 |
|
5113 |
+
foreach ( $optlist as $field_name ) {
|
5114 |
+
$var = "aiosp_$field_name";
|
5115 |
+
$field = "_aioseop_$field_name";
|
5116 |
if ( isset( $$var ) && ! empty( $$var ) ) {
|
5117 |
add_post_meta( $id, $field, $$var );
|
5118 |
}
|
5119 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5120 |
}
|
5121 |
}
|
5122 |
|
5215 |
$wp_admin_bar->add_menu(
|
5216 |
array(
|
5217 |
'id' => AIOSEOP_PLUGIN_DIRNAME,
|
5218 |
+
'title' => '<span class="ab-icon aioseop-admin-bar-logo"></span>' . __( 'SEO', 'all-in-one-seo-pack' ),
|
|
|
5219 |
)
|
5220 |
);
|
5221 |
|
5222 |
+
if ( ! is_admin() ) {
|
5223 |
$wp_admin_bar->add_menu(
|
5224 |
array(
|
5225 |
+
'id' => 'aioseop-settings',
|
5226 |
'parent' => AIOSEOP_PLUGIN_DIRNAME,
|
5227 |
+
'title' => __( 'SEO Settings', 'all-in-one-seo-pack' ),
|
|
|
|
|
|
|
|
|
5228 |
)
|
5229 |
);
|
|
|
|
|
5230 |
}
|
5231 |
|
5232 |
+
$wp_admin_bar->add_menu(
|
5233 |
+
array(
|
5234 |
+
'id' => 'aioseop-settings-general',
|
5235 |
+
'parent' => is_admin() ? AIOSEOP_PLUGIN_DIRNAME : 'aioseop-settings',
|
5236 |
+
'title' => __( 'General Settings', 'all-in-one-seo-pack' ),
|
5237 |
+
'href' => $url,
|
5238 |
+
)
|
5239 |
+
);
|
5240 |
+
|
5241 |
$aioseop_admin_menu = 1;
|
5242 |
+
if ( ! empty( $post ) ) {
|
5243 |
|
5244 |
$blog_page = aiosp_common::get_blog_page( $post );
|
5245 |
if ( ! empty( $blog_page ) ) {
|
5289 |
}
|
5290 |
}
|
5291 |
}
|
5292 |
+
|
5293 |
+
if ( current_user_can( 'update_plugins' ) && ! AIOSEOPPRO ) {
|
5294 |
+
$href = aioseop_get_utm_url( 'admin-bar' );
|
5295 |
+
|
5296 |
+
$wp_admin_bar->add_menu(
|
5297 |
+
array(
|
5298 |
+
'parent' => AIOSEOP_PLUGIN_DIRNAME,
|
5299 |
+
'title' => __( 'Upgrade to Pro', 'all-in-one-seo-pack' ),
|
5300 |
+
'id' => 'aioseop-pro-upgrade',
|
5301 |
+
'href' => $href,
|
5302 |
+
'meta' => array( 'target' => '_blank' ),
|
5303 |
+
)
|
5304 |
+
);
|
5305 |
+
}
|
5306 |
}
|
5307 |
}
|
5308 |
|
5318 |
}
|
5319 |
|
5320 |
/**
|
5321 |
+
* Displays our metabox for taxonomy terms.
|
5322 |
*
|
5323 |
+
* @since ?
|
5324 |
+
* @since 3.4.0 Renamed function to better reflect purpose.
|
5325 |
*
|
5326 |
+
* @param $tax The taxonomy object.
|
5327 |
*/
|
5328 |
+
function display_term_metabox( $tax ) {
|
5329 |
$screen = 'edit-' . $tax->taxonomy;
|
5330 |
?>
|
5331 |
<div id="poststuff">
|
5335 |
}
|
5336 |
|
5337 |
/**
|
5338 |
+
* Saves the data of our metabox settings for a taxonomy term.
|
5339 |
*
|
5340 |
+
* @since ?
|
5341 |
+
* @since 3.4.0 Added support for priority/frequency + minor refactoring. Renamed function to better reflect purpose.
|
5342 |
*
|
5343 |
+
* @param int $id The ID of the taxonomy term.
|
5344 |
+
* @return bool Returns false if there is no POST data.
|
5345 |
*/
|
5346 |
+
function save_term_data( $id ) {
|
5347 |
$awmp_edit = null;
|
5348 |
$nonce = null;
|
5349 |
+
|
5350 |
if ( isset( $_POST['aiosp_edit'] ) ) {
|
5351 |
$awmp_edit = $_POST['aiosp_edit'];
|
5352 |
}
|
5353 |
+
|
5354 |
if ( isset( $_POST['nonce-aioseop-edit'] ) ) {
|
5355 |
$nonce = $_POST['nonce-aioseop-edit'];
|
5356 |
}
|
5357 |
|
5358 |
if ( isset( $awmp_edit ) && ! empty( $awmp_edit ) && wp_verify_nonce( $nonce, 'edit-aioseop-nonce' ) ) {
|
5359 |
+
|
5360 |
+
if ( empty( $this->options['aiosp_can'] ) ) {
|
5361 |
+
unset( $optlist['custom_link'] );
|
5362 |
+
}
|
5363 |
+
|
5364 |
$optlist = array(
|
5365 |
'keywords',
|
5366 |
'description',
|
5367 |
'title',
|
5368 |
'custom_link',
|
|
|
5369 |
'disable',
|
5370 |
'disable_analytics',
|
5371 |
'noindex',
|
5372 |
'nofollow',
|
5373 |
+
'sitemap_exclude',
|
5374 |
+
'sitemap_priority',
|
5375 |
+
'sitemap_frequency',
|
5376 |
);
|
5377 |
+
|
5378 |
+
if ( ! AIOSEOPPRO ) {
|
5379 |
+
$optlist = array_diff( $optlist, array( 'sitemap_priority', 'sitemap_frequency' ) );
|
5380 |
+
}
|
5381 |
+
|
5382 |
+
foreach ( $optlist as $field_name ) {
|
5383 |
+
$field = "aiosp_$field_name";
|
5384 |
if ( isset( $_POST[ $field ] ) ) {
|
5385 |
$$field = $_POST[ $field ];
|
5386 |
}
|
|
|
5387 |
|
5388 |
+
delete_term_meta( $id, "_aioseop_{$field_name}" );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5389 |
}
|
5390 |
|
5391 |
+
foreach ( $optlist as $field_name ) {
|
5392 |
+
$var = "aiosp_$field_name";
|
5393 |
+
$field = "_aioseop_$field_name";
|
|
|
|
|
5394 |
|
|
|
|
|
|
|
5395 |
if ( isset( $$var ) && ! empty( $$var ) ) {
|
5396 |
add_term_meta( $id, $field, $$var );
|
5397 |
}
|
5398 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5399 |
}
|
5400 |
}
|
5401 |
|
5402 |
+
|
5403 |
/**
|
5404 |
* Admin Menu
|
5405 |
*
|
5419 |
|
5420 |
$this->update_options();
|
5421 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5422 |
if ( isset( $_POST ) && isset( $_POST['module'] ) && isset( $_POST['nonce-aioseop'] ) && ( 'All_in_One_SEO_Pack' == $_POST['module'] ) && wp_verify_nonce( $_POST['nonce-aioseop'], 'aioseop-nonce' ) ) {
|
5423 |
if ( isset( $_POST['Submit'] ) && AIOSEOPPRO ) {
|
5424 |
if ( isset( $_POST['aiosp_custom_menu_order'] ) ) {
|
5462 |
if ( ! empty( $this->options['aiosp_taxactive'] ) ) {
|
5463 |
foreach ( $this->options['aiosp_taxactive'] as $tax ) {
|
5464 |
$this->locations['aiosp']['display'][] = 'edit-' . $tax;
|
5465 |
+
add_action( "{$tax}_edit_form", array( $this, 'display_term_metabox' ) );
|
5466 |
+
add_action( "edited_{$tax}", array( $this, 'save_term_data' ) );
|
5467 |
}
|
5468 |
}
|
5469 |
} else {
|
5483 |
aioseop_get_menu_icon()
|
5484 |
);
|
5485 |
|
5486 |
+
if ( ! AIOSEOPPRO ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5487 |
add_meta_box(
|
5488 |
'aioseop-about',
|
5489 |
+
AIOSEOP_PLUGIN_NAME . ' Pro',
|
5490 |
array( 'aiosp_metaboxes', 'display_extra_metaboxes' ),
|
5491 |
'aioseop_metaboxes',
|
5492 |
'side',
|
5495 |
}
|
5496 |
add_meta_box(
|
5497 |
'aioseop-support',
|
5498 |
+
__( 'Support', 'all-in-one-seo-pack' ),
|
5499 |
+
array( 'aiosp_metaboxes', 'display_extra_metaboxes' ),
|
5500 |
+
'aioseop_metaboxes',
|
5501 |
+
'side',
|
5502 |
+
'core'
|
5503 |
+
);
|
5504 |
+
add_meta_box(
|
5505 |
+
'aioseop-list',
|
5506 |
+
__( 'Join Our Mailing List', 'all-in-one-seo-pack' ),
|
5507 |
array( 'aiosp_metaboxes', 'display_extra_metaboxes' ),
|
5508 |
'aioseop_metaboxes',
|
5509 |
'side',
|
5534 |
$title = $this->plugin_name . ' - ' . $title;
|
5535 |
}
|
5536 |
if ( $tab_num <= 1 ) {
|
|
|
|
|
|
|
5537 |
add_meta_box( $m[0]['id'], $title, $m[0]['callback'], $m[0]['post_type'], $m[0]['context'], $m[0]['priority'], $m[0]['callback_args'] );
|
5538 |
} elseif ( $tab_num > 1 ) {
|
5539 |
add_meta_box(
|
5586 |
return $order;
|
5587 |
}
|
5588 |
|
|
|
|
|
|
|
|
|
|
|
|
|
5589 |
/**
|
5590 |
* Filters title and meta titles and applies cleanup.
|
5591 |
* - Decode HTML entities.
|
5723 |
<FORM action='' method='post' name='aioseop-migrate-options'>
|
5724 |
<input type='hidden' name='nonce-aioseop-migrate-options' value='" . wp_create_nonce( 'aioseop-migrate-nonce-options' ) . "' />
|
5725 |
<input type='submit' name='aioseop_migrate_options' class='button-primary' value='Update Database Options'>
|
5726 |
+
</FORM>
|
5727 |
</p></div>";
|
5728 |
aioseop_output_dismissable_notice( $msg, '', 'error' );
|
5729 |
}
|
5751 |
});
|
5752 |
//]]>
|
5753 |
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5754 |
</div>
|
5755 |
</div>
|
5756 |
<?php
|
all_in_one_seo_pack.php
CHANGED
@@ -3,15 +3,15 @@
|
|
3 |
Plugin Name: All In One SEO Pack
|
4 |
Plugin URI: https://semperplugins.com/all-in-one-seo-pack-pro-version/
|
5 |
Description: Out-of-the-box SEO for WordPress. Features like XML Sitemaps, SEO for custom post types, SEO for blogs or business sites, SEO for ecommerce sites, and much more. More than 50 million downloads since 2007.
|
6 |
-
Version: 3.
|
7 |
-
Author:
|
8 |
Author URI: https://semperplugins.com/all-in-one-seo-pack-pro-version/
|
9 |
Text Domain: all-in-one-seo-pack
|
10 |
Domain Path: /i18n/
|
11 |
*/
|
12 |
|
13 |
/*
|
14 |
-
Copyright (C) 2007-
|
15 |
|
16 |
This program is free software; you can redistribute it and/or modify
|
17 |
it under the terms of the GNU General Public License as published by
|
@@ -26,609 +26,37 @@ You should have received a copy of the GNU General Public License
|
|
26 |
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
27 |
*/
|
28 |
|
29 |
-
/**
|
30 |
-
* All in One SEO Pack.
|
31 |
-
* The original WordPress SEO plugin.
|
32 |
-
*
|
33 |
-
* @package All-in-One-SEO-Pack
|
34 |
-
* @version 3.3.5
|
35 |
-
*/
|
36 |
-
|
37 |
-
if ( ! defined( 'AIOSEOPPRO' ) ) {
|
38 |
-
define( 'AIOSEOPPRO', false );
|
39 |
-
}
|
40 |
-
if ( ! defined( 'AIOSEOP_PLUGIN_NAME' ) ) {
|
41 |
-
if ( ! AIOSEOPPRO ) {
|
42 |
-
define( 'AIOSEOP_PLUGIN_NAME', 'All in One SEO Pack' );
|
43 |
-
} else {
|
44 |
-
define( 'AIOSEOP_PLUGIN_NAME', 'All in One SEO Pack Pro' );
|
45 |
-
}
|
46 |
-
}
|
47 |
-
if ( ! defined( 'AIOSEOP_VERSION' ) ) {
|
48 |
-
define( 'AIOSEOP_VERSION', '3.3.5' );
|
49 |
-
}
|
50 |
-
|
51 |
-
/*
|
52 |
-
* DO NOT EDIT BELOW THIS LINE.
|
53 |
-
*/
|
54 |
-
|
55 |
if ( ! defined( 'ABSPATH' ) ) {
|
56 |
return;
|
57 |
}
|
58 |
|
59 |
-
if (
|
60 |
-
|
61 |
-
add_action( 'admin_head', 'disable_all_in_one_free', 1 );
|
62 |
-
|
63 |
-
}
|
64 |
-
|
65 |
-
if ( ! function_exists( 'aiosp_add_cap' ) ) {
|
66 |
-
|
67 |
-
/**
|
68 |
-
* AIOSEOP Add Capabilities
|
69 |
-
*
|
70 |
-
* @since 2.3.6
|
71 |
-
*/
|
72 |
-
function aiosp_add_cap() {
|
73 |
-
/*
|
74 |
-
* TODO we should put this into an install script. We just need to make sure it runs soon enough and we need to make
|
75 |
-
* sure people updating from previous versions have access to it.
|
76 |
-
*/
|
77 |
-
|
78 |
-
$role = get_role( 'administrator' );
|
79 |
-
if ( is_object( $role ) ) {
|
80 |
-
$role->add_cap( 'aiosp_manage_seo' );
|
81 |
-
}
|
82 |
-
}
|
83 |
-
}
|
84 |
-
add_action( 'plugins_loaded', 'aiosp_add_cap' );
|
85 |
-
|
86 |
-
if ( ! defined( 'AIOSEOP_PLUGIN_DIR' ) ) {
|
87 |
-
define( 'AIOSEOP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
|
88 |
-
} elseif ( AIOSEOP_PLUGIN_DIR !== plugin_dir_path( __FILE__ ) ) {
|
89 |
-
/*
|
90 |
-
This is not a great message.
|
91 |
-
add_action( 'admin_notices', create_function( '', 'echo "' . "<div class='error'>" . sprintf(
|
92 |
-
__( "%s detected a conflict; please deactivate the plugin located in %s.", 'all-in-one-seo-pack' ),
|
93 |
-
$aioseop_plugin_name, AIOSEOP_PLUGIN_DIR ) . "</div>" . '";' ) );
|
94 |
-
*/
|
95 |
-
return;
|
96 |
-
}
|
97 |
-
|
98 |
-
if ( ! defined( 'AIOSEOP_PLUGIN_BASENAME' ) ) {
|
99 |
-
define( 'AIOSEOP_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
|
100 |
-
}
|
101 |
-
if ( ! defined( 'AIOSEOP_PLUGIN_DIRNAME' ) ) {
|
102 |
-
define( 'AIOSEOP_PLUGIN_DIRNAME', dirname( AIOSEOP_PLUGIN_BASENAME ) );
|
103 |
-
}
|
104 |
-
if ( ! defined( 'AIOSEOP_PLUGIN_URL' ) ) {
|
105 |
-
define( 'AIOSEOP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
|
106 |
-
}
|
107 |
-
if ( ! defined( 'AIOSEOP_PLUGIN_IMAGES_URL' ) ) {
|
108 |
-
define( 'AIOSEOP_PLUGIN_IMAGES_URL', AIOSEOP_PLUGIN_URL . 'images/' );
|
109 |
-
}
|
110 |
-
if ( ! defined( 'AIOSEOP_BASELINE_MEM_LIMIT' ) ) {
|
111 |
-
define( 'AIOSEOP_BASELINE_MEM_LIMIT', '256M' );
|
112 |
-
} // 256MB
|
113 |
-
if ( ! defined( 'WP_CONTENT_URL' ) ) {
|
114 |
-
define( 'WP_CONTENT_URL', site_url() . '/wp-content' );
|
115 |
-
}
|
116 |
-
if ( ! defined( 'WP_ADMIN_URL' ) ) {
|
117 |
-
define( 'WP_ADMIN_URL', site_url() . '/wp-admin' );
|
118 |
-
}
|
119 |
-
if ( ! defined( 'WP_CONTENT_DIR' ) ) {
|
120 |
-
define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
|
121 |
-
}
|
122 |
-
if ( ! defined( 'WP_PLUGIN_URL' ) ) {
|
123 |
-
define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' );
|
124 |
-
}
|
125 |
-
if ( ! defined( 'WP_PLUGIN_DIR' ) ) {
|
126 |
-
define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' );
|
127 |
-
}
|
128 |
-
|
129 |
-
global $aiosp, $aioseop_options, $aioseop_modules, $aioseop_module_list, $aiosp_activation, $aioseop_mem_limit, $aioseop_get_pages_start, $aioseop_admin_menu;
|
130 |
-
$aioseop_get_pages_start = 0;
|
131 |
-
$aioseop_admin_menu = 0;
|
132 |
-
|
133 |
-
if ( AIOSEOPPRO ) {
|
134 |
-
global $aioseop_update_checker;
|
135 |
-
}
|
136 |
-
|
137 |
-
$aioseop_options = get_option( 'aioseop_options' );
|
138 |
-
|
139 |
-
// @codingStandardsIgnoreStart
|
140 |
-
$aioseop_mem_limit = @ini_get( 'memory_limit' );
|
141 |
-
// @codingStandardsIgnoreEnd
|
142 |
-
|
143 |
-
if ( ! function_exists( 'aioseop_convert_bytestring' ) ) {
|
144 |
/**
|
145 |
-
*
|
146 |
*
|
147 |
-
* @since
|
148 |
*
|
149 |
-
* @
|
150 |
-
* @return int
|
151 |
*/
|
152 |
-
|
153 |
-
$num = 0;
|
154 |
-
preg_match( '/^\s*([0-9.]+)\s*([KMGTPE])B?\s*$/i', $byte_string, $matches );
|
155 |
-
if ( ! empty( $matches ) ) {
|
156 |
-
$num = (float) $matches[1];
|
157 |
-
switch ( strtoupper( $matches[2] ) ) {
|
158 |
-
case 'E':
|
159 |
-
$num *= 1024;
|
160 |
-
// fall through.
|
161 |
-
case 'P':
|
162 |
-
$num *= 1024;
|
163 |
-
// fall through.
|
164 |
-
case 'T':
|
165 |
-
$num *= 1024;
|
166 |
-
// fall through.
|
167 |
-
case 'G':
|
168 |
-
$num *= 1024;
|
169 |
-
// fall through.
|
170 |
-
case 'M':
|
171 |
-
$num *= 1024;
|
172 |
-
// fall through.
|
173 |
-
case 'K':
|
174 |
-
$num *= 1024;
|
175 |
-
}
|
176 |
-
}
|
177 |
-
|
178 |
-
return intval( $num );
|
179 |
-
}
|
180 |
}
|
181 |
|
182 |
-
if (
|
183 |
-
$perf_opts = $aioseop_options['modules']['aiosp_performance_options'];
|
184 |
-
if ( isset( $perf_opts['aiosp_performance_memory_limit'] ) ) {
|
185 |
-
$aioseop_mem_limit = $perf_opts['aiosp_performance_memory_limit'];
|
186 |
-
}
|
187 |
-
if ( isset( $perf_opts['aiosp_performance_execution_time'] ) && ( '' !== $perf_opts['aiosp_performance_execution_time'] ) ) {
|
188 |
-
// @codingStandardsIgnoreStart
|
189 |
-
@ini_set( 'max_execution_time', (int) $perf_opts['aiosp_performance_execution_time'] );
|
190 |
-
@set_time_limit( (int) $perf_opts['aiosp_performance_execution_time'] );
|
191 |
-
// @codingStandardsIgnoreEnd
|
192 |
-
}
|
193 |
-
} else {
|
194 |
-
$aioseop_mem_limit = aioseop_convert_bytestring( $aioseop_mem_limit );
|
195 |
-
if ( ( $aioseop_mem_limit > 0 ) && ( $aioseop_mem_limit < AIOSEOP_BASELINE_MEM_LIMIT ) ) {
|
196 |
-
$aioseop_mem_limit = AIOSEOP_BASELINE_MEM_LIMIT;
|
197 |
-
}
|
198 |
-
}
|
199 |
-
|
200 |
-
if ( ! empty( $aioseop_mem_limit ) ) {
|
201 |
-
if ( ! is_int( $aioseop_mem_limit ) ) {
|
202 |
-
$aioseop_mem_limit = aioseop_convert_bytestring( $aioseop_mem_limit );
|
203 |
-
}
|
204 |
-
if ( ( $aioseop_mem_limit > 0 ) && ( $aioseop_mem_limit <= AIOSEOP_BASELINE_MEM_LIMIT ) ) {
|
205 |
-
// @codingStandardsIgnoreStart
|
206 |
-
@ini_set( 'memory_limit', $aioseop_mem_limit );
|
207 |
-
// @codingStandardsIgnoreEnd
|
208 |
-
}
|
209 |
-
}
|
210 |
|
211 |
-
$aiosp_activation = false;
|
212 |
-
// List all available modules here.
|
213 |
-
$aioseop_module_list = array(
|
214 |
-
'sitemap',
|
215 |
-
'opengraph',
|
216 |
-
'robots',
|
217 |
-
'file_editor',
|
218 |
-
'importer_exporter',
|
219 |
-
'bad_robots',
|
220 |
-
'performance',
|
221 |
-
);
|
222 |
-
|
223 |
-
if ( AIOSEOPPRO ) {
|
224 |
-
$aioseop_module_list[] = 'video_sitemap';
|
225 |
-
}
|
226 |
-
|
227 |
-
if ( class_exists( 'All_in_One_SEO_Pack' ) ) {
|
228 |
-
add_action( 'admin_notices', 'admin_notices_already_defined' );
|
229 |
/**
|
230 |
-
*
|
231 |
*
|
232 |
-
* @
|
233 |
-
*/
|
234 |
-
function admin_notices_already_defined() {
|
235 |
-
echo "<div class=\'error\'>The All In One SEO Pack class is already defined";
|
236 |
-
if ( class_exists( 'ReflectionClass' ) ) {
|
237 |
-
$_r = new ReflectionClass( 'All_in_One_SEO_Pack' );
|
238 |
-
echo ' in ' . $_r->getFileName();
|
239 |
-
}
|
240 |
-
echo ', preventing All In One SEO Pack from loading.</div>';
|
241 |
-
}
|
242 |
-
|
243 |
-
return;
|
244 |
-
}
|
245 |
-
|
246 |
-
if ( AIOSEOPPRO ) {
|
247 |
-
|
248 |
-
require( AIOSEOP_PLUGIN_DIR . 'pro/sfwd_update_checker.php' );
|
249 |
-
$aiosp_update_url = 'https://semperplugins.com/upgrade_plugins.php';
|
250 |
-
if ( defined( 'AIOSEOP_UPDATE_URL' ) ) {
|
251 |
-
$aiosp_update_url = AIOSEOP_UPDATE_URL;
|
252 |
-
}
|
253 |
-
$aioseop_update_checker = new SFWD_Update_Checker(
|
254 |
-
$aiosp_update_url,
|
255 |
-
__FILE__,
|
256 |
-
'aioseop'
|
257 |
-
);
|
258 |
-
|
259 |
-
$aioseop_update_checker->plugin_name = AIOSEOP_PLUGIN_NAME;
|
260 |
-
$aioseop_update_checker->plugin_basename = AIOSEOP_PLUGIN_BASENAME;
|
261 |
-
if ( ! empty( $aioseop_options['aiosp_license_key'] ) ) {
|
262 |
-
$aioseop_update_checker->license_key = $aioseop_options['aiosp_license_key'];
|
263 |
-
} else {
|
264 |
-
$aioseop_update_checker->license_key = '';
|
265 |
-
}
|
266 |
-
$aioseop_update_checker->options_page = AIOSEOP_PLUGIN_DIRNAME . '/aioseop_class.php';
|
267 |
-
$aioseop_update_checker->renewal_page = 'https://semperplugins.com/all-in-one-seo-pack-pro-version/';
|
268 |
-
|
269 |
-
$aioseop_update_checker->addQueryArgFilter( array( $aioseop_update_checker, 'add_secret_key' ) );
|
270 |
-
}
|
271 |
-
|
272 |
-
|
273 |
-
if ( ! function_exists( 'aioseop_activate' ) ) {
|
274 |
-
|
275 |
-
/**
|
276 |
-
* AIOSEOP Activate
|
277 |
*
|
278 |
-
* @
|
279 |
*/
|
280 |
-
|
281 |
-
|
282 |
-
// Check if we just got activated.
|
283 |
-
global $aiosp_activation;
|
284 |
-
if ( AIOSEOPPRO ) {
|
285 |
-
global $aioseop_update_checker;
|
286 |
-
}
|
287 |
-
$aiosp_activation = true;
|
288 |
-
|
289 |
-
require_once AIOSEOP_PLUGIN_DIR . 'admin/class-aioseop-notices.php';
|
290 |
-
global $aioseop_notices;
|
291 |
-
// $aioseop_notices->reset_notice( 'review_plugin' );
|
292 |
-
// These checks might be duplicated in the function being called.
|
293 |
-
if ( ! is_network_admin() || ! isset( $_GET['activate-multi'] ) ) {
|
294 |
-
set_transient( '_aioseop_activation_redirect', true, 30 ); // Sets 30 second transient for welcome screen redirect on activation.
|
295 |
-
}
|
296 |
-
|
297 |
-
delete_user_meta( get_current_user_id(), 'aioseop_yst_detected_notice_dismissed' );
|
298 |
-
|
299 |
-
if ( AIOSEOPPRO ) {
|
300 |
-
global $aioseop_options;
|
301 |
-
|
302 |
-
$aioseop_update_checker->checkForUpdates();
|
303 |
-
|
304 |
-
if (
|
305 |
-
isset( $aioseop_options['modules']['aiosp_feature_manager_options']['aiosp_feature_manager_enable_video_sitemap'] ) &&
|
306 |
-
'on' === $aioseop_options['modules']['aiosp_feature_manager_options']['aiosp_feature_manager_enable_video_sitemap']
|
307 |
-
) {
|
308 |
-
$next_scan_timestamp = wp_next_scheduled( 'aiosp_video_sitemap_scan' );
|
309 |
-
if ( false !== $next_scan_timestamp && 10 < ( $next_scan_timestamp - time() ) ) {
|
310 |
-
// Reschedule cron job to avoid waiting for next (daily) scan.
|
311 |
-
wp_unschedule_event( $next_scan_timestamp, 'aiosp_video_sitemap_scan' );
|
312 |
-
$next_scan_timestamp = false;
|
313 |
-
}
|
314 |
-
|
315 |
-
if ( false === $next_scan_timestamp ) {
|
316 |
-
wp_schedule_single_event( time() + 10, 'aiosp_video_sitemap_scan' );
|
317 |
-
}
|
318 |
-
}
|
319 |
-
}
|
320 |
-
}
|
321 |
-
}
|
322 |
-
|
323 |
-
add_action( 'plugins_loaded', 'aioseop_init_class' );
|
324 |
-
|
325 |
-
if ( ! function_exists( 'aiosp_plugin_row_meta' ) ) {
|
326 |
-
|
327 |
-
add_filter( 'plugin_row_meta', 'aiosp_plugin_row_meta', 10, 2 );
|
328 |
-
|
329 |
-
/**
|
330 |
-
* AIOSEOP Plugin Row Meta
|
331 |
-
*
|
332 |
-
* @since 2.3.3
|
333 |
-
*
|
334 |
-
* @param $actions
|
335 |
-
* @param $plugin_file
|
336 |
-
*
|
337 |
-
* @return array
|
338 |
-
*/
|
339 |
-
function aiosp_plugin_row_meta( $actions, $plugin_file ) {
|
340 |
-
|
341 |
-
$action_links = array(
|
342 |
-
|
343 |
-
'settings' => array(
|
344 |
-
/* translators: This is an action link users can click to open a feature request/bug report on GitHub. */
|
345 |
-
'label' => __( 'Feature Request/Bug Report', 'all-in-one-seo-pack' ),
|
346 |
-
'url' => 'https://github.com/semperfiwebdesign/all-in-one-seo-pack/issues/new',
|
347 |
-
),
|
348 |
-
|
349 |
-
);
|
350 |
-
|
351 |
-
return aiosp_action_links( $actions, $plugin_file, $action_links, 'after' );
|
352 |
-
}
|
353 |
-
}
|
354 |
-
|
355 |
-
if ( ! function_exists( 'aiosp_add_action_links' ) ) {
|
356 |
-
|
357 |
-
|
358 |
-
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'aiosp_add_action_links', 10, 2 );
|
359 |
-
|
360 |
-
/**
|
361 |
-
* AIOSEOP Add Action Links
|
362 |
-
*
|
363 |
-
* @since 2.3
|
364 |
-
*
|
365 |
-
* @param $actions
|
366 |
-
* @param $plugin_file
|
367 |
-
* @return array
|
368 |
-
*/
|
369 |
-
function aiosp_add_action_links( $actions, $plugin_file ) {
|
370 |
-
if ( ! is_array( $actions ) ) {
|
371 |
-
return $actions;
|
372 |
-
}
|
373 |
-
|
374 |
-
$aioseop_plugin_dirname = AIOSEOP_PLUGIN_DIRNAME;
|
375 |
-
$action_links = array();
|
376 |
-
$action_links = array(
|
377 |
-
'settings' => array(
|
378 |
-
/* translators: This is an action link users can click to open the General Settings menu. */
|
379 |
-
'label' => __( 'SEO Settings', 'all-in-one-seo-pack' ),
|
380 |
-
'url' => get_admin_url( null, "admin.php?page=$aioseop_plugin_dirname/aioseop_class.php" ),
|
381 |
-
),
|
382 |
-
|
383 |
-
'forum' => array(
|
384 |
-
/* translators: This is an action link users can click to open our premium support forum. */
|
385 |
-
'label' => __( 'Support Forum', 'all-in-one-seo-pack' ),
|
386 |
-
'url' => 'https://semperplugins.com/support/',
|
387 |
-
),
|
388 |
-
|
389 |
-
'docs' => array(
|
390 |
-
/* translators: This is an action link users can click to open our general documentation page. */
|
391 |
-
'label' => __( 'Documentation', 'all-in-one-seo-pack' ),
|
392 |
-
'url' => 'https://semperplugins.com/documentation/',
|
393 |
-
),
|
394 |
-
|
395 |
-
);
|
396 |
-
|
397 |
-
unset( $actions['edit'] );
|
398 |
-
|
399 |
-
if ( ! AIOSEOPPRO ) {
|
400 |
-
$action_links['proupgrade'] =
|
401 |
-
array(
|
402 |
-
/* translators: This is an action link users can click to purchase a license for All in One SEO Pack Pro. */
|
403 |
-
'label' => __( 'Upgrade to Pro', 'all-in-one-seo-pack' ),
|
404 |
-
'url' => 'https://semperplugins.com/plugins/all-in-one-seo-pack-pro-version/?loc=plugins',
|
405 |
-
|
406 |
-
);
|
407 |
-
}
|
408 |
-
|
409 |
-
return aiosp_action_links( $actions, $plugin_file, $action_links, 'before' );
|
410 |
-
}
|
411 |
-
}
|
412 |
-
|
413 |
-
if ( ! function_exists( 'aiosp_action_links' ) ) {
|
414 |
-
|
415 |
-
/**
|
416 |
-
* AIOSEOP Action Links
|
417 |
-
*
|
418 |
-
* @since 2.3
|
419 |
-
*
|
420 |
-
* @param $actions
|
421 |
-
* @param $plugin_file
|
422 |
-
* @param array $action_links
|
423 |
-
* @param string $position
|
424 |
-
* @return array
|
425 |
-
*/
|
426 |
-
function aiosp_action_links( $actions, $plugin_file, $action_links = array(), $position = 'after' ) {
|
427 |
-
static $plugin;
|
428 |
-
if ( ! isset( $plugin ) ) {
|
429 |
-
$plugin = plugin_basename( __FILE__ );
|
430 |
-
}
|
431 |
-
if ( $plugin === $plugin_file && ! empty( $action_links ) ) {
|
432 |
-
foreach ( $action_links as $key => $value ) {
|
433 |
-
$link = array( $key => '<a href="' . $value['url'] . '">' . $value['label'] . '</a>' );
|
434 |
-
if ( 'after' === $position ) {
|
435 |
-
$actions = array_merge( $actions, $link );
|
436 |
-
} else {
|
437 |
-
$actions = array_merge( $link, $actions );
|
438 |
-
}
|
439 |
-
}//foreach
|
440 |
-
}// if
|
441 |
-
return $actions;
|
442 |
-
}
|
443 |
-
}
|
444 |
-
|
445 |
-
if ( ! function_exists( 'aioseop_init_class' ) ) {
|
446 |
-
/**
|
447 |
-
* Inits All-in-One-Seo plugin class.
|
448 |
-
*
|
449 |
-
* @global AIOSEOP_Notices $aioseop_notices
|
450 |
-
*
|
451 |
-
* @since 2.3
|
452 |
-
* @since 2.3.12.3 Loads third party compatibility class.
|
453 |
-
*/
|
454 |
-
function aioseop_init_class() {
|
455 |
-
global $aiosp;
|
456 |
-
load_plugin_textdomain( 'all-in-one-seo-pack', false, dirname( plugin_basename( __FILE__ ) ) . '/i18n/' );
|
457 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'inc/aioseop_functions.php' );
|
458 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'aioseop_class.php' );
|
459 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'inc/aioseop_updates_class.php' );
|
460 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'inc/commonstrings.php' );
|
461 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'admin/display/general-metaboxes.php' );
|
462 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'inc/aiosp_common.php' );
|
463 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'admin/meta_import.php' );
|
464 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'inc/translations.php' );
|
465 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'public/opengraph.php' );
|
466 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'inc/compatibility/abstract/aiosep_compatible.php' );
|
467 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'inc/compatibility/compat-init.php' );
|
468 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'inc/compatibility/php-functions.php' );
|
469 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'public/front.php' );
|
470 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'public/google-analytics.php' );
|
471 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'admin/display/welcome.php' );
|
472 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'admin/display/dashboard_widget.php' );
|
473 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'admin/display/menu.php' );
|
474 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'admin/class-aioseop-notices.php' );
|
475 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'inc/schema/schema-builder.php' );
|
476 |
-
|
477 |
-
$aioseop_welcome = new aioseop_welcome(); // TODO move this to updates file.
|
478 |
-
|
479 |
-
if ( AIOSEOPPRO ) {
|
480 |
-
// Loads pro files and other pro init stuff.
|
481 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'pro/class-aio-pro-init.php' );
|
482 |
-
}
|
483 |
-
// call importer functions... this should be moved somewhere better.
|
484 |
-
aiosp_seometa_import();
|
485 |
-
|
486 |
-
$aiosp = new All_in_One_SEO_Pack();
|
487 |
-
|
488 |
-
$aioseop_updates = new AIOSEOP_Updates();
|
489 |
-
|
490 |
-
if ( AIOSEOPPRO ) {
|
491 |
-
$aioseop_pro_updates = new AIOSEOP_Pro_Updates();
|
492 |
-
add_action( 'admin_init', array( $aioseop_pro_updates, 'version_updates' ), 12 );
|
493 |
-
}
|
494 |
-
|
495 |
-
add_action( 'admin_init', 'aioseop_welcome' );
|
496 |
-
|
497 |
-
if ( aioseop_option_isset( 'aiosp_unprotect_meta' ) ) {
|
498 |
-
add_filter( 'is_protected_meta', 'aioseop_unprotect_meta', 10, 3 );
|
499 |
-
}
|
500 |
-
|
501 |
-
add_action( 'init', array( $aiosp, 'add_hooks' ) );
|
502 |
-
add_action( 'plugins_loaded', array( $aioseop_updates, 'version_updates' ), 11 );
|
503 |
-
|
504 |
-
// phpcs:ignore Squiz.Commenting.InlineComment.InvalidEndChar
|
505 |
-
// add_action( 'admin_init', 'aioseop_review_plugin_notice' );
|
506 |
-
if ( wp_doing_ajax() && ! empty( $_POST ) && ! empty( $_POST['action'] ) && 'aioseop_ajax_scan_header' === $_POST['action'] ) {
|
507 |
-
remove_action( 'init', array( $aiosp, 'add_hooks' ) );
|
508 |
-
add_action( 'admin_init', 'aioseop_scan_post_header' );
|
509 |
-
// if the action doesn't run -- pdb.
|
510 |
-
add_action( 'shutdown', 'aioseop_ajax_scan_header' );
|
511 |
-
include_once( ABSPATH . 'wp-admin/includes/screen.php' );
|
512 |
-
global $current_screen;
|
513 |
-
if ( class_exists( 'WP_Screen' ) ) {
|
514 |
-
$current_screen = WP_Screen::get( 'front' );
|
515 |
-
}
|
516 |
-
}
|
517 |
-
}
|
518 |
-
}
|
519 |
-
|
520 |
-
if ( ! function_exists( 'aioseop_review_plugin_notice' ) ) {
|
521 |
-
/**
|
522 |
-
* Review Plugin Notice
|
523 |
-
*
|
524 |
-
* Activates the review notice.
|
525 |
-
* Note: This couldn't be used directly in `aioseop_init_class()` since ajax instances was causing
|
526 |
-
* the database options to reset.
|
527 |
-
*
|
528 |
-
* @since 3.0
|
529 |
-
*/
|
530 |
-
function aioseop_review_plugin_notice() {
|
531 |
-
global $aioseop_notices;
|
532 |
-
// $aioseop_notices->activate_notice( 'review_plugin' );
|
533 |
-
}
|
534 |
-
}
|
535 |
-
|
536 |
-
if ( ! function_exists( 'aioseop_admin_enqueue_styles' ) ) {
|
537 |
-
/**
|
538 |
-
* Admin Enqueue Styles
|
539 |
-
*
|
540 |
-
* Styles used in various parts of WordPress admin, and not just AIOSEOP's screens.
|
541 |
-
* Note: If styles are specific to a given module, then use that module's admin_enqueue_styles() method, or parent method.
|
542 |
-
*
|
543 |
-
* @todo Refactor this into a core file.
|
544 |
-
*
|
545 |
-
* @since 3.0
|
546 |
-
*
|
547 |
-
* @see 'admin_enqueue_scripts' hook
|
548 |
-
* @link https://developer.wordpress.org/reference/hooks/admin_enqueue_scripts/
|
549 |
-
*
|
550 |
-
* @param string $hook_suffix
|
551 |
-
*/
|
552 |
-
function aioseop_admin_enqueue_styles( $hook_suffix ) {
|
553 |
-
// Font Icons.
|
554 |
-
if ( ! wp_style_is( 'aioseop-font-icons', 'registered' ) && ! wp_style_is( 'aioseop-font-icons', 'enqueued' ) ) {
|
555 |
-
wp_enqueue_style(
|
556 |
-
'aioseop-font-icons',
|
557 |
-
AIOSEOP_PLUGIN_URL . 'css/aioseop-font-icons.css',
|
558 |
-
array(),
|
559 |
-
AIOSEOP_VERSION
|
560 |
-
);
|
561 |
-
}
|
562 |
-
if ( function_exists( 'is_rtl' ) && is_rtl() ) {
|
563 |
-
if ( ! wp_style_is( 'aioseop-font-icons-rtl', 'registered' ) && ! wp_style_is( 'aioseop-font-icons-rtl', 'enqueued' ) ) {
|
564 |
-
wp_enqueue_style(
|
565 |
-
'aioseop-font-icons-rtl',
|
566 |
-
AIOSEOP_PLUGIN_URL . 'css/aioseop-font-icons-rtl.css',
|
567 |
-
array(),
|
568 |
-
AIOSEOP_VERSION
|
569 |
-
);
|
570 |
-
}
|
571 |
-
}
|
572 |
-
}
|
573 |
-
}
|
574 |
-
|
575 |
-
if ( ! function_exists( 'aioseop_welcome' ) ) {
|
576 |
-
function aioseop_welcome() {
|
577 |
-
if ( get_transient( '_aioseop_activation_redirect' ) ) {
|
578 |
-
$aioseop_welcome = new aioseop_welcome();
|
579 |
-
delete_transient( '_aioseop_activation_redirect' );
|
580 |
-
$aioseop_welcome->init( true );
|
581 |
-
}
|
582 |
-
|
583 |
-
}
|
584 |
-
}
|
585 |
-
|
586 |
-
add_action( 'init', 'aioseop_load_modules', 1 );
|
587 |
-
// phpcs:ignore Squiz.Commenting.InlineComment.InvalidEndChar
|
588 |
-
// add_action( 'after_setup_theme', 'aioseop_load_modules' );
|
589 |
-
if ( is_admin() || defined( 'AIOSEOP_UNIT_TESTING' ) ) {
|
590 |
-
add_action( 'wp_ajax_aioseop_ajax_save_meta', 'aioseop_ajax_save_meta' );
|
591 |
-
add_action( 'wp_ajax_aioseop_ajax_save_url', 'aioseop_ajax_save_url' );
|
592 |
-
add_action( 'wp_ajax_aioseop_ajax_delete_url', 'aioseop_ajax_delete_url' );
|
593 |
-
add_action( 'wp_ajax_aioseop_ajax_scan_header', 'aioseop_ajax_scan_header' );
|
594 |
-
if ( AIOSEOPPRO ) {
|
595 |
-
add_action( 'wp_ajax_aioseop_ajax_facebook_debug', 'aioseop_ajax_facebook_debug' );
|
596 |
-
}
|
597 |
-
add_action( 'wp_ajax_aioseop_ajax_save_settings', 'aioseop_ajax_save_settings' );
|
598 |
-
add_action( 'wp_ajax_aioseop_ajax_get_menu_links', 'aioseop_ajax_get_menu_links' );
|
599 |
-
add_action( 'wp_ajax_aioseo_dismiss_yst_notice', 'aioseop_update_yst_detected_notice' );
|
600 |
-
add_action( 'wp_ajax_aioseo_dismiss_visibility_notice', 'aioseop_update_user_visibilitynotice' );
|
601 |
-
add_action( 'wp_ajax_aioseo_dismiss_woo_upgrade_notice', 'aioseop_woo_upgrade_notice_dismissed' );
|
602 |
-
|
603 |
-
add_action( 'admin_enqueue_scripts', 'aioseop_admin_enqueue_styles' );
|
604 |
-
}
|
605 |
-
|
606 |
-
if ( ! function_exists( 'aioseop_scan_post_header' ) ) {
|
607 |
-
function aioseop_scan_post_header() {
|
608 |
-
require_once( ABSPATH . WPINC . '/default-filters.php' );
|
609 |
-
global $wp_query;
|
610 |
-
$wp_query->query_vars['paged'] = 0;
|
611 |
-
query_posts( 'post_type=post&posts_per_page=1' );
|
612 |
-
if ( have_posts() ) {
|
613 |
-
the_post();
|
614 |
-
}
|
615 |
-
}
|
616 |
-
}
|
617 |
-
|
618 |
-
require_once( AIOSEOP_PLUGIN_DIR . 'aioseop-init.php' );
|
619 |
-
|
620 |
-
if ( ! function_exists( 'aioseop_install' ) ) {
|
621 |
-
register_activation_hook( __FILE__, 'aioseop_install' );
|
622 |
-
|
623 |
-
function aioseop_install() {
|
624 |
-
aioseop_activate();
|
625 |
-
}
|
626 |
}
|
627 |
|
628 |
-
if ( !
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
}
|
634 |
}
|
3 |
Plugin Name: All In One SEO Pack
|
4 |
Plugin URI: https://semperplugins.com/all-in-one-seo-pack-pro-version/
|
5 |
Description: Out-of-the-box SEO for WordPress. Features like XML Sitemaps, SEO for custom post types, SEO for blogs or business sites, SEO for ecommerce sites, and much more. More than 50 million downloads since 2007.
|
6 |
+
Version: 3.4.2
|
7 |
+
Author: All in One SEO Team
|
8 |
Author URI: https://semperplugins.com/all-in-one-seo-pack-pro-version/
|
9 |
Text Domain: all-in-one-seo-pack
|
10 |
Domain Path: /i18n/
|
11 |
*/
|
12 |
|
13 |
/*
|
14 |
+
Copyright (C) 2007-2020 All in One SEO, https://semperplugins.com
|
15 |
|
16 |
This program is free software; you can redistribute it and/or modify
|
17 |
it under the terms of the GNU General Public License as published by
|
26 |
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
27 |
*/
|
28 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
if ( ! defined( 'ABSPATH' ) ) {
|
30 |
return;
|
31 |
}
|
32 |
|
33 |
+
if ( ! defined( 'AIOSEO_PLUGIN_DIR' ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
/**
|
35 |
+
* Plugin Directory
|
36 |
*
|
37 |
+
* @since 3.4
|
38 |
*
|
39 |
+
* @var string $AIOSEOP_PLUGIN_DIR Plugin folder directory path. Eg. `C:\WebProjects\UW-WPDev-aioseop\src-plugins/all-in-one-seo-pack/`
|
|
|
40 |
*/
|
41 |
+
define( 'AIOSEO_PLUGIN_DIR', dirname( __FILE__ ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
}
|
43 |
|
44 |
+
if ( ! defined( 'AIOSEO_PLUGIN_FILE' ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
/**
|
47 |
+
* Plugin File
|
48 |
*
|
49 |
+
* @since 3.4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
*
|
51 |
+
* @var string $AIOSEOP_PLUGIN_FILE Plugin folder directory path. Eg. `C:\WebProjects\UW-WPDev-aioseop\src-plugins/all-in-one-seo-pack/`
|
52 |
*/
|
53 |
+
define( 'AIOSEO_PLUGIN_FILE', __FILE__ );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
}
|
55 |
|
56 |
+
if ( ! class_exists( 'AIOSEOP_Core' ) ) {
|
57 |
+
require_once plugin_dir_path( __FILE__ ) . 'class-aioseop-core.php';
|
58 |
+
global $aioseop_core;
|
59 |
+
if ( is_null( $aioseop_core ) ) {
|
60 |
+
$aioseop_core = new AIOSEOP_Core();
|
61 |
}
|
62 |
}
|
build/aioseop-link-attributes-gutenberg-editor.asset.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
<?php return array(
|
2 |
+
'dependencies' => array( 'lodash', 'wp-element', 'wp-polyfill' ),
|
3 |
+
'version' => '30786cf55e346e4068908edbdfda65d1',
|
4 |
+
);
|
build/aioseop-link-attributes-gutenberg-editor.js
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=15)}([function(e,t){!function(){e.exports=this.wp.element}()},function(e,t){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},function(e,t,n){var o;
|
2 |
+
/*!
|
3 |
+
Copyright (c) 2017 Jed Watson.
|
4 |
+
Licensed under the MIT License (MIT), see
|
5 |
+
http://jedwatson.github.io/classnames
|
6 |
+
*/!function(){"use strict";var n={}.hasOwnProperty;function r(){for(var e=[],t=0;t<arguments.length;t++){var o=arguments[t];if(o){var i=typeof o;if("string"===i||"number"===i)e.push(o);else if(Array.isArray(o)&&o.length){var s=r.apply(null,o);s&&e.push(s)}else if("object"===i)for(var a in o)n.call(o,a)&&o[a]&&e.push(a)}}return e.join(" ")}e.exports?(r.default=r,e.exports=r):void 0===(o=function(){return r}.apply(t,[]))||(e.exports=o)}()},function(e,t,n){var o=n(12);e.exports=function(e,t){if(null==e)return{};var n,r,i=o(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function n(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}e.exports=function(e,t,o){return t&&n(e.prototype,t),o&&n(e,o),e}},function(e,t,n){var o=n(13),r=n(1);e.exports=function(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?r(e):t}},function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n},function(e,t,n){var o=n(14);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&o(e,t)}},function(e,t){!function(){e.exports=this.lodash}()},function(e,t){function n(){return e.exports=n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},n.apply(this,arguments)}e.exports=n},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t){e.exports=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)n=i[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}},function(e,t){function n(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=n=function(e){return typeof e}:e.exports=n=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(t)}e.exports=n},function(e,t){function n(t,o){return e.exports=n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},n(t,o)}e.exports=n},function(e,t,n){"use strict";n.r(t);var o=n(3),r=n.n(o),i=n(11),s=n.n(i),a=n(4),l=n.n(a),u=n(5),c=n.n(u),p=n(6),f=n.n(p),d=n(7),h=n.n(d),g=n(1),v=n.n(g),b=n(8),m=n.n(b),y=n(0),w=n(9),k=n(10),O=n.n(k),S=wp.url,L=S.getProtocol,j=S.isValidProtocol,E=S.getAuthority,C=S.isValidAuthority,P=S.getPath,x=S.isValidPath,_=S.getQueryString,N=S.isValidQueryString,R=S.getFragment,F=S.isValidFragment,T=wp.i18n,W=T.__,A=T.sprintf;function D(e){if(!e)return!1;var t=e.trim();if(!t)return!1;if(/^\S+:/.test(t)){var n=L(t);if(!j(n))return!1;if(Object(w.startsWith)(n,"http")&&!/^https?:\/\/[^\/\s]/i.test(t))return!1;var o=E(t);if(!C(o))return!1;var r=P(t);if(r&&!x(r))return!1;var i=_(t);if(i&&!N(i))return!1;var s=R(t);if(s&&!F(s))return!1}return!(Object(w.startsWith)(t,"#")&&!F(t))}function I(e){var t=e.url,n=e.opensInNewWindow,o=e.noFollow,r=e.sponsored,i=e.text,s={type:"aioseop/link",attributes:{url:t}},a=[];if(n){var l=A(W("%s (opens in a new tab)","all-in-one-seo-pack"),i);s.attributes.target="_blank",s.attributes["aria-label"]=l,a.push("noreferrer noopener")}return o&&a.push("nofollow"),r&&a.push("sponsored"),a.length>0&&(s.attributes.rel=a.join(" ")),s}var V=wp.element.Component,M=wp.dom,U=M.getOffsetParent,K=M.getRectangleFromRange;function B(){var e=window.getSelection();if(0===e.rangeCount)return{};var t=K(e.getRangeAt(0)),n=t.top+t.height,o=t.left+t.width/2,r=U(e.anchorNode);if(r){var i=r.getBoundingClientRect();n-=i.top,o-=i.left}return{top:n,left:o}}var H=function(e){function t(){var e;return l()(this,t),(e=f()(this,h()(t).apply(this,arguments))).state={style:B()},e}return m()(t,e),c()(t,[{key:"render",value:function(){var e=this.props.children,t=this.state.style;return Object(y.createElement)("div",{className:"editor-format-toolbar__selection-position",style:t},e)}}]),t}(V),z=n(2),q=n.n(z);function Q(e){return(Q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function $(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function G(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function X(e,t){var n=e["page".concat(t?"Y":"X","Offset")],o="scroll".concat(t?"Top":"Left");if("number"!=typeof n){var r=e.document;"number"!=typeof(n=r.documentElement[o])&&(n=r.body[o])}return n}function Y(e){return X(e)}function J(e){return X(e,!0)}function Z(e){var t=function(e){var t,n,o,r=e.ownerDocument,i=r.body,s=r&&r.documentElement;return n=(t=e.getBoundingClientRect()).left,o=t.top,{left:n-=s.clientLeft||i.clientLeft||0,top:o-=s.clientTop||i.clientTop||0}}(e),n=e.ownerDocument,o=n.defaultView||n.parentWindow;return t.left+=Y(o),t.top+=J(o),t}var ee,te=new RegExp("^(".concat(/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,")(?!px)[a-z%]+$"),"i"),ne=/^(top|right|bottom|left)$/;function oe(e,t){for(var n=0;n<e.length;n++)t(e[n])}function re(e){return"border-box"===ee(e,"boxSizing")}"undefined"!=typeof window&&(ee=window.getComputedStyle?function(e,t,n){var o="",r=e.ownerDocument,i=n||r.defaultView.getComputedStyle(e,null);return i&&(o=i.getPropertyValue(t)||i[t]),o}:function(e,t){var n=e.currentStyle&&e.currentStyle[t];if(te.test(n)&&!ne.test(t)){var o=e.style,r=o.left,i=e.runtimeStyle.left;e.runtimeStyle.left=e.currentStyle.left,o.left="fontSize"===t?"1em":n||0,n=o.pixelLeft+"px",o.left=r,e.runtimeStyle.left=i}return""===n?"auto":n});var ie=["margin","border","padding"];function se(e,t,n){var o,r={},i=e.style;for(o in t)t.hasOwnProperty(o)&&(r[o]=i[o],i[o]=t[o]);for(o in n.call(e),t)t.hasOwnProperty(o)&&(i[o]=r[o])}function ae(e,t,n){var o,r,i,s=0;for(r=0;r<t.length;r++)if(o=t[r])for(i=0;i<n.length;i++){var a=void 0;a="border"===o?"".concat(o+n[i],"Width"):o+n[i],s+=parseFloat(ee(e,a))||0}return s}function le(e){return null!=e&&e==e.window}var ue={};function ce(e,t,n){if(le(e))return"width"===t?ue.viewportWidth(e):ue.viewportHeight(e);if(9===e.nodeType)return"width"===t?ue.docWidth(e):ue.docHeight(e);var o="width"===t?["Left","Right"]:["Top","Bottom"],r="width"===t?e.offsetWidth:e.offsetHeight,i=(ee(e),re(e)),s=0;(null==r||r<=0)&&(r=void 0,(null==(s=ee(e,t))||Number(s)<0)&&(s=e.style[t]||0),s=parseFloat(s)||0),void 0===n&&(n=i?1:-1);var a=void 0!==r||i,l=r||s;if(-1===n)return a?l-ae(e,["border","padding"],o):s;if(a){var u=2===n?-ae(e,["border"],o):ae(e,["margin"],o);return l+(1===n?0:u)}return s+ae(e,ie.slice(n),o)}oe(["Width","Height"],(function(e){ue["doc".concat(e)]=function(t){var n=t.document;return Math.max(n.documentElement["scroll".concat(e)],n.body["scroll".concat(e)],ue["viewport".concat(e)](n))},ue["viewport".concat(e)]=function(t){var n="client".concat(e),o=t.document,r=o.body,i=o.documentElement[n];return"CSS1Compat"===o.compatMode&&i||r&&r[n]||i}}));var pe={position:"absolute",visibility:"hidden",display:"block"};function fe(e){var t,n=arguments;return 0!==e.offsetWidth?t=ce.apply(void 0,n):se(e,pe,(function(){t=ce.apply(void 0,n)})),t}function de(e,t,n){var o=n;if("object"!==Q(t))return void 0!==o?("number"==typeof o&&(o+="px"),void(e.style[t]=o)):ee(e,t);for(var r in t)t.hasOwnProperty(r)&&de(e,r,t[r])}oe(["width","height"],(function(e){var t=e.charAt(0).toUpperCase()+e.slice(1);ue["outer".concat(t)]=function(t,n){return t&&fe(t,e,n?0:1)};var n="width"===e?["Left","Right"]:["Top","Bottom"];ue[e]=function(t,o){if(void 0===o)return t&&fe(t,e,-1);if(t){ee(t);return re(t)&&(o+=ae(t,["padding","border"],n)),de(t,e,o)}}}));var he=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?G(n,!0).forEach((function(t){$(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):G(n).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({getWindow:function(e){var t=e.ownerDocument||e;return t.defaultView||t.parentWindow},offset:function(e,t){if(void 0===t)return Z(e);!function(e,t){"static"===de(e,"position")&&(e.style.position="relative");var n,o,r=Z(e),i={};for(o in t)t.hasOwnProperty(o)&&(n=parseFloat(de(e,o))||0,i[o]=n+t[o]-r[o]);de(e,i)}(e,t)},isWindow:le,each:oe,css:de,clone:function(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);if(e.overflow)for(var o in e)e.hasOwnProperty(o)&&(t.overflow[o]=e.overflow[o]);return t},scrollLeft:function(e,t){if(le(e)){if(void 0===t)return Y(e);window.scrollTo(t,J(e))}else{if(void 0===t)return e.scrollLeft;e.scrollLeft=t}},scrollTop:function(e,t){if(le(e)){if(void 0===t)return J(e);window.scrollTo(Y(e),t)}else{if(void 0===t)return e.scrollTop;e.scrollTop=t}},viewportWidth:0,viewportHeight:0},ue);var ge=function(e,t,n){n=n||{},9===t.nodeType&&(t=he.getWindow(t));var o=n.allowHorizontalScroll,r=n.onlyScrollIfNeeded,i=n.alignWithTop,s=n.alignWithLeft,a=n.offsetTop||0,l=n.offsetLeft||0,u=n.offsetBottom||0,c=n.offsetRight||0;o=void 0===o||o;var p,f,d,h,g,v,b,m,y,w,k=he.isWindow(t),O=he.offset(e),S=he.outerHeight(e),L=he.outerWidth(e);k?(b=t,w=he.height(b),y=he.width(b),m={left:he.scrollLeft(b),top:he.scrollTop(b)},g={left:O.left-m.left-l,top:O.top-m.top-a},v={left:O.left+L-(m.left+y)+c,top:O.top+S-(m.top+w)+u},h=m):(p=he.offset(t),f=t.clientHeight,d=t.clientWidth,h={left:t.scrollLeft,top:t.scrollTop},g={left:O.left-(p.left+(parseFloat(he.css(t,"borderLeftWidth"))||0))-l,top:O.top-(p.top+(parseFloat(he.css(t,"borderTopWidth"))||0))-a},v={left:O.left+L-(p.left+d+(parseFloat(he.css(t,"borderRightWidth"))||0))+c,top:O.top+S-(p.top+f+(parseFloat(he.css(t,"borderBottomWidth"))||0))+u}),g.top<0||v.top>0?!0===i?he.scrollTop(t,h.top+g.top):!1===i?he.scrollTop(t,h.top+v.top):g.top<0?he.scrollTop(t,h.top+g.top):he.scrollTop(t,h.top+v.top):r||((i=void 0===i||!!i)?he.scrollTop(t,h.top+g.top):he.scrollTop(t,h.top+v.top)),o&&(g.left<0||v.left>0?!0===s?he.scrollLeft(t,h.left+g.left):!1===s?he.scrollLeft(t,h.left+v.left):g.left<0?he.scrollLeft(t,h.left+g.left):he.scrollLeft(t,h.left+v.left):r||((s=void 0===s||!!s)?he.scrollLeft(t,h.left+g.left):he.scrollLeft(t,h.left+v.left)))},ve=wp.i18n,be=ve.__,me=ve.sprintf,ye=ve._n,we=wp.element,ke=we.Component,Oe=we.createRef,Se=wp.htmlEntities.decodeEntities,Le=wp.keycodes,je=Le.UP,Ee=Le.DOWN,Ce=Le.ENTER,Pe=Le.TAB,xe=wp.components,_e=xe.Spinner,Ne=xe.withSpokenMessages,Re=xe.Popover,Fe=wp.compose.withInstanceId,Te=wp.apiFetch,We=wp.url.addQueryArgs,Ae=function(e){return e.stopPropagation()},De=Ne(Fe(function(e){function t(e){var n,o=e.autocompleteRef;return l()(this,t),(n=f()(this,h()(t).apply(this,arguments))).onChange=n.onChange.bind(v()(n)),n.onKeyDown=n.onKeyDown.bind(v()(n)),n.autocompleteRef=o||Oe(),n.inputRef=Oe(),n.updateSuggestions=Object(w.throttle)(n.updateSuggestions.bind(v()(n)),200),n.suggestionNodes=[],n.state={posts:[],showSuggestions:!1,selectedSuggestion:null},n}return m()(t,e),c()(t,[{key:"componentDidUpdate",value:function(){var e=this,t=this.state,n=t.showSuggestions,o=t.selectedSuggestion;n&&null!==o&&!this.scrollingIntoView&&(this.scrollingIntoView=!0,ge(this.suggestionNodes[o],this.autocompleteRef.current,{onlyScrollIfNeeded:!0}),setTimeout((function(){e.scrollingIntoView=!1}),100))}},{key:"componentWillUnmount",value:function(){delete this.suggestionsRequest}},{key:"bindSuggestionNode",value:function(e){var t=this;return function(n){t.suggestionNodes[e]=n}}},{key:"updateSuggestions",value:function(e){var t=this;if(e.length<2||/^https?:/.test(e))this.setState({showSuggestions:!1,selectedSuggestion:null,loading:!1});else{this.setState({showSuggestions:!0,selectedSuggestion:null,loading:!0});var n=Te({path:We("/wp/v2/search",{search:e,per_page:20,type:"post"})});n.then((function(e){t.suggestionsRequest===n&&(t.setState({posts:e,loading:!1}),e.length?t.props.debouncedSpeak(me(ye("%d result found, use up and down arrow keys to navigate.","%d results found, use up and down arrow keys to navigate.",e.length),e.length),"assertive"):t.props.debouncedSpeak(be("No results.","all-in-one-seo-pack"),"assertive"))})).catch((function(){t.suggestionsRequest===n&&t.setState({loading:!1})})),this.suggestionsRequest=n}}},{key:"onChange",value:function(e){var t=e.target.value;this.props.onChange(t),this.updateSuggestions(t)}},{key:"onKeyDown",value:function(e){var t=this.state,n=t.showSuggestions,o=t.selectedSuggestion,r=t.posts,i=t.loading;if(n&&r.length&&!i){var s=this.state.posts[this.state.selectedSuggestion];switch(e.keyCode){case je:e.stopPropagation(),e.preventDefault();var a=o?o-1:r.length-1;this.setState({selectedSuggestion:a});break;case Ee:e.stopPropagation(),e.preventDefault();var l=null===o||o===r.length-1?0:o+1;this.setState({selectedSuggestion:l});break;case Pe:null!==this.state.selectedSuggestion&&(this.selectLink(s),this.props.speak(be("Link selected.","all-in-one-seo-pack")));break;case Ce:null!==this.state.selectedSuggestion&&(e.stopPropagation(),this.selectLink(s))}}else switch(e.keyCode){case je:0!==e.target.selectionStart&&(e.stopPropagation(),e.preventDefault(),e.target.setSelectionRange(0,0));break;case Ee:this.props.value.length!==e.target.selectionStart&&(e.stopPropagation(),e.preventDefault(),e.target.setSelectionRange(this.props.value.length,this.props.value.length))}}},{key:"selectLink",value:function(e){this.props.onChange(e.url,e),this.setState({selectedSuggestion:null,showSuggestions:!1})}},{key:"handleOnClick",value:function(e){this.selectLink(e),this.inputRef.current.focus()}},{key:"render",value:function(){var e=this,t=this.props,n=t.value,o=void 0===n?"":n,r=t.autoFocus,i=void 0===r||r,s=t.instanceId,a=t.className,l=this.state,u=l.showSuggestions,c=l.posts,p=l.selectedSuggestion,f=l.loading;return Object(y.createElement)("div",{className:q()("editor-url-input block-editor-url-input",a)},Object(y.createElement)("input",{autoFocus:i,type:"text","aria-label":be("URL","all-in-one-seo-pack"),required:!0,value:o,onChange:this.onChange,onInput:Ae,placeholder:be("Paste URL or type to search","all-in-one-seo-pack"),onKeyDown:this.onKeyDown,role:"combobox","aria-expanded":u,"aria-autocomplete":"list","aria-owns":"editor-url-input-suggestions-".concat(s),"aria-activedescendant":null!==p?"editor-url-input-suggestion-".concat(s,"-").concat(p):void 0,ref:this.inputRef}),f&&Object(y.createElement)(_e,null),u&&!!c.length&&Object(y.createElement)(Re,{position:"bottom",noArrow:!0,focusOnMount:!1},Object(y.createElement)("div",{className:q()("editor-url-input__suggestions","block-editor-url-input__suggestions","".concat(a,"__suggestions")),id:"editor-url-input-suggestions-".concat(s),ref:this.autocompleteRef,role:"listbox"},c.map((function(t,n){return Object(y.createElement)("button",{key:t.id,role:"option",tabIndex:"-1",id:"editor-url-input-suggestion-".concat(s,"-").concat(n),ref:e.bindSuggestionNode(n),className:q()("editor-url-input__suggestion block-editor-url-input__suggestion",{"is-selected":n===p}),onClick:function(){return e.handleOnClick(t)},"aria-selected":n===p},Se(t.title)||be("(no title)","all-in-one-seo-pack"))})))))}}]),t}(ke))),Ie=wp.i18n.__,Ve=wp.components.IconButton;function Me(e){var t=e.autocompleteRef,n=e.className,o=e.onChangeInputValue,i=e.value,s=r()(e,["autocompleteRef","className","onChangeInputValue","value"]);return Object(y.createElement)("form",O()({className:q()("block-editor-url-popover__link-editor",n)},s),Object(y.createElement)(De,{value:i,onChange:o,autocompleteRef:t}),Object(y.createElement)(Ve,{icon:"editor-break",label:Ie("Apply","all-in-one-seo-pack"),type:"submit"}))}var Ue=wp.i18n.__,Ke=wp.components,Be=Ke.ExternalLink,He=Ke.IconButton,ze=wp.url,qe=ze.safeDecodeURI,Qe=ze.filterURLForDisplay;function $e(e){var t=e.url,n=e.urlLabel,o=e.className,r=q()(o,"block-editor-url-popover__link-viewer-url");return t?Object(y.createElement)(Be,{className:r,href:t},n||Qe(qe(t))):Object(y.createElement)("span",{className:r})}function Ge(e){var t=e.className,n=e.linkClassName,o=e.onEditLinkClick,i=e.url,s=e.urlLabel,a=r()(e,["className","linkClassName","onEditLinkClick","url","urlLabel"]);return Object(y.createElement)("div",O()({className:q()("block-editor-url-popover__link-viewer",t)},a),Object(y.createElement)($e,{url:i,urlLabel:s,className:n}),o&&Object(y.createElement)(He,{icon:"edit",label:Ue("Edit","all-in-one-seo-pack"),onClick:o}))}var Xe=wp.i18n.__,Ye=wp.element,Je=Ye.Component,Ze=Ye.createRef,et=Ye.useMemo,tt=Ye.Fragment,nt=wp.components,ot=nt.ToggleControl,rt=nt.withSpokenMessages,it=wp.keycodes,st=it.LEFT,at=it.RIGHT,lt=it.UP,ut=it.DOWN,ct=it.BACKSPACE,pt=it.ENTER,ft=it.ESCAPE,dt=wp.dom.getRectangleFromRange,ht=wp.url.prependHTTP,gt=wp.richText,vt=gt.create,bt=gt.insert,mt=gt.isCollapsed,yt=gt.applyFormat,wt=gt.getTextContent,kt=gt.slice,Ot=wp.blockEditor.URLPopover,St=function(e){return e.stopPropagation()};function Lt(e,t){return e.addingLink||t.editLink}var jt=function(e){var t=e.isActive,n=e.addingLink,o=e.value,i=e.resetOnMount,s=r()(e,["isActive","addingLink","value","resetOnMount"]),a=et((function(){var e=window.getSelection(),t=e.rangeCount>0?e.getRangeAt(0):null;if(t){if(n)return dt(t);var o=t.startContainer;for(o=o.nextElementSibling||o;o.nodeType!==window.Node.ELEMENT_NODE;)o=o.parentNode;var r=o.closest("a");return r?r.getBoundingClientRect():void 0}}),[t,n,o.start,o.end]);return a?(i(a),Object(y.createElement)(Ot,O()({anchorRect:a},s))):null},Et=rt(function(e){function t(){var e;return l()(this,t),(e=f()(this,h()(t).apply(this,arguments))).editLink=e.editLink.bind(v()(e)),e.submitLink=e.submitLink.bind(v()(e)),e.onKeyDown=e.onKeyDown.bind(v()(e)),e.onChangeInputValue=e.onChangeInputValue.bind(v()(e)),e.setLinkTarget=e.setLinkTarget.bind(v()(e)),e.setNoFollow=e.setNoFollow.bind(v()(e)),e.setSponsored=e.setSponsored.bind(v()(e)),e.onFocusOutside=e.onFocusOutside.bind(v()(e)),e.resetState=e.resetState.bind(v()(e)),e.autocompleteRef=Ze(),e.resetOnMount=e.resetOnMount.bind(v()(e)),e.state={opensInNewWindow:!1,noFollow:!1,sponsored:!1,inputValue:"",anchorRect:!1},e}return m()(t,e),c()(t,[{key:"onKeyDown",value:function(e){[st,ut,at,lt,ct,pt].indexOf(e.keyCode)>-1&&e.stopPropagation(),[ft].indexOf(e.keyCode)>-1&&this.resetState()}},{key:"onChangeInputValue",value:function(e){this.setState({inputValue:e})}},{key:"setLinkTarget",value:function(e){var t=this.props,n=t.activeAttributes.url,o=void 0===n?"":n,r=t.value,i=t.onChange;if(this.setState({opensInNewWindow:e}),!Lt(this.props,this.state)){var s=wt(kt(r));i(yt(r,I({url:o,opensInNewWindow:e,noFollow:this.state.noFollow,sponsored:this.state.sponsored,text:s})))}}},{key:"setNoFollow",value:function(e){var t=this.props,n=t.activeAttributes.url,o=void 0===n?"":n,r=t.value,i=t.onChange;if(this.setState({noFollow:e}),!Lt(this.props,this.state)){var s=wt(kt(r));i(yt(r,I({url:o,opensInNewWindow:this.state.opensInNewWindow,noFollow:e,sponsored:this.state.sponsored,text:s})))}}},{key:"setSponsored",value:function(e){var t=this.props,n=t.activeAttributes.url,o=void 0===n?"":n,r=t.value,i=t.onChange;if(this.setState({sponsored:e}),!Lt(this.props,this.state)){var s=wt(kt(r));i(yt(r,I({url:o,opensInNewWindow:this.state.opensInNewWindow,noFollow:this.state.noFollow,sponsored:e,text:s})))}}},{key:"editLink",value:function(e){this.setState({editLink:!0}),e.preventDefault()}},{key:"submitLink",value:function(e){var t=this.props,n=t.isActive,o=t.value,r=t.onChange,i=t.speak,s=this.state,a=s.inputValue,l=s.opensInNewWindow,u=s.noFollow,c=s.sponsored,p=ht(a),f=I({url:p,opensInNewWindow:l,noFollow:u,sponsored:c,text:wt(kt(o))});if(e.preventDefault(),mt(o)&&!n){var d=yt(vt({text:p}),f,0,p.length);r(bt(o,d))}else r(yt(o,f));this.resetState(),D(p)?i(Xe(n?"Link edited.":"Link inserted.","all-in-one-seo-pack"),"assertive"):i(Xe("Warning: the link has been inserted but could have errors. Please test it.","all-in-one-seo-pack"),"assertive")}},{key:"onFocusOutside",value:function(){var e=this.autocompleteRef.current;e&&e.contains(event.target)||this.resetState()}},{key:"resetState",value:function(){this.props.stopAddingLink(),this.setState({editLink:!1})}},{key:"resetOnMount",value:function(e){this.state.anchorRect!==e&&this.setState({opensInNewWindow:!1,noFollow:!1,sponsored:!1,anchorRect:e})}},{key:"render",value:function(){var e=this,t=this.props,n=t.isActive,o=t.activeAttributes,r=o.url,i=o.target,s=o.rel,a=t.addingLink,l=t.value;if(!n&&!a)return null;var u=this.state,c=u.inputValue,p=u.opensInNewWindow,f=u.noFollow,d=u.sponsored,h=Lt(this.props,this.state);if(p||"_blank"!==i||this.setState({opensInNewWindow:!0}),"string"==typeof s){var g=s.split(" ").includes("nofollow"),v=s.split(" ").includes("sponsored");g!==f&&this.setState({noFollow:g}),v!==d&&this.setState({sponsored:v})}return Object(y.createElement)(H,{key:"".concat(l.start).concat(l.end)},Object(y.createElement)(jt,{resetOnMount:this.resetOnMount,value:l,isActive:n,addingLink:a,onFocusOutside:this.onFocusOutside,onClose:function(){c||e.resetState()},focusOnMount:!!h&&"firstElement",renderSettings:function(){return Object(y.createElement)(tt,null,Object(y.createElement)(ot,{label:Xe("Open in New Tab","all-in-one-seo-pack"),checked:p,onChange:e.setLinkTarget}),Object(y.createElement)(ot,{label:Xe('Add "nofollow" to link',"all-in-one-seo-pack"),checked:f,onChange:e.setNoFollow}),Object(y.createElement)(ot,{label:Xe('Add "sponsored" to link',"all-in-one-seo-pack"),checked:d,onChange:e.setSponsored}))}},h?Object(y.createElement)(Me,{className:"editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content",value:c,onChangeInputValue:this.onChangeInputValue,onKeyDown:this.onKeyDown,onKeyPress:St,onSubmit:this.submitLink,autocompleteRef:this.autocompleteRef}):Object(y.createElement)(Ge,{className:"editor-format-toolbar__link-container-content block-editor-format-toolbar__link-container-content",onKeyPress:St,url:r,onEditLinkClick:this.editLink,linkClassName:D(ht(r))?void 0:"has-invalid-link"})))}}],[{key:"getDerivedStateFromProps",value:function(e,t){var n=e.activeAttributes,o=n.url,r=n.target,i=n.rel,s="_blank"===r;if(!Lt(e,t)){if(o!==t.inputValue)return{inputValue:o};if(s!==t.opensInNewWindow)return{opensInNewWindow:s};if("string"==typeof i){var a=i.split(" ").includes("nofollow"),l=i.split(" ").includes("sponsored");if(a!==t.noFollow)return{noFollow:a};if(l!==t.sponsored)return{sponsored:l}}}return null}}]),t}(Je));function Ct(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Pt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ct(Object(n),!0).forEach((function(t){s()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ct(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var xt=wp.i18n.__,_t=wp.element,Nt=_t.Component,Rt=_t.Fragment,Ft=wp.data,Tt=Ft.select,Wt=Ft.withSelect,At=Ft.dispatch,Dt=wp.blockEditor,It=Dt.BlockControls,Vt=Dt.RichTextToolbarButton,Mt=Dt.RichTextShortcut,Ut=wp.richText,Kt=Ut.getTextContent,Bt=Ut.applyFormat,Ht=Ut.removeFormat,zt=Ut.slice,qt=Ut.getActiveFormat,Qt=wp.url.isURL,$t=wp.components,Gt=$t.Toolbar,Xt=$t.withSpokenMessages,Yt=wp.compose,Jt=Yt.compose,Zt=Yt.ifCondition,en=xt("Add Link","all-in-one-seo-pack"),tn=/^(mailto:)?[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$/i,nn=function(e){function t(){var e;return l()(this,t),(e=f()(this,h()(t).apply(this,arguments))).isEmail=e.isEmail.bind(v()(e)),e.addLink=e.addLink.bind(v()(e)),e.stopAddingLink=e.stopAddingLink.bind(v()(e)),e.onRemoveFormat=e.onRemoveFormat.bind(v()(e)),e.state={addingLink:!1},e}return m()(t,e),c()(t,[{key:"componentDidMount",value:function(){var e=Tt("core/rich-text").getFormatType("core/link");e&&(e.edit=null,At("core/rich-text").addFormatTypes(e))}},{key:"isEmail",value:function(e){return tn.test(e)}},{key:"addLink",value:function(){var e=this.props,t=e.value,n=e.onChange,o=Kt(zt(t));o&&Qt(o)?n(Bt(t,{type:"aioseop/link",attributes:{url:o}})):o&&this.isEmail(o)?n(Bt(t,{type:"aioseop/link",attributes:{url:"mailto:".concat(o)}})):this.setState({addingLink:!0})}},{key:"stopAddingLink",value:function(){this.setState({addingLink:!1})}},{key:"onRemoveFormat",value:function(){var e=this.props,t=e.value,n=e.onChange,o=e.speak,r=t;Object(w.map)(["core/link","aioseop/link"],(function(e){r=Ht(r,e)})),n(Pt({},r)),o(xt("Link removed.","all-in-one-seo-pack"),"assertive")}},{key:"render",value:function(){var e=this.props,t=e.activeAttributes,n=e.onChange,o=this.props,r=o.isActive,i=o.value,s=qt(i,"core/link");if(s){s.type="aioseop/link";var a=i;a=Bt(a,s),n(Pt({},a=Ht(a,"core/link"))),i=a,r=!0}return Object(y.createElement)(Rt,null,Object(y.createElement)(It,null,Object(y.createElement)(Gt,{className:"editorskit-components-toolbar"},Object(y.createElement)(Mt,{type:"primary",character:"k",onUse:this.addLink}),Object(y.createElement)(Mt,{type:"primaryShift",character:"k",onUse:this.onRemoveFormat}),r&&Object(y.createElement)(Vt,{name:"link",icon:"editor-unlink",title:xt("Unlink","all-in-one-seo-pack"),onClick:this.onRemoveFormat,isActive:r,shortcutType:"primaryShift",shortcutCharacter:"k"}),!r&&Object(y.createElement)(Vt,{name:"link",icon:"admin-links",title:en,onClick:this.addLink,isActive:r,shortcutType:"primary",shortcutCharacter:"k"}),Object(y.createElement)(Et,{addingLink:this.state.addingLink,stopAddingLink:this.stopAddingLink,isActive:r,activeAttributes:t,value:i,onChange:n}))))}}]),t}(Nt),on=Jt(Wt((function(){return{isDisabled:Tt("core/edit-post").isFeatureActive("disableEditorsKitLinkFormats")}})),Zt((function(e){return!e.isDisabled})),Xt)(nn);n.d(t,"link",(function(){return fn}));var rn=wp.i18n.__,sn=wp.richText,an=sn.registerFormatType,ln=sn.applyFormat,un=sn.isCollapsed,cn=wp.htmlEntities.decodeEntities,pn=wp.url.isURL,fn={name:"aioseop/link",title:rn("Link","all-in-one-seo-pack"),tagName:"a",className:"aioseop-link",attributes:{url:"href",target:"target",rel:"rel"},__unstablePasteRule:function(e,t){var n=t.html,o=t.plainText;if(un(e))return e;var r=(n||o).replace(/<[^>]+>/g,"").trim();return pn(r)?ln(e,{type:"aioseop/link",attributes:{url:cn(r)}}):e},edit:on};[fn].forEach((function(e){var t=e.name,n=r()(e,["name"]);t&&an(t,n)}))}]);
|
class-aioseop-core.php
ADDED
@@ -0,0 +1,786 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* AIOSEOP Core Class
|
4 |
+
*
|
5 |
+
* Handles all the core operations required to run on a WordPress platform.
|
6 |
+
*
|
7 |
+
* @package All-in-One-SEO-Pack
|
8 |
+
* @since 3.4
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Class AIOSEOP_Core
|
13 |
+
*
|
14 |
+
* @since 3.4
|
15 |
+
*/
|
16 |
+
class AIOSEOP_Core {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* AIOSEOP_Core constructor.
|
20 |
+
*
|
21 |
+
* Set plugin's globals, constants, and initialization hook.
|
22 |
+
*
|
23 |
+
* @since 3.4
|
24 |
+
*/
|
25 |
+
public function __construct() {
|
26 |
+
global $aiosp;
|
27 |
+
global $aioseop_options;
|
28 |
+
global $aioseop_modules;
|
29 |
+
global $aioseop_module_list;
|
30 |
+
global $aiosp_activation;
|
31 |
+
global $aioseop_mem_limit;
|
32 |
+
global $aioseop_get_pages_start;
|
33 |
+
global $aioseop_admin_menu;
|
34 |
+
|
35 |
+
$this->_define_constants();
|
36 |
+
|
37 |
+
$aioseop_get_pages_start = 0;
|
38 |
+
$aioseop_admin_menu = 0;
|
39 |
+
$aiosp_activation = false;
|
40 |
+
|
41 |
+
$aioseop_options = get_option( 'aioseop_options' );
|
42 |
+
|
43 |
+
// Sets the memory limit based on settings. Default 256M.
|
44 |
+
$memory_limit = '';
|
45 |
+
$execution_time = '';
|
46 |
+
if ( ! empty( $aioseop_options['modules']['aiosp_performance_options']['aiosp_performance_memory_limit'] ) ) {
|
47 |
+
$memory_limit = $aioseop_options['modules']['aiosp_performance_options']['aiosp_performance_memory_limit'];
|
48 |
+
}
|
49 |
+
if ( ! empty( $aioseop_options['modules']['aiosp_performance_options']['aiosp_performance_execution_time'] ) ) {
|
50 |
+
$execution_time = $aioseop_options['modules']['aiosp_performance_options']['aiosp_performance_execution_time'];
|
51 |
+
}
|
52 |
+
$aioseop_mem_limit = $this->set_mem_limit( $memory_limit, $execution_time );
|
53 |
+
|
54 |
+
// List all available modules here.
|
55 |
+
$aioseop_module_list = array(
|
56 |
+
'sitemap',
|
57 |
+
'opengraph',
|
58 |
+
'robots',
|
59 |
+
'file_editor',
|
60 |
+
'importer_exporter',
|
61 |
+
'bad_robots',
|
62 |
+
'performance',
|
63 |
+
'video_sitemap',
|
64 |
+
'image_seo',
|
65 |
+
);
|
66 |
+
|
67 |
+
// Initialize plugin.
|
68 |
+
add_action( 'plugins_loaded', array( $this, 'init' ), 5 );
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Initialize plugin.
|
73 |
+
*
|
74 |
+
* TODO Refactor method on lines marked `TODO`.
|
75 |
+
*
|
76 |
+
* @since 3.4
|
77 |
+
*/
|
78 |
+
public function init() {
|
79 |
+
global $aiosp;
|
80 |
+
global $aioseop_options;
|
81 |
+
|
82 |
+
// Error notice when class already exists.
|
83 |
+
if ( class_exists( 'All_in_One_SEO_Pack' ) ) {
|
84 |
+
add_action( 'admin_notices', array( $this, 'admin_notices_already_defined' ) );
|
85 |
+
}
|
86 |
+
|
87 |
+
$this->_requires();
|
88 |
+
$this->add_hooks();
|
89 |
+
|
90 |
+
// TODO Remove/Change. We no longer have a folder called i18n OR should this be called `languages`.
|
91 |
+
load_plugin_textdomain( 'all-in-one-seo-pack', false, dirname( AIOSEOP_PLUGIN_BASENAME ) . '/i18n/' );
|
92 |
+
|
93 |
+
// Call importer functions... this should be moved somewhere better.
|
94 |
+
aiosp_seometa_import();
|
95 |
+
|
96 |
+
$aiosp = new All_in_One_SEO_Pack();
|
97 |
+
|
98 |
+
$aioseop_updates = new AIOSEOP_Updates();
|
99 |
+
|
100 |
+
// Check for plugin version update.
|
101 |
+
// TODO Move to AIOSEOP_Updates::__construct().
|
102 |
+
add_action( 'plugins_loaded', array( $aioseop_updates, 'version_updates' ), 11 );
|
103 |
+
if ( AIOSEOPPRO ) {
|
104 |
+
$aioseop_pro_updates = new AIOSEOP_Pro_Updates();
|
105 |
+
// TODO Move to AIOSEOP_Pro_Updates::__construct().
|
106 |
+
add_action( 'admin_init', array( $aioseop_pro_updates, 'version_updates' ), 12 );
|
107 |
+
}
|
108 |
+
|
109 |
+
// Check for Pro updates.
|
110 |
+
// vv TODO Should this be moved to (Pro) updater class?
|
111 |
+
if ( AIOSEOPPRO ) {
|
112 |
+
global $aioseop_update_checker;
|
113 |
+
|
114 |
+
require( AIOSEOP_PLUGIN_DIR . 'pro/sfwd_update_checker.php' );
|
115 |
+
$aiosp_update_url = 'https://semperplugins.com/upgrade_plugins.php';
|
116 |
+
if ( defined( 'AIOSEOP_UPDATE_URL' ) ) {
|
117 |
+
$aiosp_update_url = AIOSEOP_UPDATE_URL;
|
118 |
+
}
|
119 |
+
$aioseop_update_checker = new SFWD_Update_Checker(
|
120 |
+
$aiosp_update_url,
|
121 |
+
AIOSEO_PLUGIN_FILE,
|
122 |
+
'aioseop'
|
123 |
+
);
|
124 |
+
|
125 |
+
$aioseop_update_checker->plugin_name = AIOSEOP_PLUGIN_NAME;
|
126 |
+
$aioseop_update_checker->plugin_basename = AIOSEOP_PLUGIN_BASENAME;
|
127 |
+
if ( ! empty( $aioseop_options['aiosp_license_key'] ) ) {
|
128 |
+
$aioseop_update_checker->license_key = $aioseop_options['aiosp_license_key'];
|
129 |
+
} else {
|
130 |
+
$aioseop_update_checker->license_key = '';
|
131 |
+
}
|
132 |
+
$aioseop_update_checker->options_page = AIOSEOP_PLUGIN_DIRNAME . '/aioseop_class.php';
|
133 |
+
$aioseop_update_checker->renewal_page = 'https://semperplugins.com/all-in-one-seo-pack-pro-version/';
|
134 |
+
|
135 |
+
$aioseop_update_checker->addQueryArgFilter( array( $aioseop_update_checker, 'add_secret_key' ) );
|
136 |
+
}
|
137 |
+
// ^^ TODO Should this be moved to (Pro) updater class?
|
138 |
+
|
139 |
+
// TODO Move this to updates file.
|
140 |
+
// FIXME This is executed in AIOSEOP_Core::aioseop_welcome() on admin_init hook.
|
141 |
+
new aioseop_welcome();
|
142 |
+
AIOSEOP_Education::init();
|
143 |
+
AIOSEOP_Flyout::init();
|
144 |
+
|
145 |
+
add_action( 'admin_init', array( $this, 'aioseop_welcome' ) );
|
146 |
+
|
147 |
+
// TODO Move this add_action to All_in_One_SEO_Pack::__construct().
|
148 |
+
add_action( 'init', array( $aiosp, 'add_hooks' ) );
|
149 |
+
|
150 |
+
// phpcs:ignore Squiz.Commenting.InlineComment.InvalidEndChar
|
151 |
+
// add_action( 'admin_init', array( $this, 'review_plugin_notice' ) );
|
152 |
+
|
153 |
+
// Perform Opengraph scan from JS scan.
|
154 |
+
// vv TODO This could be improved by using WP AJAX.
|
155 |
+
if ( wp_doing_ajax() && ! empty( $_POST ) && ! empty( $_POST['action'] ) && 'aioseop_ajax_scan_header' === $_POST['action'] ) {
|
156 |
+
remove_action( 'init', array( $aiosp, 'add_hooks' ) );
|
157 |
+
add_action( 'admin_init', array( $this, 'scan_post_header' ) );
|
158 |
+
// if the action doesn't run -- pdb.
|
159 |
+
add_action( 'shutdown', 'aioseop_ajax_scan_header' );
|
160 |
+
|
161 |
+
include_once( ABSPATH . 'wp-admin/includes/screen.php' );
|
162 |
+
global $current_screen;
|
163 |
+
if ( class_exists( 'WP_Screen' ) ) {
|
164 |
+
$current_screen = WP_Screen::get( 'front' );
|
165 |
+
}
|
166 |
+
}
|
167 |
+
// ^^ TODO This could be improved by using WP AJAX.
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Define plugin constants.
|
172 |
+
*
|
173 |
+
* @ignore
|
174 |
+
*
|
175 |
+
* @since 3.4
|
176 |
+
*
|
177 |
+
* @see get_file_data()
|
178 |
+
* @link https://developer.wordpress.org/reference/functions/get_file_data/
|
179 |
+
* @link https://hitchhackerguide.com/2011/02/12/get_plugin_data/
|
180 |
+
*
|
181 |
+
* @access private
|
182 |
+
*/
|
183 |
+
private function _define_constants() {
|
184 |
+
if ( defined( 'AIOSEOP_VERSION' ) ) {
|
185 |
+
return;
|
186 |
+
}
|
187 |
+
|
188 |
+
if ( ! defined( 'AIOSEOP_PLUGIN_BASENAME' ) ) {
|
189 |
+
/**
|
190 |
+
* Plugin Basename.
|
191 |
+
*
|
192 |
+
* @since 3.4
|
193 |
+
*
|
194 |
+
* @var string $AIOSEOP_PLUGIN_BASENAME Plugin basename on WP platform. Eg. 'all-in-one-seo-pack/all_in_one_seo_pack.php`.
|
195 |
+
*/
|
196 |
+
define( 'AIOSEOP_PLUGIN_BASENAME', plugin_basename( AIOSEO_PLUGIN_FILE ) );
|
197 |
+
}
|
198 |
+
|
199 |
+
// Use get_file_data with this file, and get the plugin's file data with default_headers.
|
200 |
+
$default_headers = array(
|
201 |
+
'Name' => 'Plugin Name',
|
202 |
+
'Version' => 'Version',
|
203 |
+
);
|
204 |
+
|
205 |
+
$plugin_data = get_file_data( AIOSEO_PLUGIN_FILE, $default_headers );
|
206 |
+
|
207 |
+
/**
|
208 |
+
* AIOSEOP Display Name
|
209 |
+
*
|
210 |
+
* @since ?
|
211 |
+
* @since 3.4 Change to file header data.
|
212 |
+
*
|
213 |
+
* @var string $AIOSEOP_PLUGIN_NAME Contains 'All In One SEO Pack'.
|
214 |
+
*/
|
215 |
+
define( 'AIOSEOP_PLUGIN_NAME', $plugin_data['Name'] );
|
216 |
+
|
217 |
+
/**
|
218 |
+
* Plugin Version Number
|
219 |
+
*
|
220 |
+
* @since ?
|
221 |
+
* @since 3.4 Change to file header data.
|
222 |
+
*
|
223 |
+
* @var string $AIOSEOP_VERSION Contains the plugin's version number. Eg. '3.2.4'
|
224 |
+
*/
|
225 |
+
define( 'AIOSEOP_VERSION', $plugin_data['Version'] );
|
226 |
+
|
227 |
+
if ( ! defined( 'AIOSEOPPRO' ) ) {
|
228 |
+
define( 'AIOSEOPPRO', false );
|
229 |
+
}
|
230 |
+
|
231 |
+
if ( ! defined( 'AIOSEOP_PLUGIN_DIR' ) ) {
|
232 |
+
|
233 |
+
/**
|
234 |
+
* Plugin Directory
|
235 |
+
*
|
236 |
+
* @since ?
|
237 |
+
*
|
238 |
+
* @var string $AIOSEOP_PLUGIN_DIR Plugin folder directory path. Eg. `C:\WebProjects\UW-WPDev-aioseop\src-plugins/all-in-one-seo-pack/`
|
239 |
+
*/
|
240 |
+
define( 'AIOSEOP_PLUGIN_DIR', plugin_dir_path( AIOSEO_PLUGIN_FILE ) );
|
241 |
+
}
|
242 |
+
|
243 |
+
// Defines constants that haven't been defined.
|
244 |
+
// Keep `! defined()` for development purposes to possibly separate plugin development from other plugins.
|
245 |
+
// DEV NOTE: This may not be practical. WP still requires AIOSEOP to be in the plugins folder in order to be detected.
|
246 |
+
if ( ! defined( 'AIOSEOP_PLUGIN_DIRNAME' ) ) {
|
247 |
+
|
248 |
+
/**
|
249 |
+
* Plugin Directory Name
|
250 |
+
*
|
251 |
+
* @since ?
|
252 |
+
*
|
253 |
+
* @var string $AIOSEOP_PLUGIN_DIRNAME Plugin folder/directory name. Eg. `all-in-one-seo-pack`
|
254 |
+
*/
|
255 |
+
define( 'AIOSEOP_PLUGIN_DIRNAME', dirname( plugin_basename( AIOSEO_PLUGIN_FILE ) ) );
|
256 |
+
}
|
257 |
+
if ( ! defined( 'AIOSEOP_PLUGIN_URL' ) ) {
|
258 |
+
|
259 |
+
/**
|
260 |
+
* Plugin URL
|
261 |
+
*
|
262 |
+
* @since ?
|
263 |
+
*
|
264 |
+
* @var string $AIOSEOP_PLUGIN_URL Plugin directory url. Eg `http://aioseop.test/wp-content/plugins/all-in-one-seo-pack/`
|
265 |
+
*/
|
266 |
+
define( 'AIOSEOP_PLUGIN_URL', plugin_dir_url( AIOSEO_PLUGIN_FILE ) );
|
267 |
+
}
|
268 |
+
if ( ! defined( 'AIOSEOP_PLUGIN_IMAGES_URL' ) ) {
|
269 |
+
|
270 |
+
/**
|
271 |
+
* Plugin Images URL
|
272 |
+
*
|
273 |
+
* @since ?
|
274 |
+
*
|
275 |
+
* @var string $AIOSEOP_PLUGIN_IMAGES_URL URL location for the plugin's image directory. Eg. `http://aioseop.test/wp-content/plugins/all-in-one-seo-pack/images/`
|
276 |
+
*/
|
277 |
+
define( 'AIOSEOP_PLUGIN_IMAGES_URL', plugin_dir_url( AIOSEO_PLUGIN_FILE ) . 'images/' );
|
278 |
+
}
|
279 |
+
if ( ! defined( 'AIOSEOP_BASELINE_MEM_LIMIT' ) ) {
|
280 |
+
|
281 |
+
/**
|
282 |
+
* Plugin Baseline Memory Limit
|
283 |
+
*
|
284 |
+
* @since ?
|
285 |
+
*
|
286 |
+
* @var string $AIOSEOP_BASELINE_MEM_LIMIT The memory limit to set the ini config to.
|
287 |
+
*/
|
288 |
+
define( 'AIOSEOP_BASELINE_MEM_LIMIT', '256M' );
|
289 |
+
}
|
290 |
+
|
291 |
+
// TODO Is this still necessary? These should already be defined by WP before plugins_loaded hook occurs.
|
292 |
+
if ( ! defined( 'WP_CONTENT_URL' ) ) {
|
293 |
+
define( 'WP_CONTENT_URL', site_url() . '/wp-content' );
|
294 |
+
}
|
295 |
+
if ( ! defined( 'WP_ADMIN_URL' ) ) {
|
296 |
+
define( 'WP_ADMIN_URL', site_url() . '/wp-admin' );
|
297 |
+
}
|
298 |
+
if ( ! defined( 'WP_CONTENT_DIR' ) ) {
|
299 |
+
define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
|
300 |
+
}
|
301 |
+
if ( ! defined( 'WP_PLUGIN_URL' ) ) {
|
302 |
+
define( 'WP_PLUGIN_URL', WP_CONTENT_URL . '/plugins' );
|
303 |
+
}
|
304 |
+
if ( ! defined( 'WP_PLUGIN_DIR' ) ) {
|
305 |
+
define( 'WP_PLUGIN_DIR', WP_CONTENT_DIR . '/plugins' );
|
306 |
+
}
|
307 |
+
}
|
308 |
+
|
309 |
+
/**
|
310 |
+
* Handles require_once files.
|
311 |
+
*
|
312 |
+
* @ignore
|
313 |
+
*
|
314 |
+
* @since 3.4
|
315 |
+
*
|
316 |
+
* @access private
|
317 |
+
*/
|
318 |
+
private function _requires() {
|
319 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/aioseop_functions.php';
|
320 |
+
require_once AIOSEOP_PLUGIN_DIR . 'aioseop_class.php';
|
321 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/aioseop_updates_class.php';
|
322 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/commonstrings.php';
|
323 |
+
require_once AIOSEOP_PLUGIN_DIR . 'admin/display/general-metaboxes.php';
|
324 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/aiosp_common.php';
|
325 |
+
require_once AIOSEOP_PLUGIN_DIR . 'admin/meta_import.php';
|
326 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/translations.php';
|
327 |
+
require_once AIOSEOP_PLUGIN_DIR . 'public/opengraph.php';
|
328 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/compatibility/abstract/aiosep_compatible.php';
|
329 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/compatibility/compat-init.php';
|
330 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/compatibility/php-functions.php';
|
331 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/compatibility/class-aioseop-php-functions.php';
|
332 |
+
require_once AIOSEOP_PLUGIN_DIR . 'public/front.php';
|
333 |
+
require_once AIOSEOP_PLUGIN_DIR . 'public/google-analytics.php';
|
334 |
+
require_once AIOSEOP_PLUGIN_DIR . 'admin/display/welcome.php';
|
335 |
+
require_once AIOSEOP_PLUGIN_DIR . 'admin/display/dashboard_widget.php';
|
336 |
+
require_once AIOSEOP_PLUGIN_DIR . 'admin/display/menu.php';
|
337 |
+
require_once AIOSEOP_PLUGIN_DIR . 'admin/class-aioseop-notices.php';
|
338 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/schema-builder.php';
|
339 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/admin/class-aioseop-link-attributes.php';
|
340 |
+
require_once( AIOSEOP_PLUGIN_DIR . 'inc/admin/class-aioseop-education.php' );
|
341 |
+
require_once( AIOSEOP_PLUGIN_DIR . 'inc/admin/views/class-aioseop-flyout.php' );
|
342 |
+
require_once( AIOSEOP_PLUGIN_DIR . 'inc/admin/views/class-aioseop-about.php' );
|
343 |
+
|
344 |
+
// Loads pro files and other pro init stuff.
|
345 |
+
if ( AIOSEOPPRO ) {
|
346 |
+
require_once AIOSEOP_PLUGIN_DIR . 'pro/class-aioseop-pro-init.php';
|
347 |
+
}
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Set ini memory limit.
|
352 |
+
*
|
353 |
+
* Set by the Performance settings to adjust the memory limit on the system ini config.
|
354 |
+
*
|
355 |
+
* TODO This could be moved to the performance module, but may need the ability to fire early (before other operations occur).
|
356 |
+
* TODO Should this also set the execution time even if the mem_limit is empty (both are set by the same module options).
|
357 |
+
* TODO Add Try/Catch for ini_set() & ini_time_limit().
|
358 |
+
*
|
359 |
+
* @since 3.4
|
360 |
+
*
|
361 |
+
* @param string $memory_limit Amount of memory to set the memory limit to.
|
362 |
+
* @param string $execution_time Amount of time to set the timeout to.
|
363 |
+
* @return string
|
364 |
+
*/
|
365 |
+
private function set_mem_limit( $memory_limit, $execution_time ) {
|
366 |
+
// @codingStandardsIgnoreStart
|
367 |
+
$aioseop_mem_limit = @ini_get( 'memory_limit' );
|
368 |
+
// @codingStandardsIgnoreEnd
|
369 |
+
|
370 |
+
if ( ! empty( $memory_limit ) ) {
|
371 |
+
if ( ! empty( $execution_time ) ) {
|
372 |
+
// @codingStandardsIgnoreStart
|
373 |
+
@ini_set( 'max_execution_time', (int) $execution_time );
|
374 |
+
@set_time_limit( (int) $execution_time );
|
375 |
+
// @codingStandardsIgnoreEnd
|
376 |
+
}
|
377 |
+
} else {
|
378 |
+
$aioseop_mem_limit = $this->convert_bytestring( $aioseop_mem_limit );
|
379 |
+
if ( ( $aioseop_mem_limit > 0 ) && ( $aioseop_mem_limit < AIOSEOP_BASELINE_MEM_LIMIT ) ) {
|
380 |
+
$aioseop_mem_limit = AIOSEOP_BASELINE_MEM_LIMIT;
|
381 |
+
}
|
382 |
+
}
|
383 |
+
|
384 |
+
if ( ! empty( $aioseop_mem_limit ) ) {
|
385 |
+
if ( ! is_int( $aioseop_mem_limit ) ) {
|
386 |
+
$aioseop_mem_limit = $this->convert_bytestring( $aioseop_mem_limit );
|
387 |
+
}
|
388 |
+
if ( ( $aioseop_mem_limit > 0 ) && ( $aioseop_mem_limit <= AIOSEOP_BASELINE_MEM_LIMIT ) ) {
|
389 |
+
// @codingStandardsIgnoreStart
|
390 |
+
@ini_set( 'memory_limit', $aioseop_mem_limit );
|
391 |
+
// @codingStandardsIgnoreEnd
|
392 |
+
}
|
393 |
+
}
|
394 |
+
|
395 |
+
return $aioseop_mem_limit;
|
396 |
+
}
|
397 |
+
|
398 |
+
/**
|
399 |
+
* Add Hooks.
|
400 |
+
*
|
401 |
+
* @since 3.4
|
402 |
+
*/
|
403 |
+
public function add_hooks() {
|
404 |
+
global $wp_version;
|
405 |
+
|
406 |
+
add_action( 'plugins_loaded', array( $this, 'add_cap' ) );
|
407 |
+
|
408 |
+
add_action( 'init', 'aioseop_load_modules', 1 );
|
409 |
+
|
410 |
+
if ( aioseop_option_isset( 'aiosp_unprotect_meta' ) ) {
|
411 |
+
add_filter( 'is_protected_meta', 'aioseop_unprotect_meta', 10, 3 );
|
412 |
+
}
|
413 |
+
|
414 |
+
// phpcs:ignore Squiz.Commenting.InlineComment.InvalidEndChar
|
415 |
+
// add_action( 'after_setup_theme', 'aioseop_load_modules' );
|
416 |
+
|
417 |
+
if ( AIOSEOPPRO ) {
|
418 |
+
remove_action( 'admin_head', 'disable_all_in_one_free', 1 );
|
419 |
+
add_action( 'admin_head', array( $this, 'disable_all_in_one_free' ), 1 );
|
420 |
+
}
|
421 |
+
|
422 |
+
// TODO vv Move to aioseop_admin class.
|
423 |
+
add_filter( 'plugin_row_meta', array( $this, 'plugin_row_meta' ), 10, 2 );
|
424 |
+
add_filter( 'plugin_action_links_' . AIOSEOP_PLUGIN_BASENAME, array( $this, 'add_action_links' ), 10, 2 );
|
425 |
+
if ( is_admin() || defined( 'AIOSEOP_UNIT_TESTING' ) ) {
|
426 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_styles' ) );
|
427 |
+
|
428 |
+
$file_dir = AIOSEOP_PLUGIN_DIR . 'all_in_one_seo_pack.php';
|
429 |
+
register_activation_hook( $file_dir, array( 'AIOSEOP_Core', 'activate' ) );
|
430 |
+
|
431 |
+
// TODO Move AJAX to aioseop_admin class, and could be a separate function hooked onto admin_init.
|
432 |
+
add_action( 'wp_ajax_aioseop_ajax_save_meta', 'aioseop_ajax_save_meta' );
|
433 |
+
add_action( 'wp_ajax_aioseop_ajax_save_url', 'aioseop_ajax_save_url' );
|
434 |
+
add_action( 'wp_ajax_aioseop_ajax_delete_url', 'aioseop_ajax_delete_url' );
|
435 |
+
add_action( 'wp_ajax_aioseop_ajax_scan_header', 'aioseop_ajax_scan_header' );
|
436 |
+
add_action( 'wp_ajax_aioseop_ajax_save_settings', 'aioseop_ajax_save_settings' );
|
437 |
+
add_action( 'wp_ajax_aioseop_ajax_get_menu_links', 'aioseop_ajax_get_menu_links' );
|
438 |
+
add_action( 'wp_ajax_aioseo_dismiss_yst_notice', 'aioseop_update_yst_detected_notice' );
|
439 |
+
add_action( 'wp_ajax_aioseo_dismiss_visibility_notice', 'aioseop_update_user_visibilitynotice' );
|
440 |
+
add_action( 'wp_ajax_aioseo_dismiss_woo_upgrade_notice', 'aioseop_woo_upgrade_notice_dismissed' );
|
441 |
+
add_action( 'wp_ajax_aioseop_install_plugin', array( 'AIOSEOP_About', 'install_plugin' ) );
|
442 |
+
add_action( 'wp_ajax_aioseop_activate_plugin', array( 'AIOSEOP_About', 'activate_plugin' ) );
|
443 |
+
|
444 |
+
if ( AIOSEOPPRO ) {
|
445 |
+
add_action( 'wp_ajax_aioseop_ajax_facebook_debug', 'aioseop_ajax_facebook_debug' );
|
446 |
+
}
|
447 |
+
}
|
448 |
+
|
449 |
+
add_action( 'wp_enqueue_scripts', array( $this, 'front_enqueue_styles' ) );
|
450 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'front_enqueue_styles' ) );
|
451 |
+
|
452 |
+
// Low priority allows us to override implementations of other plugins.
|
453 |
+
add_action( 'wp_enqueue_editor', array( 'AIOSEOP_Link_Attributes', 'enqueue_link_attributes_classic_editor' ), 999999 );
|
454 |
+
|
455 |
+
add_action( 'admin_init', array( 'AIOSEOP_Link_Attributes', 'register_link_attributes_gutenberg_editor' ) );
|
456 |
+
|
457 |
+
if ( version_compare( $wp_version, '5.0', '>=' ) ) {
|
458 |
+
add_action( 'enqueue_block_editor_assets', array( 'AIOSEOP_Link_Attributes', 'enqueue_link_attributes_gutenberg_editor' ) );
|
459 |
+
}
|
460 |
+
|
461 |
+
// TODO ^^ Move to aioseop_admin class.
|
462 |
+
}
|
463 |
+
|
464 |
+
/**
|
465 |
+
* AIOSEOP Activate
|
466 |
+
*
|
467 |
+
* @since ?
|
468 |
+
*/
|
469 |
+
public static function activate() {
|
470 |
+
// Check if we just got activated.
|
471 |
+
global $aiosp_activation;
|
472 |
+
$aiosp_activation = true;
|
473 |
+
|
474 |
+
// phpcs:disable
|
475 |
+
// require_once AIOSEOP_PLUGIN_DIR . 'admin/class-aioseop-notices.php';
|
476 |
+
// global $aioseop_notices;
|
477 |
+
// $aioseop_notices->reset_notice( 'review_plugin' );
|
478 |
+
// phpcs:enable
|
479 |
+
|
480 |
+
// These checks might be duplicated in the function being called.
|
481 |
+
if ( ! is_network_admin() || ! isset( $_GET['activate-multi'] ) ) {
|
482 |
+
set_transient( '_aioseop_activation_redirect', true, 30 ); // Sets 30 second transient for welcome screen redirect on activation.
|
483 |
+
}
|
484 |
+
|
485 |
+
delete_user_meta( get_current_user_id(), 'aioseop_yst_detected_notice_dismissed' );
|
486 |
+
|
487 |
+
if ( AIOSEOPPRO ) {
|
488 |
+
global $aioseop_options;
|
489 |
+
global $aioseop_update_checker;
|
490 |
+
|
491 |
+
$aioseop_update_checker->checkForUpdates();
|
492 |
+
|
493 |
+
if (
|
494 |
+
isset( $aioseop_options['modules']['aiosp_feature_manager_options']['aiosp_feature_manager_enable_video_sitemap'] ) &&
|
495 |
+
'on' === $aioseop_options['modules']['aiosp_feature_manager_options']['aiosp_feature_manager_enable_video_sitemap']
|
496 |
+
) {
|
497 |
+
$next_scan_timestamp = wp_next_scheduled( 'aiosp_video_sitemap_scan' );
|
498 |
+
if ( false !== $next_scan_timestamp && 10 < ( $next_scan_timestamp - time() ) ) {
|
499 |
+
// Reschedule cron job to avoid waiting for next (daily) scan.
|
500 |
+
wp_unschedule_event( $next_scan_timestamp, 'aiosp_video_sitemap_scan' );
|
501 |
+
$next_scan_timestamp = false;
|
502 |
+
}
|
503 |
+
|
504 |
+
if ( false === $next_scan_timestamp ) {
|
505 |
+
wp_schedule_single_event( time() + 10, 'aiosp_video_sitemap_scan' );
|
506 |
+
}
|
507 |
+
}
|
508 |
+
}
|
509 |
+
}
|
510 |
+
|
511 |
+
/**
|
512 |
+
* Disable AIOSEOP Free version.
|
513 |
+
*
|
514 |
+
* @since ?
|
515 |
+
*/
|
516 |
+
public function disable_all_in_one_free() {
|
517 |
+
if ( AIOSEOPPRO && is_plugin_active( 'all-in-one-seo-pack/all_in_one_seo_pack.php' ) ) {
|
518 |
+
deactivate_plugins( 'all-in-one-seo-pack/all_in_one_seo_pack.php' );
|
519 |
+
}
|
520 |
+
}
|
521 |
+
|
522 |
+
/**
|
523 |
+
* AIOSEOP Add Capabilities
|
524 |
+
*
|
525 |
+
* @since 2.3.6
|
526 |
+
*/
|
527 |
+
public function add_cap() {
|
528 |
+
$role = get_role( 'administrator' );
|
529 |
+
if ( is_object( $role ) ) {
|
530 |
+
$role->add_cap( 'aiosp_manage_seo' );
|
531 |
+
}
|
532 |
+
}
|
533 |
+
|
534 |
+
/**
|
535 |
+
* Scan Post Header
|
536 |
+
*
|
537 |
+
* TODO Move to Opengraph module when AJAX-like operations in \AIOSEOP_Core::init() are refactored as well.
|
538 |
+
*
|
539 |
+
* @since ?
|
540 |
+
*/
|
541 |
+
public function scan_post_header() {
|
542 |
+
require_once ABSPATH . WPINC . '/default-filters.php';
|
543 |
+
global $wp_query;
|
544 |
+
$wp_query->query_vars['paged'] = 0;
|
545 |
+
query_posts( 'post_type=post&posts_per_page=1' );
|
546 |
+
|
547 |
+
if ( have_posts() ) {
|
548 |
+
the_post();
|
549 |
+
}
|
550 |
+
}
|
551 |
+
|
552 |
+
/**
|
553 |
+
* AIOSEOP Convert Bytestring
|
554 |
+
*
|
555 |
+
* TODO Should this be in a functions file?
|
556 |
+
*
|
557 |
+
* @since ?
|
558 |
+
*
|
559 |
+
* @param $byte_string
|
560 |
+
* @return int
|
561 |
+
*/
|
562 |
+
private function convert_bytestring( $byte_string ) {
|
563 |
+
$num = 0;
|
564 |
+
preg_match( '/^\s*([0-9.]+)\s*([KMGTPE])B?\s*$/i', $byte_string, $matches );
|
565 |
+
if ( ! empty( $matches ) ) {
|
566 |
+
$num = (float) $matches[1];
|
567 |
+
switch ( strtoupper( $matches[2] ) ) {
|
568 |
+
case 'E':
|
569 |
+
$num *= 1024;
|
570 |
+
// fall through.
|
571 |
+
case 'P':
|
572 |
+
$num *= 1024;
|
573 |
+
// fall through.
|
574 |
+
case 'T':
|
575 |
+
$num *= 1024;
|
576 |
+
// fall through.
|
577 |
+
case 'G':
|
578 |
+
$num *= 1024;
|
579 |
+
// fall through.
|
580 |
+
case 'M':
|
581 |
+
$num *= 1024;
|
582 |
+
// fall through.
|
583 |
+
case 'K':
|
584 |
+
$num *= 1024;
|
585 |
+
}
|
586 |
+
}
|
587 |
+
|
588 |
+
return intval( $num );
|
589 |
+
}
|
590 |
+
|
591 |
+
/**
|
592 |
+
* AIOSEOP Plugin Row Meta
|
593 |
+
*
|
594 |
+
* @since 2.3.3
|
595 |
+
*
|
596 |
+
* @uses `plugin_row_meta` hook.
|
597 |
+
* @link https://developer.wordpress.org/reference/hooks/plugin_row_meta/
|
598 |
+
*
|
599 |
+
* @param $actions
|
600 |
+
* @param $plugin_file
|
601 |
+
* @return array
|
602 |
+
*/
|
603 |
+
public function plugin_row_meta( $actions, $plugin_file ) {
|
604 |
+
$medium = ( AIOSEOPPRO ) ? 'proplugin' : 'liteplugin';
|
605 |
+
$action_links = array(
|
606 |
+
'settings' => array(
|
607 |
+
/* translators: This is an action link users can click to open a feature request/bug report on GitHub. */
|
608 |
+
'label' => __( 'Suggest a Feature', 'all-in-one-seo-pack' ),
|
609 |
+
'url' => 'https://semperplugins.com/suggest-a-feature/?utm_source=WordPress&utm_medium=' . $medium . '&utm_campaign=action-links&utm_content=Feature',
|
610 |
+
),
|
611 |
+
|
612 |
+
);
|
613 |
+
|
614 |
+
return $this->action_links( $actions, $plugin_file, $action_links, 'after' );
|
615 |
+
}
|
616 |
+
|
617 |
+
/**
|
618 |
+
* AIOSEOP Add Action Links
|
619 |
+
*
|
620 |
+
* Adds additional links to the plugin on the admin Plugins page.
|
621 |
+
*
|
622 |
+
* @since 2.3
|
623 |
+
*
|
624 |
+
* @param $actions
|
625 |
+
* @param $plugin_file
|
626 |
+
* @return array
|
627 |
+
*/
|
628 |
+
public function add_action_links( $actions, $plugin_file ) {
|
629 |
+
if ( ! is_array( $actions ) ) {
|
630 |
+
return $actions;
|
631 |
+
}
|
632 |
+
|
633 |
+
$aioseop_plugin_dirname = AIOSEOP_PLUGIN_DIRNAME;
|
634 |
+
$action_links = array(
|
635 |
+
'settings' => array(
|
636 |
+
/* translators: This is an action link users can click to open the General Settings menu. */
|
637 |
+
'label' => __( 'SEO Settings', 'all-in-one-seo-pack' ),
|
638 |
+
'url' => get_admin_url( null, "admin.php?page=$aioseop_plugin_dirname/aioseop_class.php" ),
|
639 |
+
),
|
640 |
+
|
641 |
+
'forum' => array(
|
642 |
+
/* translators: This is an action link users can click to open our premium support forum. */
|
643 |
+
'label' => __( 'Support', 'all-in-one-seo-pack' ),
|
644 |
+
'url' => 'https://semperplugins.com/contact/',
|
645 |
+
),
|
646 |
+
|
647 |
+
'docs' => array(
|
648 |
+
/* translators: This is an action link users can click to open our general documentation page. */
|
649 |
+
'label' => __( 'Documentation', 'all-in-one-seo-pack' ),
|
650 |
+
'url' => 'https://semperplugins.com/documentation/',
|
651 |
+
),
|
652 |
+
|
653 |
+
);
|
654 |
+
|
655 |
+
unset( $actions['edit'] );
|
656 |
+
|
657 |
+
if ( ! AIOSEOPPRO ) {
|
658 |
+
$action_links['proupgrade'] = array(
|
659 |
+
/* translators: This is an action link users can click to purchase a license for All in One SEO Pack Pro. */
|
660 |
+
'label' => __( 'Upgrade to Pro', 'all-in-one-seo-pack' ),
|
661 |
+
'url' => aioseop_get_utm_url( 'plugins-menu' ),
|
662 |
+
|
663 |
+
);
|
664 |
+
}
|
665 |
+
|
666 |
+
return $this->action_links( $actions, $plugin_file, $action_links, 'before' );
|
667 |
+
}
|
668 |
+
|
669 |
+
/**
|
670 |
+
* AIOSEOP Action Links
|
671 |
+
*
|
672 |
+
* @since 2.3
|
673 |
+
*
|
674 |
+
* @param $actions
|
675 |
+
* @param $plugin_file
|
676 |
+
* @param array $action_links
|
677 |
+
* @param string $position
|
678 |
+
* @return array
|
679 |
+
*/
|
680 |
+
public function action_links( $actions, $plugin_file, $action_links = array(), $position = 'after' ) {
|
681 |
+
static $plugin;
|
682 |
+
|
683 |
+
if ( ! isset( $plugin ) ) {
|
684 |
+
$plugin = AIOSEOP_PLUGIN_BASENAME;
|
685 |
+
}
|
686 |
+
if ( $plugin === $plugin_file && ! empty( $action_links ) ) {
|
687 |
+
foreach ( $action_links as $key => $value ) {
|
688 |
+
$link = array( $key => '<a href="' . $value['url'] . '">' . $value['label'] . '</a>' );
|
689 |
+
if ( 'after' === $position ) {
|
690 |
+
$actions = array_merge( $actions, $link );
|
691 |
+
} else {
|
692 |
+
$actions = array_merge( $link, $actions );
|
693 |
+
}
|
694 |
+
}
|
695 |
+
}
|
696 |
+
|
697 |
+
return $actions;
|
698 |
+
}
|
699 |
+
|
700 |
+
/**
|
701 |
+
* AIOSEOP's Welcome Page
|
702 |
+
*
|
703 |
+
* @since ?
|
704 |
+
*/
|
705 |
+
public function aioseop_welcome() {
|
706 |
+
if ( get_transient( '_aioseop_activation_redirect' ) ) {
|
707 |
+
$aioseop_welcome = new aioseop_welcome();
|
708 |
+
delete_transient( '_aioseop_activation_redirect' );
|
709 |
+
$aioseop_welcome->init( true );
|
710 |
+
}
|
711 |
+
}
|
712 |
+
|
713 |
+
/**
|
714 |
+
* Admin Notices Already Defined
|
715 |
+
*
|
716 |
+
* @since ?
|
717 |
+
*
|
718 |
+
* @throws ReflectionException
|
719 |
+
*/
|
720 |
+
public function admin_notices_already_defined() {
|
721 |
+
$text = '';
|
722 |
+
if ( class_exists( 'ReflectionClass' ) ) {
|
723 |
+
$_r = new ReflectionClass( 'All_in_One_SEO_Pack' );
|
724 |
+
$text = ' in ' . $_r->getFileName();
|
725 |
+
}
|
726 |
+
|
727 |
+
echo '<div class="error">The All In One SEO Pack class is already defined' . $text . ', preventing All In One SEO Pack from loading.</div>';
|
728 |
+
}
|
729 |
+
|
730 |
+
/**
|
731 |
+
* Review Plugin Notice
|
732 |
+
*
|
733 |
+
* Activates the review notice.
|
734 |
+
* Note: This couldn't be used directly in `aioseop_init_class()` since ajax instances was causing
|
735 |
+
* the database options to reset.
|
736 |
+
*
|
737 |
+
* @since 3.0
|
738 |
+
*/
|
739 |
+
public function review_plugin_notice() {
|
740 |
+
global $aioseop_notices;
|
741 |
+
// $aioseop_notices->activate_notice( 'review_plugin' );
|
742 |
+
}
|
743 |
+
|
744 |
+
/**
|
745 |
+
* Enqueues stylesheets used in the admin area.
|
746 |
+
*
|
747 |
+
* @since 3.4.0
|
748 |
+
*
|
749 |
+
* @param string $hook_suffix
|
750 |
+
* @return void
|
751 |
+
*/
|
752 |
+
function admin_enqueue_styles( $hook_suffix ) {
|
753 |
+
if ( ! is_admin() ) {
|
754 |
+
return;
|
755 |
+
}
|
756 |
+
|
757 |
+
if ( ! wp_style_is( 'aioseop-font-icons', 'registered' ) && ! wp_style_is( 'aioseop-font-icons', 'enqueued' ) ) {
|
758 |
+
wp_enqueue_style(
|
759 |
+
'aioseop-font-icons',
|
760 |
+
AIOSEOP_PLUGIN_URL . 'css/aioseop-font-icons.css',
|
761 |
+
array(),
|
762 |
+
AIOSEOP_VERSION
|
763 |
+
);
|
764 |
+
}
|
765 |
+
|
766 |
+
if ( function_exists( 'is_rtl' ) && is_rtl() ) {
|
767 |
+
if ( ! wp_style_is( 'aioseop-font-icons-rtl', 'registered' ) && ! wp_style_is( 'aioseop-font-icons-rtl', 'enqueued' ) ) {
|
768 |
+
wp_enqueue_style(
|
769 |
+
'aioseop-font-icons-rtl',
|
770 |
+
AIOSEOP_PLUGIN_URL . 'css/aioseop-font-icons-rtl.css',
|
771 |
+
array(),
|
772 |
+
AIOSEOP_VERSION
|
773 |
+
);
|
774 |
+
}
|
775 |
+
}
|
776 |
+
}
|
777 |
+
|
778 |
+
/**
|
779 |
+
* Enqueues stylesheets used on the frontend.
|
780 |
+
*
|
781 |
+
* @since 3.4.0
|
782 |
+
*/
|
783 |
+
function front_enqueue_styles() {
|
784 |
+
wp_enqueue_style( 'aioseop-toolbar-menu', AIOSEOP_PLUGIN_URL . 'css/admin-toolbar-menu.css', null, AIOSEOP_VERSION, 'all' );
|
785 |
+
}
|
786 |
+
}
|
css/admin-notice.css
CHANGED
@@ -6,17 +6,34 @@
|
|
6 |
* @since 3.0
|
7 |
*/
|
8 |
|
|
|
|
|
|
|
|
|
9 |
.aioseop-notice-delay {
|
10 |
-
|
11 |
-
|
12 |
}
|
13 |
|
14 |
.aioseop-notice-delay.aioseop-delay-0.button-primary.button-orange {
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
22 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
* @since 3.0
|
7 |
*/
|
8 |
|
9 |
+
.aioseop-notice {
|
10 |
+
padding: 10px 5px 0 5px;
|
11 |
+
}
|
12 |
+
|
13 |
.aioseop-notice-delay {
|
14 |
+
display: inherit;
|
15 |
+
/* width: fit-content; */
|
16 |
}
|
17 |
|
18 |
.aioseop-notice-delay.aioseop-delay-0.button-primary.button-orange {
|
19 |
+
background-color: #d54e21;
|
20 |
+
border-color: #aa3e1a;
|
21 |
+
-webkit-box-shadow: 0 1px 0 #aa3e1a;
|
22 |
+
box-shadow: 0 1px 0 #aa3e1a;
|
23 |
+
color: #fff;
|
24 |
+
text-decoration: none;
|
25 |
+
text-shadow: 0 -1px 1px #d54e21, 1px 0 1px #d54e21, 0 1px 1px #d54e21, -1px 0 1px #d54e21;
|
26 |
+
}
|
27 |
+
|
28 |
+
.aioseop-notice-delay.aioseop-delay-0.button-primary.button-orange:hover {
|
29 |
+
background-color: #bc3508;
|
30 |
}
|
31 |
+
|
32 |
+
.aioseop-notice-indented {
|
33 |
+
margin-left: 50px;
|
34 |
+
padding: 5px 0;
|
35 |
+
}
|
36 |
+
|
37 |
+
.aioseop-notice-indented ul {
|
38 |
+
list-style: circle inside;
|
39 |
+
}
|
css/admin-toolbar-menu.css
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#wp-admin-bar-aioseop-pro-upgrade a {
|
2 |
+
font-style: italic;
|
3 |
+
color: orange !important;
|
4 |
+
}
|
5 |
+
|
6 |
+
.aioseop-admin-bar-logo {
|
7 |
+
float: left;
|
8 |
+
top: 3px;
|
9 |
+
background-repeat: no-repeat;
|
10 |
+
background-position: 0 6px;
|
11 |
+
background-size: 20px;
|
12 |
+
color: #a0a5aa;
|
13 |
+
content: url("data:image/svg+xml,%3Csvg width='20px' height='20px' viewBox='0 0 516 516' xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' clip-rule='evenodd' stroke-linejoin='round' stroke-miterlimit='2' fill='%23a0a5aa'%3E%3Cpath d='M313.09629 56.767c15.572 4.282 30.418 10.326 44.308 17.903l49.035-35.771 68.022 68.023-35.24 48.172c7.827 13.776 14.13 28.529 18.681 44.029l57.95 9.064v96.198l-56.968 8.832c-4.446 16.178-10.792 31.571-18.785 45.925l36.485 49.874-68.022 68.023-50.057-36.517c-13.54 7.493-28 13.523-43.166 17.878l-8.92 57.538h-96.199l-8.949-57.218c-15.633-4.394-30.525-10.565-44.443-18.282l-47.249 34.468-68.023-68.022 34.305-46.894c-7.89-14.015-14.206-29.031-18.71-44.81l-57.151-8.86v-96.199l56.983-8.912c4.331-15.347 10.377-29.979 17.916-43.674l-35.466-48.48 68.023-68.023 48.061 35.061c13.641-7.693 28.234-13.895 43.554-18.384L208.09729 0h96.198l8.801 56.767zm-38.657 342.655c70.789-8.277 125.797-68.527 125.797-141.523 0-78.644-63.849-142.493-142.493-142.493s-142.493 63.849-142.493 142.493c0 73.293 55.457 133.737 126.663 141.621v-44.549c-36.12-7.515-63.294-39.554-63.294-77.89v-48.998h33.367v-50.298c0-5.447 4.423-9.87 9.871-9.87 5.447 0 9.87 4.423 9.87 9.87v50.298h52.726v-50.298c0-5.447 4.423-9.87 9.87-9.87 5.448 0 9.87 4.423 9.87 9.87v50.298h33.54v48.998c0 38.336-27.174 70.375-63.294 77.89v44.451z'/%3E%3C/svg%3E%0A");
|
14 |
+
}
|
css/admin/aioseop-about.css
ADDED
@@ -0,0 +1,5361 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
|
3 |
+
.choices {
|
4 |
+
position: relative;
|
5 |
+
margin-bottom: 24px;
|
6 |
+
}
|
7 |
+
|
8 |
+
.choices:focus {
|
9 |
+
outline: none;
|
10 |
+
}
|
11 |
+
|
12 |
+
.choices:last-child {
|
13 |
+
margin-bottom: 0;
|
14 |
+
}
|
15 |
+
|
16 |
+
.choices.is-disabled .choices__inner,
|
17 |
+
.choices.is-disabled .choices__input {
|
18 |
+
background-color: #eaeaea;
|
19 |
+
cursor: not-allowed;
|
20 |
+
user-select: none;
|
21 |
+
}
|
22 |
+
|
23 |
+
.choices.is-disabled .choices__item {
|
24 |
+
cursor: not-allowed;
|
25 |
+
}
|
26 |
+
|
27 |
+
.choices [hidden] {
|
28 |
+
display: none !important;
|
29 |
+
}
|
30 |
+
|
31 |
+
.choices input[type=text].choices__input {
|
32 |
+
width: calc(100% - 20px) !important;
|
33 |
+
margin: 10px !important;
|
34 |
+
padding: 7px 12px !important;
|
35 |
+
box-sizing: border-box !important;
|
36 |
+
border: 1px solid #ddd !important;
|
37 |
+
border-radius: 3px !important;
|
38 |
+
}
|
39 |
+
|
40 |
+
.choices input[type=text].choices__input:focus {
|
41 |
+
border: 1px solid #016AAB !important;
|
42 |
+
box-shadow: 0 0 0 1px #016AAB !important;
|
43 |
+
outline: none !important;
|
44 |
+
}
|
45 |
+
|
46 |
+
.choices[data-type*="select-one"] {
|
47 |
+
cursor: pointer;
|
48 |
+
}
|
49 |
+
|
50 |
+
.choices[data-type*="select-one"] .choices__input {
|
51 |
+
display: block;
|
52 |
+
width: 100% !important;
|
53 |
+
padding: 10px !important;
|
54 |
+
border-bottom: 1px solid #ddd !important;
|
55 |
+
background-color: #FFFFFF;
|
56 |
+
margin: 0 !important;
|
57 |
+
}
|
58 |
+
|
59 |
+
.choices[data-type*="select-one"] .choices__button {
|
60 |
+
background-image: url("../images/cross-inverse.svg");
|
61 |
+
padding: 0;
|
62 |
+
background-size: 8px;
|
63 |
+
position: absolute;
|
64 |
+
top: 50%;
|
65 |
+
right: 0;
|
66 |
+
margin-top: -10px;
|
67 |
+
margin-right: 25px;
|
68 |
+
height: 20px;
|
69 |
+
width: 20px;
|
70 |
+
border-radius: 10em;
|
71 |
+
opacity: .5;
|
72 |
+
}
|
73 |
+
|
74 |
+
.choices[data-type*="select-one"] .choices__button:hover,
|
75 |
+
.choices[data-type*="select-one"] .choices__button:focus {
|
76 |
+
opacity: 1;
|
77 |
+
}
|
78 |
+
|
79 |
+
.choices[data-type*="select-one"] .choices__button:focus {
|
80 |
+
box-shadow: 0 0 0 2px #0e6cad;
|
81 |
+
}
|
82 |
+
|
83 |
+
.choices[data-type*="select-one"] .choices__item[data-value=''] .choices__button {
|
84 |
+
display: none;
|
85 |
+
}
|
86 |
+
|
87 |
+
.choices[data-type*="select-one"]:after {
|
88 |
+
content: "";
|
89 |
+
height: 0;
|
90 |
+
width: 0;
|
91 |
+
border-style: solid;
|
92 |
+
border-color: currentColor transparent transparent transparent;
|
93 |
+
border-width: 5px;
|
94 |
+
position: absolute;
|
95 |
+
right: 11.5px;
|
96 |
+
top: 50%;
|
97 |
+
margin-top: -2.5px;
|
98 |
+
pointer-events: none;
|
99 |
+
}
|
100 |
+
|
101 |
+
.choices[data-type*="select-one"].is-open:after {
|
102 |
+
border-color: transparent transparent currentColor transparent;
|
103 |
+
margin-top: -7.5px;
|
104 |
+
}
|
105 |
+
|
106 |
+
.choices[data-type*="select-one"][dir="rtl"]:after {
|
107 |
+
left: 11.5px;
|
108 |
+
right: auto;
|
109 |
+
}
|
110 |
+
|
111 |
+
.choices[data-type*="select-one"][dir="rtl"] .choices__button {
|
112 |
+
right: auto;
|
113 |
+
left: 0;
|
114 |
+
margin-left: 25px;
|
115 |
+
margin-right: 0;
|
116 |
+
}
|
117 |
+
|
118 |
+
.choices[data-type*="select-multiple"] .choices__inner {
|
119 |
+
padding-right: 24px;
|
120 |
+
}
|
121 |
+
|
122 |
+
.choices[data-type*="select-multiple"]:after {
|
123 |
+
content: "";
|
124 |
+
height: 0;
|
125 |
+
width: 0;
|
126 |
+
border-style: solid;
|
127 |
+
border-color: currentColor transparent transparent transparent;
|
128 |
+
border-width: 5px;
|
129 |
+
position: absolute;
|
130 |
+
right: 11.5px;
|
131 |
+
top: 1em;
|
132 |
+
pointer-events: none;
|
133 |
+
}
|
134 |
+
|
135 |
+
.choices[data-type*="select-multiple"].is-open:after {
|
136 |
+
border-color: transparent transparent currentColor transparent;
|
137 |
+
margin-top: -7.5px;
|
138 |
+
}
|
139 |
+
|
140 |
+
.choices[data-type*="select-multiple"] .choices__inner,
|
141 |
+
.choices[data-type*="text"] .choices__inner {
|
142 |
+
cursor: text;
|
143 |
+
}
|
144 |
+
|
145 |
+
.choices[data-type*="select-multiple"] .choices__button,
|
146 |
+
.choices[data-type*="text"] .choices__button {
|
147 |
+
position: relative;
|
148 |
+
display: inline-block;
|
149 |
+
vertical-align: baseline;
|
150 |
+
margin-top: 0;
|
151 |
+
margin-right: -4px;
|
152 |
+
margin-bottom: 0;
|
153 |
+
margin-left: 8px;
|
154 |
+
padding: 1px;
|
155 |
+
padding-left: 16px;
|
156 |
+
border-left: 1px solid #0a4f7e;
|
157 |
+
background-color: transparent;
|
158 |
+
background-image: url("../images/cross.svg");
|
159 |
+
background-size: 8px;
|
160 |
+
background-position: center center;
|
161 |
+
background-repeat: no-repeat;
|
162 |
+
width: 8px;
|
163 |
+
line-height: 1;
|
164 |
+
opacity: .75;
|
165 |
+
border-radius: 0;
|
166 |
+
}
|
167 |
+
|
168 |
+
.choices[data-type*="select-multiple"] .choices__button:hover,
|
169 |
+
.choices[data-type*="select-multiple"] .choices__button:focus,
|
170 |
+
.choices[data-type*="text"] .choices__button:hover,
|
171 |
+
.choices[data-type*="text"] .choices__button:focus {
|
172 |
+
opacity: 1;
|
173 |
+
}
|
174 |
+
|
175 |
+
.choices__inner {
|
176 |
+
display: inline-block;
|
177 |
+
vertical-align: top;
|
178 |
+
width: 100%;
|
179 |
+
background-color: #fff;
|
180 |
+
padding: 4px 7.5px 1px;
|
181 |
+
border: 1px solid #ddd;
|
182 |
+
border-radius: 3px;
|
183 |
+
min-height: 35px;
|
184 |
+
overflow: hidden;
|
185 |
+
}
|
186 |
+
|
187 |
+
.is-open .choices__inner {
|
188 |
+
border-bottom-left-radius: 0;
|
189 |
+
border-bottom-right-radius: 0;
|
190 |
+
}
|
191 |
+
|
192 |
+
.is-open.is-flipped .choices__inner {
|
193 |
+
border-radius: 0 0 3px 3px;
|
194 |
+
}
|
195 |
+
|
196 |
+
.is-focused .choices__inner,
|
197 |
+
.is-open .choices__inner {
|
198 |
+
border-color: #016AAB;
|
199 |
+
box-shadow: 0 0 0 1px #016AAB;
|
200 |
+
outline: none;
|
201 |
+
}
|
202 |
+
|
203 |
+
.is-flipped.is-open .choices__inner {
|
204 |
+
border-color: #016AAB;
|
205 |
+
box-shadow: 0 0 0 1px #016AAB;
|
206 |
+
outline: none;
|
207 |
+
}
|
208 |
+
|
209 |
+
.choices__list {
|
210 |
+
margin: 0;
|
211 |
+
padding-left: 0;
|
212 |
+
list-style: none;
|
213 |
+
}
|
214 |
+
|
215 |
+
.choices__list--single {
|
216 |
+
display: inline-block;
|
217 |
+
vertical-align: baseline;
|
218 |
+
width: 100%;
|
219 |
+
padding: 4px 16px 4px 0;
|
220 |
+
font-size: 0.875em;
|
221 |
+
}
|
222 |
+
|
223 |
+
.choices__list--single .choices__item {
|
224 |
+
width: 100%;
|
225 |
+
}
|
226 |
+
|
227 |
+
.choices__list--multiple {
|
228 |
+
display: inline;
|
229 |
+
}
|
230 |
+
|
231 |
+
.choices__list--multiple .choices__item {
|
232 |
+
display: inline-block;
|
233 |
+
vertical-align: middle;
|
234 |
+
border-radius: 3px;
|
235 |
+
padding: 4px 10px;
|
236 |
+
font-size: .75em;
|
237 |
+
line-height: 1.3;
|
238 |
+
font-weight: 500;
|
239 |
+
margin-right: 3px;
|
240 |
+
margin-top: 0px;
|
241 |
+
margin-bottom: 3px;
|
242 |
+
background-color: #0e6cad;
|
243 |
+
border: 1px solid #0c5d95;
|
244 |
+
color: #FFFFFF;
|
245 |
+
word-break: break-all;
|
246 |
+
}
|
247 |
+
|
248 |
+
.choices__list--multiple .choices__item[data-deletable] {
|
249 |
+
padding-right: 5px;
|
250 |
+
}
|
251 |
+
|
252 |
+
.choices__list--multiple .choices__item.is-highlighted {
|
253 |
+
background-color: #0c5d95;
|
254 |
+
border: 1px solid #0a4f7e;
|
255 |
+
}
|
256 |
+
|
257 |
+
.choices__list--multiple+input[type=text].choices__input {
|
258 |
+
border: none !important;
|
259 |
+
margin: 0 !important;
|
260 |
+
width: 100% !important;
|
261 |
+
padding: 3px !important;
|
262 |
+
}
|
263 |
+
|
264 |
+
.choices__list--multiple+input[type=text].choices__input:focus {
|
265 |
+
box-shadow: none !important;
|
266 |
+
border: none !important;
|
267 |
+
}
|
268 |
+
|
269 |
+
.is-disabled .choices__list--multiple .choices__item {
|
270 |
+
background-color: #aaaaaa;
|
271 |
+
border: 1px solid #919191;
|
272 |
+
}
|
273 |
+
|
274 |
+
.choices__list--dropdown {
|
275 |
+
display: none;
|
276 |
+
z-index: 1;
|
277 |
+
position: absolute;
|
278 |
+
width: 100%;
|
279 |
+
background-color: #fff;
|
280 |
+
border: 1px solid #ddd;
|
281 |
+
top: 100%;
|
282 |
+
margin-top: -1px;
|
283 |
+
border-bottom-left-radius: 3px;
|
284 |
+
border-bottom-right-radius: 3px;
|
285 |
+
overflow: hidden;
|
286 |
+
word-break: break-all;
|
287 |
+
}
|
288 |
+
|
289 |
+
.choices__list--dropdown.is-active {
|
290 |
+
display: block;
|
291 |
+
}
|
292 |
+
|
293 |
+
.choices__list--dropdown .choices__list {
|
294 |
+
position: relative;
|
295 |
+
max-height: 300px;
|
296 |
+
overflow: auto;
|
297 |
+
-webkit-overflow-scrolling: touch;
|
298 |
+
will-change: scroll-position;
|
299 |
+
}
|
300 |
+
|
301 |
+
.choices__list--dropdown .choices__item {
|
302 |
+
position: relative;
|
303 |
+
vertical-align: top;
|
304 |
+
padding: 10px;
|
305 |
+
font-size: .875em;
|
306 |
+
}
|
307 |
+
|
308 |
+
@media (min-width: 640px) {
|
309 |
+
.choices__list--dropdown .choices__item--selectable {
|
310 |
+
padding-right: 100px;
|
311 |
+
}
|
312 |
+
.choices__list--dropdown .choices__item--selectable:after {
|
313 |
+
content: attr(data-select-text);
|
314 |
+
font-size: .75em;
|
315 |
+
opacity: 0;
|
316 |
+
position: absolute;
|
317 |
+
right: 10px;
|
318 |
+
top: 50%;
|
319 |
+
transform: translateY(-50%);
|
320 |
+
}
|
321 |
+
}
|
322 |
+
|
323 |
+
.choices__list--dropdown .choices__item--selectable.is-highlighted {
|
324 |
+
background-color: #f2f2f2;
|
325 |
+
}
|
326 |
+
|
327 |
+
.choices__list--dropdown .choices__item--selectable.is-highlighted:after {
|
328 |
+
opacity: .5;
|
329 |
+
}
|
330 |
+
|
331 |
+
.choices__list--dropdown .choices__placeholder {
|
332 |
+
display: none;
|
333 |
+
}
|
334 |
+
|
335 |
+
.is-open .choices__list--dropdown {
|
336 |
+
border-color: #016AAB;
|
337 |
+
border-top-color: #c4c4c4;
|
338 |
+
border-bottom-color: #fff;
|
339 |
+
box-shadow: 0 1px 0 1px #016AAB;
|
340 |
+
}
|
341 |
+
|
342 |
+
.is-open.is-flipped .choices__list--dropdown {
|
343 |
+
border-top-color: #fff;
|
344 |
+
border-bottom-color: #c4c4c4;
|
345 |
+
box-shadow: 0 -1px 0 1px #016AAB;
|
346 |
+
}
|
347 |
+
|
348 |
+
.is-flipped .choices__list--dropdown {
|
349 |
+
top: auto;
|
350 |
+
bottom: 100%;
|
351 |
+
margin-top: 0;
|
352 |
+
margin-bottom: -1px;
|
353 |
+
border-radius: .25rem .25rem 0 0;
|
354 |
+
}
|
355 |
+
|
356 |
+
.choices__item {
|
357 |
+
cursor: default;
|
358 |
+
}
|
359 |
+
|
360 |
+
.choices__item--selectable {
|
361 |
+
cursor: pointer;
|
362 |
+
}
|
363 |
+
|
364 |
+
.choices__item--disabled {
|
365 |
+
cursor: not-allowed;
|
366 |
+
user-select: none;
|
367 |
+
opacity: .5;
|
368 |
+
}
|
369 |
+
|
370 |
+
.choices__heading {
|
371 |
+
font-weight: 600;
|
372 |
+
font-size: .75em;
|
373 |
+
padding: 10px;
|
374 |
+
border-bottom: 1px solid #f7f7f7;
|
375 |
+
color: gray;
|
376 |
+
}
|
377 |
+
|
378 |
+
.choices__button {
|
379 |
+
text-indent: -9999px;
|
380 |
+
-webkit-appearance: none;
|
381 |
+
appearance: none;
|
382 |
+
border: 0;
|
383 |
+
background-color: transparent;
|
384 |
+
background-repeat: no-repeat;
|
385 |
+
background-position: center;
|
386 |
+
cursor: pointer;
|
387 |
+
}
|
388 |
+
|
389 |
+
.choices__button:focus {
|
390 |
+
outline: none;
|
391 |
+
}
|
392 |
+
|
393 |
+
.choices__input {
|
394 |
+
display: inline-block;
|
395 |
+
vertical-align: baseline !important;
|
396 |
+
background-color: transparent;
|
397 |
+
margin: 0 0 2px 0 !important;
|
398 |
+
border: 0 !important;
|
399 |
+
border-radius: 0 !important;
|
400 |
+
max-width: 100%;
|
401 |
+
min-height: 0 !important;
|
402 |
+
width: auto !important;
|
403 |
+
padding: 4px 0 4px 2px !important;
|
404 |
+
}
|
405 |
+
|
406 |
+
.choices .choices__inner input.choices__input:focus {
|
407 |
+
outline: none !important;
|
408 |
+
box-shadow: none !important;
|
409 |
+
border: none !important;
|
410 |
+
}
|
411 |
+
|
412 |
+
.choices__placeholder {
|
413 |
+
opacity: .5;
|
414 |
+
}
|
415 |
+
|
416 |
+
body.rtl .choices[data-type*="select-multiple"] .choices__inner {
|
417 |
+
padding-right: 4px;
|
418 |
+
padding-left: 24px;
|
419 |
+
}
|
420 |
+
|
421 |
+
body.rtl .choices[data-type*="select-multiple"]:after {
|
422 |
+
right: auto;
|
423 |
+
left: 11.5px;
|
424 |
+
}
|
425 |
+
|
426 |
+
body.rtl .choices__list--single {
|
427 |
+
padding-right: 4px;
|
428 |
+
padding-left: 16px;
|
429 |
+
}
|
430 |
+
|
431 |
+
body.rtl .choices__list--multiple .choices__item {
|
432 |
+
margin-right: 0;
|
433 |
+
margin-left: 3.75px;
|
434 |
+
}
|
435 |
+
|
436 |
+
body.rtl .choices__list--multiple .choices__item[data-deletable] {
|
437 |
+
padding-right: 10px;
|
438 |
+
padding-left: 5px;
|
439 |
+
}
|
440 |
+
|
441 |
+
body.rtl .choices__list--dropdown .choices__item {
|
442 |
+
text-align: right;
|
443 |
+
}
|
444 |
+
|
445 |
+
body.rtl .choices__input {
|
446 |
+
padding-right: 2px !important;
|
447 |
+
padding-left: 0 !important;
|
448 |
+
}
|
449 |
+
|
450 |
+
body.rtl .choices[data-type*="select-multiple"] .choices__button,
|
451 |
+
body.rtl .choices[data-type*="text"] .choices__button {
|
452 |
+
margin-right: 8px;
|
453 |
+
margin-left: -4px;
|
454 |
+
border-right: 1px solid #0a4f7e;
|
455 |
+
border-left: none;
|
456 |
+
}
|
457 |
+
|
458 |
+
@media (min-width: 640px) {
|
459 |
+
body.rtl .choices__list--dropdown .choices__item--selectable {
|
460 |
+
text-align: right;
|
461 |
+
padding-left: 100px;
|
462 |
+
padding-right: 10px;
|
463 |
+
}
|
464 |
+
body.rtl .choices__list--dropdown .choices__item--selectable:after {
|
465 |
+
right: auto;
|
466 |
+
left: 10px;
|
467 |
+
}
|
468 |
+
}
|
469 |
+
|
470 |
+
.aioseop-admin-page .aioseop-btn {
|
471 |
+
border: 1px;
|
472 |
+
border-style: solid;
|
473 |
+
border-radius: 3px;
|
474 |
+
cursor: pointer;
|
475 |
+
display: inline-block;
|
476 |
+
margin: 0;
|
477 |
+
text-decoration: none;
|
478 |
+
text-align: center;
|
479 |
+
vertical-align: middle;
|
480 |
+
white-space: nowrap;
|
481 |
+
box-shadow: none;
|
482 |
+
}
|
483 |
+
|
484 |
+
.aioseop-admin-page .aioseop-btn-block {
|
485 |
+
display: block;
|
486 |
+
width: 100%;
|
487 |
+
}
|
488 |
+
|
489 |
+
.aioseop-admin-page .aioseop-btn-md {
|
490 |
+
font-size: 13px;
|
491 |
+
font-weight: 600;
|
492 |
+
padding: 8px 12px;
|
493 |
+
min-height: 35px;
|
494 |
+
}
|
495 |
+
|
496 |
+
.aioseop-admin-page .aioseop-btn-lg {
|
497 |
+
font-size: 16px;
|
498 |
+
font-weight: 600;
|
499 |
+
padding: 16px 28px;
|
500 |
+
}
|
501 |
+
|
502 |
+
.aioseop-admin-page .aioseop-btn-orange {
|
503 |
+
background-color: #e27730;
|
504 |
+
border-color: #e27730;
|
505 |
+
color: #fff;
|
506 |
+
}
|
507 |
+
|
508 |
+
.aioseop-admin-page .aioseop-btn-orange:hover {
|
509 |
+
background-color: #b85a1b;
|
510 |
+
border-color: #b85a1b;
|
511 |
+
color: #fff;
|
512 |
+
}
|
513 |
+
|
514 |
+
.aioseop-admin-page .aioseop-btn-grey {
|
515 |
+
background-color: #eee;
|
516 |
+
border-color: #ccc;
|
517 |
+
color: #666;
|
518 |
+
}
|
519 |
+
|
520 |
+
.aioseop-admin-page .aioseop-btn-grey:hover {
|
521 |
+
background-color: #d7d7d7;
|
522 |
+
border-color: #ccc;
|
523 |
+
color: #444;
|
524 |
+
}
|
525 |
+
|
526 |
+
.aioseop-admin-page .aioseop-btn-light-grey {
|
527 |
+
background-color: #f5f5f5;
|
528 |
+
border: 1px solid #ccc;
|
529 |
+
color: #666;
|
530 |
+
}
|
531 |
+
|
532 |
+
.aioseop-admin-page .aioseop-btn-light-grey:hover {
|
533 |
+
background-color: #eee;
|
534 |
+
border-color: #ccc;
|
535 |
+
color: #444;
|
536 |
+
}
|
537 |
+
|
538 |
+
.aioseop-admin-page .aioseop-btn-trans-green {
|
539 |
+
background-color: transparent;
|
540 |
+
border: none;
|
541 |
+
color: #2a9b39;
|
542 |
+
}
|
543 |
+
|
544 |
+
.aioseop-admin-page .aioseop-btn-trans-green:hover {
|
545 |
+
background-color: #2a9b39;
|
546 |
+
color: #fff;
|
547 |
+
}
|
548 |
+
|
549 |
+
.aioseop-admin-page .aioseop-btn-trans-green .underline {
|
550 |
+
position: relative;
|
551 |
+
}
|
552 |
+
|
553 |
+
.aioseop-admin-page .aioseop-btn-trans-green .underline:after {
|
554 |
+
content: " ";
|
555 |
+
border-bottom: 1px dashed #2a9b39;
|
556 |
+
position: absolute;
|
557 |
+
bottom: -5px;
|
558 |
+
left: 0;
|
559 |
+
width: 100%;
|
560 |
+
}
|
561 |
+
|
562 |
+
.aioseop-admin-page .aioseop-btn-trans-green .dashicons {
|
563 |
+
height: 18px;
|
564 |
+
}
|
565 |
+
|
566 |
+
body div.jconfirm *,
|
567 |
+
body div.jconfirm *::before,
|
568 |
+
body div.jconfirm *::after {
|
569 |
+
-webkit-box-sizing: border-box;
|
570 |
+
-moz-box-sizing: border-box;
|
571 |
+
box-sizing: border-box;
|
572 |
+
}
|
573 |
+
|
574 |
+
body div.jconfirm div.jconfirm-box-container div.jconfirm-box {
|
575 |
+
border-radius: 0;
|
576 |
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
|
577 |
+
}
|
578 |
+
|
579 |
+
body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon {
|
580 |
+
color: rgba(0, 0, 0, 0.4);
|
581 |
+
top: 8px;
|
582 |
+
right: 8px;
|
583 |
+
}
|
584 |
+
|
585 |
+
body div.jconfirm div.jconfirm-box-container div.jconfirm-box div.jconfirm-closeIcon:hover {
|
586 |
+
color: rgba(0, 0, 0, 0.8);
|
587 |
+
}
|
588 |
+
|
589 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-title-c {
|
590 |
+
margin: 0 0 26px 0 !important;
|
591 |
+
padding: 0 !important;
|
592 |
+
}
|
593 |
+
|
594 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c {
|
595 |
+
margin: 0 !important;
|
596 |
+
color: #c4c4c4 !important;
|
597 |
+
}
|
598 |
+
|
599 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-title {
|
600 |
+
display: block;
|
601 |
+
color: #333;
|
602 |
+
}
|
603 |
+
|
604 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-title-c span.jconfirm-icon-c+span.jconfirm-title {
|
605 |
+
margin-top: 20px !important;
|
606 |
+
}
|
607 |
+
|
608 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content-pane {
|
609 |
+
margin-bottom: 26px;
|
610 |
+
display: block;
|
611 |
+
}
|
612 |
+
|
613 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content-pane .jconfirm-content {
|
614 |
+
overflow: inherit;
|
615 |
+
}
|
616 |
+
|
617 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content {
|
618 |
+
font-size: 16px;
|
619 |
+
color: #555;
|
620 |
+
line-height: 1.4;
|
621 |
+
}
|
622 |
+
|
623 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content.lite-upgrade p {
|
624 |
+
font-size: 18px;
|
625 |
+
padding: 0 20px;
|
626 |
+
}
|
627 |
+
|
628 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content p {
|
629 |
+
margin: 0 0 16px;
|
630 |
+
font-size: 16px;
|
631 |
+
line-height: 1.5;
|
632 |
+
}
|
633 |
+
|
634 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content p:last-of-type {
|
635 |
+
margin: 0;
|
636 |
+
}
|
637 |
+
|
638 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content p.large {
|
639 |
+
font-size: 18px;
|
640 |
+
}
|
641 |
+
|
642 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content p.small {
|
643 |
+
font-size: 14px;
|
644 |
+
}
|
645 |
+
|
646 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased {
|
647 |
+
font-size: 12px;
|
648 |
+
color: #ccc;
|
649 |
+
text-decoration: none;
|
650 |
+
}
|
651 |
+
|
652 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-content .already-purchased:hover {
|
653 |
+
text-decoration: underline;
|
654 |
+
}
|
655 |
+
|
656 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased {
|
657 |
+
display: block;
|
658 |
+
font-size: 12px;
|
659 |
+
color: #aaa;
|
660 |
+
text-decoration: none;
|
661 |
+
padding-top: 20px;
|
662 |
+
}
|
663 |
+
|
664 |
+
body div.jconfirm div.jconfirm-box div.jconfirm-buttons .already-purchased:hover {
|
665 |
+
color: #999;
|
666 |
+
text-decoration: underline;
|
667 |
+
}
|
668 |
+
|
669 |
+
body div.jconfirm div.jconfirm-box .discount-note {
|
670 |
+
text-align: center;
|
671 |
+
margin: 30px 0 0;
|
672 |
+
}
|
673 |
+
|
674 |
+
body div.jconfirm div.jconfirm-box .discount-note p {
|
675 |
+
background-color: #faffac;
|
676 |
+
margin: 0 -30px;
|
677 |
+
padding: 24px 60px 20px;
|
678 |
+
font-size: 15px;
|
679 |
+
color: #4d4d4d;
|
680 |
+
position: relative;
|
681 |
+
}
|
682 |
+
|
683 |
+
body div.jconfirm div.jconfirm-box .discount-note p:after {
|
684 |
+
content: '\f058';
|
685 |
+
display: inline-block;
|
686 |
+
font: normal normal normal 14px/1 FontAwesome;
|
687 |
+
background-color: #fff;
|
688 |
+
font-size: 26px;
|
689 |
+
border-radius: 50%;
|
690 |
+
padding: 5px 6px;
|
691 |
+
text-rendering: auto;
|
692 |
+
-webkit-font-smoothing: antialiased;
|
693 |
+
-moz-osx-font-smoothing: grayscale;
|
694 |
+
position: absolute;
|
695 |
+
top: -20px;
|
696 |
+
right: 50%;
|
697 |
+
margin-right: -18px;
|
698 |
+
color: #3abc01;
|
699 |
+
}
|
700 |
+
|
701 |
+
body div.jconfirm div.jconfirm-box .discount-note span {
|
702 |
+
font-weight: 700;
|
703 |
+
color: #3abc01;
|
704 |
+
}
|
705 |
+
|
706 |
+
body div.jconfirm div.jconfirm-box .discount-note a {
|
707 |
+
color: #aaa;
|
708 |
+
display: block;
|
709 |
+
margin-top: 12px;
|
710 |
+
}
|
711 |
+
|
712 |
+
body div.jconfirm div.jconfirm-box input[type=text] {
|
713 |
+
display: block;
|
714 |
+
width: 99%;
|
715 |
+
border: 1px solid #d6d6d6;
|
716 |
+
padding: 10px;
|
717 |
+
box-shadow: none;
|
718 |
+
margin: 20px auto 0 auto;
|
719 |
+
}
|
720 |
+
|
721 |
+
body div.jconfirm div.jconfirm-box #aioseop-embed-shortcode {
|
722 |
+
margin: 20px 0;
|
723 |
+
text-align: center;
|
724 |
+
font-size: 24px;
|
725 |
+
padding: 8px 5px;
|
726 |
+
}
|
727 |
+
|
728 |
+
body div.jconfirm div.jconfirm-box #aioseop-embed-shortcode:disabled {
|
729 |
+
color: #333;
|
730 |
+
}
|
731 |
+
|
732 |
+
body div.jconfirm div.jconfirm-box button.btn-confirm {
|
733 |
+
background-color: #e27730;
|
734 |
+
color: #fff;
|
735 |
+
outline: none;
|
736 |
+
}
|
737 |
+
|
738 |
+
body div.jconfirm div.jconfirm-box button.btn-confirm:hover {
|
739 |
+
background-color: #b85a1b;
|
740 |
+
border-color: #b85a1b;
|
741 |
+
}
|
742 |
+
|
743 |
+
body div.jconfirm div.jconfirm-box button,
|
744 |
+
body div.jconfirm div.jconfirm-box button.btn-default {
|
745 |
+
color: #666;
|
746 |
+
}
|
747 |
+
|
748 |
+
body div.jconfirm div.jconfirm-box button.btn-block {
|
749 |
+
display: block;
|
750 |
+
text-align: center;
|
751 |
+
width: 100%;
|
752 |
+
margin: 0 0 10px 0 !important;
|
753 |
+
}
|
754 |
+
|
755 |
+
body div.jconfirm div.jconfirm-box button.btn-normal-case {
|
756 |
+
text-transform: none !important;
|
757 |
+
}
|
758 |
+
|
759 |
+
body div.jconfirm div.jconfirm-box .error {
|
760 |
+
display: none;
|
761 |
+
color: red;
|
762 |
+
}
|
763 |
+
|
764 |
+
body div.jconfirm div.jconfirm-box .aioseop-error {
|
765 |
+
border: 1px solid #ebccd1 !important;
|
766 |
+
}
|
767 |
+
|
768 |
+
body div.jconfirm div.jconfirm-box .jconfirm-title-c .jconfirm-icon-c {
|
769 |
+
-webkit-transition: none !important;
|
770 |
+
transition: none !important;
|
771 |
+
-webkit-transform: none !important;
|
772 |
+
-ms-transform: none !important;
|
773 |
+
transform: none !important;
|
774 |
+
font-size: 45px !important;
|
775 |
+
}
|
776 |
+
|
777 |
+
body div.jconfirm div.jconfirm-box.aioseop-providers-account-add-modal div.jconfirm-title-c {
|
778 |
+
font-size: 20px;
|
779 |
+
}
|
780 |
+
|
781 |
+
body div.jconfirm div.jconfirm-box.aioseop-providers-account-add-modal div.jconfirm-content .description {
|
782 |
+
font-size: 13px;
|
783 |
+
line-height: 1.4;
|
784 |
+
margin-top: 16px;
|
785 |
+
}
|
786 |
+
|
787 |
+
body div.jconfirm div.jconfirm-box.aioseop-providers-account-add-modal div.jconfirm-content input[type="text"] {
|
788 |
+
margin-top: 10px;
|
789 |
+
}
|
790 |
+
|
791 |
+
body .choices {
|
792 |
+
text-align: left;
|
793 |
+
font-size: 16px;
|
794 |
+
}
|
795 |
+
|
796 |
+
body .choices input[type=text].choices__input {
|
797 |
+
display: inline-block !important;
|
798 |
+
}
|
799 |
+
|
800 |
+
.aioseop-admin-page .aioseop-alert {
|
801 |
+
padding: 16px;
|
802 |
+
margin-bottom: 18px;
|
803 |
+
border: 1px solid transparent;
|
804 |
+
}
|
805 |
+
|
806 |
+
.aioseop-admin-page .aioseop-alert h4 {
|
807 |
+
margin-top: 0;
|
808 |
+
color: inherit;
|
809 |
+
}
|
810 |
+
|
811 |
+
.aioseop-admin-page .aioseop-alert p {
|
812 |
+
margin: 0 0 15px 0;
|
813 |
+
}
|
814 |
+
|
815 |
+
.aioseop-admin-page .aioseop-alert p:last-of-type {
|
816 |
+
margin: 0;
|
817 |
+
}
|
818 |
+
|
819 |
+
.aioseop-admin-page .aioseop-alert.aioseop-alert-nomargin {
|
820 |
+
margin: 0;
|
821 |
+
}
|
822 |
+
|
823 |
+
.aioseop-admin-page .aioseop-alert.aioseop-alert-small {
|
824 |
+
font-size: 12px;
|
825 |
+
}
|
826 |
+
|
827 |
+
.aioseop-admin-page .aioseop-alert.aioseop-alert-success {
|
828 |
+
background-color: #dff0d8;
|
829 |
+
border-color: #d6e9c6;
|
830 |
+
color: #3c763d;
|
831 |
+
}
|
832 |
+
|
833 |
+
.aioseop-admin-page .aioseop-alert.aioseop-alert-info {
|
834 |
+
background-color: #d9edf7;
|
835 |
+
border-color: #bce8f1;
|
836 |
+
color: #31708f;
|
837 |
+
}
|
838 |
+
|
839 |
+
.aioseop-admin-page .aioseop-alert.aioseop-alert-warning {
|
840 |
+
background-color: #fcf8e3;
|
841 |
+
border-color: #faebcc;
|
842 |
+
color: #8a6d3b;
|
843 |
+
}
|
844 |
+
|
845 |
+
.aioseop-admin-page .aioseop-alert.aioseop-alert-danger {
|
846 |
+
background-color: #f2dede;
|
847 |
+
border-color: #ebccd1;
|
848 |
+
color: #a94442;
|
849 |
+
}
|
850 |
+
|
851 |
+
.aioseop-flag {
|
852 |
+
width: 16px;
|
853 |
+
height: 16px;
|
854 |
+
background: url(../images/flags.png) no-repeat;
|
855 |
+
display: inline-block;
|
856 |
+
}
|
857 |
+
|
858 |
+
.aioseop-flag.aioseop-flag-ad {
|
859 |
+
background-position: -16px 0;
|
860 |
+
}
|
861 |
+
|
862 |
+
.aioseop-flag.aioseop-flag-ae {
|
863 |
+
background-position: -32px 0;
|
864 |
+
}
|
865 |
+
|
866 |
+
.aioseop-flag.aioseop-flag-af {
|
867 |
+
background-position: -48px 0;
|
868 |
+
}
|
869 |
+
|
870 |
+
.aioseop-flag.aioseop-flag-ag {
|
871 |
+
background-position: -64px 0;
|
872 |
+
}
|
873 |
+
|
874 |
+
.aioseop-flag.aioseop-flag-ai {
|
875 |
+
background-position: -80px 0;
|
876 |
+
}
|
877 |
+
|
878 |
+
.aioseop-flag.aioseop-flag-al {
|
879 |
+
background-position: -96px 0;
|
880 |
+
}
|
881 |
+
|
882 |
+
.aioseop-flag.aioseop-flag-am {
|
883 |
+
background-position: -112px 0;
|
884 |
+
}
|
885 |
+
|
886 |
+
.aioseop-flag.aioseop-flag-an {
|
887 |
+
background-position: -128px 0;
|
888 |
+
}
|
889 |
+
|
890 |
+
.aioseop-flag.aioseop-flag-ao {
|
891 |
+
background-position: -144px 0;
|
892 |
+
}
|
893 |
+
|
894 |
+
.aioseop-flag.aioseop-flag-ar {
|
895 |
+
background-position: -160px 0;
|
896 |
+
}
|
897 |
+
|
898 |
+
.aioseop-flag.aioseop-flag-as {
|
899 |
+
background-position: -176px 0;
|
900 |
+
}
|
901 |
+
|
902 |
+
.aioseop-flag.aioseop-flag-at {
|
903 |
+
background-position: -192px 0;
|
904 |
+
}
|
905 |
+
|
906 |
+
.aioseop-flag.aioseop-flag-au {
|
907 |
+
background-position: -208px 0;
|
908 |
+
}
|
909 |
+
|
910 |
+
.aioseop-flag.aioseop-flag-aw {
|
911 |
+
background-position: -224px 0;
|
912 |
+
}
|
913 |
+
|
914 |
+
.aioseop-flag.aioseop-flag-az {
|
915 |
+
background-position: 0 -16px;
|
916 |
+
}
|
917 |
+
|
918 |
+
.aioseop-flag.aioseop-flag-ba {
|
919 |
+
background-position: -16px -16px;
|
920 |
+
}
|
921 |
+
|
922 |
+
.aioseop-flag.aioseop-flag-bb {
|
923 |
+
background-position: -32px -16px;
|
924 |
+
}
|
925 |
+
|
926 |
+
.aioseop-flag.aioseop-flag-bd {
|
927 |
+
background-position: -48px -16px;
|
928 |
+
}
|
929 |
+
|
930 |
+
.aioseop-flag.aioseop-flag-be {
|
931 |
+
background-position: -64px -16px;
|
932 |
+
}
|
933 |
+
|
934 |
+
.aioseop-flag.aioseop-flag-bf {
|
935 |
+
background-position: -80px -16px;
|
936 |
+
}
|
937 |
+
|
938 |
+
.aioseop-flag.aioseop-flag-bg {
|
939 |
+
background-position: -96px -16px;
|
940 |
+
}
|
941 |
+
|
942 |
+
.aioseop-flag.aioseop-flag-bh {
|
943 |
+
background-position: -112px -16px;
|
944 |
+
}
|
945 |
+
|
946 |
+
.aioseop-flag.aioseop-flag-bi {
|
947 |
+
background-position: -128px -16px;
|
948 |
+
}
|
949 |
+
|
950 |
+
.aioseop-flag.aioseop-flag-bj {
|
951 |
+
background-position: -144px -16px;
|
952 |
+
}
|
953 |
+
|
954 |
+
.aioseop-flag.aioseop-flag-bm {
|
955 |
+
background-position: -160px -16px;
|
956 |
+
}
|
957 |
+
|
958 |
+
.aioseop-flag.aioseop-flag-bn {
|
959 |
+
background-position: -176px -16px;
|
960 |
+
}
|
961 |
+
|
962 |
+
.aioseop-flag.aioseop-flag-bo {
|
963 |
+
background-position: -192px -16px;
|
964 |
+
}
|
965 |
+
|
966 |
+
.aioseop-flag.aioseop-flag-br {
|
967 |
+
background-position: -208px -16px;
|
968 |
+
}
|
969 |
+
|
970 |
+
.aioseop-flag.aioseop-flag-bs {
|
971 |
+
background-position: -224px -16px;
|
972 |
+
}
|
973 |
+
|
974 |
+
.aioseop-flag.aioseop-flag-bt {
|
975 |
+
background-position: 0 -32px;
|
976 |
+
}
|
977 |
+
|
978 |
+
.aioseop-flag.aioseop-flag-bw {
|
979 |
+
background-position: -16px -32px;
|
980 |
+
}
|
981 |
+
|
982 |
+
.aioseop-flag.aioseop-flag-by {
|
983 |
+
background-position: -32px -32px;
|
984 |
+
}
|
985 |
+
|
986 |
+
.aioseop-flag.aioseop-flag-bz {
|
987 |
+
background-position: -48px -32px;
|
988 |
+
}
|
989 |
+
|
990 |
+
.aioseop-flag.aioseop-flag-ca {
|
991 |
+
background-position: -64px -32px;
|
992 |
+
}
|
993 |
+
|
994 |
+
.aioseop-flag.aioseop-flag-cd {
|
995 |
+
background-position: -80px -32px;
|
996 |
+
}
|
997 |
+
|
998 |
+
.aioseop-flag.aioseop-flag-cf {
|
999 |
+
background-position: -96px -32px;
|
1000 |
+
}
|
1001 |
+
|
1002 |
+
.aioseop-flag.aioseop-flag-cg {
|
1003 |
+
background-position: -112px -32px;
|
1004 |
+
}
|
1005 |
+
|
1006 |
+
.aioseop-flag.aioseop-flag-ch {
|
1007 |
+
background-position: -128px -32px;
|
1008 |
+
}
|
1009 |
+
|
1010 |
+
.aioseop-flag.aioseop-flag-ci {
|
1011 |
+
background-position: -144px -32px;
|
1012 |
+
}
|
1013 |
+
|
1014 |
+
.aioseop-flag.aioseop-flag-ck {
|
1015 |
+
background-position: -160px -32px;
|
1016 |
+
}
|
1017 |
+
|
1018 |
+
.aioseop-flag.aioseop-flag-cl {
|
1019 |
+
background-position: -176px -32px;
|
1020 |
+
}
|
1021 |
+
|
1022 |
+
.aioseop-flag.aioseop-flag-cm {
|
1023 |
+
background-position: -192px -32px;
|
1024 |
+
}
|
1025 |
+
|
1026 |
+
.aioseop-flag.aioseop-flag-cn {
|
1027 |
+
background-position: -208px -32px;
|
1028 |
+
}
|
1029 |
+
|
1030 |
+
.aioseop-flag.aioseop-flag-co {
|
1031 |
+
background-position: -224px -32px;
|
1032 |
+
}
|
1033 |
+
|
1034 |
+
.aioseop-flag.aioseop-flag-cr {
|
1035 |
+
background-position: 0 -48px;
|
1036 |
+
}
|
1037 |
+
|
1038 |
+
.aioseop-flag.aioseop-flag-cu {
|
1039 |
+
background-position: -16px -48px;
|
1040 |
+
}
|
1041 |
+
|
1042 |
+
.aioseop-flag.aioseop-flag-cv {
|
1043 |
+
background-position: -32px -48px;
|
1044 |
+
}
|
1045 |
+
|
1046 |
+
.aioseop-flag.aioseop-flag-cy {
|
1047 |
+
background-position: -48px -48px;
|
1048 |
+
}
|
1049 |
+
|
1050 |
+
.aioseop-flag.aioseop-flag-cz {
|
1051 |
+
background-position: -64px -48px;
|
1052 |
+
}
|
1053 |
+
|
1054 |
+
.aioseop-flag.aioseop-flag-de {
|
1055 |
+
background-position: -80px -48px;
|
1056 |
+
}
|
1057 |
+
|
1058 |
+
.aioseop-flag.aioseop-flag-dj {
|
1059 |
+
background-position: -96px -48px;
|
1060 |
+
}
|
1061 |
+
|
1062 |
+
.aioseop-flag.aioseop-flag-dk {
|
1063 |
+
background-position: -112px -48px;
|
1064 |
+
}
|
1065 |
+
|
1066 |
+
.aioseop-flag.aioseop-flag-dm {
|
1067 |
+
background-position: -128px -48px;
|
1068 |
+
}
|
1069 |
+
|
1070 |
+
.aioseop-flag.aioseop-flag-do {
|
1071 |
+
background-position: -144px -48px;
|
1072 |
+
}
|
1073 |
+
|
1074 |
+
.aioseop-flag.aioseop-flag-dz {
|
1075 |
+
background-position: -160px -48px;
|
1076 |
+
}
|
1077 |
+
|
1078 |
+
.aioseop-flag.aioseop-flag-ec {
|
1079 |
+
background-position: -176px -48px;
|
1080 |
+
}
|
1081 |
+
|
1082 |
+
.aioseop-flag.aioseop-flag-ee {
|
1083 |
+
background-position: -192px -48px;
|
1084 |
+
}
|
1085 |
+
|
1086 |
+
.aioseop-flag.aioseop-flag-eg {
|
1087 |
+
background-position: -208px -48px;
|
1088 |
+
}
|
1089 |
+
|
1090 |
+
.aioseop-flag.aioseop-flag-eh {
|
1091 |
+
background-position: -224px -48px;
|
1092 |
+
}
|
1093 |
+
|
1094 |
+
.aioseop-flag.aioseop-flag-er {
|
1095 |
+
background-position: 0 -64px;
|
1096 |
+
}
|
1097 |
+
|
1098 |
+
.aioseop-flag.aioseop-flag-es {
|
1099 |
+
background-position: -16px -64px;
|
1100 |
+
}
|
1101 |
+
|
1102 |
+
.aioseop-flag.aioseop-flag-et {
|
1103 |
+
background-position: -32px -64px;
|
1104 |
+
}
|
1105 |
+
|
1106 |
+
.aioseop-flag.aioseop-flag-fi {
|
1107 |
+
background-position: -48px -64px;
|
1108 |
+
}
|
1109 |
+
|
1110 |
+
.aioseop-flag.aioseop-flag-fj {
|
1111 |
+
background-position: -64px -64px;
|
1112 |
+
}
|
1113 |
+
|
1114 |
+
.aioseop-flag.aioseop-flag-fm {
|
1115 |
+
background-position: -80px -64px;
|
1116 |
+
}
|
1117 |
+
|
1118 |
+
.aioseop-flag.aioseop-flag-fo {
|
1119 |
+
background-position: -96px -64px;
|
1120 |
+
}
|
1121 |
+
|
1122 |
+
.aioseop-flag.aioseop-flag-fr {
|
1123 |
+
background-position: -112px -64px;
|
1124 |
+
}
|
1125 |
+
|
1126 |
+
.aioseop-flag.aioseop-flag-ga {
|
1127 |
+
background-position: -128px -64px;
|
1128 |
+
}
|
1129 |
+
|
1130 |
+
.aioseop-flag.aioseop-flag-gb {
|
1131 |
+
background-position: -144px -64px;
|
1132 |
+
}
|
1133 |
+
|
1134 |
+
.aioseop-flag.aioseop-flag-gd {
|
1135 |
+
background-position: -160px -64px;
|
1136 |
+
}
|
1137 |
+
|
1138 |
+
.aioseop-flag.aioseop-flag-ge {
|
1139 |
+
background-position: -176px -64px;
|
1140 |
+
}
|
1141 |
+
|
1142 |
+
.aioseop-flag.aioseop-flag-gg {
|
1143 |
+
background-position: -192px -64px;
|
1144 |
+
}
|
1145 |
+
|
1146 |
+
.aioseop-flag.aioseop-flag-gh {
|
1147 |
+
background-position: -208px -64px;
|
1148 |
+
}
|
1149 |
+
|
1150 |
+
.aioseop-flag.aioseop-flag-gi {
|
1151 |
+
background-position: -224px -64px;
|
1152 |
+
}
|
1153 |
+
|
1154 |
+
.aioseop-flag.aioseop-flag-gl {
|
1155 |
+
background-position: 0 -80px;
|
1156 |
+
}
|
1157 |
+
|
1158 |
+
.aioseop-flag.aioseop-flag-gm {
|
1159 |
+
background-position: -16px -80px;
|
1160 |
+
}
|
1161 |
+
|
1162 |
+
.aioseop-flag.aioseop-flag-gn {
|
1163 |
+
background-position: -32px -80px;
|
1164 |
+
}
|
1165 |
+
|
1166 |
+
.aioseop-flag.aioseop-flag-gp {
|
1167 |
+
background-position: -48px -80px;
|
1168 |
+
}
|
1169 |
+
|
1170 |
+
.aioseop-flag.aioseop-flag-gq {
|
1171 |
+
background-position: -64px -80px;
|
1172 |
+
}
|
1173 |
+
|
1174 |
+
.aioseop-flag.aioseop-flag-gr {
|
1175 |
+
background-position: -80px -80px;
|
1176 |
+
}
|
1177 |
+
|
1178 |
+
.aioseop-flag.aioseop-flag-gt {
|
1179 |
+
background-position: -96px -80px;
|
1180 |
+
}
|
1181 |
+
|
1182 |
+
.aioseop-flag.aioseop-flag-gu {
|
1183 |
+
background-position: -112px -80px;
|
1184 |
+
}
|
1185 |
+
|
1186 |
+
.aioseop-flag.aioseop-flag-gw {
|
1187 |
+
background-position: -128px -80px;
|
1188 |
+
}
|
1189 |
+
|
1190 |
+
.aioseop-flag.aioseop-flag-gy {
|
1191 |
+
background-position: -144px -80px;
|
1192 |
+
}
|
1193 |
+
|
1194 |
+
.aioseop-flag.aioseop-flag-hk {
|
1195 |
+
background-position: -160px -80px;
|
1196 |
+
}
|
1197 |
+
|
1198 |
+
.aioseop-flag.aioseop-flag-hn {
|
1199 |
+
background-position: -176px -80px;
|
1200 |
+
}
|
1201 |
+
|
1202 |
+
.aioseop-flag.aioseop-flag-hr {
|
1203 |
+
background-position: -192px -80px;
|
1204 |
+
}
|
1205 |
+
|
1206 |
+
.aioseop-flag.aioseop-flag-ht {
|
1207 |
+
background-position: -208px -80px;
|
1208 |
+
}
|
1209 |
+
|
1210 |
+
.aioseop-flag.aioseop-flag-hu {
|
1211 |
+
background-position: -224px -80px;
|
1212 |
+
}
|
1213 |
+
|
1214 |
+
.aioseop-flag.aioseop-flag-id {
|
1215 |
+
background-position: 0 -96px;
|
1216 |
+
}
|
1217 |
+
|
1218 |
+
.aioseop-flag.aioseop-flag-ie {
|
1219 |
+
background-position: -16px -96px;
|
1220 |
+
}
|
1221 |
+
|
1222 |
+
.aioseop-flag.aioseop-flag-il {
|
1223 |
+
background-position: -32px -96px;
|
1224 |
+
}
|
1225 |
+
|
1226 |
+
.aioseop-flag.aioseop-flag-im {
|
1227 |
+
background-position: -48px -96px;
|
1228 |
+
}
|
1229 |
+
|
1230 |
+
.aioseop-flag.aioseop-flag-in {
|
1231 |
+
background-position: -64px -96px;
|
1232 |
+
}
|
1233 |
+
|
1234 |
+
.aioseop-flag.aioseop-flag-iq {
|
1235 |
+
background-position: -80px -96px;
|
1236 |
+
}
|
1237 |
+
|
1238 |
+
.aioseop-flag.aioseop-flag-ir {
|
1239 |
+
background-position: -96px -96px;
|
1240 |
+
}
|
1241 |
+
|
1242 |
+
.aioseop-flag.aioseop-flag-is {
|
1243 |
+
background-position: -112px -96px;
|
1244 |
+
}
|
1245 |
+
|
1246 |
+
.aioseop-flag.aioseop-flag-it {
|
1247 |
+
background-position: -128px -96px;
|
1248 |
+
}
|
1249 |
+
|
1250 |
+
.aioseop-flag.aioseop-flag-je {
|
1251 |
+
background-position: -144px -96px;
|
1252 |
+
}
|
1253 |
+
|
1254 |
+
.aioseop-flag.aioseop-flag-jm {
|
1255 |
+
background-position: -160px -96px;
|
1256 |
+
}
|
1257 |
+
|
1258 |
+
.aioseop-flag.aioseop-flag-jo {
|
1259 |
+
background-position: -176px -96px;
|
1260 |
+
}
|
1261 |
+
|
1262 |
+
.aioseop-flag.aioseop-flag-jp {
|
1263 |
+
background-position: -192px -96px;
|
1264 |
+
}
|
1265 |
+
|
1266 |
+
.aioseop-flag.aioseop-flag-ke {
|
1267 |
+
background-position: -208px -96px;
|
1268 |
+
}
|
1269 |
+
|
1270 |
+
.aioseop-flag.aioseop-flag-kg {
|
1271 |
+
background-position: -224px -96px;
|
1272 |
+
}
|
1273 |
+
|
1274 |
+
.aioseop-flag.aioseop-flag-kh {
|
1275 |
+
background-position: 0 -112px;
|
1276 |
+
}
|
1277 |
+
|
1278 |
+
.aioseop-flag.aioseop-flag-ki {
|
1279 |
+
background-position: -16px -112px;
|
1280 |
+
}
|
1281 |
+
|
1282 |
+
.aioseop-flag.aioseop-flag-km {
|
1283 |
+
background-position: -32px -112px;
|
1284 |
+
}
|
1285 |
+
|
1286 |
+
.aioseop-flag.aioseop-flag-kn {
|
1287 |
+
background-position: -48px -112px;
|
1288 |
+
}
|
1289 |
+
|
1290 |
+
.aioseop-flag.aioseop-flag-kp {
|
1291 |
+
background-position: -64px -112px;
|
1292 |
+
}
|
1293 |
+
|
1294 |
+
.aioseop-flag.aioseop-flag-kr {
|
1295 |
+
background-position: -80px -112px;
|
1296 |
+
}
|
1297 |
+
|
1298 |
+
.aioseop-flag.aioseop-flag-kw {
|
1299 |
+
background-position: -96px -112px;
|
1300 |
+
}
|
1301 |
+
|
1302 |
+
.aioseop-flag.aioseop-flag-ky {
|
1303 |
+
background-position: -112px -112px;
|
1304 |
+
}
|
1305 |
+
|
1306 |
+
.aioseop-flag.aioseop-flag-kz {
|
1307 |
+
background-position: -128px -112px;
|
1308 |
+
}
|
1309 |
+
|
1310 |
+
.aioseop-flag.aioseop-flag-la {
|
1311 |
+
background-position: -144px -112px;
|
1312 |
+
}
|
1313 |
+
|
1314 |
+
.aioseop-flag.aioseop-flag-lb {
|
1315 |
+
background-position: -160px -112px;
|
1316 |
+
}
|
1317 |
+
|
1318 |
+
.aioseop-flag.aioseop-flag-lc {
|
1319 |
+
background-position: -176px -112px;
|
1320 |
+
}
|
1321 |
+
|
1322 |
+
.aioseop-flag.aioseop-flag-li {
|
1323 |
+
background-position: -192px -112px;
|
1324 |
+
}
|
1325 |
+
|
1326 |
+
.aioseop-flag.aioseop-flag-lk {
|
1327 |
+
background-position: -208px -112px;
|
1328 |
+
}
|
1329 |
+
|
1330 |
+
.aioseop-flag.aioseop-flag-lr {
|
1331 |
+
background-position: -224px -112px;
|
1332 |
+
}
|
1333 |
+
|
1334 |
+
.aioseop-flag.aioseop-flag-ls {
|
1335 |
+
background-position: 0 -128px;
|
1336 |
+
}
|
1337 |
+
|
1338 |
+
.aioseop-flag.aioseop-flag-lt {
|
1339 |
+
background-position: -16px -128px;
|
1340 |
+
}
|
1341 |
+
|
1342 |
+
.aioseop-flag.aioseop-flag-lu {
|
1343 |
+
background-position: -32px -128px;
|
1344 |
+
}
|
1345 |
+
|
1346 |
+
.aioseop-flag.aioseop-flag-lv {
|
1347 |
+
background-position: -48px -128px;
|
1348 |
+
}
|
1349 |
+
|
1350 |
+
.aioseop-flag.aioseop-flag-ly {
|
1351 |
+
background-position: -64px -128px;
|
1352 |
+
}
|
1353 |
+
|
1354 |
+
.aioseop-flag.aioseop-flag-ma {
|
1355 |
+
background-position: -80px -128px;
|
1356 |
+
}
|
1357 |
+
|
1358 |
+
.aioseop-flag.aioseop-flag-mc {
|
1359 |
+
background-position: -96px -128px;
|
1360 |
+
}
|
1361 |
+
|
1362 |
+
.aioseop-flag.aioseop-flag-md {
|
1363 |
+
background-position: -112px -128px;
|
1364 |
+
}
|
1365 |
+
|
1366 |
+
.aioseop-flag.aioseop-flag-me {
|
1367 |
+
background-position: -128px -128px;
|
1368 |
+
}
|
1369 |
+
|
1370 |
+
.aioseop-flag.aioseop-flag-mg {
|
1371 |
+
background-position: -144px -128px;
|
1372 |
+
}
|
1373 |
+
|
1374 |
+
.aioseop-flag.aioseop-flag-mh {
|
1375 |
+
background-position: -160px -128px;
|
1376 |
+
}
|
1377 |
+
|
1378 |
+
.aioseop-flag.aioseop-flag-mk {
|
1379 |
+
background-position: -176px -128px;
|
1380 |
+
}
|
1381 |
+
|
1382 |
+
.aioseop-flag.aioseop-flag-ml {
|
1383 |
+
background-position: -192px -128px;
|
1384 |
+
}
|
1385 |
+
|
1386 |
+
.aioseop-flag.aioseop-flag-mm {
|
1387 |
+
background-position: -208px -128px;
|
1388 |
+
}
|
1389 |
+
|
1390 |
+
.aioseop-flag.aioseop-flag-mn {
|
1391 |
+
background-position: -224px -128px;
|
1392 |
+
}
|
1393 |
+
|
1394 |
+
.aioseop-flag.aioseop-flag-mo {
|
1395 |
+
background-position: 0 -144px;
|
1396 |
+
}
|
1397 |
+
|
1398 |
+
.aioseop-flag.aioseop-flag-mq {
|
1399 |
+
background-position: -16px -144px;
|
1400 |
+
}
|
1401 |
+
|
1402 |
+
.aioseop-flag.aioseop-flag-mr {
|
1403 |
+
background-position: -32px -144px;
|
1404 |
+
}
|
1405 |
+
|
1406 |
+
.aioseop-flag.aioseop-flag-ms {
|
1407 |
+
background-position: -48px -144px;
|
1408 |
+
}
|
1409 |
+
|
1410 |
+
.aioseop-flag.aioseop-flag-mt {
|
1411 |
+
background-position: -64px -144px;
|
1412 |
+
}
|
1413 |
+
|
1414 |
+
.aioseop-flag.aioseop-flag-mu {
|
1415 |
+
background-position: -80px -144px;
|
1416 |
+
}
|
1417 |
+
|
1418 |
+
.aioseop-flag.aioseop-flag-mv {
|
1419 |
+
background-position: -96px -144px;
|
1420 |
+
}
|
1421 |
+
|
1422 |
+
.aioseop-flag.aioseop-flag-mw {
|
1423 |
+
background-position: -112px -144px;
|
1424 |
+
}
|
1425 |
+
|
1426 |
+
.aioseop-flag.aioseop-flag-mx {
|
1427 |
+
background-position: -128px -144px;
|
1428 |
+
}
|
1429 |
+
|
1430 |
+
.aioseop-flag.aioseop-flag-my {
|
1431 |
+
background-position: -144px -144px;
|
1432 |
+
}
|
1433 |
+
|
1434 |
+
.aioseop-flag.aioseop-flag-mz {
|
1435 |
+
background-position: -160px -144px;
|
1436 |
+
}
|
1437 |
+
|
1438 |
+
.aioseop-flag.aioseop-flag-na {
|
1439 |
+
background-position: -176px -144px;
|
1440 |
+
}
|
1441 |
+
|
1442 |
+
.aioseop-flag.aioseop-flag-nc {
|
1443 |
+
background-position: -192px -144px;
|
1444 |
+
}
|
1445 |
+
|
1446 |
+
.aioseop-flag.aioseop-flag-ne {
|
1447 |
+
background-position: -208px -144px;
|
1448 |
+
}
|
1449 |
+
|
1450 |
+
.aioseop-flag.aioseop-flag-ng {
|
1451 |
+
background-position: -224px -144px;
|
1452 |
+
}
|
1453 |
+
|
1454 |
+
.aioseop-flag.aioseop-flag-ni {
|
1455 |
+
background-position: 0 -160px;
|
1456 |
+
}
|
1457 |
+
|
1458 |
+
.aioseop-flag.aioseop-flag-nl {
|
1459 |
+
background-position: -16px -160px;
|
1460 |
+
}
|
1461 |
+
|
1462 |
+
.aioseop-flag.aioseop-flag-no {
|
1463 |
+
background-position: -32px -160px;
|
1464 |
+
}
|
1465 |
+
|
1466 |
+
.aioseop-flag.aioseop-flag-np {
|
1467 |
+
background-position: -48px -160px;
|
1468 |
+
}
|
1469 |
+
|
1470 |
+
.aioseop-flag.aioseop-flag-nr {
|
1471 |
+
background-position: -64px -160px;
|
1472 |
+
}
|
1473 |
+
|
1474 |
+
.aioseop-flag.aioseop-flag-nz {
|
1475 |
+
background-position: -80px -160px;
|
1476 |
+
}
|
1477 |
+
|
1478 |
+
.aioseop-flag.aioseop-flag-om {
|
1479 |
+
background-position: -96px -160px;
|
1480 |
+
}
|
1481 |
+
|
1482 |
+
.aioseop-flag.aioseop-flag-pa {
|
1483 |
+
background-position: -112px -160px;
|
1484 |
+
}
|
1485 |
+
|
1486 |
+
.aioseop-flag.aioseop-flag-pe {
|
1487 |
+
background-position: -128px -160px;
|
1488 |
+
}
|
1489 |
+
|
1490 |
+
.aioseop-flag.aioseop-flag-pf {
|
1491 |
+
background-position: -144px -160px;
|
1492 |
+
}
|
1493 |
+
|
1494 |
+
.aioseop-flag.aioseop-flag-pg {
|
1495 |
+
background-position: -160px -160px;
|
1496 |
+
}
|
1497 |
+
|
1498 |
+
.aioseop-flag.aioseop-flag-ph {
|
1499 |
+
background-position: -176px -160px;
|
1500 |
+
}
|
1501 |
+
|
1502 |
+
.aioseop-flag.aioseop-flag-pk {
|
1503 |
+
background-position: -192px -160px;
|
1504 |
+
}
|
1505 |
+
|
1506 |
+
.aioseop-flag.aioseop-flag-pl {
|
1507 |
+
background-position: -208px -160px;
|
1508 |
+
}
|
1509 |
+
|
1510 |
+
.aioseop-flag.aioseop-flag-pr {
|
1511 |
+
background-position: -224px -160px;
|
1512 |
+
}
|
1513 |
+
|
1514 |
+
.aioseop-flag.aioseop-flag-ps {
|
1515 |
+
background-position: 0 -176px;
|
1516 |
+
}
|
1517 |
+
|
1518 |
+
.aioseop-flag.aioseop-flag-pt {
|
1519 |
+
background-position: -16px -176px;
|
1520 |
+
}
|
1521 |
+
|
1522 |
+
.aioseop-flag.aioseop-flag-pw {
|
1523 |
+
background-position: -32px -176px;
|
1524 |
+
}
|
1525 |
+
|
1526 |
+
.aioseop-flag.aioseop-flag-py {
|
1527 |
+
background-position: -48px -176px;
|
1528 |
+
}
|
1529 |
+
|
1530 |
+
.aioseop-flag.aioseop-flag-qa {
|
1531 |
+
background-position: -64px -176px;
|
1532 |
+
}
|
1533 |
+
|
1534 |
+
.aioseop-flag.aioseop-flag-re {
|
1535 |
+
background-position: -80px -176px;
|
1536 |
+
}
|
1537 |
+
|
1538 |
+
.aioseop-flag.aioseop-flag-ro {
|
1539 |
+
background-position: -96px -176px;
|
1540 |
+
}
|
1541 |
+
|
1542 |
+
.aioseop-flag.aioseop-flag-rs {
|
1543 |
+
background-position: -112px -176px;
|
1544 |
+
}
|
1545 |
+
|
1546 |
+
.aioseop-flag.aioseop-flag-ru {
|
1547 |
+
background-position: -128px -176px;
|
1548 |
+
}
|
1549 |
+
|
1550 |
+
.aioseop-flag.aioseop-flag-rw {
|
1551 |
+
background-position: -144px -176px;
|
1552 |
+
}
|
1553 |
+
|
1554 |
+
.aioseop-flag.aioseop-flag-sa {
|
1555 |
+
background-position: -160px -176px;
|
1556 |
+
}
|
1557 |
+
|
1558 |
+
.aioseop-flag.aioseop-flag-sb {
|
1559 |
+
background-position: -176px -176px;
|
1560 |
+
}
|
1561 |
+
|
1562 |
+
.aioseop-flag.aioseop-flag-sc {
|
1563 |
+
background-position: -192px -176px;
|
1564 |
+
}
|
1565 |
+
|
1566 |
+
.aioseop-flag.aioseop-flag-sd {
|
1567 |
+
background-position: -208px -176px;
|
1568 |
+
}
|
1569 |
+
|
1570 |
+
.aioseop-flag.aioseop-flag-se {
|
1571 |
+
background-position: -224px -176px;
|
1572 |
+
}
|
1573 |
+
|
1574 |
+
.aioseop-flag.aioseop-flag-sg {
|
1575 |
+
background-position: 0 -192px;
|
1576 |
+
}
|
1577 |
+
|
1578 |
+
.aioseop-flag.aioseop-flag-si {
|
1579 |
+
background-position: -16px -192px;
|
1580 |
+
}
|
1581 |
+
|
1582 |
+
.aioseop-flag.aioseop-flag-sk {
|
1583 |
+
background-position: -32px -192px;
|
1584 |
+
}
|
1585 |
+
|
1586 |
+
.aioseop-flag.aioseop-flag-sl {
|
1587 |
+
background-position: -48px -192px;
|
1588 |
+
}
|
1589 |
+
|
1590 |
+
.aioseop-flag.aioseop-flag-sm {
|
1591 |
+
background-position: -64px -192px;
|
1592 |
+
}
|
1593 |
+
|
1594 |
+
.aioseop-flag.aioseop-flag-sn {
|
1595 |
+
background-position: -80px -192px;
|
1596 |
+
}
|
1597 |
+
|
1598 |
+
.aioseop-flag.aioseop-flag-so {
|
1599 |
+
background-position: -96px -192px;
|
1600 |
+
}
|
1601 |
+
|
1602 |
+
.aioseop-flag.aioseop-flag-sr {
|
1603 |
+
background-position: -112px -192px;
|
1604 |
+
}
|
1605 |
+
|
1606 |
+
.aioseop-flag.aioseop-flag-st {
|
1607 |
+
background-position: -128px -192px;
|
1608 |
+
}
|
1609 |
+
|
1610 |
+
.aioseop-flag.aioseop-flag-sv {
|
1611 |
+
background-position: -144px -192px;
|
1612 |
+
}
|
1613 |
+
|
1614 |
+
.aioseop-flag.aioseop-flag-sy {
|
1615 |
+
background-position: -160px -192px;
|
1616 |
+
}
|
1617 |
+
|
1618 |
+
.aioseop-flag.aioseop-flag-sz {
|
1619 |
+
background-position: -176px -192px;
|
1620 |
+
}
|
1621 |
+
|
1622 |
+
.aioseop-flag.aioseop-flag-tc {
|
1623 |
+
background-position: -192px -192px;
|
1624 |
+
}
|
1625 |
+
|
1626 |
+
.aioseop-flag.aioseop-flag-td {
|
1627 |
+
background-position: -208px -192px;
|
1628 |
+
}
|
1629 |
+
|
1630 |
+
.aioseop-flag.aioseop-flag-tg {
|
1631 |
+
background-position: -224px -192px;
|
1632 |
+
}
|
1633 |
+
|
1634 |
+
.aioseop-flag.aioseop-flag-th {
|
1635 |
+
background-position: 0 -208px;
|
1636 |
+
}
|
1637 |
+
|
1638 |
+
.aioseop-flag.aioseop-flag-tj {
|
1639 |
+
background-position: -16px -208px;
|
1640 |
+
}
|
1641 |
+
|
1642 |
+
.aioseop-flag.aioseop-flag-tl {
|
1643 |
+
background-position: -32px -208px;
|
1644 |
+
}
|
1645 |
+
|
1646 |
+
.aioseop-flag.aioseop-flag-tm {
|
1647 |
+
background-position: -48px -208px;
|
1648 |
+
}
|
1649 |
+
|
1650 |
+
.aioseop-flag.aioseop-flag-tn {
|
1651 |
+
background-position: -64px -208px;
|
1652 |
+
}
|
1653 |
+
|
1654 |
+
.aioseop-flag.aioseop-flag-to {
|
1655 |
+
background-position: -80px -208px;
|
1656 |
+
}
|
1657 |
+
|
1658 |
+
.aioseop-flag.aioseop-flag-tr {
|
1659 |
+
background-position: -96px -208px;
|
1660 |
+
}
|
1661 |
+
|
1662 |
+
.aioseop-flag.aioseop-flag-tt {
|
1663 |
+
background-position: -112px -208px;
|
1664 |
+
}
|
1665 |
+
|
1666 |
+
.aioseop-flag.aioseop-flag-tv {
|
1667 |
+
background-position: -128px -208px;
|
1668 |
+
}
|
1669 |
+
|
1670 |
+
.aioseop-flag.aioseop-flag-tw {
|
1671 |
+
background-position: -144px -208px;
|
1672 |
+
}
|
1673 |
+
|
1674 |
+
.aioseop-flag.aioseop-flag-tz {
|
1675 |
+
background-position: -160px -208px;
|
1676 |
+
}
|
1677 |
+
|
1678 |
+
.aioseop-flag.aioseop-flag-ua {
|
1679 |
+
background-position: -176px -208px;
|
1680 |
+
}
|
1681 |
+
|
1682 |
+
.aioseop-flag.aioseop-flag-ug {
|
1683 |
+
background-position: -192px -208px;
|
1684 |
+
}
|
1685 |
+
|
1686 |
+
.aioseop-flag.aioseop-flag-us {
|
1687 |
+
background-position: -208px -208px;
|
1688 |
+
}
|
1689 |
+
|
1690 |
+
.aioseop-flag.aioseop-flag-uy {
|
1691 |
+
background-position: -224px -208px;
|
1692 |
+
}
|
1693 |
+
|
1694 |
+
.aioseop-flag.aioseop-flag-uz {
|
1695 |
+
background-position: 0 -224px;
|
1696 |
+
}
|
1697 |
+
|
1698 |
+
.aioseop-flag.aioseop-flag-va {
|
1699 |
+
background-position: -16px -224px;
|
1700 |
+
}
|
1701 |
+
|
1702 |
+
.aioseop-flag.aioseop-flag-vc {
|
1703 |
+
background-position: -32px -224px;
|
1704 |
+
}
|
1705 |
+
|
1706 |
+
.aioseop-flag.aioseop-flag-ve {
|
1707 |
+
background-position: -48px -224px;
|
1708 |
+
}
|
1709 |
+
|
1710 |
+
.aioseop-flag.aioseop-flag-vg {
|
1711 |
+
background-position: -64px -224px;
|
1712 |
+
}
|
1713 |
+
|
1714 |
+
.aioseop-flag.aioseop-flag-vi {
|
1715 |
+
background-position: -80px -224px;
|
1716 |
+
}
|
1717 |
+
|
1718 |
+
.aioseop-flag.aioseop-flag-vn {
|
1719 |
+
background-position: -96px -224px;
|
1720 |
+
}
|
1721 |
+
|
1722 |
+
.aioseop-flag.aioseop-flag-vu {
|
1723 |
+
background-position: -112px -224px;
|
1724 |
+
}
|
1725 |
+
|
1726 |
+
.aioseop-flag.aioseop-flag-ws {
|
1727 |
+
background-position: -128px -224px;
|
1728 |
+
}
|
1729 |
+
|
1730 |
+
.aioseop-flag.aioseop-flag-ye {
|
1731 |
+
background-position: -144px -224px;
|
1732 |
+
}
|
1733 |
+
|
1734 |
+
.aioseop-flag.aioseop-flag-za {
|
1735 |
+
background-position: -160px -224px;
|
1736 |
+
}
|
1737 |
+
|
1738 |
+
.aioseop-flag.aioseop-flag-zm {
|
1739 |
+
background-position: -176px -224px;
|
1740 |
+
}
|
1741 |
+
|
1742 |
+
.aioseop-flag.aioseop-flag-zw {
|
1743 |
+
background-position: -192px -224px;
|
1744 |
+
}
|
1745 |
+
|
1746 |
+
#aioseop-header-temp {
|
1747 |
+
position: relative;
|
1748 |
+
margin: 0;
|
1749 |
+
position: absolute;
|
1750 |
+
top: -1px;
|
1751 |
+
left: 20px;
|
1752 |
+
right: 20px;
|
1753 |
+
z-index: 99;
|
1754 |
+
}
|
1755 |
+
|
1756 |
+
#aioseop-header {
|
1757 |
+
border-top: 3px solid #e27730;
|
1758 |
+
padding: 22px 20px;
|
1759 |
+
}
|
1760 |
+
|
1761 |
+
#aioseop-header img {
|
1762 |
+
display: block;
|
1763 |
+
margin: 0;
|
1764 |
+
max-width: 235px;
|
1765 |
+
}
|
1766 |
+
|
1767 |
+
@media (max-width: 782px) {
|
1768 |
+
#aioseop-header img {
|
1769 |
+
max-width: 200px;
|
1770 |
+
}
|
1771 |
+
}
|
1772 |
+
|
1773 |
+
.aioseop-admin-wrap .page-title {
|
1774 |
+
background-color: #fff;
|
1775 |
+
margin: 0 0 20px 0;
|
1776 |
+
padding: 15px 20px;
|
1777 |
+
}
|
1778 |
+
|
1779 |
+
.aioseop-admin-wrap .page-title .add-new-h2 {
|
1780 |
+
margin-left: 28px;
|
1781 |
+
}
|
1782 |
+
|
1783 |
+
.aioseop-admin-tabs {
|
1784 |
+
background-color: #fff;
|
1785 |
+
margin: 0 0 20px 0;
|
1786 |
+
padding: 0 20px;
|
1787 |
+
list-style: none;
|
1788 |
+
overflow: auto;
|
1789 |
+
font-size: 14px;
|
1790 |
+
}
|
1791 |
+
|
1792 |
+
.aioseop-admin-tabs li {
|
1793 |
+
margin: 0 30px 0 0;
|
1794 |
+
padding: 0;
|
1795 |
+
float: left;
|
1796 |
+
}
|
1797 |
+
|
1798 |
+
.aioseop-admin-tabs li:last-of-type {
|
1799 |
+
margin: 0;
|
1800 |
+
}
|
1801 |
+
|
1802 |
+
.aioseop-admin-tabs li a {
|
1803 |
+
color: #666;
|
1804 |
+
display: block;
|
1805 |
+
padding: 20px 0 18px 0;
|
1806 |
+
text-decoration: none;
|
1807 |
+
border-bottom: 2px solid #fff;
|
1808 |
+
box-shadow: none;
|
1809 |
+
}
|
1810 |
+
|
1811 |
+
.aioseop-admin-tabs li a:hover {
|
1812 |
+
border-color: #999;
|
1813 |
+
}
|
1814 |
+
|
1815 |
+
.aioseop-admin-tabs li a.active {
|
1816 |
+
border-color: #0073AA;
|
1817 |
+
}
|
1818 |
+
|
1819 |
+
.aioseop-admin-tabs li a:focus {
|
1820 |
+
box-shadow: none;
|
1821 |
+
}
|
1822 |
+
|
1823 |
+
#wpcontent {
|
1824 |
+
padding-left: 0 !important;
|
1825 |
+
position: relative;
|
1826 |
+
}
|
1827 |
+
|
1828 |
+
@media (max-width: 600px) {
|
1829 |
+
#wpcontent {
|
1830 |
+
padding-top: 46px;
|
1831 |
+
}
|
1832 |
+
}
|
1833 |
+
|
1834 |
+
@media (max-width: 600px) {
|
1835 |
+
#wpbody {
|
1836 |
+
padding-top: 0;
|
1837 |
+
}
|
1838 |
+
}
|
1839 |
+
|
1840 |
+
.aioseop-admin-page #screen-meta-links,
|
1841 |
+
.aioseop-admin-page #screen-meta {
|
1842 |
+
display: none;
|
1843 |
+
}
|
1844 |
+
|
1845 |
+
.aioseop-admin-page .video-container {
|
1846 |
+
position: relative;
|
1847 |
+
padding-bottom: 56.1%;
|
1848 |
+
height: 0;
|
1849 |
+
overflow: hidden;
|
1850 |
+
}
|
1851 |
+
|
1852 |
+
.aioseop-admin-page .video-container iframe,
|
1853 |
+
.aioseop-admin-page .video-container object,
|
1854 |
+
.aioseop-admin-page .video-container embed {
|
1855 |
+
position: absolute;
|
1856 |
+
top: 0;
|
1857 |
+
left: 0;
|
1858 |
+
width: 100%;
|
1859 |
+
height: 100%;
|
1860 |
+
}
|
1861 |
+
|
1862 |
+
.aioseop-admin-page .aioseop-file-upload input[type=file] {
|
1863 |
+
width: 0.1px;
|
1864 |
+
height: 0.1px;
|
1865 |
+
opacity: 0;
|
1866 |
+
overflow: hidden;
|
1867 |
+
position: absolute;
|
1868 |
+
z-index: -1;
|
1869 |
+
}
|
1870 |
+
|
1871 |
+
.aioseop-admin-page .aioseop-file-upload label {
|
1872 |
+
text-overflow: ellipsis;
|
1873 |
+
white-space: nowrap;
|
1874 |
+
cursor: pointer;
|
1875 |
+
display: inline-block;
|
1876 |
+
overflow: hidden;
|
1877 |
+
padding: 0;
|
1878 |
+
}
|
1879 |
+
|
1880 |
+
.aioseop-admin-page .aioseop-file-upload input[type=file]:focus+label,
|
1881 |
+
.aioseop-admin-page .aioseop-file-upload input[type=file].has-focus+label {
|
1882 |
+
outline: 1px dotted #000;
|
1883 |
+
outline: -webkit-focus-ring-color auto 5px;
|
1884 |
+
}
|
1885 |
+
|
1886 |
+
.aioseop-admin-page .aioseop-file-upload .fld {
|
1887 |
+
text-overflow: ellipsis;
|
1888 |
+
white-space: nowrap;
|
1889 |
+
overflow: hidden;
|
1890 |
+
background-color: #fff;
|
1891 |
+
border: 1px solid #ddd;
|
1892 |
+
border-radius: 3px;
|
1893 |
+
box-shadow: none;
|
1894 |
+
color: #333;
|
1895 |
+
display: inline-block;
|
1896 |
+
vertical-align: middle;
|
1897 |
+
padding: 7px 12px;
|
1898 |
+
margin: 0 10px 0 0;
|
1899 |
+
width: 400px;
|
1900 |
+
min-height: 35px;
|
1901 |
+
}
|
1902 |
+
|
1903 |
+
.aioseop-admin-page .aioseop-file-upload .fld .placeholder {
|
1904 |
+
color: #ccc;
|
1905 |
+
}
|
1906 |
+
|
1907 |
+
.aioseop-admin-page .aioseop-file-upload strong .fa {
|
1908 |
+
margin-right: 8px;
|
1909 |
+
}
|
1910 |
+
|
1911 |
+
.aioseop-admin-page .aioseop-hide {
|
1912 |
+
display: none;
|
1913 |
+
}
|
1914 |
+
|
1915 |
+
.aioseop-admin-page .aioseop-h1-placeholder {
|
1916 |
+
display: none;
|
1917 |
+
}
|
1918 |
+
|
1919 |
+
.aioseop-admin-page .notice {
|
1920 |
+
display: none;
|
1921 |
+
}
|
1922 |
+
|
1923 |
+
.aioseop-admin-page .lity {
|
1924 |
+
z-index: 999999999;
|
1925 |
+
padding: 20px;
|
1926 |
+
}
|
1927 |
+
|
1928 |
+
.aioseop-admin-page .lity-close {
|
1929 |
+
margin: 10px;
|
1930 |
+
}
|
1931 |
+
|
1932 |
+
.aioseop-admin-page .lity-content {
|
1933 |
+
max-width: 80vw;
|
1934 |
+
max-height: 80vh;
|
1935 |
+
}
|
1936 |
+
|
1937 |
+
.aioseop-admin-page .lity-content img {
|
1938 |
+
max-height: 80vh !important;
|
1939 |
+
max-width: 80vw !important;
|
1940 |
+
}
|
1941 |
+
|
1942 |
+
.aioseop-admin-page input.choices__input {
|
1943 |
+
line-height: normal;
|
1944 |
+
}
|
1945 |
+
|
1946 |
+
.aioseop-admin-page input:focus,
|
1947 |
+
.aioseop-admin-page select:focus,
|
1948 |
+
.aioseop-admin-page textarea:focus {
|
1949 |
+
border: 1px solid #016AAB !important;
|
1950 |
+
box-shadow: 0 0 0 1px #016AAB !important;
|
1951 |
+
outline: none !important;
|
1952 |
+
}
|
1953 |
+
|
1954 |
+
.aioseop-admin-page a:focus {
|
1955 |
+
box-shadow: 0 0 2px 1px #016AABCC;
|
1956 |
+
}
|
1957 |
+
|
1958 |
+
.aioseop-admin-wrap {
|
1959 |
+
margin: 0;
|
1960 |
+
}
|
1961 |
+
|
1962 |
+
.aioseop-admin-wrap .notice {
|
1963 |
+
margin-left: 20px !important;
|
1964 |
+
margin-right: 20px !important;
|
1965 |
+
}
|
1966 |
+
|
1967 |
+
.aioseop-admin-content {
|
1968 |
+
padding-left: 20px;
|
1969 |
+
padding-right: 20px;
|
1970 |
+
}
|
1971 |
+
|
1972 |
+
.aioseop-admin-content:before {
|
1973 |
+
content: " ";
|
1974 |
+
display: table;
|
1975 |
+
}
|
1976 |
+
|
1977 |
+
.aioseop-admin-content:after {
|
1978 |
+
clear: both;
|
1979 |
+
content: " ";
|
1980 |
+
display: table;
|
1981 |
+
}
|
1982 |
+
|
1983 |
+
.aioseop-admin-content hr {
|
1984 |
+
border: none;
|
1985 |
+
border-top: 1px solid #e4e4e4;
|
1986 |
+
margin: 20px 0;
|
1987 |
+
background: none;
|
1988 |
+
}
|
1989 |
+
|
1990 |
+
.aioseop-clear:before {
|
1991 |
+
content: " ";
|
1992 |
+
display: table;
|
1993 |
+
}
|
1994 |
+
|
1995 |
+
.aioseop-clear:after {
|
1996 |
+
clear: both;
|
1997 |
+
content: " ";
|
1998 |
+
display: table;
|
1999 |
+
}
|
2000 |
+
|
2001 |
+
.aioseop-admin-columns>div[class*="-column-"] {
|
2002 |
+
float: left;
|
2003 |
+
}
|
2004 |
+
|
2005 |
+
.aioseop-admin-columns .aioseop-admin-column-20 {
|
2006 |
+
width: 20%;
|
2007 |
+
}
|
2008 |
+
|
2009 |
+
.aioseop-admin-columns .aioseop-admin-column-33 {
|
2010 |
+
width: 33.33333%;
|
2011 |
+
}
|
2012 |
+
|
2013 |
+
.aioseop-admin-columns .aioseop-admin-column-40 {
|
2014 |
+
width: 40%;
|
2015 |
+
}
|
2016 |
+
|
2017 |
+
.aioseop-admin-columns .aioseop-admin-column-50 {
|
2018 |
+
width: 50%;
|
2019 |
+
}
|
2020 |
+
|
2021 |
+
.aioseop-admin-columns .aioseop-admin-column-60 {
|
2022 |
+
width: 60%;
|
2023 |
+
}
|
2024 |
+
|
2025 |
+
.aioseop-admin-columns .aioseop-admin-column-80 {
|
2026 |
+
width: 80%;
|
2027 |
+
}
|
2028 |
+
|
2029 |
+
.aioseop-admin-columns .aioseop-admin-column-last {
|
2030 |
+
float: right !important;
|
2031 |
+
}
|
2032 |
+
|
2033 |
+
.aioseop-admin-columns:after {
|
2034 |
+
content: "";
|
2035 |
+
display: table;
|
2036 |
+
clear: both;
|
2037 |
+
}
|
2038 |
+
|
2039 |
+
.lity-active,
|
2040 |
+
.lity-active body.aioseop-admin-page {
|
2041 |
+
overflow: scroll;
|
2042 |
+
}
|
2043 |
+
|
2044 |
+
#aioseop-overview .tablenav.top {
|
2045 |
+
margin-top: 0;
|
2046 |
+
}
|
2047 |
+
|
2048 |
+
#aioseop-overview .wp-list-table .column-id {
|
2049 |
+
width: 30px;
|
2050 |
+
}
|
2051 |
+
|
2052 |
+
#aioseop-overview .wp-list-table .column-entries {
|
2053 |
+
width: 70px;
|
2054 |
+
}
|
2055 |
+
|
2056 |
+
#aioseop-overview .wp-list-table .column-shortcode {
|
2057 |
+
width: 150px;
|
2058 |
+
}
|
2059 |
+
|
2060 |
+
#aioseop-overview .wp-list-table .column-created {
|
2061 |
+
width: 145px;
|
2062 |
+
}
|
2063 |
+
|
2064 |
+
#aioseop-entries-single #poststuff {
|
2065 |
+
padding: 0;
|
2066 |
+
}
|
2067 |
+
|
2068 |
+
#aioseop-entries-single .postbox .hndle {
|
2069 |
+
cursor: default !important;
|
2070 |
+
}
|
2071 |
+
|
2072 |
+
#aioseop-entries-single .aioseop-entry-navigation {
|
2073 |
+
font-size: 13px;
|
2074 |
+
line-height: 29px;
|
2075 |
+
float: right;
|
2076 |
+
position: relative;
|
2077 |
+
padding-top: 2px;
|
2078 |
+
padding-right: 1px;
|
2079 |
+
white-space: nowrap;
|
2080 |
+
}
|
2081 |
+
|
2082 |
+
@media (max-width: 600px) {
|
2083 |
+
#aioseop-entries-single .aioseop-entry-navigation {
|
2084 |
+
display: none;
|
2085 |
+
}
|
2086 |
+
}
|
2087 |
+
|
2088 |
+
#aioseop-entries-single .aioseop-entry-navigation .add-new-h2 {
|
2089 |
+
top: auto;
|
2090 |
+
margin: 0;
|
2091 |
+
padding: 4px 0px;
|
2092 |
+
text-align: center;
|
2093 |
+
}
|
2094 |
+
|
2095 |
+
@media (max-width: 782px) {
|
2096 |
+
#aioseop-entries-single .aioseop-entry-navigation .add-new-h2 {
|
2097 |
+
font-size: 13px;
|
2098 |
+
}
|
2099 |
+
}
|
2100 |
+
|
2101 |
+
#aioseop-entries-single .aioseop-entry-navigation .add-new-h2 .dashicons {
|
2102 |
+
font-size: 16px;
|
2103 |
+
height: auto;
|
2104 |
+
width: 28px;
|
2105 |
+
line-height: 29px;
|
2106 |
+
}
|
2107 |
+
|
2108 |
+
#aioseop-entries-single .aioseop-entry-navigation .add-new-h2.inactive {
|
2109 |
+
opacity: 0.5;
|
2110 |
+
pointer-events: none;
|
2111 |
+
cursor: default;
|
2112 |
+
}
|
2113 |
+
|
2114 |
+
#aioseop-entries-single .aioseop-entry-navigation .aioseop-entry-navigation-text {
|
2115 |
+
display: inline-block;
|
2116 |
+
margin-right: 10px;
|
2117 |
+
}
|
2118 |
+
|
2119 |
+
#aioseop-entries-single .aioseop-entry-navigation .aioseop-entry-current {
|
2120 |
+
top: auto;
|
2121 |
+
margin: 0 -5px 0 -3px;
|
2122 |
+
text-align: center;
|
2123 |
+
padding: 4px 10px;
|
2124 |
+
position: relative;
|
2125 |
+
text-decoration: none;
|
2126 |
+
border: 1px solid #ccc;
|
2127 |
+
-webkit-border-radius: 2px;
|
2128 |
+
border-radius: 2px;
|
2129 |
+
background: #fff;
|
2130 |
+
font-size: 13px;
|
2131 |
+
line-height: 29px;
|
2132 |
+
text-transform: center;
|
2133 |
+
}
|
2134 |
+
|
2135 |
+
#aioseop-entries-single #aioseop-entry-fields h2.hndle {
|
2136 |
+
font-size: 18px;
|
2137 |
+
}
|
2138 |
+
|
2139 |
+
#aioseop-entries-single #aioseop-entry-fields h2.hndle .dashicons {
|
2140 |
+
font-size: 16px;
|
2141 |
+
height: 16px;
|
2142 |
+
width: 16px;
|
2143 |
+
margin: 4px 4px 0 0;
|
2144 |
+
color: #e27730;
|
2145 |
+
}
|
2146 |
+
|
2147 |
+
#aioseop-entries-single #aioseop-entry-fields .no-fields {
|
2148 |
+
padding: 12px;
|
2149 |
+
margin: 0;
|
2150 |
+
}
|
2151 |
+
|
2152 |
+
#aioseop-entries-single #aioseop-entry-fields .inside {
|
2153 |
+
padding: 0;
|
2154 |
+
margin: 0;
|
2155 |
+
}
|
2156 |
+
|
2157 |
+
#aioseop-entries-single #aioseop-entry-fields .inside p {
|
2158 |
+
padding: 0;
|
2159 |
+
margin: 0;
|
2160 |
+
}
|
2161 |
+
|
2162 |
+
#aioseop-entries-single #aioseop-entry-fields .inside .aioseop-entry-field-name {
|
2163 |
+
font-weight: 600;
|
2164 |
+
background: #ebf3fb;
|
2165 |
+
padding: 8px 12px;
|
2166 |
+
}
|
2167 |
+
|
2168 |
+
#aioseop-entries-single #aioseop-entry-fields .inside .aioseop-entry-field-value {
|
2169 |
+
background: #fff;
|
2170 |
+
padding: 8px 12px;
|
2171 |
+
}
|
2172 |
+
|
2173 |
+
#aioseop-entries-single #aioseop-entry-fields .inside .empty .aioseop-entry-field-value {
|
2174 |
+
font-style: italic;
|
2175 |
+
color: #999;
|
2176 |
+
}
|
2177 |
+
|
2178 |
+
#aioseop-entries-single #aioseop-entry-fields .aioseop-empty-field-toggle {
|
2179 |
+
float: right;
|
2180 |
+
text-decoration: none;
|
2181 |
+
padding: 5px 0 0;
|
2182 |
+
}
|
2183 |
+
|
2184 |
+
#aioseop-entries-single #aioseop-entry-notes .inside {
|
2185 |
+
margin: 0;
|
2186 |
+
padding: 0;
|
2187 |
+
}
|
2188 |
+
|
2189 |
+
#aioseop-entries-single #aioseop-entry-notes .aioseop-entry-notes-new {
|
2190 |
+
padding: 10px;
|
2191 |
+
}
|
2192 |
+
|
2193 |
+
#aioseop-entries-single #aioseop-entry-notes form {
|
2194 |
+
display: none;
|
2195 |
+
}
|
2196 |
+
|
2197 |
+
#aioseop-entries-single #aioseop-entry-notes .btns {
|
2198 |
+
overflow: auto;
|
2199 |
+
padding: 8px 0;
|
2200 |
+
}
|
2201 |
+
|
2202 |
+
#aioseop-entries-single #aioseop-entry-notes .no-notes {
|
2203 |
+
margin: 0;
|
2204 |
+
padding: 4px 10px 8px;
|
2205 |
+
}
|
2206 |
+
|
2207 |
+
#aioseop-entries-single #aioseop-entry-notes .aioseop-entry-notes-single {
|
2208 |
+
padding: 10px;
|
2209 |
+
border-top: 1px solid #e3e1e3;
|
2210 |
+
}
|
2211 |
+
|
2212 |
+
#aioseop-entries-single #aioseop-entry-notes .aioseop-entry-notes-single p:last-of-type {
|
2213 |
+
margin-bottom: 0;
|
2214 |
+
}
|
2215 |
+
|
2216 |
+
#aioseop-entries-single #aioseop-entry-notes .aioseop-entry-notes-single.even {
|
2217 |
+
background-color: #f9f9f9;
|
2218 |
+
}
|
2219 |
+
|
2220 |
+
#aioseop-entries-single #aioseop-entry-notes .aioseop-entry-notes-byline {
|
2221 |
+
color: #888;
|
2222 |
+
margin-bottom: 10px;
|
2223 |
+
}
|
2224 |
+
|
2225 |
+
#aioseop-entries-single #aioseop-entry-notes .aioseop-entry-notes-byline .sep {
|
2226 |
+
color: #ddd;
|
2227 |
+
}
|
2228 |
+
|
2229 |
+
#aioseop-entries-single #aioseop-entry-notes .aioseop-entry-notes-byline .notes-user {
|
2230 |
+
text-decoration: none;
|
2231 |
+
font-weight: 600;
|
2232 |
+
}
|
2233 |
+
|
2234 |
+
#aioseop-entries-single #aioseop-entry-notes .aioseop-entry-notes-byline .note-delete {
|
2235 |
+
color: #a00;
|
2236 |
+
text-decoration: none;
|
2237 |
+
}
|
2238 |
+
|
2239 |
+
#aioseop-entries-single #aioseop-entry-notes .aioseop-entry-notes-byline .note-delete:hover {
|
2240 |
+
color: red;
|
2241 |
+
text-decoration: none;
|
2242 |
+
}
|
2243 |
+
|
2244 |
+
#aioseop-entries-single #aioseop-entry-logs .inside {
|
2245 |
+
margin: 0;
|
2246 |
+
padding: 0;
|
2247 |
+
}
|
2248 |
+
|
2249 |
+
#aioseop-entries-single #aioseop-entry-logs form {
|
2250 |
+
display: none;
|
2251 |
+
}
|
2252 |
+
|
2253 |
+
#aioseop-entries-single #aioseop-entry-logs .btns {
|
2254 |
+
overflow: auto;
|
2255 |
+
padding: 8px 0;
|
2256 |
+
}
|
2257 |
+
|
2258 |
+
#aioseop-entries-single #aioseop-entry-logs .no-logs {
|
2259 |
+
margin: 0;
|
2260 |
+
padding: 4px 10px 8px;
|
2261 |
+
}
|
2262 |
+
|
2263 |
+
#aioseop-entries-single #aioseop-entry-logs .aioseop-entry-logs-single {
|
2264 |
+
padding: 10px;
|
2265 |
+
border-top: 1px solid #e3e1e3;
|
2266 |
+
}
|
2267 |
+
|
2268 |
+
#aioseop-entries-single #aioseop-entry-logs .aioseop-entry-logs-single:first-of-type {
|
2269 |
+
border-top: 0;
|
2270 |
+
}
|
2271 |
+
|
2272 |
+
#aioseop-entries-single #aioseop-entry-logs .aioseop-entry-logs-single p:last-of-type {
|
2273 |
+
margin-bottom: 0;
|
2274 |
+
}
|
2275 |
+
|
2276 |
+
#aioseop-entries-single #aioseop-entry-logs .aioseop-entry-logs-single.even {
|
2277 |
+
background-color: #f9f9f9;
|
2278 |
+
}
|
2279 |
+
|
2280 |
+
#aioseop-entries-single #aioseop-entry-logs .aioseop-entry-logs-byline {
|
2281 |
+
color: #888;
|
2282 |
+
margin-bottom: 10px;
|
2283 |
+
}
|
2284 |
+
|
2285 |
+
#aioseop-entries-single #aioseop-entry-logs .aioseop-entry-logs-byline .notes-user {
|
2286 |
+
text-decoration: none;
|
2287 |
+
font-weight: 600;
|
2288 |
+
}
|
2289 |
+
|
2290 |
+
#aioseop-entries-single #aioseop-entry-details .inside,
|
2291 |
+
#aioseop-entries-single #aioseop-entry-payment .inside,
|
2292 |
+
#aioseop-entries-single #aioseop-entry-actions .inside {
|
2293 |
+
margin: 0;
|
2294 |
+
padding: 0;
|
2295 |
+
}
|
2296 |
+
|
2297 |
+
#aioseop-entries-single .aioseop-entry-details-meta,
|
2298 |
+
#aioseop-entries-single .aioseop-entry-actions-meta {
|
2299 |
+
padding: 6px 0 0;
|
2300 |
+
}
|
2301 |
+
|
2302 |
+
#aioseop-entries-single .aioseop-entry-details-meta p,
|
2303 |
+
#aioseop-entries-single .aioseop-entry-payment-meta p,
|
2304 |
+
#aioseop-entries-single .aioseop-entry-actions-meta p {
|
2305 |
+
padding: 6px 10px 8px;
|
2306 |
+
margin: 0;
|
2307 |
+
}
|
2308 |
+
|
2309 |
+
#aioseop-entries-single .aioseop-entry-payment-meta {
|
2310 |
+
padding: 0;
|
2311 |
+
}
|
2312 |
+
|
2313 |
+
#aioseop-entries-single .aioseop-entry-payment-meta p {
|
2314 |
+
border-bottom: 1px solid #eee;
|
2315 |
+
padding: 10px;
|
2316 |
+
}
|
2317 |
+
|
2318 |
+
#aioseop-entries-single .aioseop-entry-payment-meta p:last-of-type {
|
2319 |
+
border-bottom: 0;
|
2320 |
+
}
|
2321 |
+
|
2322 |
+
#aioseop-entries-single .aioseop-entry-details-meta strong,
|
2323 |
+
#aioseop-entries-single .aioseop-entry-actions-meta strong {
|
2324 |
+
font-weight: 600;
|
2325 |
+
}
|
2326 |
+
|
2327 |
+
#aioseop-entries-single .aioseop-entry-details-meta .dashicons,
|
2328 |
+
#aioseop-entries-single .aioseop-entry-actions-meta .dashicons {
|
2329 |
+
padding: 0 2px 0 0;
|
2330 |
+
color: #82878A;
|
2331 |
+
top: -1px;
|
2332 |
+
left: -1px;
|
2333 |
+
position: relative;
|
2334 |
+
text-decoration: none;
|
2335 |
+
}
|
2336 |
+
|
2337 |
+
#aioseop-entries-single #aioseop-entry-details .submitdelete {
|
2338 |
+
color: #a00;
|
2339 |
+
text-decoration: none;
|
2340 |
+
padding: 1px 2px;
|
2341 |
+
}
|
2342 |
+
|
2343 |
+
#aioseop-entries-single #aioseop-entry-details .submitdelete:hover {
|
2344 |
+
color: red;
|
2345 |
+
}
|
2346 |
+
|
2347 |
+
#aioseop-entries-single .aioseop-entry-actions-meta a {
|
2348 |
+
text-decoration: none;
|
2349 |
+
}
|
2350 |
+
|
2351 |
+
#aioseop-entries-single .aioseop-entry-actions-meta a:hover {
|
2352 |
+
text-decoration: underline;
|
2353 |
+
}
|
2354 |
+
|
2355 |
+
#aioseop-entries-single #aioseop-entry-geolocation .inside {
|
2356 |
+
padding: 0;
|
2357 |
+
margin: 0;
|
2358 |
+
}
|
2359 |
+
|
2360 |
+
#aioseop-entries-single #aioseop-entry-geolocation ul {
|
2361 |
+
margin: 0;
|
2362 |
+
}
|
2363 |
+
|
2364 |
+
#aioseop-entries-single #aioseop-entry-geolocation ul li {
|
2365 |
+
border-bottom: 1px solid #eee;
|
2366 |
+
margin: 0;
|
2367 |
+
overflow: auto;
|
2368 |
+
}
|
2369 |
+
|
2370 |
+
#aioseop-entries-single #aioseop-entry-geolocation ul li:last-of-type {
|
2371 |
+
border-bottom: 0;
|
2372 |
+
}
|
2373 |
+
|
2374 |
+
#aioseop-entries-single #aioseop-entry-geolocation .aioseop-geolocation-meta {
|
2375 |
+
width: 85px;
|
2376 |
+
float: left;
|
2377 |
+
border-right: 1px solid #eee;
|
2378 |
+
padding: 10px 20px 10px 12px;
|
2379 |
+
}
|
2380 |
+
|
2381 |
+
#aioseop-entries-single #aioseop-entry-geolocation .aioseop-geolocation-value {
|
2382 |
+
display: inline-block;
|
2383 |
+
padding: 10px 12px 10px 20px;
|
2384 |
+
}
|
2385 |
+
|
2386 |
+
#aioseop-entries-single #aioseop-entry-geolocation .aioseop-flag {
|
2387 |
+
vertical-align: text-top;
|
2388 |
+
margin-right: 4px;
|
2389 |
+
}
|
2390 |
+
|
2391 |
+
#aioseop-entries-list .form-details {
|
2392 |
+
border-bottom: 1px solid #ddd;
|
2393 |
+
padding-bottom: 15px;
|
2394 |
+
margin: 0 0 10px;
|
2395 |
+
}
|
2396 |
+
|
2397 |
+
#aioseop-entries-list .form-details .form-details-sub {
|
2398 |
+
color: #999;
|
2399 |
+
display: block;
|
2400 |
+
font-size: 10px;
|
2401 |
+
text-transform: uppercase;
|
2402 |
+
margin: 0 0 8px 0;
|
2403 |
+
}
|
2404 |
+
|
2405 |
+
#aioseop-entries-list .form-details .form-details-title {
|
2406 |
+
float: left;
|
2407 |
+
font-size: 18px;
|
2408 |
+
font-weight: 400;
|
2409 |
+
margin: 0;
|
2410 |
+
}
|
2411 |
+
|
2412 |
+
@media (max-width: 1199px) {
|
2413 |
+
#aioseop-entries-list .form-details .form-details-title {
|
2414 |
+
float: none;
|
2415 |
+
margin-bottom: 10px;
|
2416 |
+
}
|
2417 |
+
}
|
2418 |
+
|
2419 |
+
#aioseop-entries-list .form-details .form-selector {
|
2420 |
+
position: relative;
|
2421 |
+
display: inline-block;
|
2422 |
+
vertical-align: middle;
|
2423 |
+
}
|
2424 |
+
|
2425 |
+
#aioseop-entries-list .form-details .form-selector .toggle {
|
2426 |
+
border-radius: 50%;
|
2427 |
+
color: #444;
|
2428 |
+
font-size: 16px;
|
2429 |
+
box-shadow: none;
|
2430 |
+
}
|
2431 |
+
|
2432 |
+
#aioseop-entries-list .form-details .form-selector .toggle:hover,
|
2433 |
+
#aioseop-entries-list .form-details .form-selector .toggle.active {
|
2434 |
+
background-color: #e3e3e3;
|
2435 |
+
outline: none;
|
2436 |
+
}
|
2437 |
+
|
2438 |
+
#aioseop-entries-list .form-details .form-selector .toggle:before {
|
2439 |
+
vertical-align: middle;
|
2440 |
+
}
|
2441 |
+
|
2442 |
+
#aioseop-entries-list .form-details .form-selector .form-list {
|
2443 |
+
display: none;
|
2444 |
+
background: #fff;
|
2445 |
+
border-radius: 3px;
|
2446 |
+
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
|
2447 |
+
position: absolute;
|
2448 |
+
top: 27px;
|
2449 |
+
left: -108px;
|
2450 |
+
width: 230px;
|
2451 |
+
padding: 10px 0;
|
2452 |
+
z-index: 9991;
|
2453 |
+
}
|
2454 |
+
|
2455 |
+
#aioseop-entries-list .form-details .form-selector .form-list:before {
|
2456 |
+
content: " ";
|
2457 |
+
position: absolute;
|
2458 |
+
top: -10px;
|
2459 |
+
left: 110px;
|
2460 |
+
width: 0;
|
2461 |
+
height: 0;
|
2462 |
+
border-style: solid;
|
2463 |
+
border-width: 0 8px 10px 8px;
|
2464 |
+
border-color: transparent transparent #fff transparent;
|
2465 |
+
}
|
2466 |
+
|
2467 |
+
#aioseop-entries-list .form-details .form-selector ul {
|
2468 |
+
max-height: 196px;
|
2469 |
+
overflow-x: hidden;
|
2470 |
+
padding: 0;
|
2471 |
+
margin: 0;
|
2472 |
+
}
|
2473 |
+
|
2474 |
+
#aioseop-entries-list .form-details .form-selector ul li {
|
2475 |
+
list-style: none;
|
2476 |
+
margin: 0;
|
2477 |
+
font-size: 13px;
|
2478 |
+
}
|
2479 |
+
|
2480 |
+
#aioseop-entries-list .form-details .form-selector ul li a {
|
2481 |
+
display: block;
|
2482 |
+
text-decoration: none;
|
2483 |
+
padding: 5px 15px;
|
2484 |
+
color: #444;
|
2485 |
+
}
|
2486 |
+
|
2487 |
+
#aioseop-entries-list .form-details .form-selector ul li a:hover {
|
2488 |
+
background-color: #f7f7f7;
|
2489 |
+
}
|
2490 |
+
|
2491 |
+
#aioseop-entries-list .form-details .form-details-actions {
|
2492 |
+
float: right;
|
2493 |
+
}
|
2494 |
+
|
2495 |
+
@media (max-width: 1199px) {
|
2496 |
+
#aioseop-entries-list .form-details .form-details-actions {
|
2497 |
+
float: none;
|
2498 |
+
}
|
2499 |
+
}
|
2500 |
+
|
2501 |
+
#aioseop-entries-list .form-details .form-details-actions a {
|
2502 |
+
text-decoration: none;
|
2503 |
+
display: inline-block;
|
2504 |
+
margin: 0 12px 0 0;
|
2505 |
+
}
|
2506 |
+
|
2507 |
+
#aioseop-entries-list .form-details .form-details-actions a:last-of-type {
|
2508 |
+
margin: 0;
|
2509 |
+
}
|
2510 |
+
|
2511 |
+
#aioseop-entries-list .form-details .form-details-actions a .dashicons {
|
2512 |
+
width: 16px;
|
2513 |
+
height: 16px;
|
2514 |
+
font-size: 16px;
|
2515 |
+
}
|
2516 |
+
|
2517 |
+
#aioseop-entries-list .search-box .aioseop-form-search-box-field {
|
2518 |
+
max-width: 180px;
|
2519 |
+
vertical-align: top;
|
2520 |
+
margin: 0 2px 0 0;
|
2521 |
+
}
|
2522 |
+
|
2523 |
+
#aioseop-entries-list .search-box .aioseop-form-search-box-comparison {
|
2524 |
+
max-width: 90px;
|
2525 |
+
vertical-align: top;
|
2526 |
+
margin: 0 2px 0 0;
|
2527 |
+
}
|
2528 |
+
|
2529 |
+
#aioseop-entries-list .search-box .aioseop-form-search-box-term {
|
2530 |
+
min-height: 28px;
|
2531 |
+
line-height: normal;
|
2532 |
+
margin: 0 2px 0 0;
|
2533 |
+
}
|
2534 |
+
|
2535 |
+
#aioseop-entries-list .aioseop-filter-date .aioseop-filter-date-selector {
|
2536 |
+
min-height: 28px;
|
2537 |
+
background-color: #fff;
|
2538 |
+
vertical-align: middle;
|
2539 |
+
max-width: 210px;
|
2540 |
+
line-height: normal;
|
2541 |
+
}
|
2542 |
+
|
2543 |
+
#aioseop-entries-list .aioseop-filter-date button {
|
2544 |
+
margin: 1px 8px 0 0;
|
2545 |
+
vertical-align: top;
|
2546 |
+
}
|
2547 |
+
|
2548 |
+
#aioseop-entries-list .wp-list-table .new-entries-notification td {
|
2549 |
+
padding: 0;
|
2550 |
+
text-align: center;
|
2551 |
+
}
|
2552 |
+
|
2553 |
+
#aioseop-entries-list .wp-list-table .new-entries-notification td a {
|
2554 |
+
display: none;
|
2555 |
+
padding: 10px;
|
2556 |
+
background-color: #d9edf7;
|
2557 |
+
}
|
2558 |
+
|
2559 |
+
#aioseop-entries-list .wp-list-table .column-indicators {
|
2560 |
+
width: 35px;
|
2561 |
+
text-align: center;
|
2562 |
+
}
|
2563 |
+
|
2564 |
+
#aioseop-entries-list .wp-list-table .column-indicators a:focus {
|
2565 |
+
-webkit-box-shadow: none;
|
2566 |
+
box-shadow: none;
|
2567 |
+
}
|
2568 |
+
|
2569 |
+
#aioseop-entries-list .wp-list-table .column-indicators .dashicons {
|
2570 |
+
width: 14px;
|
2571 |
+
height: 14px;
|
2572 |
+
font-size: 14px;
|
2573 |
+
margin-top: 3px;
|
2574 |
+
}
|
2575 |
+
|
2576 |
+
#aioseop-entries-list .wp-list-table .indicator-star .dashicons {
|
2577 |
+
margin-right: 6px;
|
2578 |
+
}
|
2579 |
+
|
2580 |
+
#aioseop-entries-list .wp-list-table .indicator-star {
|
2581 |
+
color: #e4e4e4;
|
2582 |
+
}
|
2583 |
+
|
2584 |
+
#aioseop-entries-list .wp-list-table .indicator-star:hover,
|
2585 |
+
#aioseop-entries-list .wp-list-table .indicator-star.unstar {
|
2586 |
+
color: #e27730;
|
2587 |
+
}
|
2588 |
+
|
2589 |
+
#aioseop-entries-list .wp-list-table .indicator-read {
|
2590 |
+
color: #9ede84;
|
2591 |
+
}
|
2592 |
+
|
2593 |
+
#aioseop-entries-list .wp-list-table .indicator-read:hover,
|
2594 |
+
#aioseop-entries-list .wp-list-table .indicator-read.unread {
|
2595 |
+
color: #e4e4e4;
|
2596 |
+
}
|
2597 |
+
|
2598 |
+
#aioseop-entries-list .wp-list-table .column-date {
|
2599 |
+
width: 150px;
|
2600 |
+
}
|
2601 |
+
|
2602 |
+
#aioseop-entries-list .wp-list-table .column-status {
|
2603 |
+
width: 120px;
|
2604 |
+
}
|
2605 |
+
|
2606 |
+
#aioseop-entries-list .wp-list-table .column-status img {
|
2607 |
+
display: inline-block;
|
2608 |
+
height: 12px;
|
2609 |
+
width: auto;
|
2610 |
+
margin: 0 0 0 3px;
|
2611 |
+
}
|
2612 |
+
|
2613 |
+
#aioseop-entries-list .wp-list-table .column-payment_total {
|
2614 |
+
width: 100px;
|
2615 |
+
}
|
2616 |
+
|
2617 |
+
#aioseop-entries-list .wp-list-table .column-actions {
|
2618 |
+
width: 100px;
|
2619 |
+
}
|
2620 |
+
|
2621 |
+
#aioseop-entries-list .wp-list-table .sep {
|
2622 |
+
color: #ddd;
|
2623 |
+
}
|
2624 |
+
|
2625 |
+
#aioseop-entries-list .wp-list-table .delete:hover {
|
2626 |
+
color: red;
|
2627 |
+
}
|
2628 |
+
|
2629 |
+
#aioseop-entries-list #aioseop-entries-table-edit-columns {
|
2630 |
+
float: right;
|
2631 |
+
color: #ccc;
|
2632 |
+
}
|
2633 |
+
|
2634 |
+
#aioseop-entries-list #aioseop-entries-table-edit-columns:hover {
|
2635 |
+
color: #666;
|
2636 |
+
}
|
2637 |
+
|
2638 |
+
#aioseop-entries-list .aioseop-dash-widget-chart-block {
|
2639 |
+
padding: 12px 12px 0 8px;
|
2640 |
+
background-color: #ffffff;
|
2641 |
+
border: 1px solid #e5e5e5;
|
2642 |
+
margin-top: 20px;
|
2643 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
2644 |
+
}
|
2645 |
+
|
2646 |
+
#aioseop-entries-list .aioseop-dash-widget-chart-block .aioseop-error-no-data-chart {
|
2647 |
+
border: none;
|
2648 |
+
}
|
2649 |
+
|
2650 |
+
#aioseop-entries-list #aioseop-dash-widget-chart-title {
|
2651 |
+
margin-left: -12px;
|
2652 |
+
font-size: 18px;
|
2653 |
+
}
|
2654 |
+
|
2655 |
+
#aioseop-entries-list .aioseop-dash-widget-block:first-child {
|
2656 |
+
margin-top: 0;
|
2657 |
+
}
|
2658 |
+
|
2659 |
+
#aioseop-entries-list .aioseop-dash-widget-reset-chart {
|
2660 |
+
color: #d83638;
|
2661 |
+
opacity: 1;
|
2662 |
+
vertical-align: text-bottom;
|
2663 |
+
margin: 0 0 -1px 0;
|
2664 |
+
}
|
2665 |
+
|
2666 |
+
#aioseop-entries-list .aioseop-dash-widget-reset-chart:hover {
|
2667 |
+
color: #ad2b2c;
|
2668 |
+
}
|
2669 |
+
|
2670 |
+
#aioseop-entries-list .aioseop-dash-widget-reset-chart .dashicons {
|
2671 |
+
font-size: 20px;
|
2672 |
+
height: 20px;
|
2673 |
+
width: 20px;
|
2674 |
+
}
|
2675 |
+
|
2676 |
+
#aioseop-entries-list #aioseop-dash-widget-timespan {
|
2677 |
+
margin: 5px -12px 0 0;
|
2678 |
+
}
|
2679 |
+
|
2680 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-block {
|
2681 |
+
overflow: visible;
|
2682 |
+
}
|
2683 |
+
|
2684 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table {
|
2685 |
+
border: 1px solid #e5e5e5;
|
2686 |
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
2687 |
+
}
|
2688 |
+
|
2689 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table .aioseop-dash-widget-forms-list-columns td {
|
2690 |
+
padding: 12px 20px;
|
2691 |
+
border-bottom: 1px solid #e1e1e1;
|
2692 |
+
}
|
2693 |
+
|
2694 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table tbody {
|
2695 |
+
border-top: 0;
|
2696 |
+
}
|
2697 |
+
|
2698 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table tr {
|
2699 |
+
border-bottom: 0;
|
2700 |
+
}
|
2701 |
+
|
2702 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table tr:first-child {
|
2703 |
+
border-top: 0;
|
2704 |
+
}
|
2705 |
+
|
2706 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table tr:first-child td {
|
2707 |
+
border-top: 0;
|
2708 |
+
}
|
2709 |
+
|
2710 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table tr:nth-child(even) td {
|
2711 |
+
background-color: #f9f9f9;
|
2712 |
+
}
|
2713 |
+
|
2714 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table td {
|
2715 |
+
text-align: left;
|
2716 |
+
padding: 20px 20px;
|
2717 |
+
font-size: 14px;
|
2718 |
+
border: none;
|
2719 |
+
color: #555;
|
2720 |
+
background-color: #fff;
|
2721 |
+
}
|
2722 |
+
|
2723 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table tr>td:nth-child(2) {
|
2724 |
+
width: 180px;
|
2725 |
+
}
|
2726 |
+
|
2727 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table tr>td:nth-child(3) {
|
2728 |
+
width: 60px;
|
2729 |
+
text-align: center;
|
2730 |
+
}
|
2731 |
+
|
2732 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table tr>td:nth-child(4) {
|
2733 |
+
width: 90px;
|
2734 |
+
text-align: center;
|
2735 |
+
}
|
2736 |
+
|
2737 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table tr>td:nth-child(5) {
|
2738 |
+
width: 60px;
|
2739 |
+
text-align: center;
|
2740 |
+
padding-top: 0;
|
2741 |
+
padding-bottom: 0;
|
2742 |
+
}
|
2743 |
+
|
2744 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table .aioseop-dash-widget-form-active td:first-child {
|
2745 |
+
border-left: 3px solid #0073aa;
|
2746 |
+
padding-left: 17px;
|
2747 |
+
}
|
2748 |
+
|
2749 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table .aioseop-dash-widget-form-active .aioseop-dash-widget-single-chart-btn {
|
2750 |
+
display: none !important;
|
2751 |
+
}
|
2752 |
+
|
2753 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table .aioseop-dash-widget-form-active .aioseop-dash-widget-reset-chart {
|
2754 |
+
display: inline-block !important;
|
2755 |
+
border: none;
|
2756 |
+
background: none;
|
2757 |
+
margin: 0;
|
2758 |
+
}
|
2759 |
+
|
2760 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table .aioseop-dash-widget-forms-list-columns {
|
2761 |
+
background-color: #ffffff;
|
2762 |
+
border-bottom: 1px solid #ddd;
|
2763 |
+
}
|
2764 |
+
|
2765 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table a {
|
2766 |
+
text-decoration: none;
|
2767 |
+
}
|
2768 |
+
|
2769 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table a:hover {
|
2770 |
+
text-decoration: none;
|
2771 |
+
}
|
2772 |
+
|
2773 |
+
#aioseop-entries-list #aioseop-dash-widget-forms-list-table .aioseop-dash-widget-form-title a {
|
2774 |
+
font-weight: 600;
|
2775 |
+
}
|
2776 |
+
|
2777 |
+
@media screen and (max-width: 782px) {
|
2778 |
+
.aioseop-admin-content {
|
2779 |
+
padding-left: 10px;
|
2780 |
+
padding-right: 10px;
|
2781 |
+
}
|
2782 |
+
.wp-list-table {
|
2783 |
+
margin: 0 -10px 0 -10px;
|
2784 |
+
width: 100vw;
|
2785 |
+
table-layout: auto;
|
2786 |
+
}
|
2787 |
+
.wp-list-table.entries .column-indicators {
|
2788 |
+
width: auto !important;
|
2789 |
+
}
|
2790 |
+
.wp-list-table.entries .indicators .indicator-star {
|
2791 |
+
display: none;
|
2792 |
+
}
|
2793 |
+
.wp-list-table.entries .indicators .indicator-read {
|
2794 |
+
display: none;
|
2795 |
+
}
|
2796 |
+
.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary {
|
2797 |
+
height: 8px;
|
2798 |
+
padding: 0;
|
2799 |
+
z-index: +1;
|
2800 |
+
margin-right: 0;
|
2801 |
+
overflow: visible;
|
2802 |
+
}
|
2803 |
+
.wp-list-table.entries .toggle-row {
|
2804 |
+
right: 5px;
|
2805 |
+
top: 15px;
|
2806 |
+
}
|
2807 |
+
.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary+td {
|
2808 |
+
display: block !important;
|
2809 |
+
}
|
2810 |
+
.wp-list-table.entries tr:not(.inline-edit-row):not(.no-items) td.column-primary~td {
|
2811 |
+
margin-right: 5px;
|
2812 |
+
min-width: 50vw;
|
2813 |
+
}
|
2814 |
+
p.search-box {
|
2815 |
+
margin: 0;
|
2816 |
+
width: auto;
|
2817 |
+
}
|
2818 |
+
input[type=checkbox],
|
2819 |
+
input[type=radio] {
|
2820 |
+
height: 16px;
|
2821 |
+
width: 16px;
|
2822 |
+
}
|
2823 |
+
}
|
2824 |
+
|
2825 |
+
body.rtl #aioseop-entries-list .wp-list-table div[data-field-type="phone"] {
|
2826 |
+
direction: ltr;
|
2827 |
+
unicode-bidi: embed;
|
2828 |
+
text-align: right;
|
2829 |
+
}
|
2830 |
+
|
2831 |
+
#aioseop-welcome {
|
2832 |
+
border-top: 3px solid #e27730;
|
2833 |
+
color: #555;
|
2834 |
+
padding-top: 110px;
|
2835 |
+
}
|
2836 |
+
|
2837 |
+
@media (max-width: 767px) {
|
2838 |
+
#aioseop-welcome {
|
2839 |
+
padding-top: 64px;
|
2840 |
+
}
|
2841 |
+
}
|
2842 |
+
|
2843 |
+
#aioseop-welcome *,
|
2844 |
+
#aioseop-welcome *::before,
|
2845 |
+
#aioseop-welcome *::after {
|
2846 |
+
-webkit-box-sizing: border-box;
|
2847 |
+
-moz-box-sizing: border-box;
|
2848 |
+
box-sizing: border-box;
|
2849 |
+
}
|
2850 |
+
|
2851 |
+
#aioseop-welcome .container {
|
2852 |
+
margin: 0 auto;
|
2853 |
+
max-width: 720px;
|
2854 |
+
padding: 0;
|
2855 |
+
}
|
2856 |
+
|
2857 |
+
#aioseop-welcome .block {
|
2858 |
+
padding: 40px;
|
2859 |
+
}
|
2860 |
+
|
2861 |
+
@media (max-width: 767px) {
|
2862 |
+
#aioseop-welcome .block {
|
2863 |
+
padding: 20px;
|
2864 |
+
}
|
2865 |
+
}
|
2866 |
+
|
2867 |
+
#aioseop-welcome img {
|
2868 |
+
max-width: 100%;
|
2869 |
+
height: auto;
|
2870 |
+
}
|
2871 |
+
|
2872 |
+
#aioseop-welcome h1 {
|
2873 |
+
color: #222;
|
2874 |
+
font-size: 24px;
|
2875 |
+
text-align: center;
|
2876 |
+
margin: 0 0 16px 0;
|
2877 |
+
}
|
2878 |
+
|
2879 |
+
#aioseop-welcome h5 {
|
2880 |
+
color: #222;
|
2881 |
+
font-size: 16px;
|
2882 |
+
margin: 0 0 8px 0;
|
2883 |
+
}
|
2884 |
+
|
2885 |
+
#aioseop-welcome h6 {
|
2886 |
+
font-size: 16px;
|
2887 |
+
font-weight: 400;
|
2888 |
+
line-height: 1.6;
|
2889 |
+
text-align: center;
|
2890 |
+
margin: 0;
|
2891 |
+
}
|
2892 |
+
|
2893 |
+
#aioseop-welcome p {
|
2894 |
+
font-size: 14px;
|
2895 |
+
margin: 0 0 20px 0;
|
2896 |
+
}
|
2897 |
+
|
2898 |
+
#aioseop-welcome .button-wrap {
|
2899 |
+
max-width: 590px;
|
2900 |
+
margin: 0 auto 0 auto;
|
2901 |
+
}
|
2902 |
+
|
2903 |
+
#aioseop-welcome .button-wrap .left {
|
2904 |
+
float: left;
|
2905 |
+
width: 50%;
|
2906 |
+
padding-right: 20px;
|
2907 |
+
}
|
2908 |
+
|
2909 |
+
@media (max-width: 767px) {
|
2910 |
+
#aioseop-welcome .button-wrap .left {
|
2911 |
+
float: none;
|
2912 |
+
width: 100%;
|
2913 |
+
padding: 0;
|
2914 |
+
margin-bottom: 20px;
|
2915 |
+
}
|
2916 |
+
}
|
2917 |
+
|
2918 |
+
#aioseop-welcome .button-wrap .right {
|
2919 |
+
float: right;
|
2920 |
+
width: 50%;
|
2921 |
+
padding-left: 20px;
|
2922 |
+
}
|
2923 |
+
|
2924 |
+
@media (max-width: 767px) {
|
2925 |
+
#aioseop-welcome .button-wrap .right {
|
2926 |
+
float: none;
|
2927 |
+
width: 100%;
|
2928 |
+
padding: 0;
|
2929 |
+
}
|
2930 |
+
}
|
2931 |
+
|
2932 |
+
#aioseop-welcome .intro {
|
2933 |
+
background-color: #fff;
|
2934 |
+
border: 2px solid #e1e1e1;
|
2935 |
+
border-radius: 2px;
|
2936 |
+
margin-bottom: 30px;
|
2937 |
+
position: relative;
|
2938 |
+
padding-top: 40px;
|
2939 |
+
}
|
2940 |
+
|
2941 |
+
#aioseop-welcome .intro .sullie {
|
2942 |
+
background-color: #fff;
|
2943 |
+
border: 2px solid #e1e1e1;
|
2944 |
+
border-radius: 50%;
|
2945 |
+
height: 110px;
|
2946 |
+
width: 110px;
|
2947 |
+
padding: 18px 14px 0 14px;
|
2948 |
+
position: absolute;
|
2949 |
+
top: -58px;
|
2950 |
+
left: 50%;
|
2951 |
+
margin-left: -55px;
|
2952 |
+
}
|
2953 |
+
|
2954 |
+
#aioseop-welcome .intro .video-thumbnail {
|
2955 |
+
display: block;
|
2956 |
+
margin: 0 auto;
|
2957 |
+
}
|
2958 |
+
|
2959 |
+
#aioseop-welcome .intro .button-wrap {
|
2960 |
+
margin-top: 25px;
|
2961 |
+
}
|
2962 |
+
|
2963 |
+
#aioseop-welcome .features {
|
2964 |
+
background-color: #fff;
|
2965 |
+
border: 2px solid #e1e1e1;
|
2966 |
+
border-bottom: 0;
|
2967 |
+
border-radius: 2px 2px 0 0;
|
2968 |
+
position: relative;
|
2969 |
+
padding-top: 20px;
|
2970 |
+
padding-bottom: 20px;
|
2971 |
+
}
|
2972 |
+
|
2973 |
+
#aioseop-welcome .features .feature-list {
|
2974 |
+
margin-top: 60px;
|
2975 |
+
}
|
2976 |
+
|
2977 |
+
#aioseop-welcome .features .feature-block {
|
2978 |
+
float: left;
|
2979 |
+
width: 50%;
|
2980 |
+
padding-bottom: 35px;
|
2981 |
+
overflow: auto;
|
2982 |
+
}
|
2983 |
+
|
2984 |
+
@media (max-width: 767px) {
|
2985 |
+
#aioseop-welcome .features .feature-block {
|
2986 |
+
float: none;
|
2987 |
+
width: 100%;
|
2988 |
+
}
|
2989 |
+
}
|
2990 |
+
|
2991 |
+
#aioseop-welcome .features .feature-block.first {
|
2992 |
+
padding-right: 20px;
|
2993 |
+
clear: both;
|
2994 |
+
}
|
2995 |
+
|
2996 |
+
@media (max-width: 767px) {
|
2997 |
+
#aioseop-welcome .features .feature-block.first {
|
2998 |
+
padding-right: 0;
|
2999 |
+
}
|
3000 |
+
}
|
3001 |
+
|
3002 |
+
#aioseop-welcome .features .feature-block.last {
|
3003 |
+
padding-left: 20px;
|
3004 |
+
}
|
3005 |
+
|
3006 |
+
@media (max-width: 767px) {
|
3007 |
+
#aioseop-welcome .features .feature-block.last {
|
3008 |
+
padding-left: 0;
|
3009 |
+
}
|
3010 |
+
}
|
3011 |
+
|
3012 |
+
#aioseop-welcome .features .feature-block img {
|
3013 |
+
float: left;
|
3014 |
+
max-width: 46px;
|
3015 |
+
}
|
3016 |
+
|
3017 |
+
#aioseop-welcome .features .feature-block h5 {
|
3018 |
+
margin-left: 68px;
|
3019 |
+
}
|
3020 |
+
|
3021 |
+
#aioseop-welcome .features .feature-block p {
|
3022 |
+
margin: 0;
|
3023 |
+
margin-left: 68px;
|
3024 |
+
}
|
3025 |
+
|
3026 |
+
#aioseop-welcome .features .button-wrap {
|
3027 |
+
margin-top: 25px;
|
3028 |
+
text-align: center;
|
3029 |
+
}
|
3030 |
+
|
3031 |
+
#aioseop-welcome .upgrade-cta {
|
3032 |
+
background-color: #000;
|
3033 |
+
border: 2px solid #e1e1e1;
|
3034 |
+
border-top: 0;
|
3035 |
+
border-bottom: 0;
|
3036 |
+
color: #fff;
|
3037 |
+
}
|
3038 |
+
|
3039 |
+
#aioseop-welcome .upgrade-cta h2 {
|
3040 |
+
color: #fff;
|
3041 |
+
font-size: 20px;
|
3042 |
+
margin: 0 0 30px 0;
|
3043 |
+
}
|
3044 |
+
|
3045 |
+
#aioseop-welcome .upgrade-cta ul {
|
3046 |
+
display: -ms-flex;
|
3047 |
+
display: -webkit-flex;
|
3048 |
+
display: flex;
|
3049 |
+
-webkit-flex-wrap: wrap;
|
3050 |
+
flex-wrap: wrap;
|
3051 |
+
font-size: 15px;
|
3052 |
+
margin: 0;
|
3053 |
+
padding: 0;
|
3054 |
+
}
|
3055 |
+
|
3056 |
+
#aioseop-welcome .upgrade-cta ul li {
|
3057 |
+
display: block;
|
3058 |
+
width: 50%;
|
3059 |
+
margin: 0 0 8px 0;
|
3060 |
+
padding: 0;
|
3061 |
+
}
|
3062 |
+
|
3063 |
+
#aioseop-welcome .upgrade-cta ul li .dashicons {
|
3064 |
+
color: #2a9b39;
|
3065 |
+
margin-right: 5px;
|
3066 |
+
}
|
3067 |
+
|
3068 |
+
#aioseop-welcome .upgrade-cta .left {
|
3069 |
+
float: left;
|
3070 |
+
width: 66.666666%;
|
3071 |
+
padding-right: 20px;
|
3072 |
+
}
|
3073 |
+
|
3074 |
+
@media (max-width: 767px) {
|
3075 |
+
#aioseop-welcome .upgrade-cta .left {
|
3076 |
+
float: none;
|
3077 |
+
width: 100%;
|
3078 |
+
padding-right: 0;
|
3079 |
+
margin-bottom: 20px;
|
3080 |
+
}
|
3081 |
+
}
|
3082 |
+
|
3083 |
+
#aioseop-welcome .upgrade-cta .right {
|
3084 |
+
float: right;
|
3085 |
+
width: 33.333333%;
|
3086 |
+
padding: 20px 0 0 20px;
|
3087 |
+
text-align: center;
|
3088 |
+
}
|
3089 |
+
|
3090 |
+
@media (max-width: 767px) {
|
3091 |
+
#aioseop-welcome .upgrade-cta .right {
|
3092 |
+
float: none;
|
3093 |
+
width: 100%;
|
3094 |
+
padding-left: 0;
|
3095 |
+
}
|
3096 |
+
}
|
3097 |
+
|
3098 |
+
#aioseop-welcome .upgrade-cta .right h2 {
|
3099 |
+
text-align: center;
|
3100 |
+
margin: 0;
|
3101 |
+
}
|
3102 |
+
|
3103 |
+
#aioseop-welcome .upgrade-cta .right h2 span {
|
3104 |
+
display: inline-block;
|
3105 |
+
border-bottom: 1px solid #555;
|
3106 |
+
padding: 0 15px 12px;
|
3107 |
+
}
|
3108 |
+
|
3109 |
+
#aioseop-welcome .upgrade-cta .right .price {
|
3110 |
+
padding: 26px 0;
|
3111 |
+
}
|
3112 |
+
|
3113 |
+
#aioseop-welcome .upgrade-cta .right .price .amount {
|
3114 |
+
font-size: 48px;
|
3115 |
+
font-weight: 600;
|
3116 |
+
position: relative;
|
3117 |
+
display: inline-block;
|
3118 |
+
}
|
3119 |
+
|
3120 |
+
#aioseop-welcome .upgrade-cta .right .price .amount:before {
|
3121 |
+
content: '$';
|
3122 |
+
position: absolute;
|
3123 |
+
top: -8px;
|
3124 |
+
left: -16px;
|
3125 |
+
font-size: 18px;
|
3126 |
+
}
|
3127 |
+
|
3128 |
+
#aioseop-welcome .upgrade-cta .right .price .term {
|
3129 |
+
font-size: 12px;
|
3130 |
+
display: inline-block;
|
3131 |
+
}
|
3132 |
+
|
3133 |
+
#aioseop-welcome .testimonials {
|
3134 |
+
background-color: #fff;
|
3135 |
+
border: 2px solid #e1e1e1;
|
3136 |
+
border-top: 0;
|
3137 |
+
padding: 20px 0;
|
3138 |
+
}
|
3139 |
+
|
3140 |
+
#aioseop-welcome .testimonials .testimonial-block {
|
3141 |
+
margin: 50px 0 0 0;
|
3142 |
+
}
|
3143 |
+
|
3144 |
+
#aioseop-welcome .testimonials .testimonial-block img {
|
3145 |
+
border-radius: 50%;
|
3146 |
+
float: left;
|
3147 |
+
max-width: 100px;
|
3148 |
+
box-shadow: 0 0 18px rgba(0, 0, 0, 0.2);
|
3149 |
+
}
|
3150 |
+
|
3151 |
+
@media (max-width: 767px) {
|
3152 |
+
#aioseop-welcome .testimonials .testimonial-block img {
|
3153 |
+
width: 65px;
|
3154 |
+
}
|
3155 |
+
}
|
3156 |
+
|
3157 |
+
#aioseop-welcome .testimonials .testimonial-block p {
|
3158 |
+
font-size: 14px;
|
3159 |
+
margin: 0 0 12px 140px;
|
3160 |
+
}
|
3161 |
+
|
3162 |
+
@media (max-width: 767px) {
|
3163 |
+
#aioseop-welcome .testimonials .testimonial-block p {
|
3164 |
+
margin-left: 100px;
|
3165 |
+
}
|
3166 |
+
}
|
3167 |
+
|
3168 |
+
#aioseop-welcome .testimonials .testimonial-block p:last-of-type {
|
3169 |
+
margin-bottom: 0;
|
3170 |
+
}
|
3171 |
+
|
3172 |
+
#aioseop-welcome .footer {
|
3173 |
+
background-color: #f1f1f1;
|
3174 |
+
border: 2px solid #e1e1e1;
|
3175 |
+
border-top: 0;
|
3176 |
+
border-radius: 0 0 2px 2px;
|
3177 |
+
}
|
3178 |
+
|
3179 |
+
#aioseop-welcome.pro .features {
|
3180 |
+
border: 2px solid #e1e1e1;
|
3181 |
+
margin-bottom: 30px;
|
3182 |
+
}
|
3183 |
+
|
3184 |
+
#aioseop-welcome.pro .upgrade,
|
3185 |
+
#aioseop-welcome.pro .footer {
|
3186 |
+
display: none;
|
3187 |
+
}
|
3188 |
+
|
3189 |
+
#aioseop-welcome.pro .testimonials {
|
3190 |
+
border: 2px solid #e1e1e1;
|
3191 |
+
}
|
3192 |
+
|
3193 |
+
.dashboard_page_aioseop-getting-started .video-container {
|
3194 |
+
border: 2px solid #e1e1e1;
|
3195 |
+
}
|
3196 |
+
|
3197 |
+
.dashboard_page_aioseop-getting-started #wpfooter,
|
3198 |
+
.dashboard_page_aioseop-getting-started div.notice {
|
3199 |
+
display: none !important;
|
3200 |
+
}
|
3201 |
+
|
3202 |
+
#aioseop-admin-addons *,
|
3203 |
+
#aioseop-admin-addons *::before,
|
3204 |
+
#aioseop-admin-addons *::after {
|
3205 |
+
-webkit-box-sizing: border-box;
|
3206 |
+
-moz-box-sizing: border-box;
|
3207 |
+
box-sizing: border-box;
|
3208 |
+
}
|
3209 |
+
|
3210 |
+
#aioseop-admin-addons .addons-container {
|
3211 |
+
margin-left: -20px;
|
3212 |
+
margin-right: -20px;
|
3213 |
+
}
|
3214 |
+
|
3215 |
+
#aioseop-admin-addons .unlock-msg {
|
3216 |
+
padding: 0 20px;
|
3217 |
+
margin-top: -20px;
|
3218 |
+
clear: both;
|
3219 |
+
}
|
3220 |
+
|
3221 |
+
#aioseop-admin-addons #aioseop-admin-addons-search {
|
3222 |
+
background-color: #fff;
|
3223 |
+
border: 1px solid #ddd;
|
3224 |
+
border-radius: 3px;
|
3225 |
+
box-shadow: none;
|
3226 |
+
color: #333;
|
3227 |
+
vertical-align: middle;
|
3228 |
+
padding: 7px 12px;
|
3229 |
+
margin: -3px 10px 0 0;
|
3230 |
+
width: 200px;
|
3231 |
+
min-height: 35px;
|
3232 |
+
float: right;
|
3233 |
+
}
|
3234 |
+
|
3235 |
+
#aioseop-admin-addons #aioseop-admin-addons-search:focus {
|
3236 |
+
border-color: #bbb;
|
3237 |
+
}
|
3238 |
+
|
3239 |
+
#aioseop-admin-addons .addon-container {
|
3240 |
+
padding: 0 20px;
|
3241 |
+
float: left;
|
3242 |
+
width: 33.333333%;
|
3243 |
+
margin-bottom: 20px;
|
3244 |
+
}
|
3245 |
+
|
3246 |
+
@media (max-width: 1249px) {
|
3247 |
+
#aioseop-admin-addons .addon-container {
|
3248 |
+
width: 50%;
|
3249 |
+
}
|
3250 |
+
}
|
3251 |
+
|
3252 |
+
@media (max-width: 767px) {
|
3253 |
+
#aioseop-admin-addons .addon-container {
|
3254 |
+
width: 100%;
|
3255 |
+
margin-bottom: 20px;
|
3256 |
+
}
|
3257 |
+
}
|
3258 |
+
|
3259 |
+
#aioseop-admin-addons h4 {
|
3260 |
+
font-size: 17px;
|
3261 |
+
font-weight: 700;
|
3262 |
+
}
|
3263 |
+
|
3264 |
+
#aioseop-admin-addons .addon-item {
|
3265 |
+
background-color: #fff;
|
3266 |
+
border: 1px solid #ddd;
|
3267 |
+
border-radius: 3px;
|
3268 |
+
margin: 0;
|
3269 |
+
}
|
3270 |
+
|
3271 |
+
@media (max-width: 767px) {
|
3272 |
+
#aioseop-admin-addons .addon-item {
|
3273 |
+
margin: 0 0;
|
3274 |
+
}
|
3275 |
+
}
|
3276 |
+
|
3277 |
+
#aioseop-admin-addons .addon-item img {
|
3278 |
+
border: 1px solid #eee;
|
3279 |
+
float: left;
|
3280 |
+
max-width: 75px;
|
3281 |
+
}
|
3282 |
+
|
3283 |
+
#aioseop-admin-addons .addon-item h5 {
|
3284 |
+
margin: 0 0 10px 100px;
|
3285 |
+
font-size: 16px;
|
3286 |
+
}
|
3287 |
+
|
3288 |
+
#aioseop-admin-addons .addon-item p {
|
3289 |
+
margin: 0 0 0 100px;
|
3290 |
+
}
|
3291 |
+
|
3292 |
+
#aioseop-admin-addons .addon-item .details {
|
3293 |
+
padding: 30px 20px;
|
3294 |
+
}
|
3295 |
+
|
3296 |
+
#aioseop-admin-addons .addon-item .actions {
|
3297 |
+
background-color: #f7f7f7;
|
3298 |
+
border-top: 1px solid #ddd;
|
3299 |
+
padding: 20px;
|
3300 |
+
position: relative;
|
3301 |
+
}
|
3302 |
+
|
3303 |
+
#aioseop-admin-addons .addon-item .actions .msg {
|
3304 |
+
background-color: #f7f7f7;
|
3305 |
+
position: absolute;
|
3306 |
+
text-align: center;
|
3307 |
+
font-weight: 600;
|
3308 |
+
top: 0;
|
3309 |
+
left: 0;
|
3310 |
+
height: 100%;
|
3311 |
+
width: 100%;
|
3312 |
+
z-index: 99;
|
3313 |
+
padding: 20px;
|
3314 |
+
display: -webkit-box;
|
3315 |
+
display: -moz-box;
|
3316 |
+
display: -ms-flexbox;
|
3317 |
+
display: -webkit-flex;
|
3318 |
+
display: flex;
|
3319 |
+
-webkit-align-items: center;
|
3320 |
+
-ms-align-items: center;
|
3321 |
+
align-items: center;
|
3322 |
+
justify-content: center;
|
3323 |
+
}
|
3324 |
+
|
3325 |
+
#aioseop-admin-addons .addon-item .actions .msg.success {
|
3326 |
+
color: #2a9b39;
|
3327 |
+
}
|
3328 |
+
|
3329 |
+
#aioseop-admin-addons .addon-item .actions .msg.error {
|
3330 |
+
color: red;
|
3331 |
+
text-shadow: none;
|
3332 |
+
}
|
3333 |
+
|
3334 |
+
#aioseop-admin-addons .addon-item .status {
|
3335 |
+
float: left;
|
3336 |
+
padding-top: 8px;
|
3337 |
+
}
|
3338 |
+
|
3339 |
+
#aioseop-admin-addons .addon-item .status .status-inactive {
|
3340 |
+
color: red;
|
3341 |
+
}
|
3342 |
+
|
3343 |
+
#aioseop-admin-addons .addon-item .status .status-download {
|
3344 |
+
color: #666;
|
3345 |
+
}
|
3346 |
+
|
3347 |
+
#aioseop-admin-addons .addon-item .status .status-active {
|
3348 |
+
color: #2a9b39;
|
3349 |
+
}
|
3350 |
+
|
3351 |
+
#aioseop-admin-addons .addon-item .upgrade-button {
|
3352 |
+
text-align: center;
|
3353 |
+
}
|
3354 |
+
|
3355 |
+
#aioseop-admin-addons .addon-item .upgrade-button a {
|
3356 |
+
font-weight: 600;
|
3357 |
+
width: 140px;
|
3358 |
+
text-align: center;
|
3359 |
+
padding: 8px 5px;
|
3360 |
+
}
|
3361 |
+
|
3362 |
+
#aioseop-admin-addons .addon-item .action-button {
|
3363 |
+
float: right;
|
3364 |
+
}
|
3365 |
+
|
3366 |
+
#aioseop-admin-addons .addon-item .action-button button {
|
3367 |
+
background: none;
|
3368 |
+
border: 1px solid #ddd;
|
3369 |
+
border-radius: 3px;
|
3370 |
+
box-shadow: none;
|
3371 |
+
cursor: pointer;
|
3372 |
+
font-weight: 600;
|
3373 |
+
width: 140px;
|
3374 |
+
text-align: center;
|
3375 |
+
padding: 8px 5px;
|
3376 |
+
}
|
3377 |
+
|
3378 |
+
#aioseop-admin-addons .addon-item .action-button button:hover,
|
3379 |
+
#aioseop-admin-addons .addon-item .action-button button.loading {
|
3380 |
+
background-color: #e9e9e9;
|
3381 |
+
}
|
3382 |
+
|
3383 |
+
#aioseop-admin-addons .addon-item .action-button button .fa {
|
3384 |
+
margin-right: 8px;
|
3385 |
+
}
|
3386 |
+
|
3387 |
+
#aioseop-admin-addons .addon-item .action-button button .fa.fa-spinner {
|
3388 |
+
margin-right: 0;
|
3389 |
+
}
|
3390 |
+
|
3391 |
+
#aioseop-admin-addons .addon-item .action-button button.status-active .fa {
|
3392 |
+
color: #2a9b39;
|
3393 |
+
}
|
3394 |
+
|
3395 |
+
#aioseop-admin-addons .addon-item .action-button button.status-inactive .fa {
|
3396 |
+
color: red;
|
3397 |
+
}
|
3398 |
+
|
3399 |
+
#aioseop-admin-addons .addon-item .action-button button.status-download .fa {
|
3400 |
+
color: #999;
|
3401 |
+
}
|
3402 |
+
|
3403 |
+
#aioseop-admin-addons .addon-item .action-button button.disabled {
|
3404 |
+
cursor: default;
|
3405 |
+
}
|
3406 |
+
|
3407 |
+
#aioseop-admin-addons .addon-item .action-button button.loading .fa {
|
3408 |
+
color: #666;
|
3409 |
+
}
|
3410 |
+
|
3411 |
+
|
3412 |
+
/*
|
3413 |
+
'xs-phone': 320px,
|
3414 |
+
'phone': 600px,
|
3415 |
+
'ipad': 768px,
|
3416 |
+
'tablet': 782px,
|
3417 |
+
'desktop': 960px,
|
3418 |
+
*/
|
3419 |
+
|
3420 |
+
#aioseop-admin-about *,
|
3421 |
+
#aioseop-admin-about *::before,
|
3422 |
+
#aioseop-admin-about *::after {
|
3423 |
+
-webkit-box-sizing: border-box;
|
3424 |
+
-moz-box-sizing: border-box;
|
3425 |
+
box-sizing: border-box;
|
3426 |
+
}
|
3427 |
+
|
3428 |
+
#aioseop-admin-about .aioseop-admin-about-section {
|
3429 |
+
margin: 20px 20px;
|
3430 |
+
padding: 30px;
|
3431 |
+
background: #fff;
|
3432 |
+
border: 1px solid #DDDDDD;
|
3433 |
+
line-height: 2;
|
3434 |
+
}
|
3435 |
+
|
3436 |
+
#aioseop-admin-about .aioseop-admin-about-section h1,
|
3437 |
+
#aioseop-admin-about .aioseop-admin-about-section h2,
|
3438 |
+
#aioseop-admin-about .aioseop-admin-about-section h3,
|
3439 |
+
#aioseop-admin-about .aioseop-admin-about-section h4,
|
3440 |
+
#aioseop-admin-about .aioseop-admin-about-section h5 {
|
3441 |
+
margin-top: 0;
|
3442 |
+
padding-top: 0;
|
3443 |
+
line-height: 1.6;
|
3444 |
+
}
|
3445 |
+
|
3446 |
+
#aioseop-admin-about .aioseop-admin-about-section h2 {
|
3447 |
+
font-size: 24px;
|
3448 |
+
}
|
3449 |
+
|
3450 |
+
#aioseop-admin-about .aioseop-admin-about-section h3 {
|
3451 |
+
font-size: 18px;
|
3452 |
+
margin-bottom: 30px;
|
3453 |
+
color: #23282C;
|
3454 |
+
}
|
3455 |
+
|
3456 |
+
#aioseop-admin-about .aioseop-admin-about-section ul,
|
3457 |
+
#aioseop-admin-about .aioseop-admin-about-section p {
|
3458 |
+
font-size: 16px;
|
3459 |
+
}
|
3460 |
+
|
3461 |
+
#aioseop-admin-about .aioseop-admin-about-section p {
|
3462 |
+
margin-bottom: 20px;
|
3463 |
+
}
|
3464 |
+
|
3465 |
+
#aioseop-admin-about .aioseop-admin-about-section p.bigger {
|
3466 |
+
font-size: 18px;
|
3467 |
+
}
|
3468 |
+
|
3469 |
+
#aioseop-admin-about .aioseop-admin-about-section p.smaller {
|
3470 |
+
font-size: 14px;
|
3471 |
+
}
|
3472 |
+
|
3473 |
+
#aioseop-admin-about .aioseop-admin-about-section p:last-child {
|
3474 |
+
margin-bottom: 0;
|
3475 |
+
}
|
3476 |
+
|
3477 |
+
#aioseop-admin-about .aioseop-admin-about-section hr {
|
3478 |
+
margin: 30px 0;
|
3479 |
+
}
|
3480 |
+
|
3481 |
+
#aioseop-admin-about .aioseop-admin-about-section figure {
|
3482 |
+
margin: 0;
|
3483 |
+
}
|
3484 |
+
|
3485 |
+
#aioseop-admin-about .aioseop-admin-about-section figure img {
|
3486 |
+
width: 100%;
|
3487 |
+
}
|
3488 |
+
|
3489 |
+
#aioseop-admin-about .aioseop-admin-about-section figure figcaption {
|
3490 |
+
font-size: 14px;
|
3491 |
+
color: #888888;
|
3492 |
+
margin-top: 5px;
|
3493 |
+
text-align: center;
|
3494 |
+
line-height: initial;
|
3495 |
+
}
|
3496 |
+
|
3497 |
+
#aioseop-admin-about .aioseop-admin-about-section .aioseop-admin-column-40 {
|
3498 |
+
padding-left: 15px;
|
3499 |
+
}
|
3500 |
+
|
3501 |
+
@media (max-width: 767px) {
|
3502 |
+
#aioseop-admin-about .aioseop-admin-about-section .aioseop-admin-column-40 {
|
3503 |
+
width: 100%;
|
3504 |
+
padding-left: 0;
|
3505 |
+
padding-top: 20px;
|
3506 |
+
}
|
3507 |
+
}
|
3508 |
+
|
3509 |
+
#aioseop-admin-about .aioseop-admin-about-section .aioseop-admin-column-60 {
|
3510 |
+
padding-right: 15px;
|
3511 |
+
}
|
3512 |
+
|
3513 |
+
@media (max-width: 767px) {
|
3514 |
+
#aioseop-admin-about .aioseop-admin-about-section .aioseop-admin-column-60 {
|
3515 |
+
width: 100%;
|
3516 |
+
padding-right: 0;
|
3517 |
+
}
|
3518 |
+
}
|
3519 |
+
|
3520 |
+
#aioseop-admin-about .aioseop-admin-about-section ul.list-plain {
|
3521 |
+
margin-top: 0;
|
3522 |
+
margin-bottom: 0;
|
3523 |
+
}
|
3524 |
+
|
3525 |
+
#aioseop-admin-about .aioseop-admin-about-section ul.list-plain li {
|
3526 |
+
margin-bottom: 0;
|
3527 |
+
}
|
3528 |
+
|
3529 |
+
#aioseop-admin-about .aioseop-admin-about-section ul.list-features li .fa {
|
3530 |
+
color: #2a9b39;
|
3531 |
+
margin: 0 8px 0 0;
|
3532 |
+
}
|
3533 |
+
|
3534 |
+
#aioseop-admin-about .aioseop-admin-about-section .fa-star {
|
3535 |
+
color: gold;
|
3536 |
+
}
|
3537 |
+
|
3538 |
+
#aioseop-admin-about .aioseop-admin-about-section .no-margin {
|
3539 |
+
margin: 0 !important;
|
3540 |
+
}
|
3541 |
+
|
3542 |
+
#aioseop-admin-about .aioseop-admin-about-section .no-padding {
|
3543 |
+
padding: 0 !important;
|
3544 |
+
}
|
3545 |
+
|
3546 |
+
#aioseop-admin-about .aioseop-admin-about-section .centered {
|
3547 |
+
text-align: center !important;
|
3548 |
+
}
|
3549 |
+
|
3550 |
+
#aioseop-admin-about .aioseop-admin-about-section-first-form {
|
3551 |
+
display: flex;
|
3552 |
+
}
|
3553 |
+
|
3554 |
+
@media (max-width: 767px) {
|
3555 |
+
#aioseop-admin-about .aioseop-admin-about-section-first-form {
|
3556 |
+
display: block !important;
|
3557 |
+
}
|
3558 |
+
}
|
3559 |
+
|
3560 |
+
#aioseop-admin-about .aioseop-admin-about-section-first-form .aioseop-admin-about-section-first-form-text {
|
3561 |
+
flex: 1;
|
3562 |
+
padding-right: 30px;
|
3563 |
+
}
|
3564 |
+
|
3565 |
+
@media (max-width: 767px) {
|
3566 |
+
#aioseop-admin-about .aioseop-admin-about-section-first-form .aioseop-admin-about-section-first-form-text {
|
3567 |
+
flex: none;
|
3568 |
+
}
|
3569 |
+
}
|
3570 |
+
|
3571 |
+
#aioseop-admin-about .aioseop-admin-about-section-first-form .aioseop-admin-about-section-first-form-video iframe {
|
3572 |
+
border: 1px solid #DDDDDD;
|
3573 |
+
}
|
3574 |
+
|
3575 |
+
@media (max-width: 767px) {
|
3576 |
+
#aioseop-admin-about .aioseop-admin-about-section-first-form .aioseop-admin-about-section-first-form-video {
|
3577 |
+
padding-top: 20px;
|
3578 |
+
}
|
3579 |
+
}
|
3580 |
+
|
3581 |
+
#aioseop-admin-about .aioseop-admin-about-section-hero {
|
3582 |
+
padding: 0;
|
3583 |
+
}
|
3584 |
+
|
3585 |
+
#aioseop-admin-about .aioseop-admin-about-section-hero .aioseop-admin-about-section-hero-main,
|
3586 |
+
#aioseop-admin-about .aioseop-admin-about-section-hero .aioseop-admin-about-section-hero-extra {
|
3587 |
+
padding: 30px;
|
3588 |
+
}
|
3589 |
+
|
3590 |
+
@media (max-width: 767px) {
|
3591 |
+
#aioseop-admin-about .aioseop-admin-about-section-hero .aioseop-admin-about-section-hero-extra .aioseop-admin-column-50 {
|
3592 |
+
float: none;
|
3593 |
+
width: 100%;
|
3594 |
+
}
|
3595 |
+
}
|
3596 |
+
|
3597 |
+
#aioseop-admin-about .aioseop-admin-about-section-hero .aioseop-admin-about-section-hero-main {
|
3598 |
+
background-color: #FAFAFA;
|
3599 |
+
border-bottom: 1px solid #DDDDDD;
|
3600 |
+
}
|
3601 |
+
|
3602 |
+
#aioseop-admin-about .aioseop-admin-about-section-hero .aioseop-admin-about-section-hero-main.no-border {
|
3603 |
+
border-bottom: 0;
|
3604 |
+
}
|
3605 |
+
|
3606 |
+
#aioseop-admin-about .aioseop-admin-about-section-hero .aioseop-admin-about-section-hero-main p {
|
3607 |
+
color: #666;
|
3608 |
+
}
|
3609 |
+
|
3610 |
+
#aioseop-admin-about .aioseop-admin-about-section-hero h3.call-to-action {
|
3611 |
+
margin-bottom: -10px;
|
3612 |
+
}
|
3613 |
+
|
3614 |
+
#aioseop-admin-about .aioseop-admin-about-section-hero span.price-20-off {
|
3615 |
+
color: #6AB255;
|
3616 |
+
}
|
3617 |
+
|
3618 |
+
#aioseop-admin-about .aioseop-admin-about-section-squashed {
|
3619 |
+
margin-bottom: 0;
|
3620 |
+
}
|
3621 |
+
|
3622 |
+
#aioseop-admin-about .aioseop-admin-about-section-squashed:not(:last-of-type) {
|
3623 |
+
border-bottom: 0;
|
3624 |
+
}
|
3625 |
+
|
3626 |
+
#aioseop-admin-about .aioseop-admin-about-section-post h2 {
|
3627 |
+
margin-bottom: -10px;
|
3628 |
+
}
|
3629 |
+
|
3630 |
+
#aioseop-admin-about .aioseop-admin-about-section-post h3 {
|
3631 |
+
margin-bottom: 15px;
|
3632 |
+
}
|
3633 |
+
|
3634 |
+
#aioseop-admin-about .aioseop-admin-about-section-post p:last-of-type {
|
3635 |
+
margin-bottom: 30px;
|
3636 |
+
}
|
3637 |
+
|
3638 |
+
#aioseop-admin-about .aioseop-admin-about-section-post .aioseop-admin-column-20 {
|
3639 |
+
padding-right: 20px;
|
3640 |
+
width: auto;
|
3641 |
+
}
|
3642 |
+
|
3643 |
+
#aioseop-admin-about .aioseop-admin-about-section-post .aioseop-admin-column-20 img {
|
3644 |
+
width: 270px;
|
3645 |
+
}
|
3646 |
+
|
3647 |
+
@media (max-width: 767px) {
|
3648 |
+
#aioseop-admin-about .aioseop-admin-about-section-post .aioseop-admin-column-20 {
|
3649 |
+
width: 20%;
|
3650 |
+
}
|
3651 |
+
#aioseop-admin-about .aioseop-admin-about-section-post .aioseop-admin-column-20 img {
|
3652 |
+
width: auto;
|
3653 |
+
max-width: 100%;
|
3654 |
+
}
|
3655 |
+
}
|
3656 |
+
|
3657 |
+
#aioseop-admin-about .aioseop-admin-about-section-post .aioseop-admin-column-80 {
|
3658 |
+
padding-left: 20px;
|
3659 |
+
width: calc(100% - 20px - 270px);
|
3660 |
+
}
|
3661 |
+
|
3662 |
+
@media (max-width: 767px) {
|
3663 |
+
#aioseop-admin-about .aioseop-admin-about-section-post .aioseop-admin-column-80 {
|
3664 |
+
width: 80%;
|
3665 |
+
}
|
3666 |
+
}
|
3667 |
+
|
3668 |
+
#aioseop-admin-about .aioseop-admin-about-section-post .aioseop-admin-about-section-post-link {
|
3669 |
+
padding: 10px 15px;
|
3670 |
+
background-color: #DF7739;
|
3671 |
+
color: #fff;
|
3672 |
+
border-radius: 3px;
|
3673 |
+
text-decoration: none;
|
3674 |
+
margin-top: 15px;
|
3675 |
+
font-size: 14px;
|
3676 |
+
}
|
3677 |
+
|
3678 |
+
#aioseop-admin-about .aioseop-admin-about-section-post .aioseop-admin-about-section-post-link:hover {
|
3679 |
+
background-color: #B85A1B;
|
3680 |
+
}
|
3681 |
+
|
3682 |
+
#aioseop-admin-about .aioseop-admin-about-section-post .aioseop-admin-about-section-post-link .fa {
|
3683 |
+
color: #EDBA9E;
|
3684 |
+
vertical-align: middle;
|
3685 |
+
margin-left: 8px;
|
3686 |
+
}
|
3687 |
+
|
3688 |
+
#aioseop-admin-about .aioseop-admin-about-section-table table {
|
3689 |
+
border-collapse: collapse;
|
3690 |
+
}
|
3691 |
+
|
3692 |
+
#aioseop-admin-about .aioseop-admin-about-section-table table tr td {
|
3693 |
+
border-bottom: 1px solid #DDDDDD;
|
3694 |
+
border-right: 1px solid #DDDDDD;
|
3695 |
+
padding: 30px;
|
3696 |
+
vertical-align: top;
|
3697 |
+
}
|
3698 |
+
|
3699 |
+
#aioseop-admin-about .aioseop-admin-about-section-table table tr td:last-of-type {
|
3700 |
+
border-right: 0;
|
3701 |
+
}
|
3702 |
+
|
3703 |
+
#aioseop-admin-about .aioseop-admin-about-section-table table tr:last-child td {
|
3704 |
+
border-bottom: none;
|
3705 |
+
}
|
3706 |
+
|
3707 |
+
#aioseop-admin-about .aioseop-admin-about-section-table table p {
|
3708 |
+
background-repeat: no-repeat;
|
3709 |
+
background-size: 15px auto;
|
3710 |
+
background-position: 0 6px;
|
3711 |
+
margin: 0;
|
3712 |
+
}
|
3713 |
+
|
3714 |
+
#aioseop-admin-about .aioseop-admin-about-section-table table p.features-full {
|
3715 |
+
padding-left: 30px;
|
3716 |
+
background-image: url(../../images/about/icon-full.svg);
|
3717 |
+
}
|
3718 |
+
|
3719 |
+
#aioseop-admin-about .aioseop-admin-about-section-table table p.features-none {
|
3720 |
+
padding-left: 30px;
|
3721 |
+
background-image: url(../../images/about/icon-none.svg);
|
3722 |
+
}
|
3723 |
+
|
3724 |
+
#aioseop-admin-about .aioseop-admin-about-section-table table p.features-partial {
|
3725 |
+
padding-left: 30px;
|
3726 |
+
background-position: -3px 0;
|
3727 |
+
background-size: 23px auto;
|
3728 |
+
background-image: url(../../images/about/icon-partial.svg);
|
3729 |
+
}
|
3730 |
+
|
3731 |
+
#aioseop-admin-about .aioseop-admin-about-section-table .aioseop-admin-about-section-hero-main {
|
3732 |
+
padding: 0;
|
3733 |
+
}
|
3734 |
+
|
3735 |
+
#aioseop-admin-about .aioseop-admin-about-section-table .aioseop-admin-about-section-hero-main h3 {
|
3736 |
+
padding: 30px 30px 30px 60px;
|
3737 |
+
}
|
3738 |
+
|
3739 |
+
#aioseop-admin-about .aioseop-admin-about-section-table .aioseop-admin-about-section-hero-main .aioseop-admin-column-33:first-child h3 {
|
3740 |
+
padding: 30px;
|
3741 |
+
}
|
3742 |
+
|
3743 |
+
#aioseop-admin-about #aioseop-admin-addons {
|
3744 |
+
padding: 0 30px;
|
3745 |
+
}
|
3746 |
+
|
3747 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-container {
|
3748 |
+
padding: 0 10px;
|
3749 |
+
}
|
3750 |
+
|
3751 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .details {
|
3752 |
+
padding: 20px;
|
3753 |
+
}
|
3754 |
+
|
3755 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item img {
|
3756 |
+
padding: 10px;
|
3757 |
+
}
|
3758 |
+
|
3759 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item img[src*="-mi"] {
|
3760 |
+
padding: 13px;
|
3761 |
+
}
|
3762 |
+
|
3763 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button {
|
3764 |
+
display: inline-block;
|
3765 |
+
text-decoration: none;
|
3766 |
+
font-size: 13px;
|
3767 |
+
line-height: 26px;
|
3768 |
+
height: 28px;
|
3769 |
+
margin: 0;
|
3770 |
+
padding: 0 10px 1px;
|
3771 |
+
cursor: pointer;
|
3772 |
+
-webkit-appearance: none;
|
3773 |
+
border-radius: 3px;
|
3774 |
+
border: 1px solid #cccccc;
|
3775 |
+
background: #f7f7f7;
|
3776 |
+
box-shadow: 0 1px 0 #cccccc;
|
3777 |
+
font-weight: normal;
|
3778 |
+
}
|
3779 |
+
|
3780 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button:hover,
|
3781 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button:focus {
|
3782 |
+
background: #fafafa;
|
3783 |
+
border-color: #999;
|
3784 |
+
color: #23282d;
|
3785 |
+
}
|
3786 |
+
|
3787 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button.button-primary {
|
3788 |
+
background: #0085ba;
|
3789 |
+
border-color: #0073aa #006799 #006799;
|
3790 |
+
box-shadow: 0 1px 0 #006799;
|
3791 |
+
color: #fff;
|
3792 |
+
text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;
|
3793 |
+
}
|
3794 |
+
|
3795 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button.button-primary:hover,
|
3796 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button.button-primary:focus {
|
3797 |
+
background: #008ec2;
|
3798 |
+
border-color: #006799;
|
3799 |
+
color: #fff;
|
3800 |
+
}
|
3801 |
+
|
3802 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button.button-primary .fa-spinner {
|
3803 |
+
color: #fff;
|
3804 |
+
}
|
3805 |
+
|
3806 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button.button-secondary {
|
3807 |
+
color: #555;
|
3808 |
+
border-color: #cccccc;
|
3809 |
+
background: #f7f7f7;
|
3810 |
+
box-shadow: 0 1px 0 #cccccc;
|
3811 |
+
}
|
3812 |
+
|
3813 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button.button-secondary:hover,
|
3814 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button.button-secondary:focus {
|
3815 |
+
background: #fafafa;
|
3816 |
+
border-color: #999;
|
3817 |
+
color: #23282d;
|
3818 |
+
}
|
3819 |
+
|
3820 |
+
#aioseop-admin-about #aioseop-admin-addons .addon-item .action-button .button.disabled {
|
3821 |
+
cursor: default;
|
3822 |
+
}
|
3823 |
+
|
3824 |
+
@media (min-width: 1250px) {
|
3825 |
+
#aioseop-admin-community .item {
|
3826 |
+
width: calc(33.3333333% - 13.3333333px);
|
3827 |
+
}
|
3828 |
+
#aioseop-admin-community .item:nth-child(3n) {
|
3829 |
+
margin-right: 0;
|
3830 |
+
}
|
3831 |
+
}
|
3832 |
+
|
3833 |
+
@media (max-width: 1249px) {
|
3834 |
+
#aioseop-admin-community .item {
|
3835 |
+
width: calc(50% - 10px);
|
3836 |
+
}
|
3837 |
+
#aioseop-admin-community .item:nth-child(2n) {
|
3838 |
+
margin-right: 0;
|
3839 |
+
}
|
3840 |
+
}
|
3841 |
+
|
3842 |
+
@media (max-width: 767px) {
|
3843 |
+
#aioseop-admin-community .item {
|
3844 |
+
width: 100%;
|
3845 |
+
margin-right: 0;
|
3846 |
+
}
|
3847 |
+
}
|
3848 |
+
|
3849 |
+
#aioseop-admin-community *,
|
3850 |
+
#aioseop-admin-community *::before,
|
3851 |
+
#aioseop-admin-community *::after {
|
3852 |
+
-webkit-box-sizing: border-box;
|
3853 |
+
-moz-box-sizing: border-box;
|
3854 |
+
box-sizing: border-box;
|
3855 |
+
}
|
3856 |
+
|
3857 |
+
#aioseop-admin-community .items {
|
3858 |
+
display: flex;
|
3859 |
+
flex-wrap: wrap;
|
3860 |
+
margin: 20px;
|
3861 |
+
}
|
3862 |
+
|
3863 |
+
#aioseop-admin-community .item {
|
3864 |
+
border: 1px solid #DDDDDD;
|
3865 |
+
margin: 0 20px 20px 0;
|
3866 |
+
background-color: #ffffff;
|
3867 |
+
position: relative;
|
3868 |
+
}
|
3869 |
+
|
3870 |
+
#aioseop-admin-community .item-cover {
|
3871 |
+
width: 100%;
|
3872 |
+
height: 223px;
|
3873 |
+
position: relative;
|
3874 |
+
display: block;
|
3875 |
+
}
|
3876 |
+
|
3877 |
+
#aioseop-admin-community .item-img {
|
3878 |
+
width: auto;
|
3879 |
+
height: auto;
|
3880 |
+
max-width: 100px;
|
3881 |
+
max-height: 100px;
|
3882 |
+
position: absolute;
|
3883 |
+
top: 0;
|
3884 |
+
bottom: 0;
|
3885 |
+
left: 0;
|
3886 |
+
right: 0;
|
3887 |
+
margin: auto;
|
3888 |
+
}
|
3889 |
+
|
3890 |
+
#aioseop-admin-community .item-title {
|
3891 |
+
margin: 17px 20px 10px 20px;
|
3892 |
+
font-size: 16px;
|
3893 |
+
}
|
3894 |
+
|
3895 |
+
#aioseop-admin-community .item-description {
|
3896 |
+
margin: 0 20px 98px 20px;
|
3897 |
+
font-size: 14px;
|
3898 |
+
}
|
3899 |
+
|
3900 |
+
#aioseop-admin-community .item-footer {
|
3901 |
+
position: absolute;
|
3902 |
+
width: 100%;
|
3903 |
+
bottom: 0;
|
3904 |
+
padding: 20px;
|
3905 |
+
border-top: 1px solid #dddddd;
|
3906 |
+
background-color: #F7F7F7;
|
3907 |
+
}
|
3908 |
+
|
3909 |
+
#aioseop-admin-community .button {
|
3910 |
+
background-color: #1c75a6;
|
3911 |
+
color: #ffffff;
|
3912 |
+
font-weight: bold;
|
3913 |
+
-webkit-box-shadow: inset 0px -2px 0px 0px #0e6897;
|
3914 |
+
-moz-box-shadow: inset 0px -2px 0px 0px #0e6897;
|
3915 |
+
box-shadow: inset 0px -2px 0px 0px #0e6897;
|
3916 |
+
border: 1px solid #0e6897;
|
3917 |
+
padding: 12px;
|
3918 |
+
height: auto;
|
3919 |
+
line-height: 13px;
|
3920 |
+
text-shadow: 1px 1px 1.5px rgba(0, 0, 0, 0.35);
|
3921 |
+
}
|
3922 |
+
|
3923 |
+
#aioseop-admin-community .button:hover {
|
3924 |
+
background: #008ec2;
|
3925 |
+
border-color: #006799;
|
3926 |
+
}
|
3927 |
+
|
3928 |
+
.aioseop-admin-plugin-landing .notice {
|
3929 |
+
display: none !important;
|
3930 |
+
}
|
3931 |
+
|
3932 |
+
.aioseop-admin-plugin-landing .loader {
|
3933 |
+
margin: 0 auto;
|
3934 |
+
position: relative;
|
3935 |
+
text-indent: -9999em;
|
3936 |
+
border-top: 4px solid #969696;
|
3937 |
+
border-right: 4px solid #969696;
|
3938 |
+
border-bottom: 4px solid #969696;
|
3939 |
+
border-left: 4px solid #404040;
|
3940 |
+
-webkit-transform: translateZ(0);
|
3941 |
+
-ms-transform: translateZ(0);
|
3942 |
+
transform: translateZ(0);
|
3943 |
+
-webkit-animation: load8 1.1s infinite linear;
|
3944 |
+
animation: load8 1.1s infinite linear;
|
3945 |
+
background-color: transparent;
|
3946 |
+
}
|
3947 |
+
|
3948 |
+
.aioseop-admin-plugin-landing .loader,
|
3949 |
+
.aioseop-admin-plugin-landing .loader:after {
|
3950 |
+
display: block;
|
3951 |
+
border-radius: 50%;
|
3952 |
+
width: 50px;
|
3953 |
+
height: 50px;
|
3954 |
+
}
|
3955 |
+
|
3956 |
+
@-webkit-keyframes load8 {
|
3957 |
+
0% {
|
3958 |
+
-webkit-transform: rotate(0deg);
|
3959 |
+
transform: rotate(0deg);
|
3960 |
+
}
|
3961 |
+
100% {
|
3962 |
+
-webkit-transform: rotate(360deg);
|
3963 |
+
transform: rotate(360deg);
|
3964 |
+
}
|
3965 |
+
}
|
3966 |
+
|
3967 |
+
@keyframes load8 {
|
3968 |
+
0% {
|
3969 |
+
-webkit-transform: rotate(0deg);
|
3970 |
+
transform: rotate(0deg);
|
3971 |
+
}
|
3972 |
+
100% {
|
3973 |
+
-webkit-transform: rotate(360deg);
|
3974 |
+
transform: rotate(360deg);
|
3975 |
+
}
|
3976 |
+
}
|
3977 |
+
|
3978 |
+
#aioseop-admin-smtp {
|
3979 |
+
width: 700px;
|
3980 |
+
margin: 0 auto;
|
3981 |
+
}
|
3982 |
+
|
3983 |
+
#aioseop-admin-smtp *,
|
3984 |
+
#aioseop-admin-smtp *::before,
|
3985 |
+
#aioseop-admin-smtp *::after {
|
3986 |
+
-webkit-box-sizing: border-box;
|
3987 |
+
-moz-box-sizing: border-box;
|
3988 |
+
box-sizing: border-box;
|
3989 |
+
}
|
3990 |
+
|
3991 |
+
#aioseop-admin-smtp section {
|
3992 |
+
margin: 50px 0;
|
3993 |
+
text-align: left;
|
3994 |
+
clear: both;
|
3995 |
+
}
|
3996 |
+
|
3997 |
+
#aioseop-admin-smtp p {
|
3998 |
+
font-size: 15px;
|
3999 |
+
}
|
4000 |
+
|
4001 |
+
#aioseop-admin-smtp .top {
|
4002 |
+
text-align: center;
|
4003 |
+
}
|
4004 |
+
|
4005 |
+
#aioseop-admin-smtp .top img {
|
4006 |
+
margin-bottom: 38px;
|
4007 |
+
}
|
4008 |
+
|
4009 |
+
#aioseop-admin-smtp .top h1 {
|
4010 |
+
font-size: 26px;
|
4011 |
+
font-weight: 600;
|
4012 |
+
margin-bottom: 0;
|
4013 |
+
padding: 0;
|
4014 |
+
}
|
4015 |
+
|
4016 |
+
#aioseop-admin-smtp .top p {
|
4017 |
+
font-size: 17px;
|
4018 |
+
color: #777777;
|
4019 |
+
margin-top: .5em;
|
4020 |
+
}
|
4021 |
+
|
4022 |
+
#aioseop-admin-smtp .top .updated {
|
4023 |
+
display: none;
|
4024 |
+
}
|
4025 |
+
|
4026 |
+
#aioseop-admin-smtp .screenshot>* {
|
4027 |
+
vertical-align: middle;
|
4028 |
+
}
|
4029 |
+
|
4030 |
+
#aioseop-admin-smtp .screenshot .cont {
|
4031 |
+
display: inline-block;
|
4032 |
+
position: relative;
|
4033 |
+
width: 315px;
|
4034 |
+
padding: 5px;
|
4035 |
+
background-color: #ffffff;
|
4036 |
+
-webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4037 |
+
-moz-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4038 |
+
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4039 |
+
border-radius: 3px;
|
4040 |
+
}
|
4041 |
+
|
4042 |
+
#aioseop-admin-smtp .screenshot .cont img {
|
4043 |
+
max-width: 100%;
|
4044 |
+
display: block;
|
4045 |
+
}
|
4046 |
+
|
4047 |
+
#aioseop-admin-smtp .screenshot .cont .hover {
|
4048 |
+
position: absolute;
|
4049 |
+
opacity: 0;
|
4050 |
+
height: 100%;
|
4051 |
+
width: 100%;
|
4052 |
+
top: 0;
|
4053 |
+
left: 0;
|
4054 |
+
border: 5px solid #ffffff;
|
4055 |
+
background-color: rgba(0, 0, 0, 0.15);
|
4056 |
+
background-image: url("../images/zoom.svg");
|
4057 |
+
background-repeat: no-repeat;
|
4058 |
+
background-position: center;
|
4059 |
+
background-size: 50px;
|
4060 |
+
transition: all 0.3s;
|
4061 |
+
}
|
4062 |
+
|
4063 |
+
#aioseop-admin-smtp .screenshot .cont:hover .hover {
|
4064 |
+
opacity: 1;
|
4065 |
+
transition: all 0.3s;
|
4066 |
+
}
|
4067 |
+
|
4068 |
+
#aioseop-admin-smtp .screenshot ul {
|
4069 |
+
display: inline-block;
|
4070 |
+
margin: 0 0 0 30px;
|
4071 |
+
list-style-type: none;
|
4072 |
+
max-width: calc(100% - 350px);
|
4073 |
+
}
|
4074 |
+
|
4075 |
+
#aioseop-admin-smtp .screenshot li {
|
4076 |
+
margin: 16px 0;
|
4077 |
+
padding: 0 0 0 24px;
|
4078 |
+
font-size: 15px;
|
4079 |
+
background-image: url("../images/arrow-right.svg");
|
4080 |
+
background-position: left 3px;
|
4081 |
+
background-repeat: no-repeat;
|
4082 |
+
background-size: 14px;
|
4083 |
+
color: #777777;
|
4084 |
+
}
|
4085 |
+
|
4086 |
+
#aioseop-admin-smtp .step {
|
4087 |
+
background-color: #F9F9F9;
|
4088 |
+
-webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4089 |
+
-moz-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4090 |
+
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4091 |
+
border: 1px solid #E5E5E5;
|
4092 |
+
margin: 0 0 25px 0;
|
4093 |
+
}
|
4094 |
+
|
4095 |
+
#aioseop-admin-smtp .step>* {
|
4096 |
+
vertical-align: middle;
|
4097 |
+
}
|
4098 |
+
|
4099 |
+
#aioseop-admin-smtp .step .num {
|
4100 |
+
display: inline-block;
|
4101 |
+
position: relative;
|
4102 |
+
width: 100px;
|
4103 |
+
height: 50px;
|
4104 |
+
text-align: center;
|
4105 |
+
}
|
4106 |
+
|
4107 |
+
#aioseop-admin-smtp .step .loader {
|
4108 |
+
margin-top: -54px;
|
4109 |
+
transition: all .3s;
|
4110 |
+
opacity: 1;
|
4111 |
+
}
|
4112 |
+
|
4113 |
+
#aioseop-admin-smtp .step div {
|
4114 |
+
display: inline-block;
|
4115 |
+
width: calc(100% - 104px);
|
4116 |
+
background-color: #ffffff;
|
4117 |
+
padding: 30px;
|
4118 |
+
border-left: 1px solid #eeeeee;
|
4119 |
+
}
|
4120 |
+
|
4121 |
+
#aioseop-admin-smtp .step h2 {
|
4122 |
+
font-size: 24px;
|
4123 |
+
line-height: 22px;
|
4124 |
+
margin-top: 0;
|
4125 |
+
margin-bottom: 15px;
|
4126 |
+
}
|
4127 |
+
|
4128 |
+
#aioseop-admin-smtp .step p {
|
4129 |
+
font-size: 16px;
|
4130 |
+
color: #777777;
|
4131 |
+
}
|
4132 |
+
|
4133 |
+
#aioseop-admin-smtp .step .error {
|
4134 |
+
font-size: 14px;
|
4135 |
+
color: #b97474;
|
4136 |
+
margin-bottom: 0;
|
4137 |
+
}
|
4138 |
+
|
4139 |
+
#aioseop-admin-smtp .step .button {
|
4140 |
+
background-color: #007cba;
|
4141 |
+
color: #ffffff;
|
4142 |
+
font-weight: 500;
|
4143 |
+
box-shadow: none;
|
4144 |
+
padding: 12px;
|
4145 |
+
min-width: 200px;
|
4146 |
+
height: auto;
|
4147 |
+
line-height: 13px;
|
4148 |
+
text-align: center;
|
4149 |
+
font-size: 15px;
|
4150 |
+
border: none;
|
4151 |
+
transition: all .3s;
|
4152 |
+
}
|
4153 |
+
|
4154 |
+
#aioseop-admin-smtp .step .button:hover {
|
4155 |
+
background: #0071a1;
|
4156 |
+
}
|
4157 |
+
|
4158 |
+
#aioseop-admin-smtp .step .button.grey {
|
4159 |
+
background: #F6F6F6;
|
4160 |
+
border: 1px solid #dddddd;
|
4161 |
+
text-shadow: none;
|
4162 |
+
color: #9FA5AA;
|
4163 |
+
}
|
4164 |
+
|
4165 |
+
#aioseop-admin-smtp .step .button.disabled {
|
4166 |
+
cursor: default;
|
4167 |
+
}
|
4168 |
+
|
4169 |
+
#aioseop-admin-smtp .step .hidden {
|
4170 |
+
opacity: 0;
|
4171 |
+
transition: all .3s;
|
4172 |
+
}
|
4173 |
+
|
4174 |
+
#aioseop-admin-smtp .grey {
|
4175 |
+
opacity: 0.5;
|
4176 |
+
}
|
4177 |
+
|
4178 |
+
@media (max-width: 767px) {
|
4179 |
+
#aioseop-admin-smtp {
|
4180 |
+
width: auto;
|
4181 |
+
margin: 0 20px;
|
4182 |
+
}
|
4183 |
+
#aioseop-admin-smtp .screenshot .cont {
|
4184 |
+
width: auto;
|
4185 |
+
}
|
4186 |
+
#aioseop-admin-smtp .screenshot ul {
|
4187 |
+
margin: 20px 0 0 15px;
|
4188 |
+
max-width: 100%;
|
4189 |
+
}
|
4190 |
+
#aioseop-admin-smtp .button {
|
4191 |
+
white-space: normal;
|
4192 |
+
}
|
4193 |
+
}
|
4194 |
+
|
4195 |
+
#aioseop-admin-analytics {
|
4196 |
+
width: 700px;
|
4197 |
+
margin: 0 auto;
|
4198 |
+
}
|
4199 |
+
|
4200 |
+
#aioseop-admin-analytics *,
|
4201 |
+
#aioseop-admin-analytics *::before,
|
4202 |
+
#aioseop-admin-analytics *::after {
|
4203 |
+
-webkit-box-sizing: border-box;
|
4204 |
+
-moz-box-sizing: border-box;
|
4205 |
+
box-sizing: border-box;
|
4206 |
+
}
|
4207 |
+
|
4208 |
+
#aioseop-admin-analytics section {
|
4209 |
+
margin: 50px 0;
|
4210 |
+
text-align: left;
|
4211 |
+
clear: both;
|
4212 |
+
}
|
4213 |
+
|
4214 |
+
#aioseop-admin-analytics p {
|
4215 |
+
font-size: 15px;
|
4216 |
+
}
|
4217 |
+
|
4218 |
+
#aioseop-admin-analytics .top {
|
4219 |
+
text-align: center;
|
4220 |
+
}
|
4221 |
+
|
4222 |
+
#aioseop-admin-analytics .top img {
|
4223 |
+
margin-bottom: 38px;
|
4224 |
+
}
|
4225 |
+
|
4226 |
+
#aioseop-admin-analytics .top h1 {
|
4227 |
+
font-size: 26px;
|
4228 |
+
font-weight: 600;
|
4229 |
+
margin-bottom: 0;
|
4230 |
+
padding: 0;
|
4231 |
+
}
|
4232 |
+
|
4233 |
+
#aioseop-admin-analytics .top p {
|
4234 |
+
font-size: 17px;
|
4235 |
+
color: #777777;
|
4236 |
+
margin-top: .5em;
|
4237 |
+
}
|
4238 |
+
|
4239 |
+
#aioseop-admin-analytics .top .updated {
|
4240 |
+
display: none;
|
4241 |
+
}
|
4242 |
+
|
4243 |
+
#aioseop-admin-analytics .screenshot>* {
|
4244 |
+
vertical-align: middle;
|
4245 |
+
}
|
4246 |
+
|
4247 |
+
#aioseop-admin-analytics .screenshot .cont {
|
4248 |
+
display: inline-block;
|
4249 |
+
position: relative;
|
4250 |
+
width: 315px;
|
4251 |
+
padding: 5px;
|
4252 |
+
background-color: #ffffff;
|
4253 |
+
-webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4254 |
+
-moz-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4255 |
+
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4256 |
+
border-radius: 3px;
|
4257 |
+
}
|
4258 |
+
|
4259 |
+
#aioseop-admin-analytics .screenshot .cont img {
|
4260 |
+
max-width: 100%;
|
4261 |
+
}
|
4262 |
+
|
4263 |
+
#aioseop-admin-analytics .screenshot .cont .hover {
|
4264 |
+
position: absolute;
|
4265 |
+
opacity: 0;
|
4266 |
+
height: 100%;
|
4267 |
+
width: 100%;
|
4268 |
+
top: 0;
|
4269 |
+
left: 0;
|
4270 |
+
border: 5px solid #ffffff;
|
4271 |
+
background-color: rgba(0, 0, 0, 0.15);
|
4272 |
+
background-image: url("../images/zoom.svg");
|
4273 |
+
background-repeat: no-repeat;
|
4274 |
+
background-position: center;
|
4275 |
+
background-size: 50px;
|
4276 |
+
transition: all 0.3s;
|
4277 |
+
}
|
4278 |
+
|
4279 |
+
#aioseop-admin-analytics .screenshot .cont:hover .hover {
|
4280 |
+
opacity: 1;
|
4281 |
+
transition: all 0.3s;
|
4282 |
+
}
|
4283 |
+
|
4284 |
+
#aioseop-admin-analytics .screenshot ul {
|
4285 |
+
display: inline-block;
|
4286 |
+
margin-left: 30px;
|
4287 |
+
list-style-type: none;
|
4288 |
+
}
|
4289 |
+
|
4290 |
+
#aioseop-admin-analytics .screenshot li {
|
4291 |
+
margin: 16px 0;
|
4292 |
+
padding: 0 0 0 24px;
|
4293 |
+
font-size: 15px;
|
4294 |
+
background-image: url("../images/arrow-right.svg");
|
4295 |
+
background-position: left center;
|
4296 |
+
background-repeat: no-repeat;
|
4297 |
+
background-size: 14px;
|
4298 |
+
color: #777777;
|
4299 |
+
}
|
4300 |
+
|
4301 |
+
#aioseop-admin-analytics .step {
|
4302 |
+
background-color: #F9F9F9;
|
4303 |
+
-webkit-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4304 |
+
-moz-box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4305 |
+
box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.05);
|
4306 |
+
border: 1px solid #E5E5E5;
|
4307 |
+
margin: 0 0 25px 0;
|
4308 |
+
}
|
4309 |
+
|
4310 |
+
#aioseop-admin-analytics .step>* {
|
4311 |
+
vertical-align: middle;
|
4312 |
+
}
|
4313 |
+
|
4314 |
+
#aioseop-admin-analytics .step .num {
|
4315 |
+
display: inline-block;
|
4316 |
+
position: relative;
|
4317 |
+
width: 100px;
|
4318 |
+
height: 50px;
|
4319 |
+
text-align: center;
|
4320 |
+
}
|
4321 |
+
|
4322 |
+
#aioseop-admin-analytics .step .loader {
|
4323 |
+
margin-top: -54px;
|
4324 |
+
transition: all .3s;
|
4325 |
+
opacity: 1;
|
4326 |
+
}
|
4327 |
+
|
4328 |
+
#aioseop-admin-analytics .step div {
|
4329 |
+
display: inline-block;
|
4330 |
+
width: calc(100% - 104px);
|
4331 |
+
background-color: #ffffff;
|
4332 |
+
padding: 30px;
|
4333 |
+
border-left: 1px solid #eeeeee;
|
4334 |
+
}
|
4335 |
+
|
4336 |
+
#aioseop-admin-analytics .step h2 {
|
4337 |
+
font-size: 24px;
|
4338 |
+
margin-top: 0;
|
4339 |
+
margin-bottom: 15px;
|
4340 |
+
}
|
4341 |
+
|
4342 |
+
#aioseop-admin-analytics .step p {
|
4343 |
+
font-size: 16px;
|
4344 |
+
color: #777777;
|
4345 |
+
}
|
4346 |
+
|
4347 |
+
#aioseop-admin-analytics .step .error {
|
4348 |
+
font-size: 14px;
|
4349 |
+
color: #b97474;
|
4350 |
+
margin-bottom: 0;
|
4351 |
+
}
|
4352 |
+
|
4353 |
+
#aioseop-admin-analytics .step .button {
|
4354 |
+
background-color: #007cba;
|
4355 |
+
color: #ffffff;
|
4356 |
+
font-weight: 500;
|
4357 |
+
padding: 12px;
|
4358 |
+
min-width: 200px;
|
4359 |
+
height: auto;
|
4360 |
+
line-height: 13px;
|
4361 |
+
text-align: center;
|
4362 |
+
font-size: 15px;
|
4363 |
+
border: none;
|
4364 |
+
transition: all .3s;
|
4365 |
+
}
|
4366 |
+
|
4367 |
+
#aioseop-admin-analytics .step .button:hover {
|
4368 |
+
background: #0071a1;
|
4369 |
+
}
|
4370 |
+
|
4371 |
+
#aioseop-admin-analytics .step .button.grey {
|
4372 |
+
background: #F6F6F6;
|
4373 |
+
border: 1px solid #dddddd;
|
4374 |
+
box-shadow: none;
|
4375 |
+
text-shadow: none;
|
4376 |
+
color: #9FA5AA;
|
4377 |
+
}
|
4378 |
+
|
4379 |
+
#aioseop-admin-analytics .step .button.disabled {
|
4380 |
+
cursor: default;
|
4381 |
+
}
|
4382 |
+
|
4383 |
+
#aioseop-admin-analytics .step .hidden {
|
4384 |
+
opacity: 0;
|
4385 |
+
transition: all .3s;
|
4386 |
+
}
|
4387 |
+
|
4388 |
+
#aioseop-admin-analytics .grey {
|
4389 |
+
opacity: 0.5;
|
4390 |
+
}
|
4391 |
+
|
4392 |
+
@media (max-width: 767px) {
|
4393 |
+
#aioseop-admin-analytics {
|
4394 |
+
width: auto;
|
4395 |
+
margin: 0 20px;
|
4396 |
+
}
|
4397 |
+
#aioseop-admin-analytics .screenshot .cont {
|
4398 |
+
width: auto;
|
4399 |
+
}
|
4400 |
+
#aioseop-admin-analytics .button {
|
4401 |
+
white-space: normal;
|
4402 |
+
}
|
4403 |
+
}
|
4404 |
+
|
4405 |
+
.aioseop-admin-settings *,
|
4406 |
+
.aioseop-admin-settings *::before,
|
4407 |
+
.aioseop-admin-settings *::after {
|
4408 |
+
-webkit-box-sizing: border-box;
|
4409 |
+
-moz-box-sizing: border-box;
|
4410 |
+
box-sizing: border-box;
|
4411 |
+
}
|
4412 |
+
|
4413 |
+
.aioseop-admin-settings .aioseop-setting-row {
|
4414 |
+
border-bottom: 1px solid #e4e4e4;
|
4415 |
+
padding: 30px 0;
|
4416 |
+
font-size: 14px;
|
4417 |
+
line-height: 1.3;
|
4418 |
+
}
|
4419 |
+
|
4420 |
+
.aioseop-admin-settings .aioseop-setting-row:first-of-type {
|
4421 |
+
padding-top: 10px !important;
|
4422 |
+
}
|
4423 |
+
|
4424 |
+
@media (max-width: 781px) {
|
4425 |
+
.aioseop-admin-settings .aioseop-setting-row {
|
4426 |
+
padding: 20px 0;
|
4427 |
+
}
|
4428 |
+
}
|
4429 |
+
|
4430 |
+
.aioseop-admin-settings .aioseop-setting-row.section-heading {
|
4431 |
+
padding: 20px 0;
|
4432 |
+
}
|
4433 |
+
|
4434 |
+
.aioseop-admin-settings .aioseop-setting-row.section-heading.no-desc h4 {
|
4435 |
+
margin: 0;
|
4436 |
+
}
|
4437 |
+
|
4438 |
+
.aioseop-admin-settings .aioseop-setting-row.section-heading .aioseop-setting-field {
|
4439 |
+
margin: 0;
|
4440 |
+
max-width: 1000px;
|
4441 |
+
}
|
4442 |
+
|
4443 |
+
.aioseop-admin-settings .aioseop-setting-row.tools p,
|
4444 |
+
.aioseop-admin-settings .aioseop-setting-row.tools p:first-of-type {
|
4445 |
+
margin: 0 0 16px 0;
|
4446 |
+
}
|
4447 |
+
|
4448 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-checkbox input[type=checkbox] {
|
4449 |
+
float: left;
|
4450 |
+
margin: 1px 0 0 0;
|
4451 |
+
}
|
4452 |
+
|
4453 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-checkbox .desc {
|
4454 |
+
margin: 0 0 0 30px;
|
4455 |
+
}
|
4456 |
+
|
4457 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-license .aioseop-setting-label {
|
4458 |
+
padding-top: 8px;
|
4459 |
+
}
|
4460 |
+
|
4461 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-license p.type {
|
4462 |
+
margin-top: 12px;
|
4463 |
+
}
|
4464 |
+
|
4465 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-text .aioseop-setting-label,
|
4466 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-number .aioseop-setting-label {
|
4467 |
+
padding-top: 8px;
|
4468 |
+
}
|
4469 |
+
|
4470 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-select .aioseop-setting-label {
|
4471 |
+
padding-top: 8px;
|
4472 |
+
}
|
4473 |
+
|
4474 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-radio .aioseop-setting-field input[type=radio] {
|
4475 |
+
margin: -3px 10px 0 0;
|
4476 |
+
}
|
4477 |
+
|
4478 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-radio .aioseop-setting-field label {
|
4479 |
+
margin-right: 30px;
|
4480 |
+
display: inline-block;
|
4481 |
+
}
|
4482 |
+
|
4483 |
+
.aioseop-admin-settings .aioseop-setting-row#aioseop-setting-row-email-template .aioseop-setting-field label:before {
|
4484 |
+
content: " ";
|
4485 |
+
display: block;
|
4486 |
+
width: 155px;
|
4487 |
+
height: 180px;
|
4488 |
+
margin: 0 0 10px 0;
|
4489 |
+
}
|
4490 |
+
|
4491 |
+
.aioseop-admin-settings .aioseop-setting-row#aioseop-setting-row-email-template .aioseop-setting-field .option-default:before {
|
4492 |
+
background: url(../images/settings-email-html.png) center center;
|
4493 |
+
}
|
4494 |
+
|
4495 |
+
.aioseop-admin-settings .aioseop-setting-row#aioseop-setting-row-email-template .aioseop-setting-field .option-none:before {
|
4496 |
+
background: url(../images/settings-email-plaintext.png) center center;
|
4497 |
+
}
|
4498 |
+
|
4499 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-image .aioseop-setting-field img {
|
4500 |
+
display: block;
|
4501 |
+
margin: 0 0 20px 0;
|
4502 |
+
max-width: 400px;
|
4503 |
+
}
|
4504 |
+
|
4505 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-color .aioseop-color-picker {
|
4506 |
+
padding-left: 40px;
|
4507 |
+
}
|
4508 |
+
|
4509 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-color .minicolors-input-swatch {
|
4510 |
+
top: 7px;
|
4511 |
+
left: 7px;
|
4512 |
+
height: 21px;
|
4513 |
+
width: 21px;
|
4514 |
+
border-radius: 2px;
|
4515 |
+
}
|
4516 |
+
|
4517 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-columns {
|
4518 |
+
display: flex;
|
4519 |
+
}
|
4520 |
+
|
4521 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-columns .aioseop-setting-label {
|
4522 |
+
float: none;
|
4523 |
+
align-self: center;
|
4524 |
+
flex: 0 0 200px;
|
4525 |
+
}
|
4526 |
+
|
4527 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-columns .aioseop-setting-field {
|
4528 |
+
margin: 0;
|
4529 |
+
flex: 1;
|
4530 |
+
}
|
4531 |
+
|
4532 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-columns .aioseop-setting-columns {
|
4533 |
+
margin: 0;
|
4534 |
+
display: flex;
|
4535 |
+
flex-wrap: wrap;
|
4536 |
+
justify-content: space-between;
|
4537 |
+
}
|
4538 |
+
|
4539 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-columns .aioseop-setting-column {
|
4540 |
+
margin-right: 5px;
|
4541 |
+
flex-basis: 390px;
|
4542 |
+
}
|
4543 |
+
|
4544 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-columns .aioseop-setting-column>* {
|
4545 |
+
width: 100%;
|
4546 |
+
}
|
4547 |
+
|
4548 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-columns .aioseop-setting-column label {
|
4549 |
+
display: inline-block;
|
4550 |
+
margin-bottom: 10px;
|
4551 |
+
}
|
4552 |
+
|
4553 |
+
.aioseop-admin-settings .aioseop-setting-row.aioseop-setting-row-columns .aioseop-setting-column .desc {
|
4554 |
+
margin-bottom: 10px;
|
4555 |
+
}
|
4556 |
+
|
4557 |
+
.aioseop-admin-settings .aioseop-setting-row h5 {
|
4558 |
+
font-size: 16px;
|
4559 |
+
font-weight: 600;
|
4560 |
+
margin: 0 0 20px 0;
|
4561 |
+
}
|
4562 |
+
|
4563 |
+
.aioseop-admin-settings .aioseop-setting-row h4 {
|
4564 |
+
font-size: 20px;
|
4565 |
+
font-weight: 700;
|
4566 |
+
margin: 0 0 6px 0;
|
4567 |
+
}
|
4568 |
+
|
4569 |
+
.aioseop-admin-settings .aioseop-setting-row h3 {
|
4570 |
+
font-size: 24px;
|
4571 |
+
font-weight: 600;
|
4572 |
+
margin: 0 0 20px 0;
|
4573 |
+
}
|
4574 |
+
|
4575 |
+
.aioseop-admin-settings .aioseop-setting-row p {
|
4576 |
+
margin: 12px 0 0;
|
4577 |
+
font-size: 14px;
|
4578 |
+
line-height: 1.3;
|
4579 |
+
}
|
4580 |
+
|
4581 |
+
.aioseop-admin-settings .aioseop-setting-row p:first-of-type {
|
4582 |
+
margin: 8px 0 0;
|
4583 |
+
}
|
4584 |
+
|
4585 |
+
.aioseop-admin-settings .aioseop-setting-row p.desc {
|
4586 |
+
font-style: italic;
|
4587 |
+
color: #666;
|
4588 |
+
}
|
4589 |
+
|
4590 |
+
.aioseop-admin-settings .aioseop-setting-row p.discount-note {
|
4591 |
+
font-style: italic;
|
4592 |
+
color: #666;
|
4593 |
+
}
|
4594 |
+
|
4595 |
+
.aioseop-admin-settings .aioseop-setting-row p.discount-note strong {
|
4596 |
+
color: green;
|
4597 |
+
}
|
4598 |
+
|
4599 |
+
.aioseop-admin-settings .aioseop-setting-row input[type=text],
|
4600 |
+
.aioseop-admin-settings .aioseop-setting-row input[type=password],
|
4601 |
+
.aioseop-admin-settings .aioseop-setting-row input[type=number],
|
4602 |
+
.aioseop-admin-settings .aioseop-setting-row select {
|
4603 |
+
background-color: #fff;
|
4604 |
+
border: 1px solid #ddd;
|
4605 |
+
border-radius: 3px;
|
4606 |
+
box-shadow: none;
|
4607 |
+
color: #333;
|
4608 |
+
display: inline-block;
|
4609 |
+
vertical-align: middle;
|
4610 |
+
padding: 7px 12px;
|
4611 |
+
margin: 0 10px 0 0;
|
4612 |
+
width: 400px;
|
4613 |
+
min-height: 35px;
|
4614 |
+
line-height: 1.3;
|
4615 |
+
}
|
4616 |
+
|
4617 |
+
@media (max-width: 959px) {
|
4618 |
+
.aioseop-admin-settings .aioseop-setting-row input[type=text],
|
4619 |
+
.aioseop-admin-settings .aioseop-setting-row input[type=password],
|
4620 |
+
.aioseop-admin-settings .aioseop-setting-row input[type=number],
|
4621 |
+
.aioseop-admin-settings .aioseop-setting-row select {
|
4622 |
+
width: 300px;
|
4623 |
+
}
|
4624 |
+
}
|
4625 |
+
|
4626 |
+
.aioseop-admin-settings .aioseop-setting-row input[type=number] {
|
4627 |
+
width: 100px;
|
4628 |
+
}
|
4629 |
+
|
4630 |
+
.aioseop-admin-settings .aioseop-setting-row button {
|
4631 |
+
margin-right: 10px;
|
4632 |
+
}
|
4633 |
+
|
4634 |
+
.aioseop-admin-settings .aioseop-setting-row .choicesjs-select-wrap {
|
4635 |
+
display: block;
|
4636 |
+
max-width: 400px;
|
4637 |
+
}
|
4638 |
+
|
4639 |
+
@media (max-width: 959px) {
|
4640 |
+
.aioseop-admin-settings .aioseop-setting-row .choicesjs-select-wrap {
|
4641 |
+
width: 300px;
|
4642 |
+
}
|
4643 |
+
}
|
4644 |
+
|
4645 |
+
.aioseop-admin-settings .aioseop-setting-row .progress-bar {
|
4646 |
+
background: #fff;
|
4647 |
+
border: 1px solid #e27730;
|
4648 |
+
height: 30px;
|
4649 |
+
width: 100%;
|
4650 |
+
position: relative;
|
4651 |
+
border-radius: 3px;
|
4652 |
+
margin: 0 0 16px 0;
|
4653 |
+
}
|
4654 |
+
|
4655 |
+
.aioseop-admin-settings .aioseop-setting-row .progress-bar.complete {
|
4656 |
+
border: 1px solid #2a9b39;
|
4657 |
+
}
|
4658 |
+
|
4659 |
+
.aioseop-admin-settings .aioseop-setting-row .progress-bar.complete .bar {
|
4660 |
+
background-color: #2a9b39;
|
4661 |
+
}
|
4662 |
+
|
4663 |
+
.aioseop-admin-settings .aioseop-setting-row .progress-bar.complete .bar:after {
|
4664 |
+
content: none;
|
4665 |
+
display: none;
|
4666 |
+
}
|
4667 |
+
|
4668 |
+
.aioseop-admin-settings .aioseop-setting-row .progress-bar .bar {
|
4669 |
+
display: block;
|
4670 |
+
background: #e27730;
|
4671 |
+
height: 100%;
|
4672 |
+
left: 0;
|
4673 |
+
position: absolute;
|
4674 |
+
-webkit-transition: width 0.5s ease-in-out;
|
4675 |
+
-moz-transition: width 0.5s ease-in-out;
|
4676 |
+
-o-transition: width 0.5s ease-in-out;
|
4677 |
+
transition: width 0.5s ease-in-out;
|
4678 |
+
}
|
4679 |
+
|
4680 |
+
@-webkit-keyframes progress {
|
4681 |
+
to {
|
4682 |
+
background-position: 60px 0;
|
4683 |
+
}
|
4684 |
+
}
|
4685 |
+
|
4686 |
+
@-moz-keyframes progress {
|
4687 |
+
to {
|
4688 |
+
background-position: 60px 0;
|
4689 |
+
}
|
4690 |
+
}
|
4691 |
+
|
4692 |
+
@keyframes progress {
|
4693 |
+
to {
|
4694 |
+
background-position: 60px 0;
|
4695 |
+
}
|
4696 |
+
}
|
4697 |
+
|
4698 |
+
.aioseop-admin-settings .aioseop-setting-row .progress-bar .bar:after {
|
4699 |
+
content: '';
|
4700 |
+
display: block;
|
4701 |
+
position: absolute;
|
4702 |
+
top: 0;
|
4703 |
+
left: 0;
|
4704 |
+
width: 100%;
|
4705 |
+
height: 100%;
|
4706 |
+
-webkit-animation: progress 1s linear infinite;
|
4707 |
+
-moz-animation: progress 1s linear infinite;
|
4708 |
+
animation: progress 1s linear infinite;
|
4709 |
+
background-repeat: repeat-x;
|
4710 |
+
background-size: 60px 60px;
|
4711 |
+
background-image: -webkit-linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4712 |
+
background-image: linear-gradient(-45deg, transparent 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
4713 |
+
}
|
4714 |
+
|
4715 |
+
.aioseop-admin-settings .aioseop-setting-label {
|
4716 |
+
display: block;
|
4717 |
+
float: left;
|
4718 |
+
width: 200px;
|
4719 |
+
padding: 0;
|
4720 |
+
}
|
4721 |
+
|
4722 |
+
@media (max-width: 781px) {
|
4723 |
+
.aioseop-admin-settings .aioseop-setting-label {
|
4724 |
+
float: none;
|
4725 |
+
width: 100%;
|
4726 |
+
padding-bottom: 15px;
|
4727 |
+
}
|
4728 |
+
}
|
4729 |
+
|
4730 |
+
.aioseop-admin-settings .aioseop-setting-label label {
|
4731 |
+
display: block;
|
4732 |
+
font-weight: 600;
|
4733 |
+
}
|
4734 |
+
|
4735 |
+
.aioseop-admin-settings .aioseop-setting-field {
|
4736 |
+
display: block;
|
4737 |
+
margin: 0 0 0 200px;
|
4738 |
+
max-width: 800px;
|
4739 |
+
}
|
4740 |
+
|
4741 |
+
@media (max-width: 781px) {
|
4742 |
+
.aioseop-admin-settings .aioseop-setting-field {
|
4743 |
+
margin: 0;
|
4744 |
+
}
|
4745 |
+
}
|
4746 |
+
|
4747 |
+
.aioseop-admin-settings p.submit {
|
4748 |
+
margin: 0;
|
4749 |
+
padding: 25px 0;
|
4750 |
+
}
|
4751 |
+
|
4752 |
+
.aioseop-admin-settings .info-area,
|
4753 |
+
.aioseop-admin-settings .pre-error {
|
4754 |
+
display: block;
|
4755 |
+
width: 100%;
|
4756 |
+
max-width: 1000px;
|
4757 |
+
height: 450px;
|
4758 |
+
font-family: Menlo, Monaco, monospace;
|
4759 |
+
font-size: 12px;
|
4760 |
+
background: #fff;
|
4761 |
+
box-shadow: none;
|
4762 |
+
border: 1px solid #ddd;
|
4763 |
+
white-space: pre;
|
4764 |
+
overflow: auto;
|
4765 |
+
padding: 20px;
|
4766 |
+
}
|
4767 |
+
|
4768 |
+
.aioseop-admin-settings .pre-error {
|
4769 |
+
height: auto;
|
4770 |
+
max-height: 250px;
|
4771 |
+
margin-bottom: 20px;
|
4772 |
+
}
|
4773 |
+
|
4774 |
+
.aioseop-admin-settings .checkbox-multiselect-columns {
|
4775 |
+
max-width: 600px;
|
4776 |
+
position: relative;
|
4777 |
+
}
|
4778 |
+
|
4779 |
+
.aioseop-admin-settings .checkbox-multiselect-columns:after {
|
4780 |
+
content: ".";
|
4781 |
+
display: block;
|
4782 |
+
height: 0;
|
4783 |
+
line-height: 0;
|
4784 |
+
font-size: 0;
|
4785 |
+
clear: both;
|
4786 |
+
min-height: 0;
|
4787 |
+
visibility: hidden;
|
4788 |
+
}
|
4789 |
+
|
4790 |
+
.aioseop-admin-settings .checkbox-multiselect-columns:before {
|
4791 |
+
content: "\f0ec";
|
4792 |
+
color: #999;
|
4793 |
+
font: normal normal normal 20px/1 FontAwesome;
|
4794 |
+
text-rendering: auto;
|
4795 |
+
-webkit-font-smoothing: antialiased;
|
4796 |
+
-moz-osx-font-smoothing: grayscale;
|
4797 |
+
position: absolute;
|
4798 |
+
top: 130px;
|
4799 |
+
left: 50%;
|
4800 |
+
margin: 0 0 0 -10px;
|
4801 |
+
}
|
4802 |
+
|
4803 |
+
.aioseop-admin-settings .checkbox-multiselect-columns .header {
|
4804 |
+
font-weight: 600;
|
4805 |
+
font-size: 13px;
|
4806 |
+
margin: 0;
|
4807 |
+
padding: 0 0 5px 0;
|
4808 |
+
text-align: center;
|
4809 |
+
}
|
4810 |
+
|
4811 |
+
.aioseop-admin-settings .checkbox-multiselect-columns .first-column,
|
4812 |
+
.aioseop-admin-settings .checkbox-multiselect-columns .second-column {
|
4813 |
+
width: 45%;
|
4814 |
+
float: left;
|
4815 |
+
}
|
4816 |
+
|
4817 |
+
.aioseop-admin-settings .checkbox-multiselect-columns .second-column {
|
4818 |
+
float: right;
|
4819 |
+
}
|
4820 |
+
|
4821 |
+
.aioseop-admin-settings .checkbox-multiselect-columns .second-column ul li {
|
4822 |
+
padding: 10px;
|
4823 |
+
}
|
4824 |
+
|
4825 |
+
.aioseop-admin-settings .checkbox-multiselect-columns ul {
|
4826 |
+
background-color: #fff;
|
4827 |
+
border: 1px solid #ddd;
|
4828 |
+
border-radius: 3px;
|
4829 |
+
position: relative;
|
4830 |
+
height: 250px;
|
4831 |
+
padding: 0;
|
4832 |
+
overflow-y: auto;
|
4833 |
+
margin: 0;
|
4834 |
+
list-style-type: none;
|
4835 |
+
}
|
4836 |
+
|
4837 |
+
.aioseop-admin-settings .checkbox-multiselect-columns ul li {
|
4838 |
+
border-bottom: 1px #eee solid;
|
4839 |
+
margin: 0;
|
4840 |
+
font-size: 14px;
|
4841 |
+
}
|
4842 |
+
|
4843 |
+
.aioseop-admin-settings .checkbox-multiselect-columns ul li label {
|
4844 |
+
display: block;
|
4845 |
+
padding: 10px 10px 10px 32px;
|
4846 |
+
position: relative;
|
4847 |
+
vertical-align: baseline;
|
4848 |
+
}
|
4849 |
+
|
4850 |
+
.aioseop-admin-settings .checkbox-multiselect-columns ul li label:hover {
|
4851 |
+
background-color: #e27730;
|
4852 |
+
color: #fff;
|
4853 |
+
}
|
4854 |
+
|
4855 |
+
.aioseop-admin-settings .checkbox-multiselect-columns ul li label:before {
|
4856 |
+
content: "\f0c8";
|
4857 |
+
color: #ddd;
|
4858 |
+
font: normal normal normal 16px/1 FontAwesome;
|
4859 |
+
text-rendering: auto;
|
4860 |
+
-webkit-font-smoothing: antialiased;
|
4861 |
+
-moz-osx-font-smoothing: grayscale;
|
4862 |
+
position: absolute;
|
4863 |
+
top: 12px;
|
4864 |
+
left: 10px;
|
4865 |
+
}
|
4866 |
+
|
4867 |
+
.aioseop-admin-settings .checkbox-multiselect-columns ul li label.checked {
|
4868 |
+
opacity: 0.6;
|
4869 |
+
}
|
4870 |
+
|
4871 |
+
.aioseop-admin-settings .checkbox-multiselect-columns ul li label.checked:before {
|
4872 |
+
content: "\f14a";
|
4873 |
+
color: #2a9b39;
|
4874 |
+
}
|
4875 |
+
|
4876 |
+
.aioseop-admin-settings .checkbox-multiselect-columns ul li input {
|
4877 |
+
display: none;
|
4878 |
+
}
|
4879 |
+
|
4880 |
+
.aioseop-admin-settings .checkbox-multiselect-columns .all {
|
4881 |
+
color: #999;
|
4882 |
+
display: inline-block;
|
4883 |
+
font-size: 13px;
|
4884 |
+
margin: 10px 0 0;
|
4885 |
+
}
|
4886 |
+
|
4887 |
+
.aioseop-admin-settings #aioseop-importer-analyze {
|
4888 |
+
display: none;
|
4889 |
+
}
|
4890 |
+
|
4891 |
+
.aioseop-admin-settings #aioseop-importer-analyze .process-count,
|
4892 |
+
.aioseop-admin-settings #aioseop-importer-analyze p {
|
4893 |
+
font-size: 14px;
|
4894 |
+
}
|
4895 |
+
|
4896 |
+
.aioseop-admin-settings #aioseop-importer-analyze .upgrade {
|
4897 |
+
display: none;
|
4898 |
+
font-size: 14px;
|
4899 |
+
}
|
4900 |
+
|
4901 |
+
.aioseop-admin-settings #aioseop-importer-analyze .upgrade h5 {
|
4902 |
+
font-size: 18px;
|
4903 |
+
font-weight: 600;
|
4904 |
+
padding: 0;
|
4905 |
+
margin: 30px 0 20px 0;
|
4906 |
+
}
|
4907 |
+
|
4908 |
+
.aioseop-admin-settings #aioseop-importer-analyze .upgrade hr {
|
4909 |
+
border: none;
|
4910 |
+
border-bottom: 1px solid #e4e4e4;
|
4911 |
+
margin: 40px 0;
|
4912 |
+
}
|
4913 |
+
|
4914 |
+
.aioseop-admin-settings #aioseop-importer-analyze .upgrade .aioseop-btn {
|
4915 |
+
margin-right: 10px;
|
4916 |
+
}
|
4917 |
+
|
4918 |
+
.aioseop-admin-settings #aioseop-importer-analyze .upgrade ul li {
|
4919 |
+
list-style-type: disc;
|
4920 |
+
margin-left: 14px;
|
4921 |
+
}
|
4922 |
+
|
4923 |
+
.aioseop-admin-settings #aioseop-importer-analyze .upgrade ul li.form {
|
4924 |
+
list-style-type: none;
|
4925 |
+
margin-left: 0;
|
4926 |
+
font-weight: 700;
|
4927 |
+
}
|
4928 |
+
|
4929 |
+
.aioseop-admin-settings #aioseop-tools-entries-export h5 {
|
4930 |
+
clear: both;
|
4931 |
+
margin: 20px 0 10px 0;
|
4932 |
+
}
|
4933 |
+
|
4934 |
+
.aioseop-admin-settings #aioseop-tools-entries-export label {
|
4935 |
+
clear: both;
|
4936 |
+
float: left;
|
4937 |
+
margin: 3px 0 3px 0;
|
4938 |
+
}
|
4939 |
+
|
4940 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .choicesjs-select-wrap {
|
4941 |
+
position: relative;
|
4942 |
+
}
|
4943 |
+
|
4944 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .choicesjs-select-wrap .choices {
|
4945 |
+
margin-bottom: 0;
|
4946 |
+
}
|
4947 |
+
|
4948 |
+
.aioseop-admin-settings #aioseop-tools-entries-export #aioseop-tools-entries-export-selectform-spinner {
|
4949 |
+
position: absolute;
|
4950 |
+
top: 6px;
|
4951 |
+
right: -30px;
|
4952 |
+
}
|
4953 |
+
|
4954 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-date-selector {
|
4955 |
+
width: 200px;
|
4956 |
+
cursor: pointer;
|
4957 |
+
}
|
4958 |
+
|
4959 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-search-box-field {
|
4960 |
+
width: 200px;
|
4961 |
+
}
|
4962 |
+
|
4963 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-search-box-comparison {
|
4964 |
+
width: 140px;
|
4965 |
+
}
|
4966 |
+
|
4967 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-search-box-term {
|
4968 |
+
width: 300px;
|
4969 |
+
}
|
4970 |
+
|
4971 |
+
.aioseop-admin-settings #aioseop-tools-entries-export section {
|
4972 |
+
margin-top: 20px;
|
4973 |
+
}
|
4974 |
+
|
4975 |
+
.aioseop-admin-settings #aioseop-tools-entries-export iframe {
|
4976 |
+
width: 0;
|
4977 |
+
height: 0;
|
4978 |
+
visibility: hidden;
|
4979 |
+
}
|
4980 |
+
|
4981 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-btn-text {
|
4982 |
+
opacity: 1;
|
4983 |
+
transition: all .5s;
|
4984 |
+
}
|
4985 |
+
|
4986 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-btn-spinner {
|
4987 |
+
position: absolute;
|
4988 |
+
left: 50%;
|
4989 |
+
top: 50%;
|
4990 |
+
transform: translate(-50%, -50%);
|
4991 |
+
opacity: 0;
|
4992 |
+
transition: all .5s;
|
4993 |
+
}
|
4994 |
+
|
4995 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-btn-spinner-on {
|
4996 |
+
cursor: default;
|
4997 |
+
opacity: 0.75;
|
4998 |
+
position: relative;
|
4999 |
+
}
|
5000 |
+
|
5001 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-btn-spinner-on .aioseop-btn-text {
|
5002 |
+
opacity: 0 !important;
|
5003 |
+
transition: all .5s;
|
5004 |
+
}
|
5005 |
+
|
5006 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-btn-spinner-on .aioseop-btn-spinner {
|
5007 |
+
opacity: 1 !important;
|
5008 |
+
transition: all .5s;
|
5009 |
+
}
|
5010 |
+
|
5011 |
+
.aioseop-admin-settings #aioseop-tools-entries-export .aioseop-btn-spinner-on:hover {
|
5012 |
+
background-color: #e27730;
|
5013 |
+
border-color: #e27730;
|
5014 |
+
}
|
5015 |
+
|
5016 |
+
.aioseop-admin-settings #aioseop-tools-entries-export #aioseop-tools-entries-export-process-msg,
|
5017 |
+
.aioseop-admin-settings #aioseop-tools-entries-export #aioseop-tools-entries-export-selectform-msg {
|
5018 |
+
background: #fff;
|
5019 |
+
border-left: 4px solid #22A0D0;
|
5020 |
+
line-height: 1.5em;
|
5021 |
+
margin: 20px 0 0 0;
|
5022 |
+
padding: 10px;
|
5023 |
+
}
|
5024 |
+
|
5025 |
+
.aioseop-admin-settings #aioseop-tools-entries-export #aioseop-tools-entries-export-process-msg.aioseop-error,
|
5026 |
+
.aioseop-admin-settings #aioseop-tools-entries-export #aioseop-tools-entries-export-selectform-msg.aioseop-error {
|
5027 |
+
border-color: #dc3232;
|
5028 |
+
}
|
5029 |
+
|
5030 |
+
.aioseop-admin-settings #aioseop-importer-process {
|
5031 |
+
display: none;
|
5032 |
+
}
|
5033 |
+
|
5034 |
+
.aioseop-admin-settings #aioseop-importer-process .process-count,
|
5035 |
+
.aioseop-admin-settings #aioseop-importer-process .process-completed {
|
5036 |
+
font-size: 14px;
|
5037 |
+
}
|
5038 |
+
|
5039 |
+
.aioseop-admin-settings #aioseop-importer-process .process-completed {
|
5040 |
+
display: none;
|
5041 |
+
}
|
5042 |
+
|
5043 |
+
.aioseop-admin-settings #aioseop-importer-process .status {
|
5044 |
+
margin: 20px 0 30px;
|
5045 |
+
background-color: #fff;
|
5046 |
+
border-radius: 3px;
|
5047 |
+
border: 1px solid #ddd;
|
5048 |
+
max-height: 800px;
|
5049 |
+
overflow-y: scroll;
|
5050 |
+
display: none;
|
5051 |
+
}
|
5052 |
+
|
5053 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item {
|
5054 |
+
border-bottom: 1px solid #ddd;
|
5055 |
+
padding: 20px;
|
5056 |
+
}
|
5057 |
+
|
5058 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item:last-of-type {
|
5059 |
+
border: none;
|
5060 |
+
}
|
5061 |
+
|
5062 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item p {
|
5063 |
+
font-size: 13px;
|
5064 |
+
margin: 12px 0 0;
|
5065 |
+
}
|
5066 |
+
|
5067 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item ul {
|
5068 |
+
font-size: 13px;
|
5069 |
+
margin: 12px 0 0 16px;
|
5070 |
+
}
|
5071 |
+
|
5072 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item ul li {
|
5073 |
+
list-style: disc;
|
5074 |
+
}
|
5075 |
+
|
5076 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item .status-icon {
|
5077 |
+
display: inline-block;
|
5078 |
+
margin: 0 10px 0 0;
|
5079 |
+
}
|
5080 |
+
|
5081 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item .status-icon.fa-info-circle {
|
5082 |
+
color: #00a0d2;
|
5083 |
+
}
|
5084 |
+
|
5085 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item .status-icon.fa-check {
|
5086 |
+
color: #46b450;
|
5087 |
+
}
|
5088 |
+
|
5089 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item .status-icon.fa-exclamation-triangle {
|
5090 |
+
color: #ffb900;
|
5091 |
+
}
|
5092 |
+
|
5093 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item .status-icon.fa-times,
|
5094 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item .status-icon.fa-exclamation-circle {
|
5095 |
+
color: #dc3232;
|
5096 |
+
}
|
5097 |
+
|
5098 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item .name {
|
5099 |
+
font-size: 14px;
|
5100 |
+
float: left;
|
5101 |
+
}
|
5102 |
+
|
5103 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item .actions {
|
5104 |
+
font-size: 14px;
|
5105 |
+
float: right;
|
5106 |
+
}
|
5107 |
+
|
5108 |
+
.aioseop-admin-settings #aioseop-importer-process .status .item .actions .sep {
|
5109 |
+
color: #ddd;
|
5110 |
+
}
|
5111 |
+
|
5112 |
+
.aioseop-admin-settings .settings-lite-cta {
|
5113 |
+
background-color: #fff;
|
5114 |
+
border: 1px solid #dadada;
|
5115 |
+
padding: 25px 20px;
|
5116 |
+
margin: 10px 0 0 0;
|
5117 |
+
position: relative;
|
5118 |
+
}
|
5119 |
+
|
5120 |
+
.aioseop-admin-settings .settings-lite-cta .dismiss {
|
5121 |
+
position: absolute;
|
5122 |
+
top: 10px;
|
5123 |
+
right: 10px;
|
5124 |
+
color: #666;
|
5125 |
+
font-size: 16px;
|
5126 |
+
}
|
5127 |
+
|
5128 |
+
.aioseop-admin-settings .settings-lite-cta h5 {
|
5129 |
+
margin: 0 0 16px;
|
5130 |
+
font-size: 18px;
|
5131 |
+
font-weight: 700;
|
5132 |
+
}
|
5133 |
+
|
5134 |
+
.aioseop-admin-settings .settings-lite-cta h6 {
|
5135 |
+
font-weight: 700;
|
5136 |
+
font-size: 14px;
|
5137 |
+
margin: 0 0 16px;
|
5138 |
+
}
|
5139 |
+
|
5140 |
+
.aioseop-admin-settings .settings-lite-cta p {
|
5141 |
+
color: #555;
|
5142 |
+
font-size: 14px;
|
5143 |
+
margin: 0 0 16px;
|
5144 |
+
}
|
5145 |
+
|
5146 |
+
.aioseop-admin-settings .settings-lite-cta p:last-of-type {
|
5147 |
+
margin: 0;
|
5148 |
+
}
|
5149 |
+
|
5150 |
+
.aioseop-admin-settings .settings-lite-cta p a {
|
5151 |
+
color: #e27730;
|
5152 |
+
}
|
5153 |
+
|
5154 |
+
.aioseop-admin-settings .settings-lite-cta p a:hover {
|
5155 |
+
color: #b85a1b;
|
5156 |
+
}
|
5157 |
+
|
5158 |
+
.aioseop-admin-settings .settings-lite-cta ul {
|
5159 |
+
margin: 0;
|
5160 |
+
padding: 0;
|
5161 |
+
width: 50%;
|
5162 |
+
float: left;
|
5163 |
+
}
|
5164 |
+
|
5165 |
+
@media (max-width: 600px) {
|
5166 |
+
.aioseop-admin-settings .settings-lite-cta ul {
|
5167 |
+
width: 100%;
|
5168 |
+
float: none;
|
5169 |
+
}
|
5170 |
+
}
|
5171 |
+
|
5172 |
+
.aioseop-admin-settings .settings-lite-cta ul li {
|
5173 |
+
margin: 0;
|
5174 |
+
padding: 0 0 2px 16px;
|
5175 |
+
color: #555;
|
5176 |
+
font-size: 14px;
|
5177 |
+
position: relative;
|
5178 |
+
}
|
5179 |
+
|
5180 |
+
.aioseop-admin-settings .settings-lite-cta ul li:before {
|
5181 |
+
content: '+';
|
5182 |
+
position: absolute;
|
5183 |
+
top: -1px;
|
5184 |
+
left: 0;
|
5185 |
+
}
|
5186 |
+
|
5187 |
+
.aioseop-admin-settings .settings-lite-cta .list {
|
5188 |
+
margin: 0 0 16px 0;
|
5189 |
+
overflow: auto;
|
5190 |
+
max-width: 900px;
|
5191 |
+
}
|
5192 |
+
|
5193 |
+
.aioseop-admin-settings .settings-lite-cta .green {
|
5194 |
+
color: #218900;
|
5195 |
+
font-weight: 700;
|
5196 |
+
}
|
5197 |
+
|
5198 |
+
.aioseop-admin-settings .settings-lite-cta .fa-star {
|
5199 |
+
color: #ff982d;
|
5200 |
+
}
|
5201 |
+
|
5202 |
+
#aioseop-settings-providers .aioseop-settings-provider {
|
5203 |
+
border-bottom: 1px solid #ddd;
|
5204 |
+
padding: 30px 0;
|
5205 |
+
}
|
5206 |
+
|
5207 |
+
#aioseop-settings-providers .aioseop-settings-provider.focus-out {
|
5208 |
+
opacity: 0.4;
|
5209 |
+
}
|
5210 |
+
|
5211 |
+
#aioseop-settings-providers .aioseop-settings-provider-header {
|
5212 |
+
cursor: pointer;
|
5213 |
+
max-width: 1000px;
|
5214 |
+
}
|
5215 |
+
|
5216 |
+
#aioseop-settings-providers .aioseop-settings-provider-logo {
|
5217 |
+
float: left;
|
5218 |
+
position: relative;
|
5219 |
+
}
|
5220 |
+
|
5221 |
+
#aioseop-settings-providers .aioseop-settings-provider-logo .fa {
|
5222 |
+
position: absolute;
|
5223 |
+
top: 50%;
|
5224 |
+
margin: -9px 0 0 0;
|
5225 |
+
left: 10px;
|
5226 |
+
color: #666;
|
5227 |
+
font-size: 18px;
|
5228 |
+
}
|
5229 |
+
|
5230 |
+
#aioseop-settings-providers .aioseop-settings-provider-logo img {
|
5231 |
+
background: #fff;
|
5232 |
+
border: 1px solid #ddd;
|
5233 |
+
max-width: 90px;
|
5234 |
+
display: block;
|
5235 |
+
margin: 0 0 0 40px;
|
5236 |
+
}
|
5237 |
+
|
5238 |
+
#aioseop-settings-providers .aioseop-settings-provider-info {
|
5239 |
+
margin: 0 0 0 160px;
|
5240 |
+
position: relative;
|
5241 |
+
padding: 20px 0 0;
|
5242 |
+
}
|
5243 |
+
|
5244 |
+
#aioseop-settings-providers .aioseop-settings-provider-info h3 {
|
5245 |
+
margin: 0 0 10px 0;
|
5246 |
+
font-size: 20px;
|
5247 |
+
font-weight: 600;
|
5248 |
+
}
|
5249 |
+
|
5250 |
+
#aioseop-settings-providers .aioseop-settings-provider-info p {
|
5251 |
+
margin: 0;
|
5252 |
+
font-size: 14px;
|
5253 |
+
}
|
5254 |
+
|
5255 |
+
#aioseop-settings-providers .aioseop-settings-provider-info .connected-indicator {
|
5256 |
+
color: #83c11f;
|
5257 |
+
width: 135px;
|
5258 |
+
border: 1px solid #83c11f;
|
5259 |
+
border-radius: 4px;
|
5260 |
+
padding: 8px 14px;
|
5261 |
+
font-size: 16px;
|
5262 |
+
position: absolute;
|
5263 |
+
top: 28px;
|
5264 |
+
right: 0;
|
5265 |
+
display: none;
|
5266 |
+
}
|
5267 |
+
|
5268 |
+
#aioseop-settings-providers .connected .aioseop-settings-provider-info .connected-indicator {
|
5269 |
+
display: block;
|
5270 |
+
}
|
5271 |
+
|
5272 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts {
|
5273 |
+
margin: 0 0 0 160px;
|
5274 |
+
display: none;
|
5275 |
+
max-width: 840px;
|
5276 |
+
}
|
5277 |
+
|
5278 |
+
#aioseop-settings-providers .focus-in .aioseop-settings-provider-accounts {
|
5279 |
+
display: block;
|
5280 |
+
}
|
5281 |
+
|
5282 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-list ul {
|
5283 |
+
padding: 0;
|
5284 |
+
margin: 0;
|
5285 |
+
}
|
5286 |
+
|
5287 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-list ul li {
|
5288 |
+
border-bottom: 1px solid #ddd;
|
5289 |
+
margin: 0;
|
5290 |
+
padding: 10px 0;
|
5291 |
+
font-size: 14px;
|
5292 |
+
}
|
5293 |
+
|
5294 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-list ul li:first-of-type {
|
5295 |
+
border-top: 1px solid #ddd;
|
5296 |
+
}
|
5297 |
+
|
5298 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-list ul li:last-of-type {
|
5299 |
+
margin-bottom: 16px;
|
5300 |
+
}
|
5301 |
+
|
5302 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-list ul span.label {
|
5303 |
+
float: left;
|
5304 |
+
width: 50%;
|
5305 |
+
}
|
5306 |
+
|
5307 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-list ul span.date {
|
5308 |
+
color: #999;
|
5309 |
+
float: left;
|
5310 |
+
width: 35%;
|
5311 |
+
}
|
5312 |
+
|
5313 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-list ul span.remove {
|
5314 |
+
float: right;
|
5315 |
+
width: 15%;
|
5316 |
+
text-align: right;
|
5317 |
+
}
|
5318 |
+
|
5319 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-connect {
|
5320 |
+
display: none;
|
5321 |
+
padding: 20px;
|
5322 |
+
background-color: #ebf3fb;
|
5323 |
+
border: 1px solid #0e6cad;
|
5324 |
+
}
|
5325 |
+
|
5326 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-connect input[type=text] {
|
5327 |
+
background-color: #fff;
|
5328 |
+
border: 1px solid #ddd;
|
5329 |
+
border-radius: 3px;
|
5330 |
+
box-shadow: none;
|
5331 |
+
color: #333;
|
5332 |
+
display: block;
|
5333 |
+
padding: 7px 12px;
|
5334 |
+
margin: 5px 0;
|
5335 |
+
width: 400px;
|
5336 |
+
min-height: 35px;
|
5337 |
+
line-height: 1.3;
|
5338 |
+
}
|
5339 |
+
|
5340 |
+
#aioseop-settings-providers .focus-in .aioseop-settings-provider-accounts-connect {
|
5341 |
+
display: block;
|
5342 |
+
}
|
5343 |
+
|
5344 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-connect .fa {
|
5345 |
+
display: none;
|
5346 |
+
}
|
5347 |
+
|
5348 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts-connect p,
|
5349 |
+
#aioseop-settings-providers .aioseop-settings-provider-accounts p {
|
5350 |
+
margin: 0 0 15px 0;
|
5351 |
+
font-size: 14px;
|
5352 |
+
}
|
5353 |
+
|
5354 |
+
.wp-core-ui .button-primary-disabled, .wp-core-ui .button-primary.disabled, .wp-core-ui .button-primary:disabled, .wp-core-ui .button-primary[disabled] {
|
5355 |
+
color: white !important;
|
5356 |
+
border-color: #0073aa #006799 #006799 !important;
|
5357 |
+
box-shadow: 0 1px 0 #006799 !important;
|
5358 |
+
}
|
5359 |
+
|
5360 |
+
|
5361 |
+
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzL2Nzcy9hZG1pbi5jc3MiLCJzb3VyY2VzIjpbImFzc2V0cy9zY3NzL2FkbWluLnNjc3MiLCJhc3NldHMvc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCJhc3NldHMvc2Nzcy92ZW5kb3IvcGFydGlhbHMvX2luY2x1ZGUtbWVkaWEuc2NzcyIsImFzc2V0cy9zY3NzL3ZlbmRvci9wYXJ0aWFscy9jaG9pY2VzL19jaG9pY2VzLnNjc3MiLCJhc3NldHMvc2Nzcy92ZW5kb3IvcGFydGlhbHMvY2hvaWNlcy9fdmFyaWFibGVzLnNjc3MiLCJhc3NldHMvc2Nzcy92ZW5kb3IvcGFydGlhbHMvY2hvaWNlcy9fc3R5bGVzLnNjc3MiLCJhc3NldHMvc2Nzcy92ZW5kb3IvcGFydGlhbHMvY2hvaWNlcy9fcnRsLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fYnV0dG9ucy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX2NvbmZpcm0uc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19hbGVydHMuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19mbGFncy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX2hlYWRlci5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3RpdGxlLXRhYnMuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19nZW5lcmFsLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fZmx5b3V0LW1lbnUuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWZvcm1zLW92ZXJ2aWV3LnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1lbnRyaWVzLXNpbmdsZS5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2UtZW50cmllcy1saXN0LnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS13ZWxjb21lLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1hZGRvbnMuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLWFib3V0LnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1jb21tdW5pdHkuc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXBsdWdpbi1jb21tb24uc2NzcyIsImFzc2V0cy9zY3NzL2FkbWluL19wYWdlLXBsdWdpbi1zbXRwLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1wbHVnaW4tYW5hbHl0aWNzLnNjc3MiLCJhc3NldHMvc2Nzcy9hZG1pbi9fcGFnZS1zZXR0aW5ncy10b29scy5zY3NzIiwiYXNzZXRzL3Njc3MvYWRtaW4vX3BhZ2Utc2V0dGluZ3MtaW50ZWdyYXRpb25zLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gV1BGb3JtcyBhZG1pbiBzdHlsZXMuXG4vLyBUaGVzZSBzdHlsZXMgYXJlIGxvYWRlZCBvbiBhbGwgV1BGb3JtcyByZWxhdGVkIGFkbWluIHBhZ2VzLlxuXG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuQGltcG9ydCAndmVuZG9yL3BhcnRpYWxzL2luY2x1ZGUtbWVkaWEnO1xuQGltcG9ydCAndmVuZG9yL3BhcnRpYWxzL2Nob2ljZXMvY2hvaWNlcyc7XG5cbiRicmVha3BvaW50czogKFxuXHQneHMtcGhvbmUnOiAzMjBweCxcblx0J3Bob25lJzogNjAwcHgsXG5cdCdpcGFkJzogNzY4cHgsXG5cdCd0YWJsZXQnOiA3ODJweCxcblx0J2Rlc2t0b3AnOiA5NjBweCxcbik7XG5cbkBpbXBvcnQgJ2FkbWluL2J1dHRvbnMnO1xuQGltcG9ydCAnYWRtaW4vY29uZmlybSc7XG5AaW1wb3J0ICdhZG1pbi9hbGVydHMnO1xuQGltcG9ydCAnYWRtaW4vZmxhZ3MnO1xuQGltcG9ydCAnYWRtaW4vaGVhZGVyJztcbkBpbXBvcnQgJ2FkbWluL3RpdGxlLXRhYnMnO1xuQGltcG9ydCAnYWRtaW4vZ2VuZXJhbCc7XG5AaW1wb3J0ICdhZG1pbi9mbHlvdXQtbWVudSc7XG5AaW1wb3J0ICdhZG1pbi9wYWdlLWZvcm1zLW92ZXJ2aWV3JztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtZW50cmllcy1zaW5nbGUnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1lbnRyaWVzLWxpc3QnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS13ZWxjb21lJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWRkb25zJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtYWJvdXQnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1jb21tdW5pdHknO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1wbHVnaW4tY29tbW9uJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2UtcGx1Z2luLXNtdHAnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1wbHVnaW4tYW5hbHl0aWNzJztcbkBpbXBvcnQgJ2FkbWluL3BhZ2Utc2V0dGluZ3MtdG9vbHMnO1xuQGltcG9ydCAnYWRtaW4vcGFnZS1zZXR0aW5ncy1pbnRlZ3JhdGlvbnMnO1xuIiwiJG9yYW5nZTogI2UyNzczMDtcbiRkYXJrb3JhbmdlOiAjYjg1YTFiO1xuJGdyZWVuOiAjMmE5YjM5O1xuJGJsdWU6ICMwZTZjYWQ7XG4kbGlnaHRCbHVlOiAjZWJmM2ZiO1xuIiwiQGNoYXJzZXQgXCJVVEYtOFwiO1xuXG4vLyAgICAgXyAgICAgICAgICAgIF8gICAgICAgICAgIF8gICAgICAgICAgICAgICAgICAgICAgICAgICBfIF9cbi8vICAgIChfKSAgICAgICAgICB8IHwgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAoXylcbi8vICAgICBfIF8gX18gICBfX198IHxfICAgXyAgX198IHwgX19fICAgXyBfXyBfX18gICBfX18gIF9ffCB8XyAgX18gX1xuLy8gICAgfCB8ICdfIFxcIC8gX198IHwgfCB8IHwvIF9gIHwvIF8gXFwgfCAnXyBgIF8gXFwgLyBfIFxcLyBfYCB8IHwvIF9gIHxcbi8vICAgIHwgfCB8IHwgfCAoX198IHwgfF98IHwgKF98IHwgIF9fLyB8IHwgfCB8IHwgfCAgX18vIChffCB8IHwgKF98IHxcbi8vICAgIHxffF98IHxffFxcX19ffF98XFxfXyxffFxcX18sX3xcXF9fX3wgfF98IHxffCB8X3xcXF9fX3xcXF9fLF98X3xcXF9fLF98XG4vL1xuLy8gICAgICBTaW1wbGUsIGVsZWdhbnQgYW5kIG1haW50YWluYWJsZSBtZWRpYSBxdWVyaWVzIGluIFNhc3Ncbi8vICAgICAgICAgICAgICAgICAgICAgICAgdjEuNC45XG4vL1xuLy8gICAgICAgICAgICAgICAgaHR0cDovL2luY2x1ZGUtbWVkaWEuY29tXG4vL1xuLy8gICAgICAgICBBdXRob3JzOiBFZHVhcmRvIEJvdWNhcyAoQGVkdWFyZG9ib3VjYXMpXG4vLyAgICAgICAgICAgICAgICAgIEh1Z28gR2lyYXVkZWwgKEBodWdvZ2lyYXVkZWwpXG4vL1xuLy8gICAgICBUaGlzIHByb2plY3QgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgbGljZW5zZVxuXG5cbi8vLy9cbi8vLyBpbmNsdWRlLW1lZGlhIGxpYnJhcnkgcHVibGljIGNvbmZpZ3VyYXRpb25cbi8vLyBAYXV0aG9yIEVkdWFyZG8gQm91Y2FzXG4vLy8gQGFjY2VzcyBwdWJsaWNcbi8vLy9cblxuXG4vLy9cbi8vLyBDcmVhdGVzIGEgbGlzdCBvZiBnbG9iYWwgYnJlYWtwb2ludHNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBDcmVhdGVzIGEgc2luZ2xlIGJyZWFrcG9pbnQgd2l0aCB0aGUgbGFiZWwgYHBob25lYFxuLy8vICAkYnJlYWtwb2ludHM6ICgncGhvbmUnOiAzMjBweCk7XG4vLy9cbiRicmVha3BvaW50czogKFxuICAncGhvbmUnOiAzMjBweCxcbiAgJ3RhYmxldCc6IDc2OHB4LFxuICAnZGVza3RvcCc6IDEwMjRweFxuKSAhZGVmYXVsdDtcblxuXG4vLy9cbi8vLyBDcmVhdGVzIGEgbGlzdCBvZiBzdGF0aWMgZXhwcmVzc2lvbnMgb3IgbWVkaWEgdHlwZXNcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBDcmVhdGVzIGEgc2luZ2xlIG1lZGlhIHR5cGUgKHNjcmVlbilcbi8vLyAgJG1lZGlhLWV4cHJlc3Npb25zOiAoJ3NjcmVlbic6ICdzY3JlZW4nKTtcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBDcmVhdGVzIGEgc3RhdGljIGV4cHJlc3Npb24gd2l0aCBsb2dpY2FsIGRpc2p1bmN0aW9uIChPUiBvcGVyYXRvcilcbi8vLyAgJG1lZGlhLWV4cHJlc3Npb25zOiAoXG4vLy8gICAgJ3JldGluYTJ4JzogJygtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLXJlc29sdXRpb246IDE5MmRwaSknXG4vLy8gICk7XG4vLy9cbiRtZWRpYS1leHByZXNzaW9uczogKFxuICAnc2NyZWVuJzogJ3NjcmVlbicsXG4gICdwcmludCc6ICdwcmludCcsXG4gICdoYW5kaGVsZCc6ICdoYW5kaGVsZCcsXG4gICdsYW5kc2NhcGUnOiAnKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpJyxcbiAgJ3BvcnRyYWl0JzogJyhvcmllbnRhdGlvbjogcG9ydHJhaXQpJyxcbiAgJ3JldGluYTJ4JzogJygtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLXJlc29sdXRpb246IDE5MmRwaSksIChtaW4tcmVzb2x1dGlvbjogMmRwcHgpJyxcbiAgJ3JldGluYTN4JzogJygtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDMpLCAobWluLXJlc29sdXRpb246IDM1MGRwaSksIChtaW4tcmVzb2x1dGlvbjogM2RwcHgpJ1xuKSAhZGVmYXVsdDtcblxuXG4vLy9cbi8vLyBEZWZpbmVzIGEgbnVtYmVyIHRvIGJlIGFkZGVkIG9yIHN1YnRyYWN0ZWQgZnJvbSBlYWNoIHVuaXQgd2hlbiBkZWNsYXJpbmcgYnJlYWtwb2ludHMgd2l0aCBleGNsdXNpdmUgaW50ZXJ2YWxzXG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gSW50ZXJ2YWwgZm9yIHBpeGVscyBpcyBkZWZpbmVkIGFzIGAxYCBieSBkZWZhdWx0XG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+MTI4cHgnKSB7fVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgQG1lZGlhIChtaW4td2lkdGg6IDEyOXB4KSB7fVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEludGVydmFsIGZvciBlbXMgaXMgZGVmaW5lZCBhcyBgMC4wMWAgYnkgZGVmYXVsdFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPjIwZW0nKSB7fVxuLy8vXG4vLy8gIC8qIEdlbmVyYXRlczogKi9cbi8vLyAgQG1lZGlhIChtaW4td2lkdGg6IDIwLjAxZW0pIHt9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gSW50ZXJ2YWwgZm9yIHJlbXMgaXMgZGVmaW5lZCBhcyBgMC4xYCBieSBkZWZhdWx0LCB0byBiZSB1c2VkIHdpdGggYGZvbnQtc2l6ZTogNjIuNSU7YFxuLy8vICBAaW5jbHVkZSBtZWRpYSgnPjIuMHJlbScpIHt9XG4vLy9cbi8vLyAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICBAbWVkaWEgKG1pbi13aWR0aDogMi4xcmVtKSB7fVxuLy8vXG4kdW5pdC1pbnRlcnZhbHM6IChcbiAgJ3B4JzogMSxcbiAgJ2VtJzogMC4wMSxcbiAgJ3JlbSc6IDAuMSxcbiAgJyc6IDBcbikgIWRlZmF1bHQ7XG5cbi8vL1xuLy8vIERlZmluZXMgd2hldGhlciBzdXBwb3J0IGZvciBtZWRpYSBxdWVyaWVzIGlzIGF2YWlsYWJsZSwgdXNlZnVsIGZvciBjcmVhdGluZyBzZXBhcmF0ZSBzdHlsZXNoZWV0c1xuLy8vIGZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgbWVkaWEgcXVlcmllcy5cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBEaXNhYmxlcyBzdXBwb3J0IGZvciBtZWRpYSBxdWVyaWVzXG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49dGFibGV0Jykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIC5mb28ge1xuLy8vICAgIGNvbG9yOiB0b21hdG87XG4vLy8gIH1cbi8vL1xuJGltLW1lZGlhLXN1cHBvcnQ6IHRydWUgIWRlZmF1bHQ7XG5cbi8vL1xuLy8vIFNlbGVjdHMgd2hpY2ggYnJlYWtwb2ludCB0byBlbXVsYXRlIHdoZW4gc3VwcG9ydCBmb3IgbWVkaWEgcXVlcmllcyBpcyBkaXNhYmxlZC4gTWVkaWEgcXVlcmllcyB0aGF0IHN0YXJ0IGF0IG9yXG4vLy8gaW50ZXJjZXB0IHRoZSBicmVha3BvaW50IHdpbGwgYmUgZGlzcGxheWVkLCBhbnkgb3RoZXJzIHdpbGwgYmUgaWdub3JlZC5cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBUaGlzIG1lZGlhIHF1ZXJ5IHdpbGwgc2hvdyBiZWNhdXNlIGl0IGludGVyY2VwdHMgdGhlIHN0YXRpYyBicmVha3BvaW50XG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJztcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49dGFibGV0Jykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAvKiBHZW5lcmF0ZXM6ICovXG4vLy8gIC5mb28ge1xuLy8vICAgIGNvbG9yOiB0b21hdG87XG4vLy8gIH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBUaGlzIG1lZGlhIHF1ZXJ5IHdpbGwgTk9UIHNob3cgYmVjYXVzZSBpdCBkb2VzIG5vdCBpbnRlcmNlcHQgdGhlIGRlc2t0b3AgYnJlYWtwb2ludFxuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gICRpbS1uby1tZWRpYS1icmVha3BvaW50OiAndGFibGV0Jztcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49ZGVza3RvcCcpIHtcbi8vLyAgICAuZm9vIHtcbi8vLyAgICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyAgLyogTm8gb3V0cHV0ICovXG4vLy9cbiRpbS1uby1tZWRpYS1icmVha3BvaW50OiAnZGVza3RvcCcgIWRlZmF1bHQ7XG5cbi8vL1xuLy8vIFNlbGVjdHMgd2hpY2ggbWVkaWEgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQgaW4gYW4gZXhwcmVzc2lvbiBmb3IgaXQgdG8gYmUgdXNlZCB3aGVuIG1lZGlhIHF1ZXJpZXNcbi8vLyBhcmUgbm90IHN1cHBvcnRlZC5cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBUaGlzIG1lZGlhIHF1ZXJ5IHdpbGwgc2hvdyBiZWNhdXNlIGl0IGludGVyY2VwdHMgdGhlIHN0YXRpYyBicmVha3BvaW50IGFuZCBjb250YWlucyBvbmx5IGFjY2VwdGVkIG1lZGlhIGV4cHJlc3Npb25zXG4vLy8gICRpbS1tZWRpYS1zdXBwb3J0OiBmYWxzZTtcbi8vLyAgJGltLW5vLW1lZGlhLWJyZWFrcG9pbnQ6ICdkZXNrdG9wJztcbi8vLyAgJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zOiAoJ3NjcmVlbicpO1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPj10YWJsZXQnLCAnc2NyZWVuJykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAgLyogR2VuZXJhdGVzOiAqL1xuLy8vICAgLmZvbyB7XG4vLy8gICAgIGNvbG9yOiB0b21hdG87XG4vLy8gICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gVGhpcyBtZWRpYSBxdWVyeSB3aWxsIE5PVCBzaG93IGJlY2F1c2UgaXQgaW50ZXJjZXB0cyB0aGUgc3RhdGljIGJyZWFrcG9pbnQgYnV0IGNvbnRhaW5zIGEgbWVkaWEgZXhwcmVzc2lvbiB0aGF0IGlzIG5vdCBhY2NlcHRlZFxuLy8vICAkaW0tbWVkaWEtc3VwcG9ydDogZmFsc2U7XG4vLy8gICRpbS1uby1tZWRpYS1icmVha3BvaW50OiAnZGVza3RvcCc7XG4vLy8gICRpbS1uby1tZWRpYS1leHByZXNzaW9uczogKCdzY3JlZW4nKTtcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49dGFibGV0JywgJ3JldGluYTJ4Jykge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgY29sb3I6IHRvbWF0bztcbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuLy8vICAvKiBObyBvdXRwdXQgKi9cbi8vL1xuJGltLW5vLW1lZGlhLWV4cHJlc3Npb25zOiAoJ3NjcmVlbicsICdwb3J0cmFpdCcsICdsYW5kc2NhcGUnKSAhZGVmYXVsdDtcblxuLy8vL1xuLy8vIENyb3NzLWVuZ2luZSBsb2dnaW5nIGVuZ2luZVxuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vL1xuXG5cbi8vL1xuLy8vIExvZyBhIG1lc3NhZ2UgZWl0aGVyIHdpdGggYEBlcnJvcmAgaWYgc3VwcG9ydGVkXG4vLy8gZWxzZSB3aXRoIGBAd2FybmAsIHVzaW5nIGBmZWF0dXJlLWV4aXN0cygnYXQtZXJyb3InKWBcbi8vLyB0byBkZXRlY3Qgc3VwcG9ydC5cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbG9nXG4vLy9cbkBmdW5jdGlvbiBpbS1sb2coJG1lc3NhZ2UpIHtcbiAgQGlmIGZlYXR1cmUtZXhpc3RzKCdhdC1lcnJvcicpIHtcblx0QGVycm9yICRtZXNzYWdlO1xuICB9IEBlbHNlIHtcblx0QHdhcm4gJG1lc3NhZ2U7XG5cdCRfOiBub29wKCk7XG4gIH1cblxuICBAcmV0dXJuICRtZXNzYWdlO1xufVxuXG5cbi8vL1xuLy8vIFdyYXBwZXIgbWl4aW4gZm9yIHRoZSBsb2cgZnVuY3Rpb24gc28gaXQgY2FuIGJlIHVzZWQgd2l0aCBhIG1vcmUgZnJpZW5kbHlcbi8vLyBBUEkgdGhhbiBgQGlmIGltLWxvZygnLi4nKSB7fWAgb3IgYCRfOiBpbS1sb2coJy4uJylgLiBCYXNpY2FsbHksIHVzZSB0aGUgZnVuY3Rpb25cbi8vLyB3aXRoaW4gZnVuY3Rpb25zIGJlY2F1c2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBtaXhpbiBpbiBhIGZ1bmN0aW9uXG4vLy8gYW5kIHVzZSB0aGUgbWl4aW4gZXZlcnl3aGVyZSBlbHNlIGJlY2F1c2UgaXQncyBtdWNoIG1vcmUgZWxlZ2FudC5cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkbWVzc2FnZSAtIE1lc3NhZ2UgdG8gbG9nXG4vLy9cbkBtaXhpbiBsb2coJG1lc3NhZ2UpIHtcbiAgQGlmIGltLWxvZygkbWVzc2FnZSkge31cbn1cblxuXG4vLy9cbi8vLyBGdW5jdGlvbiB3aXRoIG5vIGBAcmV0dXJuYCBjYWxsZWQgbmV4dCB0byBgQHdhcm5gIGluIFNhc3MgMy4zXG4vLy8gdG8gdHJpZ2dlciBhIGNvbXBpbGluZyBlcnJvciBhbmQgc3RvcCB0aGUgcHJvY2Vzcy5cbi8vL1xuQGZ1bmN0aW9uIG5vb3AoKSB7fVxuXG4vLy9cbi8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgYSBsaXN0IG9mIGNvbmRpdGlvbnMgaXMgaW50ZXJjZXB0ZWQgYnkgdGhlIHN0YXRpYyBicmVha3BvaW50LlxuLy8vXG4vLy8gQHBhcmFtIHtBcmdsaXN0fSAgICRjb25kaXRpb25zICAtIE1lZGlhIHF1ZXJ5IGNvbmRpdGlvbnNcbi8vL1xuLy8vIEByZXR1cm4ge0Jvb2xlYW59IC0gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25kaXRpb25zIGFyZSBpbnRlcmNlcHRlZCBieSB0aGUgc3RhdGljIGJyZWFrcG9pbnRcbi8vL1xuQGZ1bmN0aW9uIGltLWludGVyY2VwdHMtc3RhdGljLWJyZWFrcG9pbnQoJGNvbmRpdGlvbnMuLi4pIHtcbiAgJG5vLW1lZGlhLWJyZWFrcG9pbnQtdmFsdWU6IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkaW0tbm8tbWVkaWEtYnJlYWtwb2ludCk7XG5cbiAgQGlmIG5vdCAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZSB7XG5cdEBpZiBpbS1sb2coJ2AjeyRpbS1uby1tZWRpYS1icmVha3BvaW50fWAgaXMgbm90IGEgdmFsaWQgYnJlYWtwb2ludC4nKSB7fVxuICB9XG5cbiAgQGVhY2ggJGNvbmRpdGlvbiBpbiAkY29uZGl0aW9ucyB7XG5cdEBpZiBub3QgbWFwLWhhcy1rZXkoJG1lZGlhLWV4cHJlc3Npb25zLCAkY29uZGl0aW9uKSB7XG5cdCAgJG9wZXJhdG9yOiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkY29uZGl0aW9uKTtcblx0ICAkcHJlZml4OiBnZXQtZXhwcmVzc2lvbi1wcmVmaXgoJG9wZXJhdG9yKTtcblx0ICAkdmFsdWU6IGdldC1leHByZXNzaW9uLXZhbHVlKCRjb25kaXRpb24sICRvcGVyYXRvcik7XG5cblx0ICBAaWYgKCRwcmVmaXggPT0gJ21heCcgYW5kICR2YWx1ZSA8PSAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZSkgb3Jcblx0XHQgICgkcHJlZml4ID09ICdtaW4nIGFuZCAkdmFsdWUgPiAkbm8tbWVkaWEtYnJlYWtwb2ludC12YWx1ZSkge1xuXHRcdEByZXR1cm4gZmFsc2U7XG5cdCAgfVxuXHR9IEBlbHNlIGlmIG5vdCBpbmRleCgkaW0tbm8tbWVkaWEtZXhwcmVzc2lvbnMsICRjb25kaXRpb24pIHtcblx0ICBAcmV0dXJuIGZhbHNlO1xuXHR9XG4gIH1cblxuICBAcmV0dXJuIHRydWU7XG59XG5cbi8vLy9cbi8vLyBQYXJzaW5nIGVuZ2luZVxuLy8vIEBhdXRob3IgSHVnbyBHaXJhdWRlbFxuLy8vIEBhY2Nlc3MgcHJpdmF0ZVxuLy8vL1xuXG5cbi8vL1xuLy8vIEdldCBvcGVyYXRvciBvZiBhbiBleHByZXNzaW9uXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZ30gJGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHRvIGV4dHJhY3Qgb3BlcmF0b3IgZnJvbVxuLy8vXG4vLy8gQHJldHVybiB7U3RyaW5nfSAtIEFueSBvZiBgPj1gLCBgPmAsIGA8PWAsIGA8YCwgYOKJpWAsIGDiiaRgXG4vLy9cbkBmdW5jdGlvbiBnZXQtZXhwcmVzc2lvbi1vcGVyYXRvcigkZXhwcmVzc2lvbikge1xuICBAZWFjaCAkb3BlcmF0b3IgaW4gKCc+PScsICc+JywgJzw9JywgJzwnLCAn4omlJywgJ+KJpCcpIHtcblx0QGlmIHN0ci1pbmRleCgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKSB7XG5cdCAgQHJldHVybiAkb3BlcmF0b3I7XG5cdH1cbiAgfVxuXG4gIC8vIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmNsdWRlIGEgbWl4aW4gaW5zaWRlIGEgZnVuY3Rpb24sIHNvIHdlIGhhdmUgdG9cbiAgLy8gcmVseSBvbiB0aGUgYGltLWxvZyguLilgIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHRoZSBgbG9nKC4uKWAgbWl4aW4uIEJlY2F1c2VcbiAgLy8gZnVuY3Rpb25zIGNhbm5vdCBiZSBjYWxsZWQgYW55d2hlcmUgaW4gU2Fzcywgd2UgbmVlZCB0byBoYWNrIHRoZSBjYWxsIGluXG4gIC8vIGEgZHVtbXkgdmFyaWFibGUsIHN1Y2ggYXMgYCRfYC4gSWYgYW55Ym9keSBldmVyIHJhaXNlIGEgc2NvcGluZyBpc3N1ZSB3aXRoXG4gIC8vIFNhc3MgMy4zLCBjaGFuZ2UgdGhpcyBsaW5lIGluIGBAaWYgaW0tbG9nKC4uKSB7fWAgaW5zdGVhZC5cbiAgJF86IGltLWxvZygnTm8gb3BlcmF0b3IgZm91bmQgaW4gYCN7JGV4cHJlc3Npb259YC4nKTtcbn1cblxuXG4vLy9cbi8vLyBHZXQgZGltZW5zaW9uIG9mIGFuIGV4cHJlc3Npb24sIGJhc2VkIG9uIGEgZm91bmQgb3BlcmF0b3Jcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gZXh0cmFjdCBkaW1lbnNpb24gZnJvbVxuLy8vIEBwYXJhbSB7U3RyaW5nfSAkb3BlcmF0b3IgLSBPcGVyYXRvciBmcm9tIGAkZXhwcmVzc2lvbmBcbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBgd2lkdGhgIG9yIGBoZWlnaHRgIChvciBwb3RlbnRpYWxseSBhbnl0aGluZyBlbHNlKVxuLy8vXG5AZnVuY3Rpb24gZ2V0LWV4cHJlc3Npb24tZGltZW5zaW9uKCRleHByZXNzaW9uLCAkb3BlcmF0b3IpIHtcbiAgJG9wZXJhdG9yLWluZGV4OiBzdHItaW5kZXgoJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG4gICRwYXJzZWQtZGltZW5zaW9uOiBzdHItc2xpY2UoJGV4cHJlc3Npb24sIDAsICRvcGVyYXRvci1pbmRleCAtIDEpO1xuICAkZGltZW5zaW9uOiAnd2lkdGgnO1xuXG4gIEBpZiBzdHItbGVuZ3RoKCRwYXJzZWQtZGltZW5zaW9uKSA+IDAge1xuXHQkZGltZW5zaW9uOiAkcGFyc2VkLWRpbWVuc2lvbjtcbiAgfVxuXG4gIEByZXR1cm4gJGRpbWVuc2lvbjtcbn1cblxuXG4vLy9cbi8vLyBHZXQgZGltZW5zaW9uIHByZWZpeCBiYXNlZCBvbiBhbiBvcGVyYXRvclxuLy8vXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRvcGVyYXRvciAtIE9wZXJhdG9yXG4vLy9cbi8vLyBAcmV0dXJuIHtTdHJpbmd9IC0gYG1pbmAgb3IgYG1heGBcbi8vL1xuQGZ1bmN0aW9uIGdldC1leHByZXNzaW9uLXByZWZpeCgkb3BlcmF0b3IpIHtcbiAgQHJldHVybiBpZihpbmRleCgoJzwnLCAnPD0nLCAn4omkJyksICRvcGVyYXRvciksICdtYXgnLCAnbWluJyk7XG59XG5cblxuLy8vXG4vLy8gR2V0IHZhbHVlIG9mIGFuIGV4cHJlc3Npb24sIGJhc2VkIG9uIGEgZm91bmQgb3BlcmF0b3Jcbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gZXh0cmFjdCB2YWx1ZSBmcm9tXG4vLy8gQHBhcmFtIHtTdHJpbmd9ICRvcGVyYXRvciAtIE9wZXJhdG9yIGZyb20gYCRleHByZXNzaW9uYFxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSAtIEEgbnVtZXJpYyB2YWx1ZVxuLy8vXG5AZnVuY3Rpb24gZ2V0LWV4cHJlc3Npb24tdmFsdWUoJGV4cHJlc3Npb24sICRvcGVyYXRvcikge1xuICAkb3BlcmF0b3ItaW5kZXg6IHN0ci1pbmRleCgkZXhwcmVzc2lvbiwgJG9wZXJhdG9yKTtcbiAgJHZhbHVlOiBzdHItc2xpY2UoJGV4cHJlc3Npb24sICRvcGVyYXRvci1pbmRleCArIHN0ci1sZW5ndGgoJG9wZXJhdG9yKSk7XG5cbiAgQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgJHZhbHVlKSB7XG5cdCR2YWx1ZTogbWFwLWdldCgkYnJlYWtwb2ludHMsICR2YWx1ZSk7XG4gIH0gQGVsc2Uge1xuXHQkdmFsdWU6IHRvLW51bWJlcigkdmFsdWUpO1xuICB9XG5cbiAgJGludGVydmFsOiBtYXAtZ2V0KCR1bml0LWludGVydmFscywgdW5pdCgkdmFsdWUpKTtcblxuICBAaWYgbm90ICRpbnRlcnZhbCB7XG5cdC8vIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmNsdWRlIGEgbWl4aW4gaW5zaWRlIGEgZnVuY3Rpb24sIHNvIHdlIGhhdmUgdG9cblx0Ly8gcmVseSBvbiB0aGUgYGltLWxvZyguLilgIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHRoZSBgbG9nKC4uKWAgbWl4aW4uIEJlY2F1c2Vcblx0Ly8gZnVuY3Rpb25zIGNhbm5vdCBiZSBjYWxsZWQgYW55d2hlcmUgaW4gU2Fzcywgd2UgbmVlZCB0byBoYWNrIHRoZSBjYWxsIGluXG5cdC8vIGEgZHVtbXkgdmFyaWFibGUsIHN1Y2ggYXMgYCRfYC4gSWYgYW55Ym9keSBldmVyIHJhaXNlIGEgc2NvcGluZyBpc3N1ZSB3aXRoXG5cdC8vIFNhc3MgMy4zLCBjaGFuZ2UgdGhpcyBsaW5lIGluIGBAaWYgaW0tbG9nKC4uKSB7fWAgaW5zdGVhZC5cblx0JF86IGltLWxvZygnVW5rbm93biB1bml0IGAje3VuaXQoJHZhbHVlKX1gLicpO1xuICB9XG5cbiAgQGlmICRvcGVyYXRvciA9PSAnPicge1xuXHQkdmFsdWU6ICR2YWx1ZSArICRpbnRlcnZhbDtcbiAgfSBAZWxzZSBpZiAkb3BlcmF0b3IgPT0gJzwnIHtcblx0JHZhbHVlOiAkdmFsdWUgLSAkaW50ZXJ2YWw7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZTtcbn1cblxuXG4vLy9cbi8vLyBQYXJzZSBhbiBleHByZXNzaW9uIHRvIHJldHVybiBhIHZhbGlkIG1lZGlhLXF1ZXJ5IGV4cHJlc3Npb25cbi8vL1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkZXhwcmVzc2lvbiAtIEV4cHJlc3Npb24gdG8gcGFyc2Vcbi8vL1xuLy8vIEByZXR1cm4ge1N0cmluZ30gLSBWYWxpZCBtZWRpYSBxdWVyeVxuLy8vXG5AZnVuY3Rpb24gcGFyc2UtZXhwcmVzc2lvbigkZXhwcmVzc2lvbikge1xuICAvLyBJZiBpdCBpcyBwYXJ0IG9mICRtZWRpYS1leHByZXNzaW9ucywgaXQgaGFzIG5vIG9wZXJhdG9yXG4gIC8vIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBnbyBhbnkgZnVydGhlciwganVzdCByZXR1cm4gdGhlIHZhbHVlXG4gIEBpZiBtYXAtaGFzLWtleSgkbWVkaWEtZXhwcmVzc2lvbnMsICRleHByZXNzaW9uKSB7XG5cdEByZXR1cm4gbWFwLWdldCgkbWVkaWEtZXhwcmVzc2lvbnMsICRleHByZXNzaW9uKTtcbiAgfVxuXG4gICRvcGVyYXRvcjogZ2V0LWV4cHJlc3Npb24tb3BlcmF0b3IoJGV4cHJlc3Npb24pO1xuICAkZGltZW5zaW9uOiBnZXQtZXhwcmVzc2lvbi1kaW1lbnNpb24oJGV4cHJlc3Npb24sICRvcGVyYXRvcik7XG4gICRwcmVmaXg6IGdldC1leHByZXNzaW9uLXByZWZpeCgkb3BlcmF0b3IpO1xuICAkdmFsdWU6IGdldC1leHByZXNzaW9uLXZhbHVlKCRleHByZXNzaW9uLCAkb3BlcmF0b3IpO1xuXG4gIEByZXR1cm4gJygjeyRwcmVmaXh9LSN7JGRpbWVuc2lvbn06ICN7JHZhbHVlfSknO1xufVxuXG4vLy9cbi8vLyBTbGljZSBgJGxpc3RgIGJldHdlZW4gYCRzdGFydGAgYW5kIGAkZW5kYCBpbmRleGVzXG4vLy9cbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vL1xuLy8vIEBwYXJhbSB7TGlzdH0gJGxpc3QgLSBMaXN0IHRvIHNsaWNlXG4vLy8gQHBhcmFtIHtOdW1iZXJ9ICRzdGFydCBbMV0gLSBTdGFydCBpbmRleFxuLy8vIEBwYXJhbSB7TnVtYmVyfSAkZW5kIFtsZW5ndGgoJGxpc3QpXSAtIEVuZCBpbmRleFxuLy8vXG4vLy8gQHJldHVybiB7TGlzdH0gU2xpY2VkIGxpc3Rcbi8vL1xuQGZ1bmN0aW9uIHNsaWNlKCRsaXN0LCAkc3RhcnQ6IDEsICRlbmQ6IGxlbmd0aCgkbGlzdCkpIHtcbiAgQGlmIGxlbmd0aCgkbGlzdCkgPCAxIG9yICRzdGFydCA+ICRlbmQge1xuXHRAcmV0dXJuICgpO1xuICB9XG5cbiAgJHJlc3VsdDogKCk7XG5cbiAgQGZvciAkaSBmcm9tICRzdGFydCB0aHJvdWdoICRlbmQge1xuXHQkcmVzdWx0OiBhcHBlbmQoJHJlc3VsdCwgbnRoKCRsaXN0LCAkaSkpO1xuICB9XG5cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLy8vXG4vLy8gU3RyaW5nIHRvIG51bWJlciBjb252ZXJ0ZXJcbi8vLyBAYXV0aG9yIEh1Z28gR2lyYXVkZWxcbi8vLyBAYWNjZXNzIHByaXZhdGVcbi8vLy9cblxuXG4vLy9cbi8vLyBDYXN0cyBhIHN0cmluZyBpbnRvIGEgbnVtYmVyXG4vLy9cbi8vLyBAcGFyYW0ge1N0cmluZyB8IE51bWJlcn0gJHZhbHVlIC0gVmFsdWUgdG8gYmUgcGFyc2VkXG4vLy9cbi8vLyBAcmV0dXJuIHtOdW1iZXJ9XG4vLy9cbkBmdW5jdGlvbiB0by1udW1iZXIoJHZhbHVlKSB7XG4gIEBpZiB0eXBlLW9mKCR2YWx1ZSkgPT0gJ251bWJlcicge1xuXHRAcmV0dXJuICR2YWx1ZTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCR2YWx1ZSkgIT0gJ3N0cmluZycge1xuXHQkXzogaW0tbG9nKCdWYWx1ZSBmb3IgYHRvLW51bWJlcmAgc2hvdWxkIGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLicpO1xuICB9XG5cbiAgJGZpcnN0LWNoYXJhY3Rlcjogc3RyLXNsaWNlKCR2YWx1ZSwgMSwgMSk7XG4gICRyZXN1bHQ6IDA7XG4gICRkaWdpdHM6IDA7XG4gICRtaW51czogKCRmaXJzdC1jaGFyYWN0ZXIgPT0gJy0nKTtcbiAgJG51bWJlcnM6ICgnMCc6IDAsICcxJzogMSwgJzInOiAyLCAnMyc6IDMsICc0JzogNCwgJzUnOiA1LCAnNic6IDYsICc3JzogNywgJzgnOiA4LCAnOSc6IDkpO1xuXG4gIC8vIFJlbW92ZSArLy0gc2lnbiBpZiBwcmVzZW50IGF0IGZpcnN0IGNoYXJhY3RlclxuICBAaWYgKCRmaXJzdC1jaGFyYWN0ZXIgPT0gJysnIG9yICRmaXJzdC1jaGFyYWN0ZXIgPT0gJy0nKSB7XG5cdCR2YWx1ZTogc3RyLXNsaWNlKCR2YWx1ZSwgMik7XG4gIH1cblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIHN0ci1sZW5ndGgoJHZhbHVlKSB7XG5cdCRjaGFyYWN0ZXI6IHN0ci1zbGljZSgkdmFsdWUsICRpLCAkaSk7XG5cblx0QGlmIG5vdCAoaW5kZXgobWFwLWtleXMoJG51bWJlcnMpLCAkY2hhcmFjdGVyKSBvciAkY2hhcmFjdGVyID09ICcuJykge1xuXHQgIEByZXR1cm4gdG8tbGVuZ3RoKGlmKCRtaW51cywgLSRyZXN1bHQsICRyZXN1bHQpLCBzdHItc2xpY2UoJHZhbHVlLCAkaSkpXG5cdH1cblxuXHRAaWYgJGNoYXJhY3RlciA9PSAnLicge1xuXHQgICRkaWdpdHM6IDE7XG5cdH0gQGVsc2UgaWYgJGRpZ2l0cyA9PSAwIHtcblx0ICAkcmVzdWx0OiAkcmVzdWx0ICogMTAgKyBtYXAtZ2V0KCRudW1iZXJzLCAkY2hhcmFjdGVyKTtcblx0fSBAZWxzZSB7XG5cdCAgJGRpZ2l0czogJGRpZ2l0cyAqIDEwO1xuXHQgICRyZXN1bHQ6ICRyZXN1bHQgKyBtYXAtZ2V0KCRudW1iZXJzLCAkY2hhcmFjdGVyKSAvICRkaWdpdHM7XG5cdH1cbiAgfVxuXG4gIEByZXR1cm4gaWYoJG1pbnVzLCAtJHJlc3VsdCwgJHJlc3VsdCk7XG59XG5cblxuLy8vXG4vLy8gQWRkIGAkdW5pdGAgdG8gYCR2YWx1ZWBcbi8vL1xuLy8vIEBwYXJhbSB7TnVtYmVyfSAkdmFsdWUgLSBWYWx1ZSB0byBhZGQgdW5pdCB0b1xuLy8vIEBwYXJhbSB7U3RyaW5nfSAkdW5pdCAtIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdFxuLy8vXG4vLy8gQHJldHVybiB7TnVtYmVyfSAtIGAkdmFsdWVgIGV4cHJlc3NlZCBpbiBgJHVuaXRgXG4vLy9cbkBmdW5jdGlvbiB0by1sZW5ndGgoJHZhbHVlLCAkdW5pdCkge1xuICAkdW5pdHM6ICgncHgnOiAxcHgsICdjbSc6IDFjbSwgJ21tJzogMW1tLCAnJSc6IDElLCAnY2gnOiAxY2gsICdwYyc6IDFwYywgJ2luJzogMWluLCAnZW0nOiAxZW0sICdyZW0nOiAxcmVtLCAncHQnOiAxcHQsICdleCc6IDFleCwgJ3Z3JzogMXZ3LCAndmgnOiAxdmgsICd2bWluJzogMXZtaW4sICd2bWF4JzogMXZtYXgpO1xuXG4gIEBpZiBub3QgaW5kZXgobWFwLWtleXMoJHVuaXRzKSwgJHVuaXQpIHtcblx0JF86IGltLWxvZygnSW52YWxpZCB1bml0IGAjeyR1bml0fWAuJyk7XG4gIH1cblxuICBAcmV0dXJuICR2YWx1ZSAqIG1hcC1nZXQoJHVuaXRzLCAkdW5pdCk7XG59XG5cbi8vL1xuLy8vIFRoaXMgbWl4aW4gYWltcyBhdCByZWRlZmluaW5nIHRoZSBjb25maWd1cmF0aW9uIGp1c3QgZm9yIHRoZSBzY29wZSBvZlxuLy8vIHRoZSBjYWxsLiBJdCBpcyBoZWxwZnVsIHdoZW4gaGF2aW5nIGEgY29tcG9uZW50IG5lZWRpbmcgYW4gZXh0ZW5kZWRcbi8vLyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgY3VzdG9tIGJyZWFrcG9pbnRzIChyZWZlcnJlZCB0byBhcyB0d2Vha3BvaW50cylcbi8vLyBmb3IgaW5zdGFuY2UuXG4vLy9cbi8vLyBAYXV0aG9yIEh1Z28gR2lyYXVkZWxcbi8vL1xuLy8vIEBwYXJhbSB7TWFwfSAkdHdlYWtwb2ludHMgWygpXSAtIE1hcCBvZiB0d2Vha3BvaW50cyB0byBiZSBtZXJnZWQgd2l0aCBgJGJyZWFrcG9pbnRzYFxuLy8vIEBwYXJhbSB7TWFwfSAkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnMgWygpXSAtIE1hcCBvZiB0d2Vha2VkIG1lZGlhIGV4cHJlc3Npb25zIHRvIGJlIG1lcmdlZCB3aXRoIGAkbWVkaWEtZXhwcmVzc2lvbmBcbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBFeHRlbmQgdGhlIGdsb2JhbCBicmVha3BvaW50cyB3aXRoIGEgdHdlYWtwb2ludFxuLy8vICBAaW5jbHVkZSBtZWRpYS1jb250ZXh0KCgnY3VzdG9tJzogNjc4cHgpKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBAaW5jbHVkZSBtZWRpYSgnPnBob25lJywgJzw9Y3VzdG9tJykge1xuLy8vICAgICAgIC8vIC4uLlxuLy8vICAgICAgfVxuLy8vICAgIH1cbi8vLyAgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIEV4dGVuZCB0aGUgZ2xvYmFsIG1lZGlhIGV4cHJlc3Npb25zIHdpdGggYSBjdXN0b20gb25lXG4vLy8gIEBpbmNsdWRlIG1lZGlhLWNvbnRleHQoJHR3ZWFrLW1lZGlhLWV4cHJlc3Npb25zOiAoJ2FsbCc6ICdhbGwnKSkge1xuLy8vICAgIC5mb28ge1xuLy8vICAgICAgQGluY2x1ZGUgbWVkaWEoJ2FsbCcsICc+cGhvbmUnKSB7XG4vLy8gICAgICAgLy8gLi4uXG4vLy8gICAgICB9XG4vLy8gICAgfVxuLy8vICB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gRXh0ZW5kIGJvdGggY29uZmlndXJhdGlvbiBtYXBzXG4vLy8gIEBpbmNsdWRlIG1lZGlhLWNvbnRleHQoKCdjdXN0b20nOiA2NzhweCksICgnYWxsJzogJ2FsbCcpKSB7XG4vLy8gICAgLmZvbyB7XG4vLy8gICAgICBAaW5jbHVkZSBtZWRpYSgnYWxsJywgJz5waG9uZScsICc8PWN1c3RvbScpIHtcbi8vLyAgICAgICAvLyAuLi5cbi8vLyAgICAgIH1cbi8vLyAgICB9XG4vLy8gIH1cbi8vL1xuQG1peGluIG1lZGlhLWNvbnRleHQoJHR3ZWFrcG9pbnRzOiAoKSwgJHR3ZWFrLW1lZGlhLWV4cHJlc3Npb25zOiAoKSkge1xuICAvLyBTYXZlIGdsb2JhbCBjb25maWd1cmF0aW9uXG4gICRnbG9iYWwtYnJlYWtwb2ludHM6ICRicmVha3BvaW50cztcbiAgJGdsb2JhbC1tZWRpYS1leHByZXNzaW9uczogJG1lZGlhLWV4cHJlc3Npb25zO1xuXG4gIC8vIFVwZGF0ZSBnbG9iYWwgY29uZmlndXJhdGlvblxuICAkYnJlYWtwb2ludHM6IG1hcC1tZXJnZSgkYnJlYWtwb2ludHMsICR0d2Vha3BvaW50cykgIWdsb2JhbDtcbiAgJG1lZGlhLWV4cHJlc3Npb25zOiBtYXAtbWVyZ2UoJG1lZGlhLWV4cHJlc3Npb25zLCAkdHdlYWstbWVkaWEtZXhwcmVzc2lvbnMpICFnbG9iYWw7XG5cbiAgQGNvbnRlbnQ7XG5cbiAgLy8gUmVzdG9yZSBnbG9iYWwgY29uZmlndXJhdGlvblxuICAkYnJlYWtwb2ludHM6ICRnbG9iYWwtYnJlYWtwb2ludHMgIWdsb2JhbDtcbiAgJG1lZGlhLWV4cHJlc3Npb25zOiAkZ2xvYmFsLW1lZGlhLWV4cHJlc3Npb25zICFnbG9iYWw7XG59XG5cbi8vLy9cbi8vLyBpbmNsdWRlLW1lZGlhIHB1YmxpYyBleHBvc2VkIEFQSVxuLy8vIEBhdXRob3IgRWR1YXJkbyBCb3VjYXNcbi8vLyBAYWNjZXNzIHB1YmxpY1xuLy8vL1xuXG5cbi8vL1xuLy8vIEdlbmVyYXRlcyBhIG1lZGlhIHF1ZXJ5IGJhc2VkIG9uIGEgbGlzdCBvZiBjb25kaXRpb25zXG4vLy9cbi8vLyBAcGFyYW0ge0FyZ2xpc3R9ICAgJGNvbmRpdGlvbnMgIC0gTWVkaWEgcXVlcnkgY29uZGl0aW9uc1xuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggYSBzaW5nbGUgc2V0IGJyZWFrcG9pbnRcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz5waG9uZScpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggdHdvIHNldCBicmVha3BvaW50c1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPnBob25lJywgJzw9dGFibGV0JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gV2l0aCBjdXN0b20gdmFsdWVzXG4vLy8gIEBpbmNsdWRlIG1lZGlhKCc+PTM1OHB4JywgJzw4NTBweCcpIHsgfVxuLy8vXG4vLy8gQGV4YW1wbGUgc2NzcyAtIFdpdGggc2V0IGJyZWFrcG9pbnRzIHdpdGggY3VzdG9tIHZhbHVlc1xuLy8vICBAaW5jbHVkZSBtZWRpYSgnPmRlc2t0b3AnLCAnPD0xMzUwcHgnKSB7IH1cbi8vL1xuLy8vIEBleGFtcGxlIHNjc3MgLSBXaXRoIGEgc3RhdGljIGV4cHJlc3Npb25cbi8vLyAgQGluY2x1ZGUgbWVkaWEoJ3JldGluYTJ4JykgeyB9XG4vLy9cbi8vLyBAZXhhbXBsZSBzY3NzIC0gTWl4aW5nIGV2ZXJ5dGhpbmdcbi8vLyAgQGluY2x1ZGUgbWVkaWEoJz49MzUwcHgnLCAnPHRhYmxldCcsICdyZXRpbmEzeCcpIHsgfVxuLy8vXG5AbWl4aW4gbWVkaWEoJGNvbmRpdGlvbnMuLi4pIHtcbiAgQGlmICgkaW0tbWVkaWEtc3VwcG9ydCBhbmQgbGVuZ3RoKCRjb25kaXRpb25zKSA9PSAwKSBvclxuXHQgIChub3QgJGltLW1lZGlhLXN1cHBvcnQgYW5kIGltLWludGVyY2VwdHMtc3RhdGljLWJyZWFrcG9pbnQoJGNvbmRpdGlvbnMuLi4pKSB7XG5cdEBjb250ZW50O1xuICB9IEBlbHNlIGlmICgkaW0tbWVkaWEtc3VwcG9ydCBhbmQgbGVuZ3RoKCRjb25kaXRpb25zKSA+IDApIHtcblx0QG1lZGlhICN7dW5xdW90ZShwYXJzZS1leHByZXNzaW9uKG50aCgkY29uZGl0aW9ucywgMSkpKX0ge1xuXHQgIC8vIFJlY3Vyc2l2ZSBjYWxsXG5cdCAgQGluY2x1ZGUgbWVkaWEoc2xpY2UoJGNvbmRpdGlvbnMsIDIpLi4uKSB7XG5cdFx0QGNvbnRlbnQ7XG5cdCAgfVxuXHR9XG4gIH1cbn1cbiIsIkBpbXBvcnQgJ3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICdzdHlsZXMnO1xuQGltcG9ydCAncnRsJzsiLCIkY2hvaWNlcy1zZWxlY3RvcjogJ2Nob2ljZXMnICFkZWZhdWx0O1xuJGNob2ljZXMtcnRsLXNlbGVjdG9yOiAnYm9keS5ydGwnICFkZWZhdWx0O1xuJGNob2ljZXMtZ3V0dGVyaW5nOiAyNHB4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1czogM3B4ICFkZWZhdWx0O1xuJGNob2ljZXMtYm9yZGVyLXJhZGl1cy1pdGVtOiAzcHggIWRlZmF1bHQ7XG4kY2hvaWNlcy1iZy1jb2xvcjogI2ZmZiAhZGVmYXVsdDtcbiRjaG9pY2VzLWJnLWNvbG9yLWRpc2FibGVkOiAjZWFlYWVhICFkZWZhdWx0O1xuJGNob2ljZXMtYmctY29sb3ItZHJvcGRvd246ICNmZmYgIWRlZmF1bHQ7XG4kY2hvaWNlcy10ZXh0LWNvbG9yOiBjdXJyZW50Q29sb3IgIWRlZmF1bHQ7XG4kY2hvaWNlcy1rZXlsaW5lLWNvbG9yOiAjZGRkICFkZWZhdWx0O1xuJGNob2ljZXMtcHJpbWFyeS1jb2xvcjogJGJsdWUgIWRlZmF1bHQ7XG4kY2hvaWNlcy1kaXNhYmxlZC1jb2xvcjogI2VhZWFlYSAhZGVmYXVsdDtcbiRjaG9pY2VzLWhpZ2hsaWdodC1jb2xvcjogJGNob2ljZXMtcHJpbWFyeS1jb2xvciAhZGVmYXVsdDtcbiRjaG9pY2VzLWZvY3VzZWQtY29sb3I6ICMwMTZBQUIgIWRlZmF1bHQ7XG4kY2hvaWNlcy1idXR0b24tZGltZW5zaW9uOiA4cHggIWRlZmF1bHQ7XG4kY2hvaWNlcy1idXR0b24tb2Zmc2V0OiA4cHggIWRlZmF1bHQ7XG4kY2hvaWNlcy1idXR0b24taWNvbi1wYXRoOiAnLi4vaW1hZ2VzJyAhZGVmYXVsdDtcbiIsIi4jeyRjaG9pY2VzLXNlbGVjdG9yfSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogJGNob2ljZXMtZ3V0dGVyaW5nO1xuICAmOmZvY3VzIHsgb3V0bGluZTogbm9uZTsgfVxuICAmOmxhc3QtY2hpbGQgeyBtYXJnaW4tYm90dG9tOiAwOyB9XG4gICYuaXMtZGlzYWJsZWQge1xuICAgIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIsIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5wdXQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNob2ljZXMtYmctY29sb3ItZGlzYWJsZWQ7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICAgIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbSB7IGN1cnNvcjogbm90LWFsbG93ZWQ7IH1cbiAgfVxuICAmIFtoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbiAgaW5wdXRbdHlwZT10ZXh0XS4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5wdXQge1xuICBcdHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KSAhaW1wb3J0YW50O1xuXHRtYXJnaW46IDEwcHggIWltcG9ydGFudDtcblx0cGFkZGluZzogN3B4IDEycHggIWltcG9ydGFudDtcblx0Ym94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O1xuXHRib3JkZXI6IDFweCBzb2xpZCAjZGRkICFpbXBvcnRhbnQ7XG5cdGJvcmRlci1yYWRpdXM6IDNweCAhaW1wb3J0YW50O1xuXG5cdCY6Zm9jdXMge1xuXHQgIGJvcmRlcjogMXB4IHNvbGlkICRjaG9pY2VzLWZvY3VzZWQtY29sb3IgIWltcG9ydGFudDtcblx0ICBib3gtc2hhZG93OiAwIDAgMCAxcHggJGNob2ljZXMtZm9jdXNlZC1jb2xvciAhaW1wb3J0YW50O1xuXHQgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcblx0fVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwic2VsZWN0LW9uZVwiXSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbnB1dCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjaG9pY2VzLWtleWxpbmUtY29sb3IgIWltcG9ydGFudDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1xuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fYnV0dG9uIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgkY2hvaWNlcy1idXR0b24taWNvbi1wYXRoICsgJy9jcm9zcy1pbnZlcnNlLnN2ZycpO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGJhY2tncm91bmQtc2l6ZTogOHB4O1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICByaWdodDogMDtcbiAgICAgIG1hcmdpbi10b3A6IC0xMHB4O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAyNXB4O1xuICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMGVtO1xuICAgICAgb3BhY2l0eTogLjU7XG4gICAgJjpob3ZlciwgJjpmb2N1cyB7IG9wYWNpdHk6IDE7IH1cbiAgICAmOmZvY3VzIHsgYm94LXNoYWRvdzogMCAwIDAgMnB4ICRjaG9pY2VzLWhpZ2hsaWdodC1jb2xvcjsgfVxuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbVtkYXRhLXZhbHVlPScnXSAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2J1dHRvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGhlaWdodDogMDtcbiAgICB3aWR0aDogMDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItd2lkdGg6IDVweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDExLjVweDtcbiAgICB0b3A6IDUwJTtcbiAgICBtYXJnaW4tdG9wOiAtMi41cHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cbiAgJi5pcy1vcGVuOmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICRjaG9pY2VzLXRleHQtY29sb3IgdHJhbnNwYXJlbnQ7XG4gICAgbWFyZ2luLXRvcDogLTcuNXB4O1xuICB9XG4gICZbZGlyPVwicnRsXCJdIHtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGxlZnQ6IDExLjVweDtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgIH1cbiAgICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2J1dHRvbiB7XG4gICAgICByaWdodDogYXV0bztcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBtYXJnaW4tbGVmdDogMjVweDtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICB9XG4gIH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9W2RhdGEtdHlwZSo9XCJzZWxlY3QtbXVsdGlwbGVcIl0ge1xuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lubmVyIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkY2hvaWNlcy1ndXR0ZXJpbmc7XG4gIH1cblxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGhlaWdodDogMDtcbiAgICB3aWR0aDogMDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci1jb2xvcjogJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItd2lkdGg6IDVweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDExLjVweDtcbiAgICB0b3A6IDFlbTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuICAmLmlzLW9wZW46YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgJGNob2ljZXMtdGV4dC1jb2xvciB0cmFuc3BhcmVudDtcbiAgICBtYXJnaW4tdG9wOiAtNy41cHg7XG4gIH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9W2RhdGEtdHlwZSo9XCJzZWxlY3QtbXVsdGlwbGVcIl0sXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInRleHRcIl0ge1xuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2lubmVyIHsgY3Vyc29yOiB0ZXh0OyB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fYnV0dG9uIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1yaWdodDogLSRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQvMjtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAkY2hvaWNlcy1idXR0b24tb2Zmc2V0O1xuICAgIHBhZGRpbmc6IDFweDtcbiAgICBwYWRkaW5nLWxlZnQ6ICRjaG9pY2VzLWJ1dHRvbi1vZmZzZXQqMjtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGRhcmtlbigkY2hvaWNlcy1wcmltYXJ5LWNvbG9yLCAxMCUpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgkY2hvaWNlcy1idXR0b24taWNvbi1wYXRoICsgJy9jcm9zcy5zdmcnKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6ICRjaG9pY2VzLWJ1dHRvbi1kaW1lbnNpb247XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIHdpZHRoOiAkY2hvaWNlcy1idXR0b24tZGltZW5zaW9uO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIG9wYWNpdHk6IC43NTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICY6aG92ZXIsICY6Zm9jdXMgeyBvcGFjaXR5OiAxOyB9XG4gIH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjaG9pY2VzLWJnLWNvbG9yO1xuICBwYWRkaW5nOiA0cHggNy41cHggMXB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAkY2hvaWNlcy1rZXlsaW5lLWNvbG9yO1xuICBib3JkZXItcmFkaXVzOiAkY2hvaWNlcy1ib3JkZXItcmFkaXVzO1xuICBtaW4taGVpZ2h0OiAzNXB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uaXMtb3BlbiB7XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIge1xuXHRcdGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG5cdFx0Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG5cdH1cbn1cblxuLmlzLW9wZW4uaXMtZmxpcHBlZCB7XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIge1xuXHRcdGJvcmRlci1yYWRpdXM6IDAgMCAkY2hvaWNlcy1ib3JkZXItcmFkaXVzICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG5cdH1cbn1cblxuLmlzLWZvY3VzZWQsXG4uaXMtb3BlbiB7XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIge1xuICAgIGJvcmRlci1jb2xvcjogJGNob2ljZXMtZm9jdXNlZC1jb2xvcjtcblx0Ym94LXNoYWRvdzogMCAwIDAgMXB4ICRjaG9pY2VzLWZvY3VzZWQtY29sb3I7XG5cdG91dGxpbmU6IG5vbmU7XG4gIH1cbn1cblxuLmlzLWZsaXBwZWQuaXMtb3BlbiB7XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIge1xuXHQgIGJvcmRlci1jb2xvcjogJGNob2ljZXMtZm9jdXNlZC1jb2xvcjtcblx0ICBib3gtc2hhZG93OiAwIDAgMCAxcHggJGNob2ljZXMtZm9jdXNlZC1jb2xvcjtcblx0ICBvdXRsaW5lOiBub25lO1xuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2xpc3QtLXNpbmdsZSB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogNHB4IDE2cHggNHB4IDA7XG4gIGZvbnQtc2l6ZTogMC44NzVlbTtcbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtIHsgd2lkdGg6IDEwMCU7IH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1tdWx0aXBsZSB7XG4gIGRpc3BsYXk6IGlubGluZTtcbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBib3JkZXItcmFkaXVzOiAkY2hvaWNlcy1ib3JkZXItcmFkaXVzLWl0ZW07XG4gICAgcGFkZGluZzogNHB4IDEwcHg7XG4gICAgZm9udC1zaXplOiAuNzVlbTtcbiAgICBsaW5lLWhlaWdodDogMS4zO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgbWFyZ2luLXJpZ2h0OiAzcHg7XG4gICAgbWFyZ2luLXRvcDogMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDNweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2hvaWNlcy1wcmltYXJ5LWNvbG9yO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkY2hvaWNlcy1wcmltYXJ5LWNvbG9yLCA1JSk7XG4gICAgY29sb3I6ICNGRkZGRkY7XG4gICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgICZbZGF0YS1kZWxldGFibGVdIHsgcGFkZGluZy1yaWdodDogNXB4OyB9XG4gICAgJi5pcy1oaWdobGlnaHRlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgNSUpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjaG9pY2VzLXByaW1hcnktY29sb3IsIDEwJSk7XG4gICAgfVxuICB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdC0tbXVsdGlwbGUgKyBpbnB1dFt0eXBlPXRleHRdLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbnB1dCB7XG5cblx0Ym9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG5cdG1hcmdpbjogMCAhaW1wb3J0YW50O1xuXHR3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuXHRwYWRkaW5nOiAzcHggIWltcG9ydGFudDtcblxuXHQmOmZvY3VzIHtcblx0XHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG5cdFx0Ym9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG5cdH1cbn1cblxuLmlzLWRpc2FibGVkIHtcbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1tdWx0aXBsZSB7XG4gICAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkY2hvaWNlcy1kaXNhYmxlZC1jb2xvciwgMjUlKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkY2hvaWNlcy1kaXNhYmxlZC1jb2xvciwgMzUlKTtcbiAgICB9XG4gIH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1kcm9wZG93biB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjaG9pY2VzLWJnLWNvbG9yLWRyb3Bkb3duO1xuICBib3JkZXI6IDFweCBzb2xpZCAkY2hvaWNlcy1rZXlsaW5lLWNvbG9yO1xuICB0b3A6IDEwMCU7XG4gIG1hcmdpbi10b3A6IC0xcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRjaG9pY2VzLWJvcmRlci1yYWRpdXM7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY2hvaWNlcy1ib3JkZXItcmFkaXVzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICYuaXMtYWN0aXZlIHsgZGlzcGxheTogYmxvY2s7IH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWF4LWhlaWdodDogMzAwcHg7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuICAgIHdpbGwtY2hhbmdlOiBzY3JvbGwtcG9zaXRpb247XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICAgIGZvbnQtc2l6ZTogLjg3NWVtO1xuICB9XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbS0tc2VsZWN0YWJsZSB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDY0MHB4KSB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxMDBweDtcbiAgICAgICY6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiBhdHRyKGRhdGEtc2VsZWN0LXRleHQpO1xuICAgICAgICBmb250LXNpemU6IC43NWVtO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgfVxuICAgIH1cbiAgICAmLmlzLWhpZ2hsaWdodGVkIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IG1peCgjMDAwMDAwLCAjRkZGRkZGLCA1JSk7XG4gICAgICAmOmFmdGVyIHsgb3BhY2l0eTogLjU7IH1cbiAgICB9XG4gIH1cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19wbGFjZWhvbGRlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4uaXMtb3BlbiB7XG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdC0tZHJvcGRvd24ge1xuICAgIGJvcmRlci1jb2xvcjogJGNob2ljZXMtZm9jdXNlZC1jb2xvcjtcblx0Ym9yZGVyLXRvcC1jb2xvcjogZGFya2VuKCRjaG9pY2VzLWtleWxpbmUtY29sb3IsIDEwJSk7XG5cdGJvcmRlci1ib3R0b20tY29sb3I6ICRjaG9pY2VzLWJnLWNvbG9yLWRyb3Bkb3duO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDAgMXB4ICRjaG9pY2VzLWZvY3VzZWQtY29sb3I7XG4gIH1cbn1cblxuLmlzLW9wZW4uaXMtZmxpcHBlZCB7XG5cdC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdC0tZHJvcGRvd24ge1xuXHRcdGJvcmRlci10b3AtY29sb3I6ICRjaG9pY2VzLWJnLWNvbG9yLWRyb3Bkb3duO1xuXHRcdGJvcmRlci1ib3R0b20tY29sb3I6IGRhcmtlbigkY2hvaWNlcy1rZXlsaW5lLWNvbG9yLCAxMCUpO1xuXHRcdGJveC1zaGFkb3c6IDAgLTFweCAwIDFweCAkY2hvaWNlcy1mb2N1c2VkLWNvbG9yO1xuXHR9XG59XG5cbi5pcy1mbGlwcGVkIHtcbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1kcm9wZG93biB7XG4gICAgdG9wOiBhdXRvO1xuICAgIGJvdHRvbTogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IC0xcHg7XG4gICAgYm9yZGVyLXJhZGl1czogLjI1cmVtIC4yNXJlbSAwIDA7XG4gIH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtIHsgY3Vyc29yOiBkZWZhdWx0OyB9XG4uI3skY2hvaWNlcy1zZWxlY3Rvcn1fX2l0ZW0tLXNlbGVjdGFibGUgeyBjdXJzb3I6IHBvaW50ZXI7IH1cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faXRlbS0tZGlzYWJsZWQge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgb3BhY2l0eTogLjU7XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faGVhZGluZyB7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG4gIGZvbnQtc2l6ZTogLjc1ZW07XG4gIHBhZGRpbmc6IDEwcHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBsaWdodGVuKCRjaG9pY2VzLWtleWxpbmUtY29sb3IsIDEwJSk7XG4gIGNvbG9yOiBsaWdodGVuKCMzMzMsIDMwJSk7XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fYnV0dG9uIHtcbiAgdGV4dC1pbmRlbnQ6IC05OTk5cHg7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgYm9yZGVyOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gICY6Zm9jdXMgeyBvdXRsaW5lOiBub25lOyB9XG59XG5cbi4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5wdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZSAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgbWFyZ2luOiAwIDAgMnB4IDAgIWltcG9ydGFudDtcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmc6IDRweCAwIDRweCAycHggIWltcG9ydGFudDtcbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9IC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5uZXIge1xuXHRpbnB1dC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5wdXQ6Zm9jdXMge1xuXHRcdG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcblx0XHRib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG5cdFx0Ym9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG5cdH1cbn1cblxuLiN7JGNob2ljZXMtc2VsZWN0b3J9X19wbGFjZWhvbGRlciB7IG9wYWNpdHk6IC41OyB9XG4iLCIjeyRjaG9pY2VzLXJ0bC1zZWxlY3Rvcn0ge1xuICAuI3skY2hvaWNlcy1zZWxlY3Rvcn1bZGF0YS10eXBlKj1cInNlbGVjdC1tdWx0aXBsZVwiXSB7XG4gICAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pbm5lciB7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7XG4gICAgICBwYWRkaW5nLWxlZnQ6ICRjaG9pY2VzLWd1dHRlcmluZztcbiAgICB9XG5cbiAgICAmOmFmdGVyIHtcbiAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgbGVmdDogMTEuNXB4O1xuICAgIH1cbiAgfVxuXG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdC0tc2luZ2xlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7XG4gICAgcGFkZGluZy1sZWZ0OiAxNnB4O1xuICB9XG5cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1tdWx0aXBsZSB7XG4gICAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtIHtcbiAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAzLjc1cHg7XG5cbiAgICAgICZbZGF0YS1kZWxldGFibGVdIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19saXN0LS1kcm9wZG93biB7XG4gICAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtIHtcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9faW5wdXQge1xuICAgIHBhZGRpbmctcmlnaHQ6IDJweCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLiN7JGNob2ljZXMtc2VsZWN0b3J9W2RhdGEtdHlwZSo9XCJzZWxlY3QtbXVsdGlwbGVcIl0sIC4jeyRjaG9pY2VzLXNlbGVjdG9yfVtkYXRhLXR5cGUqPVwidGV4dFwiXSB7XG4gICAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19idXR0b24ge1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkY2hvaWNlcy1idXR0b24tb2Zmc2V0O1xuICAgICAgbWFyZ2luLWxlZnQ6IC0kY2hvaWNlcy1idXR0b24tb2Zmc2V0LzI7XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCBkYXJrZW4oJGNob2ljZXMtcHJpbWFyeS1jb2xvciwgMTAlKTtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiA2NDBweCkge1xuICAgIC4jeyRjaG9pY2VzLXNlbGVjdG9yfV9fbGlzdC0tZHJvcGRvd24ge1xuICAgICAgLiN7JGNob2ljZXMtc2VsZWN0b3J9X19pdGVtLS1zZWxlY3RhYmxlIHtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMTAwcHg7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICAgIGxlZnQ6IDEwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEJ1dHRvbiBzdHlsZXMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQud3Bmb3Jtcy1idG4ge1xuXHRcdGJvcmRlcjogMXB4O1xuXHRcdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHR3aGl0ZS1zcGFjZTogbm93cmFwO1xuXHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tYmxvY2sge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLW1kIHtcblx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiA4cHggMTJweDtcblx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXHR9XG5cblx0LndwZm9ybXMtYnRuLWxnIHtcblx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRwYWRkaW5nOiAxNnB4IDI4cHg7XG5cdH1cblxuXHQud3Bmb3Jtcy1idG4tb3JhbmdlIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkb3JhbmdlO1xuXHRcdGJvcmRlci1jb2xvcjogJG9yYW5nZTtcblx0XHRjb2xvcjogI2ZmZjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRib3JkZXItY29sb3I6ICRkYXJrb3JhbmdlO1xuXHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtYnRuLWdyZXkge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG5cdFx0Ym9yZGVyLWNvbG9yOiAjY2NjO1xuXHRcdGNvbG9yOiAjNjY2O1xuXG5cdFx0Jjpob3ZlciB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZDdkN2Q3O1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjY2NjO1xuXHRcdFx0Y29sb3I6ICM0NDQ7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtYnRuLWxpZ2h0LWdyZXkge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2NjYztcblx0XHRjb2xvcjogIzY2NjtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2VlZTtcblx0XHRcdGJvcmRlci1jb2xvcjogI2NjYztcblx0XHRcdGNvbG9yOiAjNDQ0O1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWJ0bi10cmFucy1ncmVlbiB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cdFx0Ym9yZGVyOiBub25lO1xuXHRcdGNvbG9yOiAkZ3JlZW47XG5cblx0XHQmOmhvdmVyIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICRncmVlbjtcblx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdH1cblxuXHRcdC51bmRlcmxpbmUge1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0XHQmOmFmdGVyIHtcblx0XHRcdFx0Y29udGVudDogXCIgXCI7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgJGdyZWVuO1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdGJvdHRvbTogLTVweDtcblx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmRhc2hpY29ucyB7XG5cdFx0XHRoZWlnaHQ6IDE4cHg7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBBbGVydCBzdHlsZXMuXG4vLyBTdHlsaW5nIHR3ZWFrcyBmb3IgalF1ZXJ5LWNvbmZpcm0gSlMgYWxlcnQgbGlicmFyeS5cbmJvZHkge1xuXG5cdGRpdi5qY29uZmlybSB7XG5cblx0XHQqLFxuXHRcdCo6OmJlZm9yZSxcblx0XHQqOjphZnRlciB7XG5cdFx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0XHQtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdH1cblxuXHRcdGRpdi5qY29uZmlybS1ib3gtY29udGFpbmVyIHtcblxuXHRcdFx0ZGl2Lmpjb25maXJtLWJveCB7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDA7XG5cdFx0XHRcdGJveC1zaGFkb3c6IDAgMnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMik7XG5cblx0XHRcdFx0ZGl2Lmpjb25maXJtLWNsb3NlSWNvbiB7XG5cdFx0XHRcdFx0Y29sb3I6IHJnYmEoMCwwLDAsMC40KTtcblx0XHRcdFx0XHR0b3A6IDhweDtcblx0XHRcdFx0XHRyaWdodDogOHB4O1xuXG5cdFx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0XHRjb2xvcjogcmdiYSgwLDAsMCwwLjgwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRkaXYuamNvbmZpcm0tYm94IHtcblxuXHRcdFx0ZGl2Lmpjb25maXJtLXRpdGxlLWMge1xuXHRcdFx0XHRtYXJnaW46IDAgMCAyNnB4IDAgIWltcG9ydGFudDtcblx0XHRcdFx0cGFkZGluZzogMCAhaW1wb3J0YW50O1xuXG5cdFx0XHRcdHNwYW4uamNvbmZpcm0taWNvbi1jIHtcblx0XHRcdFx0XHRtYXJnaW46IDAgIWltcG9ydGFudDtcblx0XHRcdFx0XHRjb2xvcjogI2M0YzRjNCAhaW1wb3J0YW50O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3Bhbi5qY29uZmlybS10aXRsZSB7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0Y29sb3I6ICMzMzM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzcGFuLmpjb25maXJtLWljb24tYyArIHNwYW4uamNvbmZpcm0tdGl0bGUge1xuXHRcdFx0XHRcdG1hcmdpbi10b3A6IDIwcHggIWltcG9ydGFudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRkaXYuamNvbmZpcm0tY29udGVudC1wYW5lIHtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMjZweDtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cblx0XHRcdFx0Lmpjb25maXJtLWNvbnRlbnQge1xuXHRcdFx0XHRcdG92ZXJmbG93OiBpbmhlcml0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRpdi5qY29uZmlybS1jb250ZW50IHtcblx0XHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdFx0XHRjb2xvcjogIzU1NTtcblx0XHRcdFx0bGluZS1oZWlnaHQ6IDEuNDtcblxuXHRcdFx0XHQmLmxpdGUtdXBncmFkZSB7XG5cdFx0XHRcdFx0cCB7XG5cdFx0XHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiAwIDIwcHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cCB7XG5cdFx0XHRcdFx0bWFyZ2luOiAwIDAgMTZweDtcblx0XHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdFx0bGluZS1oZWlnaHQ6IDEuNTtcblxuXHRcdFx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLmxhcmdlIHtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLnNtYWxsIHtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQuYWxyZWFkeS1wdXJjaGFzZWQge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRcdFx0XHRjb2xvcjogI2NjYztcblx0XHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cblx0XHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRkaXYuamNvbmZpcm0tYnV0dG9ucyB7XG5cblx0XHRcdFx0LmFscmVhZHktcHVyY2hhc2VkIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHRmb250LXNpemU6IDEycHg7XG5cdFx0XHRcdFx0Y29sb3I6ICNhYWE7XG5cdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHRcdHBhZGRpbmctdG9wOiAyMHB4O1xuXG5cdFx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQuZGlzY291bnQtbm90ZSB7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0bWFyZ2luOiAzMHB4IDAgMDtcblxuXHRcdFx0XHRwIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmZmFjO1xuXHRcdFx0XHRcdG1hcmdpbjogMCAtMzBweDtcblx0XHRcdFx0XHRwYWRkaW5nOiAyNHB4IDYwcHggMjBweDtcblx0XHRcdFx0XHRmb250LXNpemU6IDE1cHg7XG5cdFx0XHRcdFx0Y29sb3I6ICM0ZDRkNGQ7XG5cdFx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0XHRcdFx0JjphZnRlciB7XG5cdFx0XHRcdFx0XHRjb250ZW50OiAnXFxmMDU4Jztcblx0XHRcdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0XHRcdGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHgvMSBGb250QXdlc29tZTtcblx0XHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRcdFx0XHRmb250LXNpemU6IDI2cHg7XG5cdFx0XHRcdFx0XHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiA1cHggNnB4O1xuXHRcdFx0XHRcdFx0dGV4dC1yZW5kZXJpbmc6IGF1dG87XG5cdFx0XHRcdFx0XHQtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcblx0XHRcdFx0XHRcdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0XHR0b3A6IC0yMHB4Oztcblx0XHRcdFx0XHRcdHJpZ2h0OiA1MCU7XG5cdFx0XHRcdFx0XHRtYXJnaW4tcmlnaHQ6IC0xOHB4O1xuXHRcdFx0XHRcdFx0Y29sb3I6ICMzYWJjMDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c3BhbiB7XG5cdFx0XHRcdFx0Zm9udC13ZWlnaHQ6IDcwMDtcblx0XHRcdFx0XHRjb2xvcjogIzNhYmMwMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGEge1xuXHRcdFx0XHRcdGNvbG9yOiAjYWFhO1xuXHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdG1hcmdpbi10b3A6IDEycHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aW5wdXRbdHlwZT10ZXh0XSB7XG5cdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHR3aWR0aDogOTklO1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZDZkNmQ2O1xuXHRcdFx0XHRwYWRkaW5nOiAxMHB4O1xuXHRcdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0XHRtYXJnaW46IDIwcHggYXV0byAwIGF1dG87XG5cdFx0XHR9XG5cblx0XHRcdCN3cGZvcm1zLWVtYmVkLXNob3J0Y29kZSB7XG5cdFx0XHRcdG1hcmdpbjogMjBweCAwO1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMjRweDtcblx0XHRcdFx0cGFkZGluZzogOHB4IDVweDtcblx0XHRcdH1cblxuXHRcdFx0I3dwZm9ybXMtZW1iZWQtc2hvcnRjb2RlOmRpc2FibGVkIHtcblx0XHRcdFx0Y29sb3I6ICMzMzM7XG5cdFx0XHR9XG5cblx0XHRcdGJ1dHRvbi5idG4tY29uZmlybSB7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICRvcmFuZ2U7XG5cdFx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0XHRvdXRsaW5lOiBub25lO1xuXG5cdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICRkYXJrb3JhbmdlO1xuXHRcdFx0XHRcdGJvcmRlci1jb2xvcjogJGRhcmtvcmFuZ2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YnV0dG9uLFxuXHRcdFx0YnV0dG9uLmJ0bi1kZWZhdWx0IHtcblx0XHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHR9XG5cblx0XHRcdGJ1dHRvbi5idG4tYmxvY2sge1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0bWFyZ2luOiAwIDAgMTBweCAwICFpbXBvcnRhbnQ7XG5cdFx0XHR9XG5cblx0XHRcdGJ1dHRvbi5idG4tbm9ybWFsLWNhc2Uge1xuXHRcdFx0XHR0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0fVxuXG5cdFx0XHQuZXJyb3Ige1xuXHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHRjb2xvcjogcmVkO1xuXHRcdFx0fVxuXG5cdFx0XHQud3Bmb3Jtcy1lcnJvciB7XG5cdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNlYmNjZDEgIWltcG9ydGFudDtcblx0XHRcdH1cblxuXHRcdFx0Lmpjb25maXJtLXRpdGxlLWMgLmpjb25maXJtLWljb24tYyB7XG5cdFx0XHRcdC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50O1xuXHRcdFx0XHR0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG5cdFx0XHRcdC13ZWJraXQtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cdFx0XHRcdC1tcy10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcblx0XHRcdFx0dHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG5cdFx0XHRcdGZvbnQtc2l6ZTogNDVweCAhaW1wb3J0YW50O1xuXHRcdFx0fVxuXG5cdFx0XHQmLndwZm9ybXMtcHJvdmlkZXJzLWFjY291bnQtYWRkLW1vZGFsIHtcblxuXHRcdFx0XHRkaXYuamNvbmZpcm0tdGl0bGUtYyB7XG5cdFx0XHRcdFx0Zm9udC1zaXplOiAyMHB4O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGl2Lmpjb25maXJtLWNvbnRlbnQge1xuXG5cdFx0XHRcdFx0LmRlc2NyaXB0aW9uIHtcblx0XHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdFx0XHRcdGxpbmUtaGVpZ2h0OiAxLjQ7XG5cdFx0XHRcdFx0XHRtYXJnaW4tdG9wOiAxNnB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlucHV0W3R5cGU9XCJ0ZXh0XCJdIHtcblx0XHRcdFx0XHRcdG1hcmdpbi10b3A6IDEwcHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LmNob2ljZXMge1xuXHRcdHRleHQtYWxpZ246IGxlZnQ7XG5cdFx0Zm9udC1zaXplOiAxNnB4O1xuXG5cdFx0aW5wdXRbdHlwZT10ZXh0XS5jaG9pY2VzX19pbnB1dCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEFsZXJ0IHN0eWxlcy5cbi53cGZvcm1zLWFkbWluLXBhZ2Uge1xuXG5cdC53cGZvcm1zLWFsZXJ0IHtcblx0XHRwYWRkaW5nOiAxNnB4O1xuXHRcdG1hcmdpbi1ib3R0b206IDE4cHg7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG5cblx0XHRoNCB7XG5cdFx0XHRtYXJnaW4tdG9wOiAwO1xuXHRcdFx0Y29sb3I6IGluaGVyaXQ7XG5cdFx0fVxuXG5cdFx0cCB7XG5cdFx0XHRtYXJnaW46IDAgMCAxNXB4IDA7XG5cblx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC1ub21hcmdpbiB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LXNtYWxsIHtcblx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtc3VjY2VzcyB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmMGQ4O1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZDZlOWM2O1xuXHRcdFx0Y29sb3I6ICMzYzc2M2Q7XG5cdFx0fVxuXG5cdFx0Ji53cGZvcm1zLWFsZXJ0LWluZm8ge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcblx0XHRcdGJvcmRlci1jb2xvcjogI2JjZThmMTtcblx0XHRcdGNvbG9yOiAjMzE3MDhmO1xuXHRcdH1cblxuXHRcdCYud3Bmb3Jtcy1hbGVydC13YXJuaW5nIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmY2Y4ZTM7XG5cdFx0XHRib3JkZXItY29sb3I6ICNmYWViY2M7XG5cdFx0XHRjb2xvcjogIzhhNmQzYjtcblx0XHR9XG5cblx0XHQmLndwZm9ybXMtYWxlcnQtZGFuZ2VyIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmMmRlZGU7XG5cdFx0XHRib3JkZXItY29sb3I6ICNlYmNjZDE7XG5cdFx0XHRjb2xvcjogI2E5NDQ0Mjtcblx0XHR9XG5cdH1cbn0iLCIvLyBGbGFnIGljb25zLlxuLndwZm9ybXMtZmxhZyB7XG5cdHdpZHRoOiAxNnB4O1xuXHRoZWlnaHQ6IDE2cHg7XG5cdGJhY2tncm91bmQ6dXJsKC4uL2ltYWdlcy9mbGFncy5wbmcpIG5vLXJlcGVhdDtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWYge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggMH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWFpIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAwfVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYWwge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hbiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hcyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hdCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hdSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1hdyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IDB9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1heiB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJiIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJkIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJmIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJoIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1iaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYmoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJtIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ibiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYm8ge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWJyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1icyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xNnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctYnQge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1idyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ieSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ieiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jZCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jZiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2gge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNpIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jayB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY2wge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNtIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTMycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1jbiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0zMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY28ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMzJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWNyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY3Uge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY3Yge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY3kge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctY3oge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZGUge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZGoge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZGsge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWRtIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1kbyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZHoge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWVjIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC00OHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZWcge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtNDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWVoIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTQ4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1lciB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWVzIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWV0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWZpIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWZqIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWZtIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWZvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWZyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1nYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2Ige2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdkIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1nZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2cge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtNjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWdoIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTY0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1naSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC02NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ2wge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1nbSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1nbiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ncCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ncSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1nciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ndCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ndSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctZ3cge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWd5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1oayB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaG4ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWhyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTgwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1odCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC04MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaHUge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtODBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWlkIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaWUge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaWwge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaW0ge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaW4ge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaXEge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaXIge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctaXMge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWl0IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1qZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctam0ge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWpvIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1qcCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC05NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta2Uge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtOTZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTk2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1raCB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1raSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta20ge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWtuIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1rcCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWcta3Ige2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWt3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1reSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWt6IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGEge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sYiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxjIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbGkge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTEycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sayB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xMTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWxyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTExMnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbHMge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbHQge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLWx1IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1sdiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbHkge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1hIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWQge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1nIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbWgge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tayB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1sIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTEyOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbW0ge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTI4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tbiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xMjhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1vIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW1xIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXMge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW10IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1tdSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXYge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW13IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbXgge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1teSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW16IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmEge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1uYyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xNDRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5lIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE0NHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbmcge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTQ0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1uaSB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ubCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbm8ge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW5wIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1uciB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctbnoge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLW9tIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wYSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGYge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wZyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXBoIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcGsge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTYwcHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1wbCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xNjBweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXByIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTE2MHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcHMge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcHQge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXB3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1weSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcWEge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXJlIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ybyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctcnMge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1ydSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXJ3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Ege2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zYiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNjIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTE3NnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2Qge2JhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTc2cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIyNHB4IC0xNzZweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNnIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNpIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zayB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc2wge2JhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNtIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zbiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc28ge2JhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXNyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc3Qge2JhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy1zdiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXN5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctc3oge2JhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10YyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xOTJweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRkIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTE5MnB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGcge2JhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTkycHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10aCB7YmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10aiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdGwge2JhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRtIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10biB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdG8ge2JhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXRyIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10dCB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXR2IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdHcge2JhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy10eiB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXVhIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdWcge2JhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMjA4cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy11cyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0yMDhweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXV5IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTIwOHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdXoge2JhY2tncm91bmQtcG9zaXRpb246IDAgLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdmEge2JhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZjIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12ZSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdmcge2JhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXZpIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy12biB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctdnUge2JhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy13cyB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXllIHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTIyNHB4fVxuLndwZm9ybXMtZmxhZy53cGZvcm1zLWZsYWctemEge2JhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMjI0cHh9XG4ud3Bmb3Jtcy1mbGFnLndwZm9ybXMtZmxhZy16bSB7YmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0yMjRweH1cbi53cGZvcm1zLWZsYWcud3Bmb3Jtcy1mbGFnLXp3IHtiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTkycHggLTIyNHB4fVxuIiwiLy8gSGVhZGVyIHN0eWxlcy5cblxuI3dwZm9ybXMtaGVhZGVyLXRlbXAge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdG1hcmdpbjogMDtcblx0cG9zaXRpb246IGFic29sdXRlO1xuXHR0b3A6IC0xcHg7XG5cdGxlZnQ6IDIwcHg7XG5cdHJpZ2h0OiAyMHB4O1xuXHR6LWluZGV4OiA5OTtcbn1cblxuI3dwZm9ybXMtaGVhZGVyIHtcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkICRvcmFuZ2U7XG5cdHBhZGRpbmc6IDIycHggMjBweDtcblxuXHRpbWcge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdG1hcmdpbjogMDtcblx0XHRtYXgtd2lkdGg6IDIzNXB4O1xuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8PXRhYmxldFwiKSB7XG5cdFx0XHRtYXgtd2lkdGg6IDIwMHB4O1xuXHRcdH1cblx0fVxufVxuIiwiLy8gUGFnZSB0aXRsZSBhbmQgdGFicyBzdHlsZXMuXG4ud3Bmb3Jtcy1hZG1pbi13cmFwIHtcblxuXHQvLyBUaXRsZSBhcmVhLlxuXHQucGFnZS10aXRsZSB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdFx0cGFkZGluZzogMTVweCAyMHB4O1xuXG5cdFx0LmFkZC1uZXctaDIge1xuXHRcdFx0bWFyZ2luLWxlZnQ6IDI4cHg7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFRhYiBuYXZpZ2F0aW9uLlxuLndwZm9ybXMtYWRtaW4tdGFicyB7XG5cdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdG1hcmdpbjogMCAwIDIwcHggMDtcblx0cGFkZGluZzogMCAyMHB4O1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRvdmVyZmxvdzogYXV0bztcblx0Zm9udC1zaXplOiAxNHB4O1xuXG5cdGxpIHtcblx0XHRtYXJnaW46IDAgMzBweCAwIDA7XG5cdFx0cGFkZGluZzogMDtcblx0XHRmbG9hdDogbGVmdDtcblxuXHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHR9XG5cblx0XHRhIHtcblx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRwYWRkaW5nOiAyMHB4IDAgMThweCAwO1xuXHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNmZmY7XG5cdFx0XHRib3gtc2hhZG93OiBub25lO1xuXG5cdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjOTk5O1xuXHRcdFx0fVxuXG5cdFx0XHQmLmFjdGl2ZSB7XG5cdFx0XHRcdGJvcmRlci1jb2xvcjogJG9yYW5nZTtcblx0XHRcdH1cblxuXHRcdFx0Jjpmb2N1cyB7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBHZW5lcmFsIGFkbWluIHN0eWxpbmcuXG5cbi8vIENvcmUgYWRtaW4gc3R5bGUgb3ZlcnJpZGVzLlxuI3dwY29udGVudCB7XG5cdHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50O1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogNDZweDtcblx0fVxufVxuXG4jd3Bib2R5IHtcblx0QGluY2x1ZGUgbWVkaWEoXCI8PXBob25lXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogMDtcblx0fVxufVxuXG4vLyBUaGlzIGNsYXNzIGlzIGF1dG8gYXBwbGllZCB0byBfYWxsXyBXUEZvcm1zIGFkbWluIHBhZ2VzL3NjcmVlbnMuXG4ud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblxuXHQvLyBUaGlzIGlzIGhpZGRlbiBvbiBsb2FkLCB0aGVuIG1hZGUgdmlzaWJsZSB3aXRoIEpTLCB0b1xuXHQvLyBwcmV2ZW50IGl0IGZyb20gXCJqdW1waW5nXCIuXG5cdCNzY3JlZW4tbWV0YS1saW5rcyxcblx0I3NjcmVlbi1tZXRhIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0Ly8gUmVzcG9uc2l2ZSB2aWRlbyBjb250YWluZXIsIHJlcGxhY2VzIEpTIG1ldGhvZC5cblx0LnZpZGVvLWNvbnRhaW5lciB7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmctYm90dG9tOiA1Ni4xJTtcblx0XHQvLyBwYWRkaW5nLXRvcDogMzBweDtcblx0XHRoZWlnaHQ6IDA7XG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0fVxuXG5cdC52aWRlby1jb250YWluZXIgaWZyYW1lLFxuXHQudmlkZW8tY29udGFpbmVyIG9iamVjdCxcblx0LnZpZGVvLWNvbnRhaW5lciBlbWJlZCB7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogMDtcblx0XHRsZWZ0OiAwO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGhlaWdodDogMTAwJTtcblx0fVxuXG5cdC8vIEZhbmN5IGZpbGUgdXBsb2FkLlxuXHQud3Bmb3Jtcy1maWxlLXVwbG9hZCB7XG5cblx0XHRpbnB1dFt0eXBlPWZpbGVdIHtcblx0XHRcdHdpZHRoOiAwLjFweDtcblx0XHRcdGhlaWdodDogMC4xcHg7XG5cdFx0XHRvcGFjaXR5OiAwO1xuXHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHotaW5kZXg6IC0xO1xuXHRcdH1cblxuXHRcdGxhYmVsIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdH1cblxuXHRcdGlucHV0W3R5cGU9ZmlsZV06Zm9jdXMgKyBsYWJlbCxcblx0XHRpbnB1dFt0eXBlPWZpbGVdLmhhcy1mb2N1cyArIGxhYmVsIHtcblx0XHRcdG91dGxpbmU6IDFweCBkb3R0ZWQgIzAwMDtcblx0XHRcdG91dGxpbmU6IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvciBhdXRvIDVweDtcblx0XHR9XG5cblx0XHQuZmxkIHtcblx0XHRcdHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXHRcdFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcblx0XHRcdG92ZXJmbG93OiBoaWRkZW47XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblx0XHRcdHdpZHRoOiA0MDBweDtcblx0XHRcdG1pbi1oZWlnaHQ6IDM1cHg7XG5cblx0XHRcdC5wbGFjZWhvbGRlciB7XG5cdFx0XHRcdGNvbG9yOiAjY2NjO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHN0cm9uZyAuZmEge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiA4cHg7XG5cdFx0fVxuXHR9XG5cblx0Ly8gR2VuZXJpYyBjbGFzcyBmb3IgaGlkaW5nIGRpc3BsYXk7XG5cdC53cGZvcm1zLWhpZGUge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblxuXHQvLyBQbGFjZWhvbGRlciBoMSBmb3IgYWRtaW4gbm90aWNlcy5cblx0LndwZm9ybXMtaDEtcGxhY2Vob2xkZXIge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblxuXHQvLyBIaWRlIG5vdGljZXMgb24gbG9hZCB0byBwcmV2ZW50IGp1bXBpbmcuIEpTIHdpbGwgcmV2ZWFsIHRoZW0uXG5cdC5ub3RpY2Uge1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdH1cblxuXHQubGl0eSB7XG5cdFx0ei1pbmRleDogOTk5OTk5OTk5O1xuXHRcdHBhZGRpbmc6IDIwcHg7XG5cdH1cblxuXHQubGl0eS1jbG9zZSB7XG5cdFx0bWFyZ2luOiAxMHB4O1xuXHR9XG5cblx0LmxpdHktY29udGVudCB7XG5cdFx0bWF4LXdpZHRoOiA4MHZ3O1xuXHRcdG1heC1oZWlnaHQ6IDgwdmg7XG5cblx0XHRpbWcge1xuXHRcdFx0bWF4LWhlaWdodDogODB2aCFpbXBvcnRhbnQ7XG5cdFx0XHRtYXgtd2lkdGg6IDgwdnchaW1wb3J0YW50O1xuXHRcdH1cblx0fVxuXG5cdC8vIENob2ljZXMuanMgbXVwdGlscGxlIHNlbGVjdCBwbGFjZWhvbGRlciAoV1AgNS4zIGltcHJvdmVtZW50KS5cblx0aW5wdXQuY2hvaWNlc19faW5wdXQge1xuXHRcdGxpbmUtaGVpZ2h0OiBub3JtYWw7XG5cdH1cblxuXHQvLyBGb2N1cyBzdGF0ZS5cblx0aW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEge1xuXHRcdCY6Zm9jdXMge1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgIzAxNkFBQiAhaW1wb3J0YW50O1xuXHRcdFx0Ym94LXNoYWRvdzogMCAwIDAgMXB4ICMwMTZBQUIgIWltcG9ydGFudDtcblx0XHRcdG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcblx0XHR9XG5cdH1cblxuXHRhOmZvY3VzIHtcblx0XHRib3gtc2hhZG93OiAwIDAgMnB4IDFweCAjMDE2QUFCQ0M7XG5cdH1cbn1cblxuLy8gQWRtaW4gd3JhcCAtIGNvbnRhaW5zIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBoZWFkZXIuXG4ud3Bmb3Jtcy1hZG1pbi13cmFwIHtcblxuXHRtYXJnaW46IDA7XG5cblx0Lm5vdGljZSB7XG5cdFx0bWFyZ2luLWxlZnQ6IDIwcHggIWltcG9ydGFudDtcblx0XHRtYXJnaW4tcmlnaHQ6IDIwcHggIWltcG9ydGFudDtcblx0fVxufVxuXG4vLyBBZG1pbiBjb250ZW50LlxuLndwZm9ybXMtYWRtaW4tY29udGVudCB7XG5cdHBhZGRpbmctbGVmdDogMjBweDtcblx0cGFkZGluZy1yaWdodDogMjBweDtcblxuXHQmOmJlZm9yZSB7XG5cdFx0Y29udGVudDogXCIgXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdH1cblxuXHQmOmFmdGVyIHtcblx0XHRjbGVhcjogYm90aDtcblx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRkaXNwbGF5OiB0YWJsZTtcblx0fVxuXG5cdGhyIHtcblx0XHRib3JkZXI6IG5vbmU7XG5cdFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNlNGU0ZTQ7XG5cdFx0bWFyZ2luOiAyMHB4IDA7XG5cdFx0YmFja2dyb3VuZDogbm9uZTtcblx0fVxufVxuXG4ud3Bmb3Jtcy1jbGVhciB7XG5cblx0JjpiZWZvcmUge1xuXHRcdGNvbnRlbnQ6IFwiIFwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHR9XG5cblx0JjphZnRlciB7XG5cdFx0Y2xlYXI6IGJvdGg7XG5cdFx0Y29udGVudDogXCIgXCI7XG5cdFx0ZGlzcGxheTogdGFibGU7XG5cdH1cbn1cblxuLndwZm9ybXMtYWRtaW4tY29sdW1ucyB7XG5cblx0JiA+IGRpdltjbGFzcyo9XCItY29sdW1uLVwiXSB7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cdH1cblxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tMjAge3dpZHRoOiAyMCV9XG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi0zMyB7d2lkdGg6IDMzLjMzMzMzJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTQwIHt3aWR0aDogNDAlfVxuXHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNTAge3dpZHRoOiA1MCV9XG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi02MCB7d2lkdGg6IDYwJX1cblx0LndwZm9ybXMtYWRtaW4tY29sdW1uLTgwIHt3aWR0aDogODAlfVxuXG5cdC53cGZvcm1zLWFkbWluLWNvbHVtbi1sYXN0IHtmbG9hdDogcmlnaHQgIWltcG9ydGFudH1cblxuXHQmOmFmdGVyIHtcblx0XHRjb250ZW50OiBcIlwiO1xuXHRcdGRpc3BsYXk6IHRhYmxlO1xuXHRcdGNsZWFyOiBib3RoO1xuXHR9XG59XG5cbi5saXR5LWFjdGl2ZSwgLmxpdHktYWN0aXZlIGJvZHkud3Bmb3Jtcy1hZG1pbi1wYWdlIHtcblx0b3ZlcmZsb3c6IHNjcm9sbDtcbn0iLCIvLyBGbHlvdXQgTWVudSBzdHlsZXMuXG5cbiN3cGZvcm1zLWZseW91dCB7XG5cblx0JHN0YXJ0OiA3NXB4O1xuXHQkc3RlcDogNTVweDtcblx0JHRyYW5zOiAwLjJzO1xuXHQkZGVsYXk6IDM1bXM7XG5cblx0cG9zaXRpb246IGZpeGVkO1xuXHR6LWluZGV4OiA5OTk5OTtcblx0dHJhbnNpdGlvbjogYWxsICR0cmFucyBlYXNlLWluLW91dDtcblx0cmlnaHQ6IDQwcHg7XG5cdGJvdHRvbTogNDBweDtcblx0b3BhY2l0eTogMTtcblxuXHRAaW5jbHVkZSBtZWRpYSgnPGRlc2t0b3AnKSB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxuXG5cdC53cGZvcm1zLWZseW91dC1oZWFkIHtcblxuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXG5cdFx0aW1nIHtcblx0XHRcdHdpZHRoOiA1NHB4O1xuXHRcdFx0aGVpZ2h0OiA1NHB4O1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdFx0XHRib3JkZXI6IDNweCBzb2xpZCAjRTE3NzJGO1xuXHRcdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0XHRcdGJveC1zaGFkb3c6IDAgM3B4IDIwcHggcmdiYSgwLDAsMCwuMik7XG5cdFx0XHR0cmFuc2l0aW9uOiBhbGwgJHRyYW5zIGVhc2UtaW4tb3V0O1xuXHRcdH1cblxuXHRcdCY6aG92ZXIgaW1nIHtcblx0XHRcdGJveC1zaGFkb3c6IDAgM3B4IDMwcHggcmdiYSgwLDAsMCwuMjUpO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWZseW91dC1sYWJlbCB7XG5cdFx0XHRvcGFjaXR5OiAwO1xuXHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDApO1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiAtNTBweDtcblx0XHR9XG5cblx0XHQmOmhvdmVyIC53cGZvcm1zLWZseW91dC1sYWJlbCB7XG5cdFx0XHRvcGFjaXR5OiAxO1xuXHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEpO1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiAwO1xuXHRcdH1cblxuXHRcdCY6Zm9jdXMge1xuXHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1mbHlvdXQtbGFiZWwge1xuXHRcdFx0cmlnaHQ6IGNhbGMoMTAwJSArIDE1cHgpO1xuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWZseW91dC1sYWJlbCB7XG5cblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0dG9wOiA1MCU7XG5cdFx0cmlnaHQ6IGNhbGMoMTAwJSArIDI1cHgpO1xuXHRcdHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcblx0XHQtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcblx0XHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcblx0XHRjb2xvcjogI2ZmZjtcblx0XHRiYWNrZ3JvdW5kOiAjNUY1RTVFIDAgMCBuby1yZXBlYXQgcGFkZGluZy1ib3g7XG5cdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdFx0cGFkZGluZzogNXB4IDEwcHg7XG5cdFx0aGVpZ2h0OiBhdXRvIWltcG9ydGFudDtcblx0XHRsaW5lLWhlaWdodDogaW5pdGlhbDtcblx0XHR0cmFuc2l0aW9uOiBhbGwgJHRyYW5zIGVhc2Utb3V0O1xuXHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHQtbW96LWJvcmRlci1yYWRpdXM6IDNweDtcblx0XHQtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcblx0fVxuXG5cdC53cGZvcm1zLWZseW91dC1pdGVtIHtcblxuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRsZWZ0OiAxMHB4O1xuXHRcdHdpZHRoOiA0MHB4O1xuXHRcdGhlaWdodDogNDBweDtcblx0XHRvcGFjaXR5OiAwO1xuXHRcdHZpc2liaWxpdHk6IGhpZGRlbjtcblx0XHR0cmFuc2l0aW9uOiBhbGwgJHRyYW5zIGVhc2UtaW4tb3V0O1xuXHRcdHRyYW5zZm9ybTogc2NhbGUoMCk7XG5cdFx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRcdGJveC1zaGFkb3c6IDAgM3B4IDIwcHggcmdiYSgwLDAsMCwuMik7XG5cdFx0YmFja2dyb3VuZDogIzAzNkFBQiAwIDAgbm8tcmVwZWF0IHBhZGRpbmctYm94O1xuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXG5cdFx0aSB7XG5cdFx0XHRjb2xvcjogI2ZmZmZmZjtcblx0XHRcdGZvbnQtc2l6ZTogMjBweDtcblx0XHRcdGxpbmUtaGVpZ2h0OiA0MHB4O1xuXHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHR9XG5cblx0XHRAZm9yICRpIGZyb20gMCB0aHJvdWdoIDQge1xuXHRcdFx0Ji53cGZvcm1zLWZseW91dC1pdGVtLSN7JGl9IHtcblx0XHRcdFx0Ym90dG9tOiAkc3RhcnQgKyAkaSAqICRzdGVwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCY6aG92ZXIge1xuXG5cdFx0XHRib3gtc2hhZG93OiAwIDNweCAzMHB4IHJnYmEoMCwwLDAsLjI1KTtcblx0XHRcdGJhY2tncm91bmQ6ICMwMDk2RjAgMCAwIG5vLXJlcGVhdCBwYWRkaW5nLWJveDtcblxuXHRcdFx0LndwZm9ybXMtZmx5b3V0LWxhYmVsIHtcblx0XHRcdFx0YmFja2dyb3VuZDogIzQ0NDQ0NCAwIDAgbm8tcmVwZWF0IHBhZGRpbmctYm94O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdCYub3BlbmVkIHtcblxuXHRcdC53cGZvcm1zLWZseW91dC1pdGVtIHtcblx0XHRcdG9wYWNpdHk6IDE7XG5cdFx0XHR2aXNpYmlsaXR5OiB2aXNpYmxlO1xuXHRcdFx0dHJhbnNmb3JtOiBzY2FsZSgxKTtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1mbHlvdXQtaGVhZCB7XG5cblx0XHRcdC53cGZvcm1zLWZseW91dC1sYWJlbCB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0QGZvciAkaSBmcm9tIDAgdGhyb3VnaCA0IHtcblx0XHRcdC53cGZvcm1zLWZseW91dC1pdGVtLSN7JGl9IHtcblx0XHRcdFx0dHJhbnNpdGlvbjogdHJhbnNmb3JtICR0cmFucyAkaSAqICRkZWxheSwgYmFja2dyb3VuZC1jb2xvciAkdHJhbnM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ji5vdXQge1xuXHRcdG9wYWNpdHk6IDA7XG5cdFx0dmlzaWJpbGl0eTogaGlkZGVuO1xuXHR9XG59XG4iLCIvLyBGb3JtIE92ZXJ2aWV3IC0gYWRtaW4ucGhwP3BhZ2U9d3Bmb3Jtcy1vdmVydmlld1xuI3dwZm9ybXMtb3ZlcnZpZXcge1xuXG5cdC8vIFJlbW92ZSB0aGUgdG9wIG1hcmdpbiBzbyBpdCBkaXNwbGF5cyAyMHB4IGJldHdlZW4gdGhlIGhlYWRlciBhcmVhXG5cdC8vIGFuZCB0aGUgY29udGVudCwgY29uc2lzdGVudCB3aXRoIG91ciBvdGhlciBhZG1pbiBwYWdlcy5cblx0LnRhYmxlbmF2LnRvcCB7XG5cdFx0bWFyZ2luLXRvcDogMDtcblx0fVxuXG5cdC8vIFNldCBjZXJ0YWluIGNvbHVtbiB3aWR0aHMuXG5cdC53cC1saXN0LXRhYmxlIHtcblxuXHRcdC5jb2x1bW4taWQge1xuXHRcdFx0d2lkdGg6IDMwcHg7XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1lbnRyaWVzIHtcblx0XHRcdHdpZHRoOiA3MHB4O1xuXHRcdH1cblxuXHRcdC5jb2x1bW4tc2hvcnRjb2RlIHtcblx0XHRcdHdpZHRoOiAxNTBweDtcblx0XHR9XG5cblx0XHQuY29sdW1uLWNyZWF0ZWQge1xuXHRcdFx0d2lkdGg6IDE0NXB4O1xuXHRcdH1cblx0fVxufVxuIiwiLy8gRW50cmllcyBTaW5nbGUgKERldGFpbHMpIC0gYWRtaW4ucGhwP3BhZ2U9d3Bmb3Jtcy1lbnRyaWVzJnZpZXc9ZGV0YWlsc1xuI3dwZm9ybXMtZW50cmllcy1zaW5nbGUge1xuXG5cdCNwb3N0c3R1ZmYge1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cblxuXHQvLyBNZXRhYm94ZXMgYXJlIG5vdCBtb3ZhYmxlIHNvIGRvbid0IGxldCB0aGUgdXNlciB0aGluayBzby5cblx0LnBvc3Rib3ggLmhuZGxlIHtcblx0XHRjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcblx0fVxuXG5cdC8vIEVudHJ5IG5hdmlnYXRpb24gLSBuZXh0L3ByZXYuXG5cdC53cGZvcm1zLWVudHJ5LW5hdmlnYXRpb24ge1xuXHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRsaW5lLWhlaWdodDogMjlweDtcblx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdHBhZGRpbmctdG9wOiAycHg7XG5cdFx0cGFkZGluZy1yaWdodDogMXB4O1xuXHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjw9cGhvbmVcIikge1xuXHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHR9XG5cblx0XHQuYWRkLW5ldy1oMiB7XG5cdFx0XHR0b3A6IGF1dG87XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRwYWRkaW5nOiA0cHggMHB4O1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjw9dGFibGV0XCIpIHtcblx0XHRcdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdFx0fVxuXG5cdFx0XHQuZGFzaGljb25zIHtcblx0XHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdFx0XHRoZWlnaHQ6IGF1dG87XG5cdFx0XHRcdHdpZHRoOiAyOHB4O1xuXHRcdFx0XHRsaW5lLWhlaWdodDogMjlweDtcblx0XHRcdH1cblxuXHRcdFx0Ji5pbmFjdGl2ZSB7XG5cdFx0XHRcdG9wYWNpdHk6IDAuNTtcblx0XHRcdFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XG5cdFx0XHRcdGN1cnNvcjogZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1uYXZpZ2F0aW9uLXRleHQge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiAxMHB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LWN1cnJlbnQge1xuXHRcdFx0dG9wOiBhdXRvO1xuXHRcdFx0bWFyZ2luOiAwIC01cHggMCAtM3B4O1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0cGFkZGluZzogNHB4IDEwcHg7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuXHRcdFx0LXdlYmtpdC1ib3JkZXItcmFkaXVzOiAycHg7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAycHg7XG5cdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdFx0bGluZS1oZWlnaHQ6IDI5cHg7XG5cdFx0XHR0ZXh0LXRyYW5zZm9ybTogY2VudGVyO1xuXHRcdH1cblxuXHR9XG5cblx0Ly8gRW50cnkgZmllbGRzIG1ldGFib3guXG5cdCN3cGZvcm1zLWVudHJ5LWZpZWxkcyB7XG5cblx0XHRoMi5obmRsZSB7XG5cdFx0XHRmb250LXNpemU6IDE4cHg7XG5cblx0XHRcdC5kYXNoaWNvbnMge1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGhlaWdodDogMTZweDtcblx0XHRcdFx0d2lkdGg6IDE2cHg7XG5cdFx0XHRcdG1hcmdpbjogNHB4IDRweCAwIDA7XG5cdFx0XHRcdGNvbG9yOiAkb3JhbmdlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5uby1maWVsZHMge1xuXHRcdFx0cGFkZGluZzogMTJweDtcblx0XHRcdG1hcmdpbjogMDtcblx0XHR9XG5cblx0XHQuaW5zaWRlIHtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdHAge1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHR9XG5cblx0XHRcdC53cGZvcm1zLWVudHJ5LWZpZWxkLW5hbWUge1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiAjZWJmM2ZiO1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggMTJweDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtZW50cnktZmllbGQtdmFsdWUge1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0XHRwYWRkaW5nOiA4cHggMTJweDtcblx0XHRcdH1cblxuXHRcdFx0LmVtcHR5IC53cGZvcm1zLWVudHJ5LWZpZWxkLXZhbHVlIHtcblx0XHRcdFx0Zm9udC1zdHlsZTogaXRhbGljO1xuXHRcdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbXB0eS1maWVsZC10b2dnbGUge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0cGFkZGluZzogNXB4IDAgMDtcblx0XHR9XG5cdH1cblxuXHQvLyBFbnRyeSBOb3RlcyBtZXRhYm94LlxuXHQjd3Bmb3Jtcy1lbnRyeS1ub3RlcyB7XG5cblx0XHQuaW5zaWRlIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZW50cnktbm90ZXMtbmV3IHtcblx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0fVxuXG5cdFx0Zm9ybSB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblxuXHRcdC5idG5zIHtcblx0XHRcdG92ZXJmbG93OiBhdXRvO1xuXHRcdFx0cGFkZGluZzogOHB4IDA7XG5cdFx0fVxuXG5cdFx0Lm5vLW5vdGVzIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDRweCAxMHB4IDhweDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1lbnRyeS1ub3Rlcy1zaW5nbGUge1xuXHRcdFx0cGFkZGluZzogMTBweDtcblx0XHRcdGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTNlMWUzO1xuXG5cdFx0XHRwOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0XHR9XG5cblx0XHRcdCYuZXZlbiB7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmOWY5Zjk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZW50cnktbm90ZXMtYnlsaW5lIHtcblx0XHRcdGNvbG9yOiAjODg4O1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMTBweDtcblxuXHRcdFx0LnNlcCB7XG5cdFx0XHRcdGNvbG9yOiAjZGRkO1xuXHRcdFx0fVxuXG5cdFx0XHQubm90ZXMtdXNlciB7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdH1cblxuXHRcdFx0Lm5vdGUtZGVsZXRlIHtcblx0XHRcdFx0Y29sb3I6ICNhMDA7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuXHRcdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0XHRjb2xvcjogcmVkO1xuXHRcdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEVudHJ5IExvZ3MgbWV0YWJveC5cblx0I3dwZm9ybXMtZW50cnktbG9ncyB7XG5cblx0XHQuaW5zaWRlIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0fVxuXG5cdFx0Zm9ybSB7XG5cdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdH1cblxuXHRcdC5idG5zIHtcblx0XHRcdG92ZXJmbG93OiBhdXRvO1xuXHRcdFx0cGFkZGluZzogOHB4IDA7XG5cdFx0fVxuXG5cdFx0Lm5vLWxvZ3Mge1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogNHB4IDEwcHggOHB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LWxvZ3Mtc2luZ2xlIHtcblx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cdFx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2UzZTFlMztcblxuXHRcdFx0JjpmaXJzdC1vZi10eXBlIHtcblx0XHRcdFx0Ym9yZGVyLXRvcDogMDtcblx0XHRcdH1cblxuXHRcdFx0cDpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHQmLmV2ZW4ge1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWVudHJ5LWxvZ3MtYnlsaW5lIHtcblx0XHRcdGNvbG9yOiAjODg4O1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMTBweDtcblxuXHRcdFx0Lm5vdGVzLXVzZXIge1xuXHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gRW50cnkgRGV0YWlscywgQWN0aW9ucywgYW5kIFBheW1lbnRzLlxuXHQjd3Bmb3Jtcy1lbnRyeS1kZXRhaWxzIC5pbnNpZGUsXG5cdCN3cGZvcm1zLWVudHJ5LXBheW1lbnQgLmluc2lkZSxcblx0I3dwZm9ybXMtZW50cnktYWN0aW9ucyAuaW5zaWRlIHtcblx0XHRtYXJnaW46IDA7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhICB7XG5cdFx0cGFkZGluZzogNnB4IDAgMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBwLFxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIHAge1xuXHRcdHBhZGRpbmc6IDZweCAxMHB4IDhweDtcblx0XHRtYXJnaW46IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEge1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1wYXltZW50LW1ldGEgcCB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG5cdFx0cGFkZGluZzogMTBweDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LXBheW1lbnQtbWV0YSBwOmxhc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWRldGFpbHMtbWV0YSBzdHJvbmcsXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBzdHJvbmcge1xuXHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1kZXRhaWxzLW1ldGEgLmRhc2hpY29ucyxcblx0LndwZm9ybXMtZW50cnktYWN0aW9ucy1tZXRhIC5kYXNoaWNvbnMge1xuXHRcdHBhZGRpbmc6IDAgMnB4IDAgMDtcblx0XHRjb2xvcjogIzgyODc4QTtcblx0XHR0b3A6IC0xcHg7XG5cdFx0bGVmdDogLTFweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHR9XG5cblx0I3dwZm9ybXMtZW50cnktZGV0YWlscyAuc3VibWl0ZGVsZXRlIHtcblx0XHRjb2xvcjogI2EwMDtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0cGFkZGluZzogMXB4IDJweDtcblx0fVxuXG5cdCN3cGZvcm1zLWVudHJ5LWRldGFpbHMgLnN1Ym1pdGRlbGV0ZTpob3ZlciB7XG5cdFx0Y29sb3I6IHJlZDtcblx0fVxuXG5cdC53cGZvcm1zLWVudHJ5LWFjdGlvbnMtbWV0YSBhIHtcblx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdH1cblxuXHQud3Bmb3Jtcy1lbnRyeS1hY3Rpb25zLW1ldGEgYTpob3ZlciB7XG5cdFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cdH1cblxuXHQvLyBFbnRyeSBMb2NhdGlvbi5cblx0I3dwZm9ybXMtZW50cnktZ2VvbG9jYXRpb24ge1xuXG5cdFx0Lmluc2lkZSB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdH1cblxuXHRcdHVsIHtcblx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0bGkge1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRvdmVyZmxvdzogYXV0bztcblxuXHRcdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLW1ldGEge1xuXHRcdFx0d2lkdGg6IDg1cHg7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlZWU7XG5cdFx0XHRwYWRkaW5nOiAxMHB4IDIwcHggMTBweCAxMnB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWdlb2xvY2F0aW9uLXZhbHVlIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBhZGRpbmc6IDEwcHggMTJweCAxMHB4IDIwcHg7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZmxhZyB7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG5cdFx0XHRtYXJnaW4tcmlnaHQ6IDRweDtcblx0XHR9XG5cdH1cbn1cbiIsIi8vIEVudHJpZXMgTGlzdCAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtZW50cmllcyZ2aWV3PWxpc3RcbiN3cGZvcm1zLWVudHJpZXMtbGlzdCB7XG5cblx0LmZvcm0tZGV0YWlscyB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0cGFkZGluZy1ib3R0b206IDE1cHg7XG5cdFx0bWFyZ2luOiAwIDAgMTBweDtcblxuXHRcdC5mb3JtLWRldGFpbHMtc3ViIHtcblx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRmb250LXNpemU6IDEwcHg7XG5cdFx0XHR0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXHRcdFx0bWFyZ2luOiAwIDAgOHB4IDA7XG5cdFx0fVxuXG5cdFx0LmZvcm0tZGV0YWlscy10aXRsZSB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPDEyMDBweFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAxMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5mb3JtLXNlbGVjdG9yIHtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cblx0XHRcdC50b2dnbGUge1xuXHRcdFx0XHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdFx0XHRcdGNvbG9yOiAjNDQ0O1xuXHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cblx0XHRcdFx0Jjpob3Zlcixcblx0XHRcdFx0Ji5hY3RpdmUge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNlM2UzZTM7XG5cdFx0XHRcdFx0b3V0bGluZTogbm9uZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCY6YmVmb3JlIHtcblx0XHRcdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5mb3JtLWxpc3Qge1xuXHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IDAgMnB4IDhweCAwIHJnYmEoMCwwLDAsMC4xKTtcblx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHR0b3A6IDI3cHg7XG5cdFx0XHRcdGxlZnQ6IC0xMDhweDtcblx0XHRcdFx0d2lkdGg6IDIzMHB4O1xuXHRcdFx0XHRwYWRkaW5nOiAxMHB4IDA7XG5cdFx0XHRcdHotaW5kZXg6IDk5OTE7XG5cblx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdGNvbnRlbnQ6IFwiIFwiO1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0XHR0b3A6IC0xMHB4O1xuXHRcdFx0XHRcdGxlZnQ6IDExMHB4O1xuXHRcdFx0XHRcdHdpZHRoOiAwO1xuXHRcdFx0XHRcdGhlaWdodDogMDtcblx0XHRcdFx0XHRib3JkZXItc3R5bGU6IHNvbGlkO1xuXHRcdFx0XHRcdGJvcmRlci13aWR0aDogMCA4cHggMTBweCA4cHg7XG5cdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjZmZmIHRyYW5zcGFyZW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHVsIHtcblx0XHRcdFx0bWF4LWhlaWdodDogMTk2cHg7XG5cdFx0XHRcdG92ZXJmbG93LXg6IGhpZGRlbjtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXG5cdFx0XHRcdGxpIHtcblx0XHRcdFx0XHRsaXN0LXN0eWxlOiBub25lO1xuXHRcdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0XHRmb250LXNpemU6IDEzcHg7XG5cblx0XHRcdFx0XHRhIHtcblx0XHRcdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0XHRcdFx0cGFkZGluZzogNXB4IDE1cHg7XG5cdFx0XHRcdFx0XHRjb2xvcjogIzQ0NDtcblxuXHRcdFx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmZvcm0tZGV0YWlscy1hY3Rpb25zIHtcblx0XHRcdGZsb2F0OiByaWdodDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8MTIwMHB4XCIpIHtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHR9XG5cblx0XHRcdGEge1xuXHRcdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdFx0bWFyZ2luOiAwIDEycHggMCAwO1xuXG5cdFx0XHRcdCY6bGFzdC1vZi10eXBlIHtcblx0XHRcdFx0XHRtYXJnaW46IDBcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5kYXNoaWNvbnMge1xuXHRcdFx0XHRcdHdpZHRoOiAxNnB4O1xuXHRcdFx0XHRcdGhlaWdodDogMTZweDtcblx0XHRcdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZWFyY2guXG5cdC5zZWFyY2gtYm94IHtcblx0XHQud3Bmb3Jtcy1mb3JtLXNlYXJjaC1ib3gtZmllbGQge1xuXHRcdFx0bWF4LXdpZHRoOiAxODBweDtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1mb3JtLXNlYXJjaC1ib3gtY29tcGFyaXNvbiB7XG5cdFx0XHRtYXgtd2lkdGg6IDkwcHg7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuXHRcdFx0bWFyZ2luOiAwIDJweCAwIDA7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZm9ybS1zZWFyY2gtYm94LXRlcm0ge1xuXHRcdFx0bWluLWhlaWdodDogMjhweDtcblx0XHRcdGxpbmUtaGVpZ2h0OiBub3JtYWw7XG5cdFx0XHRtYXJnaW46IDAgMnB4IDAgMDtcblx0XHR9XG5cdH1cblxuXHQvLyBGaWx0ZXJpbmcuXG5cdC53cGZvcm1zLWZpbHRlci1kYXRlIHtcblxuXHRcdC53cGZvcm1zLWZpbHRlci1kYXRlLXNlbGVjdG9yIHtcblx0XHRcdG1pbi1oZWlnaHQ6IDI4cHg7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHRcdG1heC13aWR0aDogMjEwcHg7XG5cdFx0XHRsaW5lLWhlaWdodDogbm9ybWFsO1xuXHRcdH1cblxuXHRcdGJ1dHRvbiB7XG5cdFx0XHRtYXJnaW46IDFweCA4cHggMCAwO1xuXHRcdFx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0XHR9XG5cdH1cblxuXHQvLyBXUCBUYWJsZSBzdHlsaW5nLlxuXHQud3AtbGlzdC10YWJsZSB7XG5cblx0XHQubmV3LWVudHJpZXMtbm90aWZpY2F0aW9uIHRkIHtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRhIHtcblx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0cGFkZGluZzogMTBweDtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Q5ZWRmNztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuY29sdW1uLWluZGljYXRvcnMge1xuXHRcdFx0d2lkdGg6IDM1cHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cblx0XHRcdGE6Zm9jdXMge1xuXHRcdFx0XHQtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1pbmRpY2F0b3JzIC5kYXNoaWNvbnMge1xuXHRcdFx0d2lkdGg6IDE0cHg7XG5cdFx0XHRoZWlnaHQ6IDE0cHg7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRtYXJnaW4tdG9wOiAzcHg7XG5cdFx0fVxuXG5cdFx0LmluZGljYXRvci1zdGFyIC5kYXNoaWNvbnMge1xuXHRcdFx0bWFyZ2luLXJpZ2h0OiA2cHg7XG5cdFx0fVxuXG5cdFx0LmluZGljYXRvci1zdGFyIHtcblx0XHRcdGNvbG9yOiAjZTRlNGU0O1xuXG5cdFx0XHQmOmhvdmVyLFxuXHRcdFx0Ji51bnN0YXIge1xuXHRcdFx0XHRjb2xvcjogJG9yYW5nZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuaW5kaWNhdG9yLXJlYWQge1xuXHRcdFx0Y29sb3I6ICM5ZWRlODQ7XG5cblx0XHRcdCY6aG92ZXIsXG5cdFx0XHQmLnVucmVhZCB7XG5cdFx0XHRcdGNvbG9yOiAjZTRlNGU0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5jb2x1bW4tZGF0ZSB7XG5cdFx0XHR3aWR0aDogMTUwcHg7XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1zdGF0dXMge1xuXHRcdFx0d2lkdGg6IDEyMHB4O1xuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdGhlaWdodDogMTJweDtcblx0XHRcdFx0d2lkdGg6IGF1dG87XG5cdFx0XHRcdG1hcmdpbjogMCAwIDAgM3B4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5jb2x1bW4tcGF5bWVudF90b3RhbCB7XG5cdFx0XHR3aWR0aDogMTAwcHg7XG5cdFx0fVxuXG5cdFx0LmNvbHVtbi1hY3Rpb25zIHtcblx0XHRcdHdpZHRoOiAxMDBweDtcblx0XHR9XG5cblx0XHQuc2VwIHtcblx0XHRcdGNvbG9yOiAjZGRkO1xuXHRcdH1cblxuXHRcdC5kZWxldGU6aG92ZXIge1xuXHRcdFx0Y29sb3I6IHJlZDtcblx0XHR9XG5cdH1cblxuXHQjd3Bmb3Jtcy1lbnRyaWVzLXRhYmxlLWVkaXQtY29sdW1ucyB7XG5cdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdGNvbG9yOiAjY2NjO1xuXG5cdFx0Jjpob3ZlciB7XG5cdFx0XHRjb2xvcjogIzY2Njtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1jaGFydC1ibG9jayB7XG5cdFx0cGFkZGluZzogMTJweCAxMnB4IDAgOHB4O1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2U1ZTVlNTtcblx0XHRtYXJnaW4tdG9wOiAyMHB4O1xuXHRcdGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNCk7XG5cblx0XHQud3Bmb3Jtcy1lcnJvci1uby1kYXRhLWNoYXJ0IHtcblx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHR9XG5cdH1cblxuXHQjd3Bmb3Jtcy1kYXNoLXdpZGdldC1jaGFydC10aXRsZSB7XG5cdFx0bWFyZ2luLWxlZnQ6IC0xMnB4O1xuXHRcdGZvbnQtc2l6ZTogMThweDtcblx0fVxuXG5cdC53cGZvcm1zLWRhc2gtd2lkZ2V0LWJsb2NrOmZpcnN0LWNoaWxkIHtcblx0XHRtYXJnaW4tdG9wOiAwO1xuXHR9XG5cblx0LndwZm9ybXMtZGFzaC13aWRnZXQtcmVzZXQtY2hhcnQge1xuXG5cdFx0Y29sb3I6ICNkODM2Mzg7XG5cdFx0b3BhY2l0eTogMTtcblx0XHR2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207XG5cdFx0bWFyZ2luOiAwIDAgLTFweCAwO1xuXG5cdFx0Jjpob3ZlciB7XG5cdFx0XHRjb2xvcjogI2FkMmIyYztcblx0XHR9XG5cblx0XHQuZGFzaGljb25zIHtcblx0XHRcdGZvbnQtc2l6ZTogMjBweDtcblx0XHRcdGhlaWdodDogMjBweDtcblx0XHRcdHdpZHRoOiAyMHB4O1xuXHRcdH1cblx0fVxuXG5cdCN3cGZvcm1zLWRhc2gtd2lkZ2V0LXRpbWVzcGFuIHtcblx0XHRtYXJnaW46IDVweCAtMTJweCAwIDA7XG5cdH1cblxuXHQjd3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3Jtcy1saXN0LWJsb2NrIHtcblx0XHRvdmVyZmxvdzogdmlzaWJsZTtcblx0fVxuXG5cdCN3cGZvcm1zLWRhc2gtd2lkZ2V0LWZvcm1zLWxpc3QtdGFibGUge1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNlNWU1ZTU7XG5cdFx0Ym94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA0KTtcblxuXHRcdC53cGZvcm1zLWRhc2gtd2lkZ2V0LWZvcm1zLWxpc3QtY29sdW1ucyB7XG5cdFx0XHR0ZCB7XG5cdFx0XHRcdHBhZGRpbmc6IDEycHggMjBweDtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMWUxZTE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGJvZHkge1xuXHRcdFx0Ym9yZGVyLXRvcDogMDtcblx0XHR9XG5cblx0XHR0ciB7XG5cdFx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdH1cblxuXHRcdHRyOmZpcnN0LWNoaWxkIHtcblx0XHRcdGJvcmRlci10b3A6IDA7XG5cblx0XHRcdHRkIHtcblx0XHRcdFx0Ym9yZGVyLXRvcDogMDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0cjpudGgtY2hpbGQoZXZlbikgdGQge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTtcblx0XHR9XG5cblx0XHR0ZCB7XG5cdFx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRcdFx0cGFkZGluZzogMjBweCAyMHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0Ym9yZGVyOiBub25lO1xuXHRcdFx0Y29sb3I6ICM1NTU7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdH1cblxuXHRcdHRyID4gdGQ6bnRoLWNoaWxkKDIpIHtcblx0XHRcdHdpZHRoOiAxODBweDtcblx0XHR9XG5cblx0XHR0ciA+IHRkOm50aC1jaGlsZCgzKSB7XG5cdFx0XHR3aWR0aDogNjBweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHR9XG5cblx0XHR0ciA+IHRkOm50aC1jaGlsZCg0KSB7XG5cdFx0XHR3aWR0aDogOTBweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHR9XG5cblx0XHR0ciA+IHRkOm50aC1jaGlsZCg1KSB7XG5cdFx0XHR3aWR0aDogNjBweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdHBhZGRpbmctdG9wOiAwO1xuXHRcdFx0cGFkZGluZy1ib3R0b206IDA7XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtZGFzaC13aWRnZXQtZm9ybS1hY3RpdmUgdGQ6Zmlyc3QtY2hpbGQge1xuXHRcdFx0Ym9yZGVyLWxlZnQ6IDNweCBzb2xpZCAjMDA3M2FhO1xuXHRcdFx0cGFkZGluZy1sZWZ0OiAxN3B4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWRhc2gtd2lkZ2V0LWZvcm0tYWN0aXZlIC53cGZvcm1zLWRhc2gtd2lkZ2V0LXNpbmdsZS1jaGFydC1idG4ge1xuXHRcdFx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWRhc2gtd2lkZ2V0LWZvcm0tYWN0aXZlIC53cGZvcm1zLWRhc2gtd2lkZ2V0LXJlc2V0LWNoYXJ0IHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuXHRcdFx0Ym9yZGVyOiBub25lO1xuXHRcdFx0YmFja2dyb3VuZDogbm9uZTtcblx0XHRcdG1hcmdpbjogMDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1kYXNoLXdpZGdldC1mb3Jtcy1saXN0LWNvbHVtbnMge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcblx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuXHRcdH1cblxuXHRcdGEge1xuXHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG5cdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWRhc2gtd2lkZ2V0LWZvcm0tdGl0bGUgYSB7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdH1cblx0fVxufVxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3ODJweCkge1xuXG5cdC53cGZvcm1zLWFkbWluLWNvbnRlbnQge1xuXHRcdHBhZGRpbmctbGVmdDogMTBweDtcblx0XHRwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuXHR9XG5cblx0LndwLWxpc3QtdGFibGUge1xuXHRcdG1hcmdpbjogMCAtMTBweCAwIC0xMHB4O1xuXHRcdHdpZHRoOiAxMDB2dztcblx0XHR0YWJsZS1sYXlvdXQ6IGF1dG87XG5cdH1cblxuXHQud3AtbGlzdC10YWJsZS5lbnRyaWVzIHtcblxuXHRcdC5jb2x1bW4taW5kaWNhdG9ycyB7XG5cdFx0XHR3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuXHRcdH1cblxuXHRcdC5pbmRpY2F0b3JzIHtcblx0XHRcdC5pbmRpY2F0b3Itc3RhciB7XG5cdFx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0XHR9XG5cdFx0XHQuaW5kaWNhdG9yLXJlYWQge1xuXHRcdFx0XHRkaXNwbGF5OiBub25lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRyOm5vdCguaW5saW5lLWVkaXQtcm93KTpub3QoLm5vLWl0ZW1zKSB0ZC5jb2x1bW4tcHJpbWFyeSB7XG5cdFx0XHRoZWlnaHQ6IDhweDtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHR6LWluZGV4OiArMTtcblx0XHRcdG1hcmdpbi1yaWdodDogMDtcblx0XHRcdG92ZXJmbG93OiB2aXNpYmxlO1xuXHRcdH1cblxuXHRcdC50b2dnbGUtcm93IHtcblx0XHRcdHJpZ2h0OiA1cHg7XG5cdFx0XHR0b3A6IDE1cHg7XG5cdFx0fVxuXG5cdFx0dHI6bm90KC5pbmxpbmUtZWRpdC1yb3cpOm5vdCgubm8taXRlbXMpIHRkLmNvbHVtbi1wcmltYXJ5K3RkIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG5cdFx0fVxuXG5cdFx0dHI6bm90KC5pbmxpbmUtZWRpdC1yb3cpOm5vdCgubm8taXRlbXMpIHRkLmNvbHVtbi1wcmltYXJ5fnRkIHtcblx0XHRcdG1hcmdpbi1yaWdodDogNXB4O1xuXHRcdFx0bWluLXdpZHRoOiA1MHZ3O1xuXHRcdH1cblxuXG5cdH1cblxuXHRwLnNlYXJjaC1ib3gge1xuXHRcdG1hcmdpbjogMDtcblx0XHR3aWR0aDogYXV0bztcblx0fVxuXG5cdGlucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSB7XG5cdFx0aGVpZ2h0OiAxNnB4O1xuXHRcdHdpZHRoOiAxNnB4O1xuXHR9XG5cbn1cblxuLy8gUlRMIHN1cHBvcnQuXG5ib2R5LnJ0bCB7XG5cdCN3cGZvcm1zLWVudHJpZXMtbGlzdCB7XG5cdFx0LndwLWxpc3QtdGFibGUge1xuXHRcdFx0ZGl2W2RhdGEtZmllbGQtdHlwZT1cInBob25lXCJdIHtcblx0XHRcdFx0ZGlyZWN0aW9uOiBsdHI7XG5cdFx0XHRcdHVuaWNvZGUtYmlkaTogZW1iZWQ7XG5cdFx0XHRcdHRleHQtYWxpZ246IHJpZ2h0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIiwiLy8gV2VsY29tZSBBY3RpdmF0aW9uIC0gaW5kZXgucGhwP3BhZ2U9d3Bmb3Jtcy1nZXR0aW5nLXN0YXJ0ZWRcbiN3cGZvcm1zLXdlbGNvbWUge1xuXHRib3JkZXItdG9wOiAzcHggc29saWQgJG9yYW5nZTtcblx0Y29sb3I6ICM1NTU7XG5cdHBhZGRpbmctdG9wOiAxMTBweDtcblxuXHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRwYWRkaW5nLXRvcDogNjRweDtcblx0fVxuXG5cdCosXG5cdCo6OmJlZm9yZSxcblx0Kjo6YWZ0ZXIge1xuXHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHQtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0fVxuXG5cdC5jb250YWluZXIge1xuXHRcdG1hcmdpbjogMCBhdXRvO1xuXHRcdG1heC13aWR0aDogNzIwcHg7XG5cdFx0cGFkZGluZzogMDtcblx0fVxuXG5cdC5ibG9jayB7XG5cdFx0cGFkZGluZzogNDBweDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0cGFkZGluZzogMjBweDtcblx0XHR9XG5cdH1cblxuXHRpbWcge1xuXHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRoZWlnaHQ6IGF1dG87XG5cdH1cblxuXHRoMSB7XG5cdFx0Y29sb3I6ICMyMjI7XG5cdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRtYXJnaW46IDAgMCAxNnB4IDA7XG5cdH1cblxuXHRoNSB7XG5cdFx0Y29sb3I6ICMyMjI7XG5cdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdG1hcmdpbjogMCAwIDhweCAwO1xuXHR9XG5cblx0aDYge1xuXHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRmb250LXdlaWdodDogNDAwO1xuXHRcdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdG1hcmdpbjogMDtcblx0fVxuXG5cdHAge1xuXHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdH1cblxuXHQuYnV0dG9uLXdyYXAge1xuXHRcdG1heC13aWR0aDogNTkwcHg7XG5cdFx0bWFyZ2luOiAwIGF1dG8gMCBhdXRvO1xuXG5cdFx0LmxlZnQge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQucmlnaHQge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdFx0d2lkdGg6IDUwJTtcblx0XHRcdHBhZGRpbmctbGVmdDogMjBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZzogMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuaW50cm8ge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItcmFkaXVzOiAycHg7XG5cdFx0bWFyZ2luLWJvdHRvbTogMzBweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0cGFkZGluZy10b3A6IDQwcHg7XG5cblx0XHQuc3VsbGllIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRcdFx0aGVpZ2h0OiAxMTBweDtcblx0XHRcdHdpZHRoOiAxMTBweDtcblx0XHRcdHBhZGRpbmc6IDE4cHggMTRweCAwIDE0cHg7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IC01OHB4O1xuXHRcdFx0bGVmdDogNTAlO1xuXHRcdFx0bWFyZ2luLWxlZnQ6IC01NXB4O1xuXHRcdH1cblxuXHRcdC52aWRlby10aHVtYm5haWwge1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRtYXJnaW46IDAgYXV0bztcblx0XHR9XG5cblx0XHQuYnV0dG9uLXdyYXAge1xuXHRcdFx0bWFyZ2luLXRvcDogMjVweDtcblx0XHR9XG5cdH1cblxuXHQuZmVhdHVyZXMge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwO1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRwYWRkaW5nLXRvcDogMjBweDtcblx0XHRwYWRkaW5nLWJvdHRvbTogMjBweDtcblxuXHRcdC5mZWF0dXJlLWxpc3Qge1xuXHRcdFx0bWFyZ2luLXRvcDogNjBweDtcblx0XHR9XG5cblx0XHQuZmVhdHVyZS1ibG9jayB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRwYWRkaW5nLWJvdHRvbTogMzVweDtcblx0XHRcdG92ZXJmbG93OiBhdXRvO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0fVxuXG5cdFx0XHQmLmZpcnN0IHtcblx0XHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblx0XHRcdFx0Y2xlYXI6IGJvdGg7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0cGFkZGluZy1yaWdodDogMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQmLmxhc3Qge1xuXHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDIwcHg7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0XHRtYXgtd2lkdGg6IDQ2cHg7XG5cdFx0XHR9XG5cblx0XHRcdGg1IHtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDY4cHhcblx0XHRcdH1cblxuXHRcdFx0cCB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0bWFyZ2luLWxlZnQ6IDY4cHhcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuYnV0dG9uLXdyYXAge1xuXHRcdFx0bWFyZ2luLXRvcDogMjVweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHR9XG5cdH1cblxuXHQudXBncmFkZS1jdGEge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICMwMDA7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0XHRib3JkZXItdG9wOiAwO1xuXHRcdGJvcmRlci1ib3R0b206IDA7XG5cdFx0Y29sb3I6ICNmZmY7XG5cblx0XHRoMiB7XG5cdFx0XHRjb2xvcjogI2ZmZjtcblx0XHRcdGZvbnQtc2l6ZTogMjBweDtcblx0XHRcdG1hcmdpbjogMCAwIDMwcHggMDtcblx0XHR9XG5cblx0XHR1bCB7XG5cdFx0XHRkaXNwbGF5OiAtbXMtZmxleDtcblx0XHRcdGRpc3BsYXk6IC13ZWJraXQtZmxleDtcblx0XHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0XHQtd2Via2l0LWZsZXgtd3JhcDogd3JhcDtcblx0XHRcdGZsZXgtd3JhcDogd3JhcDtcblx0XHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDA7XG5cblx0XHRcdGxpIHtcblx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDhweCAwO1xuXHRcdFx0XHRwYWRkaW5nOiAwO1xuXG5cdFx0XHRcdC5kYXNoaWNvbnMge1xuXHRcdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHRcdFx0bWFyZ2luLXJpZ2h0OiA1cHg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQubGVmdCB7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdHdpZHRoOiA2Ni42NjY2NjYlO1xuXHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0cGFkZGluZy1yaWdodDogMDtcblx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQucmlnaHQge1xuXHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXHRcdFx0d2lkdGg6IDMzLjMzMzMzMyU7XG5cdFx0XHRwYWRkaW5nOiAyMHB4IDAgMCAyMHB4O1xuXHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDA7XG5cdFx0XHR9XG5cblx0XHRcdGgyIHtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdFx0c3BhbiB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNTU1O1xuXHRcdFx0XHRcdHBhZGRpbmc6IDAgMTVweCAxMnB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5wcmljZSB7XG5cdFx0XHRcdHBhZGRpbmc6IDI2cHggMDtcblxuXHRcdFx0XHQuYW1vdW50IHtcblx0XHRcdFx0XHRmb250LXNpemU6IDQ4cHg7XG5cdFx0XHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG5cdFx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdFx0Y29udGVudDogJyQnO1xuXHRcdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdFx0dG9wOiAtOHB4O1xuXHRcdFx0XHRcdFx0bGVmdDogLTE2cHg7XG5cdFx0XHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0LnRlcm0ge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblxuXHR9XG5cblx0LnRlc3RpbW9uaWFscyB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDJweCBzb2xpZCAjZTFlMWUxO1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdFx0cGFkZGluZzogMjBweCAwO1xuXG5cdFx0LnRlc3RpbW9uaWFsLWJsb2NrIHtcblx0XHRcdG1hcmdpbjogNTBweCAwIDAgMDs7XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDUwJTtcblx0XHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRcdG1heC13aWR0aDogMTAwcHg7XG5cdFx0XHRcdGJveC1zaGFkb3c6IDAgMCAxOHB4IHJnYmEoMCwwLDAsLjIpO1xuXG5cdFx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHRcdHdpZHRoOiA2NXB4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHAge1xuXHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdG1hcmdpbjogMCAwIDEycHggMTQwcHg7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0bWFyZ2luLWxlZnQ6IDEwMHB4O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQuZm9vdGVyIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmMWYxO1xuXHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0XHRib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcblx0fVxuXG5cdC8vIENoYW5nZXMgZm9yIHBhaWQgdmVyc2lvbi5cblx0Ji5wcm8ge1xuXG5cdFx0LmZlYXR1cmVzIHtcblx0XHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAzMHB4O1xuXHRcdH1cblxuXHRcdC51cGdyYWRlLFxuXHRcdC5mb290ZXIge1xuXHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHR9XG5cblx0XHQudGVzdGltb25pYWxzIHtcblx0XHRcdGJvcmRlcjogMnB4IHNvbGlkICNlMWUxZTE7XG5cdFx0fVxuXHR9XG59XG5cbi5kYXNoYm9hcmRfcGFnZV93cGZvcm1zLWdldHRpbmctc3RhcnRlZCB7XG5cblx0LnZpZGVvLWNvbnRhaW5lciB7XG5cdFx0Ym9yZGVyOiAycHggc29saWQgI2UxZTFlMTtcblx0fVxuXG5cdC8vIEhpZGUgYWRtaW4gZm9vdGVyLlxuXHQjd3Bmb290ZXIsXG5cdGRpdi5ub3RpY2Uge1xuXHRcdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblx0fVxufVxuIiwiLy8gQWRkb25zIExpc3QgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWFkZG9uc1xuI3dwZm9ybXMtYWRtaW4tYWRkb25zIHtcblxuXHQqLFxuXHQqOjpiZWZvcmUsXG5cdCo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHQuYWRkb25zLWNvbnRhaW5lciB7XG5cdFx0bWFyZ2luLWxlZnQ6IC0yMHB4O1xuXHRcdG1hcmdpbi1yaWdodDogLTIwcHg7XG5cdH1cblxuXHQudW5sb2NrLW1zZyB7XG5cdFx0cGFkZGluZzogMCAyMHB4O1xuXHRcdG1hcmdpbi10b3A6IC0yMHB4O1xuXHRcdGNsZWFyOiBib3RoO1xuXHR9XG5cblx0I3dwZm9ybXMtYWRtaW4tYWRkb25zLXNlYXJjaCB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdGNvbG9yOiAjMzMzO1xuXHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0cGFkZGluZzogN3B4IDEycHg7XG5cdFx0bWFyZ2luOiAtM3B4IDEwcHggMCAwO1xuXHRcdHdpZHRoOiAyMDBweDtcblx0XHRtaW4taGVpZ2h0OiAzNXB4O1xuXHRcdGZsb2F0OiByaWdodDtcblxuXHRcdCY6Zm9jdXMge1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjYmJiO1xuXHRcdH1cblx0fVxuXG5cdC5hZGRvbi1jb250YWluZXIge1xuXHRcdHBhZGRpbmc6IDAgMjBweDtcblx0XHRmbG9hdDogbGVmdDtcblx0XHR3aWR0aDogMzMuMzMzMzMzJTtcblx0XHRtYXJnaW4tYm90dG9tOiAyMHB4O1xuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8MTI1MHB4XCIpIHtcblx0XHRcdHdpZHRoOiA1MCU7XG5cdFx0fVxuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdG1hcmdpbi1ib3R0b206IDIwcHg7XG5cdFx0fVxuXHR9XG5cblx0aDQge1xuXHRcdGZvbnQtc2l6ZTogMTdweDtcblx0XHRmb250LXdlaWdodDogNzAwO1xuXHR9XG5cblx0LmFkZG9uLWl0ZW0ge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0bWFyZ2luOiAwO1xuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRtYXJnaW46IDAgMFxuXHRcdH1cblxuXHRcdGltZyB7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZWVlO1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRtYXgtd2lkdGg6IDc1cHg7XG5cdFx0fVxuXG5cdFx0aDUge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTBweCAxMDBweDtcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHR9XG5cblx0XHRwIHtcblx0XHRcdG1hcmdpbjogMCAwIDAgMTAwcHg7XG5cdFx0fVxuXG5cdFx0LmRldGFpbHMge1xuXHRcdFx0cGFkZGluZzogMzBweCAyMHB4O1xuXG5cdFx0fVxuXG5cdFx0LmFjdGlvbnMge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNztcblx0XHRcdGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0cGFkZGluZzogMjBweDtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdFx0Lm1zZyB7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7XG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0XHR0b3A6IDA7XG5cdFx0XHRcdGxlZnQ6IDA7XG5cdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHotaW5kZXg6IDk5O1xuXHRcdFx0XHRwYWRkaW5nOiAyMHB4O1xuXHRcdFx0XHRkaXNwbGF5OiAtd2Via2l0LWJveDtcblx0XHRcdFx0ZGlzcGxheTogLW1vei1ib3g7XG5cdFx0XHRcdGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuXHRcdFx0XHRkaXNwbGF5OiAtd2Via2l0LWZsZXg7XG5cdFx0XHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0XHRcdC13ZWJraXQtYWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRcdFx0LW1zLWFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0XHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0XHRcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG5cdFx0XHRcdCYuc3VjY2VzcyB7XG5cdFx0XHRcdFx0Y29sb3I6ICRncmVlbjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuZXJyb3Ige1xuXHRcdFx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQuc3RhdHVzIHtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0cGFkZGluZy10b3A6IDhweDtcblxuXHRcdFx0LnN0YXR1cy1pbmFjdGl2ZSB7XG5cdFx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC5zdGF0dXMtZG93bmxvYWQge1xuXHRcdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdH1cblxuXHRcdFx0LnN0YXR1cy1hY3RpdmUge1xuXHRcdFx0XHRjb2xvcjogJGdyZWVuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC51cGdyYWRlLWJ1dHRvbiB7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cblx0XHRcdGEge1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0XHR3aWR0aDogMTQwcHg7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0cGFkZGluZzogOHB4IDVweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuYWN0aW9uLWJ1dHRvbiB7XG5cdFx0XHRmbG9hdDogcmlnaHQ7XG5cblx0XHRcdGJ1dHRvbiB7XG5cdFx0XHRcdGJhY2tncm91bmQ6IG5vbmU7XG5cdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0XHR3aWR0aDogMTQwcHg7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdFx0cGFkZGluZzogOHB4IDVweDtcblxuXHRcdFx0XHQmOmhvdmVyLFxuXHRcdFx0XHQmLmxvYWRpbmcge1xuXHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQuZmEge1xuXHRcdFx0XHRcdG1hcmdpbi1yaWdodDogOHB4O1xuXG5cdFx0XHRcdFx0Ji5mYS1zcGlubmVyIHtcblx0XHRcdFx0XHRcdG1hcmdpbi1yaWdodDogMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLnN0YXR1cy1hY3RpdmUge1xuXG5cdFx0XHRcdFx0LmZhIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAkZ3JlZW47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5zdGF0dXMtaW5hY3RpdmUge1xuXG5cdFx0XHRcdFx0LmZhIHtcblx0XHRcdFx0XHRcdGNvbG9yOiByZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5zdGF0dXMtZG93bmxvYWQge1xuXG5cdFx0XHRcdFx0LmZhIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYuZGlzYWJsZWQge1xuXHRcdFx0XHRcdGN1cnNvcjogZGVmYXVsdDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCYubG9hZGluZyB7XG5cblx0XHRcdFx0XHQuZmEge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBBYm91dCBXUEZvcm1zIC0gYWRtaW4ucGhwP3BhZ2U9d3Bmb3Jtcy1hYm91dFxuXG4kcGFkZGluZy1kZWZhdWx0OiAzMHB4O1xuJGJvcmRlcjogMXB4IHNvbGlkICNEREREREQ7XG5cbi8vIEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuLy8gXHR3aWR0aDogNTAlO1xuLy8gfVxuXG4vKlxuJ3hzLXBob25lJzogMzIwcHgsXG5cdCdwaG9uZSc6IDYwMHB4LFxuXHQnaXBhZCc6IDc2OHB4LFxuXHQndGFibGV0JzogNzgycHgsXG5cdCdkZXNrdG9wJzogOTYwcHgsXG4qL1xuXG4jd3Bmb3Jtcy1hZG1pbi1hYm91dCB7XG5cblx0KiwgKjo6YmVmb3JlLCAqOjphZnRlciB7XG5cdFx0LXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cblx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbiB7XG5cdFx0bWFyZ2luOiAwIDIwcHggMjBweDtcblx0XHRwYWRkaW5nOiAkcGFkZGluZy1kZWZhdWx0O1xuXHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0Ym9yZGVyOiAkYm9yZGVyO1xuXHRcdGxpbmUtaGVpZ2h0OiAyO1xuXG5cdFx0aDEsIGgyLCBoMywgaDQsIGg1IHtcblx0XHRcdG1hcmdpbi10b3A6IDA7XG5cdFx0XHRwYWRkaW5nLXRvcDogMDtcblx0XHRcdGxpbmUtaGVpZ2h0OiAxLjY7XG5cdFx0fVxuXG5cdFx0aDIge1xuXHRcdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdH1cblxuXHRcdGgzIHtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHRcdG1hcmdpbi1ib3R0b206IDMwcHg7XG5cdFx0XHRjb2xvcjogIzIzMjgyQztcblx0XHR9XG5cblx0XHR1bCwgcCB7XG5cdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0fVxuXG5cdFx0cCB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAyMHB4O1xuXG5cdFx0XHQmLmJpZ2dlcntcblx0XHRcdFx0Zm9udC1zaXplOiAxOHB4O1xuXHRcdFx0fVxuXHRcdFx0Ji5zbWFsbGVyIHtcblx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0fVxuXG5cdFx0XHQmOmxhc3QtY2hpbGQge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGhyIHtcblx0XHRcdG1hcmdpbjogJHBhZGRpbmctZGVmYXVsdCAwO1xuXHRcdH1cblxuXHRcdGZpZ3VyZSB7XG5cdFx0XHRtYXJnaW46IDA7XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaWdjYXB0aW9uIHtcblx0XHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0XHRjb2xvcjogIzg4ODg4ODtcblx0XHRcdFx0bWFyZ2luLXRvcDogNXB4O1xuXHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRcdGxpbmUtaGVpZ2h0OiBpbml0aWFsO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWNvbHVtbi00MCB7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLWRlZmF1bHQvMjtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDA7XG5cdFx0XHRcdHBhZGRpbmctdG9wOiAyMHB4O1xuXHRcdFx0fVxuXHRcdH1cblx0XHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tNjAge1xuXHRcdFx0cGFkZGluZy1yaWdodDogJHBhZGRpbmctZGVmYXVsdC8yO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxpcGFkXCIpIHtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHBhZGRpbmctcmlnaHQ6IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dWwubGlzdC1wbGFpbiB7XG5cdFx0XHRtYXJnaW4tdG9wOiAwO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblxuXHRcdFx0bGkge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHVsLmxpc3QtZmVhdHVyZXMge1xuXHRcdFx0bGkgLmZhIHtcblx0XHRcdFx0Y29sb3I6ICMyYTliMzk7XG5cdFx0XHRcdG1hcmdpbjogMCA4cHggMCAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5mYS1zdGFyIHtjb2xvcjogZ29sZH1cblxuXHRcdC5uby1tYXJnaW4ge21hcmdpbjogMCAhaW1wb3J0YW50fVxuXHRcdC5uby1wYWRkaW5nIHtwYWRkaW5nOiAwICFpbXBvcnRhbnR9XG5cdFx0LmNlbnRlcmVkIHt0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudH1cblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24tZmlyc3QtZm9ybSB7XG5cdFx0ZGlzcGxheTogZmxleDtcblxuXHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0ZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWZpcnN0LWZvcm0tdGV4dCB7XG5cdFx0XHRmbGV4OiAxO1xuXHRcdFx0cGFkZGluZy1yaWdodDogJHBhZGRpbmctZGVmYXVsdDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdGZsZXg6IG5vbmU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1maXJzdC1mb3JtLXZpZGVvIHtcblx0XHRcdGlmcmFtZSB7XG5cdFx0XHRcdGJvcmRlcjogJGJvcmRlcjtcblx0XHRcdH1cblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdHBhZGRpbmctdG9wOiAyMHB4O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24taGVybyB7XG5cdFx0cGFkZGluZzogMDtcblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24taGVyby1tYWluLFxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24taGVyby1leHRyYSB7XG5cdFx0XHRwYWRkaW5nOiAkcGFkZGluZy1kZWZhdWx0O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWFib3V0LXNlY3Rpb24taGVyby1leHRyYSB7XG5cblx0XHRcdC53cGZvcm1zLWFkbWluLWNvbHVtbi01MCB7XG5cblx0XHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8tbWFpbiB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGQUZBO1xuXHRcdFx0Ym9yZGVyLWJvdHRvbTogJGJvcmRlcjtcblxuXHRcdFx0Ji5uby1ib3JkZXIge1xuXHRcdFx0XHRib3JkZXItYm90dG9tOiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRwIHtcblx0XHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aDMuY2FsbC10by1hY3Rpb24ge1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogLTEwcHg7XG5cdFx0fVxuXG5cdFx0c3Bhbi5wcmljZS0yMC1vZmYge1xuXHRcdFx0Y29sb3I6ICM2QUIyNTU7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1zcXVhc2hlZCB7XG5cdFx0bWFyZ2luLWJvdHRvbTogMDtcblxuXHRcdCY6bm90KDpsYXN0LW9mLXR5cGUpIHtcblx0XHRcdGJvcmRlci1ib3R0b206IDA7XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1wb3N0IHtcblxuXHRcdGgyIHtcblx0XHRcdG1hcmdpbi1ib3R0b206IC0xMHB4O1xuXHRcdH1cblxuXHRcdGgzIHtcblx0XHRcdG1hcmdpbi1ib3R0b206IDE1cHg7XG5cdFx0fVxuXG5cdFx0cDpsYXN0LW9mLXR5cGUge1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMzBweDtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tMjAge1xuXHRcdFx0cGFkZGluZy1yaWdodDogMjBweDtcblx0XHRcdHdpZHRoOiBhdXRvO1xuXG5cdFx0XHRpbWcge1xuXHRcdFx0XHR3aWR0aDogMjcwcHg7XG5cdFx0XHR9XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPGlwYWRcIikge1xuXHRcdFx0XHR3aWR0aDogMjAlO1xuXHRcdFx0XHRpbWcge1xuXHRcdFx0XHRcdHdpZHRoOiBhdXRvO1xuXHRcdFx0XHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC53cGZvcm1zLWFkbWluLWNvbHVtbi04MCB7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6IDIwcHg7XG5cdFx0XHR3aWR0aDogY2FsYygxMDAlIC0gMjBweCAtIDI3MHB4KTtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8aXBhZFwiKSB7XG5cdFx0XHRcdHdpZHRoOiA4MCU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi1wb3N0LWxpbmsge1xuXHRcdFx0cGFkZGluZzogMTBweCAkcGFkZGluZy1kZWZhdWx0LzI7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjREY3NzM5O1xuXHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cdFx0XHRtYXJnaW4tdG9wOiAxNXB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXG5cdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI0I4NUExQjtcblx0XHRcdH1cblxuXHRcdFx0LmZhIHtcblx0XHRcdFx0Y29sb3I6ICNFREJBOUU7XG5cdFx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRcdG1hcmdpbi1sZWZ0OiA4cHg7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LndwZm9ybXMtYWRtaW4tYWJvdXQtc2VjdGlvbi10YWJsZSB7XG5cblx0XHR0YWJsZSB7XG5cdFx0XHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuXG5cdFx0XHR0ciB7XG5cdFx0XHRcdHRkIHtcblx0XHRcdFx0XHRib3JkZXItYm90dG9tOiAkYm9yZGVyO1xuXHRcdFx0XHRcdGJvcmRlci1yaWdodDogJGJvcmRlcjtcblx0XHRcdFx0XHRwYWRkaW5nOiAkcGFkZGluZy1kZWZhdWx0O1xuXHRcdFx0XHRcdHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cblx0XHRcdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdFx0XHRib3JkZXItcmlnaHQ6IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0JjpsYXN0LWNoaWxkIHRkIHtcblx0XHRcdFx0XHRib3JkZXItYm90dG9tOiBub25lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHAge1xuXHRcdFx0XHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuXHRcdFx0XHRiYWNrZ3JvdW5kLXNpemU6IDE1cHggYXV0bztcblx0XHRcdFx0YmFja2dyb3VuZC1wb3NpdGlvbjogMCA2cHg7XG5cdFx0XHRcdG1hcmdpbjogMDtcblxuXHRcdFx0XHQmLmZlYXR1cmVzLWZ1bGwge1xuXHRcdFx0XHRcdHBhZGRpbmctbGVmdDogJHBhZGRpbmctZGVmYXVsdDtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2Fib3V0L2ljb24tZnVsbC5zdmcpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCYuZmVhdHVyZXMtbm9uZSB7XG5cdFx0XHRcdFx0cGFkZGluZy1sZWZ0OiAkcGFkZGluZy1kZWZhdWx0O1xuXHRcdFx0XHRcdGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvYWJvdXQvaWNvbi1ub25lLnN2Zyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ji5mZWF0dXJlcy1wYXJ0aWFsIHtcblx0XHRcdFx0XHRwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1wb3NpdGlvbjogLTNweCAwO1xuXHRcdFx0XHRcdGJhY2tncm91bmQtc2l6ZTogMjNweCBhdXRvO1xuXHRcdFx0XHRcdGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvYWJvdXQvaWNvbi1wYXJ0aWFsLnN2Zyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1hZG1pbi1hYm91dC1zZWN0aW9uLWhlcm8tbWFpbiB7XG5cdFx0XHRwYWRkaW5nOiAwO1xuXHRcdFx0aDMge1xuXHRcdFx0XHRwYWRkaW5nOiAkcGFkZGluZy1kZWZhdWx0ICRwYWRkaW5nLWRlZmF1bHQgJHBhZGRpbmctZGVmYXVsdCAkcGFkZGluZy1kZWZhdWx0KjI7XG5cdFx0XHR9XG5cdFx0XHQud3Bmb3Jtcy1hZG1pbi1jb2x1bW4tMzM6Zmlyc3QtY2hpbGQgaDMge1xuXHRcdFx0XHRwYWRkaW5nOiAkcGFkZGluZy1kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdCN3cGZvcm1zLWFkbWluLWFkZG9ucyB7XG5cdFx0cGFkZGluZzogMCAkcGFkZGluZy1kZWZhdWx0O1xuXG5cdFx0LmFkZG9uLWNvbnRhaW5lciB7XG5cdFx0XHRwYWRkaW5nOiAwIDEwcHg7XG5cdFx0fVxuXG5cdFx0LmFkZG9uLWl0ZW0ge1xuXG5cdFx0XHQuZGV0YWlscyB7XG5cdFx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cdFx0XHR9XG5cblx0XHRcdGltZyB7XG5cdFx0XHRcdHBhZGRpbmc6IDEwcHg7XG5cblx0XHRcdFx0JltzcmMqPVwiLW1pXCJdIHtcblx0XHRcdFx0XHRwYWRkaW5nOiAxM3B4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC5hY3Rpb24tYnV0dG9uIC5idXR0b24ge1xuXHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblx0XHRcdFx0Zm9udC1zaXplOiAxM3B4O1xuXHRcdFx0XHRsaW5lLWhlaWdodDogMjZweDtcblx0XHRcdFx0aGVpZ2h0OiAyOHB4O1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRcdHBhZGRpbmc6IDAgMTBweCAxcHg7XG5cdFx0XHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRcdFx0LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuXHRcdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNjY2NjY2M7XG5cdFx0XHRcdGJhY2tncm91bmQ6ICNmN2Y3Zjc7XG5cdFx0XHRcdGJveC1zaGFkb3c6IDAgMXB4IDAgI2NjY2NjYztcblx0XHRcdFx0Zm9udC13ZWlnaHQ6IG5vcm1hbDtcblxuXHRcdFx0XHQmOmhvdmVyLCAmOmZvY3VzICB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogI2ZhZmFmYTtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6ICM5OTk7XG5cdFx0XHRcdFx0Y29sb3I6ICMyMzI4MmQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQmLmJ1dHRvbi1wcmltYXJ5IHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjMDA4NWJhO1xuXHRcdFx0XHRcdGJvcmRlci1jb2xvcjogIzAwNzNhYSAjMDA2Nzk5ICMwMDY3OTk7XG5cdFx0XHRcdFx0Ym94LXNoYWRvdzogMCAxcHggMCAjMDA2Nzk5O1xuXHRcdFx0XHRcdGNvbG9yOiAjZmZmO1xuXHRcdFx0XHRcdHRleHQtc2hhZG93OiAwIC0xcHggMXB4ICMwMDY3OTksIDFweCAwIDFweCAjMDA2Nzk5LCAwIDFweCAxcHggIzAwNjc5OSwgLTFweCAwIDFweCAjMDA2Nzk5O1xuXG5cdFx0XHRcdFx0Jjpob3ZlciwgJjpmb2N1cyB7XG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjMDA4ZWMyO1xuXHRcdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjMDA2Nzk5O1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LmZhLXNwaW5uZXIge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5idXR0b24tc2Vjb25kYXJ5IHtcblx0XHRcdFx0XHRjb2xvcjogIzU1NTtcblx0XHRcdFx0XHRib3JkZXItY29sb3I6ICNjY2NjY2M7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogI2Y3ZjdmNztcblx0XHRcdFx0XHRib3gtc2hhZG93OiAwIDFweCAwICNjY2NjY2M7XG5cblx0XHRcdFx0XHQmOmhvdmVyLCAmOmZvY3VzICB7XG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuXHRcdFx0XHRcdFx0Ym9yZGVyLWNvbG9yOiAjOTk5O1xuXHRcdFx0XHRcdFx0Y29sb3I6ICMyMzI4MmQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ji5kaXNhYmxlZCB7XG5cdFx0XHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBDb21tdW5pdHkgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLWNvbW11bml0eVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTI1MHB4KSB7XG5cdCN3cGZvcm1zLWFkbWluLWNvbW11bml0eSAuaXRlbSB7XG5cdFx0d2lkdGg6IGNhbGMoMzMuMzMzMzMzMyUgLSAxMy4zMzMzMzMzcHgpO1xuXG5cdFx0JjpudGgtY2hpbGQoM24pIHtcblx0XHRcdG1hcmdpbi1yaWdodDogMDtcblx0XHR9XG5cdH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEyNDlweCkge1xuXHQjd3Bmb3Jtcy1hZG1pbi1jb21tdW5pdHkgLml0ZW0ge1xuXHRcdHdpZHRoOiBjYWxjKDUwJSAtIDEwcHgpO1xuXG5cdFx0JjpudGgtY2hpbGQoMm4pIHtcblx0XHRcdG1hcmdpbi1yaWdodDogMDtcblx0XHR9XG5cdH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG5cdCN3cGZvcm1zLWFkbWluLWNvbW11bml0eSAuaXRlbSB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0bWFyZ2luLXJpZ2h0OiAwO1xuXHR9XG59XG5cbiN3cGZvcm1zLWFkbWluLWNvbW11bml0eSB7XG5cblx0KiwgKjo6YmVmb3JlLCAqOjphZnRlciB7XG5cdFx0LXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cblx0Lml0ZW1zIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGZsZXgtd3JhcDogd3JhcDtcblx0XHRtYXJnaW46IDIwcHg7XG5cdH1cblxuXHQuaXRlbSB7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI0RERERERDtcblx0XHRtYXJnaW46IDAgMjBweCAyMHB4IDA7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdH1cblxuXHQuaXRlbS1jb3ZlciB7XG5cdFx0d2lkdGg6IDEwMCU7XG5cdFx0aGVpZ2h0OiAyMjNweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblxuXHQuaXRlbS1pbWcge1xuXHRcdHdpZHRoOiBhdXRvO1xuXHRcdGhlaWdodDogYXV0bztcblx0XHRtYXgtd2lkdGg6IDEwMHB4O1xuXHRcdG1heC1oZWlnaHQ6IDEwMHB4O1xuXHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHR0b3A6IDA7XG5cdFx0Ym90dG9tOiAwO1xuXHRcdGxlZnQ6IDA7XG5cdFx0cmlnaHQ6IDA7XG5cdFx0bWFyZ2luOiBhdXRvO1xuXHR9XG5cblx0Lml0ZW0tdGl0bGUge1xuXHRcdG1hcmdpbjogMTdweCAyMHB4IDEwcHggMjBweDtcblx0XHRmb250LXNpemU6IDE2cHg7XG5cdH1cblxuXHQuaXRlbS1kZXNjcmlwdGlvbiB7XG5cdFx0bWFyZ2luOiAwIDIwcHggOThweCAyMHB4O1xuXHRcdGZvbnQtc2l6ZTogMTRweDtcblx0fVxuXG5cdC5pdGVtLWZvb3RlciB7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGJvdHRvbTogMDtcblx0XHRwYWRkaW5nOiAyMHB4O1xuXHRcdGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkZGRkO1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNGN0Y3Rjc7XG5cdH1cblxuXHQuYnV0dG9uIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMWM3NWE2O1xuXHRcdGNvbG9yOiAjZmZmZmZmO1xuXHRcdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRcdC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMHB4IC0ycHggMHB4IDBweCAjMGU2ODk3O1xuXHRcdC1tb3otYm94LXNoYWRvdzogaW5zZXQgMHB4IC0ycHggMHB4IDBweCAjMGU2ODk3O1xuXHRcdGJveC1zaGFkb3c6IGluc2V0IDBweCAtMnB4IDBweCAwcHggIzBlNjg5Nztcblx0XHRib3JkZXI6IDFweCBzb2xpZCAjMGU2ODk3O1xuXHRcdHBhZGRpbmc6IDEycHg7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdGxpbmUtaGVpZ2h0OiAxM3B4O1xuXHRcdHRleHQtc2hhZG93OiAxcHggMXB4IDEuNXB4IHJnYmEoMCwwLDAsLjM1KTtcblxuXHRcdCY6aG92ZXIge1xuXHRcdFx0YmFja2dyb3VuZDogIzAwOGVjMjtcblx0XHRcdGJvcmRlci1jb2xvcjogIzAwNjc5OTtcblx0XHR9XG5cdH1cblxufVxuIiwiLy8gQ29tbW9uIHN0eWxlcyBmb3IgcGx1Z2luIGxhbmRpbmcgcGFnZXMgKGxpa2UgQW5hbHl0aWNzIG9yIFNNVFApLlxuXG4ud3Bmb3Jtcy1hZG1pbi1wbHVnaW4tbGFuZGluZyB7XG5cdC5ub3RpY2Uge1xuXHRcdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcblx0fVxuXHQubG9hZGVyIHtcblx0XHRtYXJnaW46IDAgYXV0bztcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0dGV4dC1pbmRlbnQ6IC05OTk5ZW07XG5cdFx0Ym9yZGVyLXRvcDogNHB4IHNvbGlkICM5Njk2OTY7XG5cdFx0Ym9yZGVyLXJpZ2h0OiA0cHggc29saWQgIzk2OTY5Njtcblx0XHRib3JkZXItYm90dG9tOiA0cHggc29saWQgIzk2OTY5Njtcblx0XHRib3JkZXItbGVmdDogNHB4IHNvbGlkICM0MDQwNDA7XG5cdFx0LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG5cdFx0LW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG5cdFx0LXdlYmtpdC1hbmltYXRpb246IGxvYWQ4IDEuMXMgaW5maW5pdGUgbGluZWFyO1xuXHRcdGFuaW1hdGlvbjogbG9hZDggMS4xcyBpbmZpbml0ZSBsaW5lYXI7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cblx0XHQmLCAmOmFmdGVyIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogNTAlO1xuXHRcdFx0d2lkdGg6IDUwcHg7XG5cdFx0XHRoZWlnaHQ6IDUwcHg7XG5cdFx0fVxuXHR9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBsb2FkOCB7XG5cdDAlIHtcblx0XHQtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuXHRcdHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuXHR9XG5cdDEwMCUge1xuXHRcdC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcblx0XHR0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuXHR9XG59XG5Aa2V5ZnJhbWVzIGxvYWQ4IHtcblx0MCUge1xuXHRcdC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG5cdFx0dHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG5cdH1cblx0MTAwJSB7XG5cdFx0LXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuXHRcdHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG5cdH1cbn1cbiIsIi8vIFNNVFAgLSBhZG1pbi5waHA/cGFnZT13cGZvcm1zLXNtdHBcbiN3cGZvcm1zLWFkbWluLXNtdHAge1xuXG5cdHdpZHRoOiA3MDBweDtcblx0bWFyZ2luOiAwIGF1dG87XG5cblx0KiwgKjo6YmVmb3JlLCAqOjphZnRlciB7XG5cdFx0LXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHR9XG5cblx0c2VjdGlvbiB7XG5cdFx0bWFyZ2luOiA1MHB4IDA7XG5cdFx0dGV4dC1hbGlnbjogbGVmdDtcblx0XHRjbGVhcjogYm90aDtcblx0fVxuXG5cdHAge1xuXHRcdGZvbnQtc2l6ZTogMTVweDtcblx0fVxuXG5cdC50b3Age1xuXHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblxuXHRcdGltZyB7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAzOHB4O1xuXHRcdH1cblx0XHRoMSB7XG5cdFx0XHRmb250LXNpemU6IDI2cHg7XG5cdFx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdFx0bWFyZ2luLWJvdHRvbTogMDtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0fVxuXHRcdHAge1xuXHRcdFx0Zm9udC1zaXplOiAxN3B4O1xuXHRcdFx0Y29sb3I6ICM3Nzc3Nzc7XG5cdFx0XHRtYXJnaW4tdG9wOiAuNWVtO1xuXHRcdH1cblxuXHRcdC51cGRhdGVkIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXHR9XG5cblx0LnNjcmVlbnNob3Qge1xuXHRcdCYgPiAqIHtcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0fVxuXHRcdC5jb250IHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdHdpZHRoOiAzMTVweDtcblx0XHRcdHBhZGRpbmc6IDVweDtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG5cdFx0XHQtd2Via2l0LWJveC1zaGFkb3c6IDBweCAycHggNXB4IDBweCByZ2JhKDAsMCwwLDAuMDUpO1xuXHRcdFx0LW1vei1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAwcHggcmdiYSgwLDAsMCwwLjA1KTtcblx0XHRcdGJveC1zaGFkb3c6IDBweCAycHggNXB4IDBweCByZ2JhKDAsMCwwLDAuMDUpO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0aW1nIHtcblx0XHRcdFx0bWF4LXdpZHRoOiAxMDAlO1xuXHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdH1cblx0XHRcdC5ob3ZlciB7XG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0b3BhY2l0eTogMDtcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdFx0dG9wOiAwO1xuXHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHRib3JkZXI6IDVweCBzb2xpZCAjZmZmZmZmO1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDAuMTUpO1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltYWdlcy96b29tLnN2ZycpO1xuXHRcdFx0XHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuXHRcdFx0XHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG5cdFx0XHRcdGJhY2tncm91bmQtc2l6ZTogNTBweDtcblx0XHRcdFx0dHJhbnNpdGlvbjogYWxsIDAuM3M7XG5cdFx0XHR9XG5cdFx0XHQmOmhvdmVyIC5ob3ZlciB7XG5cdFx0XHRcdG9wYWNpdHk6IDE7XG5cdFx0XHRcdHRyYW5zaXRpb246IGFsbCAwLjNzO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR1bCB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRtYXJnaW46IDAgMCAwIDMwcHg7XG5cdFx0XHRsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cdFx0XHRtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDM1MHB4KTtcblx0XHR9XG5cdFx0bGkge1xuXHRcdFx0bWFyZ2luOiAxNnB4IDA7XG5cdFx0XHRwYWRkaW5nOiAwIDAgMCAyNHB4O1xuXHRcdFx0Zm9udC1zaXplOiAxNXB4O1xuXHRcdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi9pbWFnZXMvYXJyb3ctcmlnaHQuc3ZnJyk7XG5cdFx0XHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IDNweDtcblx0XHRcdGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG5cdFx0XHRiYWNrZ3JvdW5kLXNpemU6IDE0cHg7XG5cdFx0XHRjb2xvcjogIzc3Nzc3Nztcblx0XHR9XG5cdH1cblxuXHQuc3RlcCB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI0Y5RjlGOTtcblx0XHQtd2Via2l0LWJveC1zaGFkb3c6IDBweCAycHggNXB4IDBweCByZ2JhKDAsMCwwLDAuMDUpO1xuXHRcdC1tb3otYm94LXNoYWRvdzogMHB4IDJweCA1cHggMHB4IHJnYmEoMCwwLDAsMC4wNSk7XG5cdFx0Ym94LXNoYWRvdzogMHB4IDJweCA1cHggMHB4IHJnYmEoMCwwLDAsMC4wNSk7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI0U1RTVFNTtcblx0XHRtYXJnaW46IDAgMCAyNXB4IDA7XG5cblx0XHQmID4gKiB7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdH1cblx0XHQubnVtIHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRcdHdpZHRoOiAxMDBweDtcblx0XHRcdGhlaWdodDogNTBweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHR9XG5cdFx0LmxvYWRlciB7XG5cdFx0XHRtYXJnaW4tdG9wOiAtNTRweDtcblx0XHRcdHRyYW5zaXRpb246IGFsbCAuM3M7XG5cdFx0XHRvcGFjaXR5OiAxO1xuXHRcdH1cblx0XHRkaXYge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0d2lkdGg6IGNhbGMoMTAwJSAtIDEwNHB4KTtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG5cdFx0XHRwYWRkaW5nOiAzMHB4O1xuXHRcdFx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZWVlZWVlO1xuXHRcdH1cblx0XHRoMiB7XG5cdFx0XHRmb250LXNpemU6IDI0cHg7XG5cdFx0XHRsaW5lLWhlaWdodDogMjJweDtcblx0XHRcdG1hcmdpbi10b3A6IDA7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAxNXB4O1xuXHRcdH1cblx0XHRwIHtcblx0XHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRcdGNvbG9yOiAjNzc3Nzc3O1xuXHRcdH1cblx0XHQuZXJyb3Ige1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXHRcdFx0Y29sb3I6ICNiOTc0NzQ7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdH1cblx0XHQuYnV0dG9uIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICMwMDdjYmE7XG5cdFx0XHRjb2xvcjogI2ZmZmZmZjtcblx0XHRcdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0cGFkZGluZzogMTJweDtcblx0XHRcdG1pbi13aWR0aDogMjAwcHg7XG5cdFx0XHRoZWlnaHQ6IGF1dG87XG5cdFx0XHRsaW5lLWhlaWdodDogMTNweDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdHRyYW5zaXRpb246IGFsbCAuM3M7XG5cblx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiAjMDA3MWExO1xuXHRcdFx0fVxuXG5cdFx0XHQmLmdyZXkge1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiAjRjZGNkY2O1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkZGRkO1xuXHRcdFx0XHR0ZXh0LXNoYWRvdzogbm9uZTtcblx0XHRcdFx0Y29sb3I6ICM5RkE1QUE7XG5cdFx0XHR9XG5cblx0XHRcdCYuZGlzYWJsZWQge1xuXHRcdFx0XHRjdXJzb3I6IGRlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC5oaWRkZW4ge1xuXHRcdFx0b3BhY2l0eTogMDtcblx0XHRcdHRyYW5zaXRpb246IGFsbCAuM3M7XG5cdFx0fVxuXHR9XG5cblx0LmdyZXkge1xuXHRcdG9wYWNpdHk6IDAuNTtcblx0fVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcblxuXHQjd3Bmb3Jtcy1hZG1pbi1zbXRwIHtcblxuXHRcdHdpZHRoOiBhdXRvO1xuXHRcdG1hcmdpbjogMCAyMHB4O1xuXG5cdFx0LnNjcmVlbnNob3Qge1xuXHRcdFx0LmNvbnQge1xuXHRcdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdH1cblxuXHRcdFx0dWwge1xuXHRcdFx0XHRtYXJnaW46IDIwcHggMCAwIDE1cHg7XG5cdFx0XHRcdG1heC13aWR0aDogMTAwJTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuYnV0dG9uIHtcblx0XHRcdHdoaXRlLXNwYWNlOiBub3JtYWw7XG5cdFx0fVxuXHR9XG59IiwiLy8gQW5hbHl0aWNzIC0gYWRtaW4ucGhwP3BhZ2U9d3Bmb3Jtcy1hbmFseXRpY3NcbiN3cGZvcm1zLWFkbWluLWFuYWx5dGljcyB7XG5cblx0d2lkdGg6IDcwMHB4O1xuXHRtYXJnaW46IDAgYXV0bztcblxuXHQqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcblx0XHQtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdH1cblxuXHRzZWN0aW9uIHtcblx0XHRtYXJnaW46IDUwcHggMDtcblx0XHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRcdGNsZWFyOiBib3RoO1xuXHR9XG5cblx0cCB7XG5cdFx0Zm9udC1zaXplOiAxNXB4O1xuXHR9XG5cblx0LnRvcCB7XG5cdFx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdFx0aW1nIHtcblx0XHRcdG1hcmdpbi1ib3R0b206IDM4cHg7XG5cdFx0fVxuXHRcdGgxIHtcblx0XHRcdGZvbnQtc2l6ZTogMjZweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRtYXJnaW4tYm90dG9tOiAwO1xuXHRcdFx0cGFkZGluZzogMDtcblx0XHR9XG5cdFx0cCB7XG5cdFx0XHRmb250LXNpemU6IDE3cHg7XG5cdFx0XHRjb2xvcjogIzc3Nzc3Nztcblx0XHRcdG1hcmdpbi10b3A6IC41ZW07XG5cdFx0fVxuXG5cdFx0LnVwZGF0ZWQge1xuXHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHR9XG5cdH1cblxuXHQuc2NyZWVuc2hvdCB7XG5cdFx0JiA+ICoge1xuXHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHR9XG5cdFx0LmNvbnQge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0d2lkdGg6IDMxNXB4O1xuXHRcdFx0cGFkZGluZzogNXB4O1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcblx0XHRcdC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDJweCA1cHggMHB4IHJnYmEoMCwwLDAsMC4wNSk7XG5cdFx0XHQtbW96LWJveC1zaGFkb3c6IDBweCAycHggNXB4IDBweCByZ2JhKDAsMCwwLDAuMDUpO1xuXHRcdFx0Ym94LXNoYWRvdzogMHB4IDJweCA1cHggMHB4IHJnYmEoMCwwLDAsMC4wNSk7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRpbWcge1xuXHRcdFx0XHRtYXgtd2lkdGg6IDEwMCU7XG5cdFx0XHR9XG5cdFx0XHQuaG92ZXIge1xuXHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdG9wYWNpdHk6IDA7XG5cdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdHRvcDogMDtcblx0XHRcdFx0bGVmdDogMDtcblx0XHRcdFx0Ym9yZGVyOiA1cHggc29saWQgI2ZmZmZmZjtcblx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAsMCwwLjE1KTtcblx0XHRcdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi9pbWFnZXMvem9vbS5zdmcnKTtcblx0XHRcdFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcblx0XHRcdFx0YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xuXHRcdFx0XHRiYWNrZ3JvdW5kLXNpemU6IDUwcHg7XG5cdFx0XHRcdHRyYW5zaXRpb246IGFsbCAwLjNzO1xuXHRcdFx0fVxuXHRcdFx0Jjpob3ZlciAuaG92ZXIge1xuXHRcdFx0XHRvcGFjaXR5OiAxO1xuXHRcdFx0XHR0cmFuc2l0aW9uOiBhbGwgMC4zcztcblx0XHRcdH1cblx0XHR9XG5cdFx0dWwge1xuXHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0bWFyZ2luLWxlZnQ6IDMwcHg7XG5cdFx0XHRsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cdFx0fVxuXHRcdGxpIHtcblx0XHRcdG1hcmdpbjogMTZweCAwO1xuXHRcdFx0cGFkZGluZzogMCAwIDAgMjRweDtcblx0XHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRcdGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vaW1hZ2VzL2Fycm93LXJpZ2h0LnN2ZycpO1xuXHRcdFx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdFx0XHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuXHRcdFx0YmFja2dyb3VuZC1zaXplOiAxNHB4O1xuXHRcdFx0Y29sb3I6ICM3Nzc3Nzc7XG5cdFx0fVxuXHR9XG5cblx0LnN0ZXAge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICNGOUY5Rjk7XG5cdFx0LXdlYmtpdC1ib3gtc2hhZG93OiAwcHggMnB4IDVweCAwcHggcmdiYSgwLDAsMCwwLjA1KTtcblx0XHQtbW96LWJveC1zaGFkb3c6IDBweCAycHggNXB4IDBweCByZ2JhKDAsMCwwLDAuMDUpO1xuXHRcdGJveC1zaGFkb3c6IDBweCAycHggNXB4IDBweCByZ2JhKDAsMCwwLDAuMDUpO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNFNUU1RTU7XG5cdFx0bWFyZ2luOiAwIDAgMjVweCAwO1xuXG5cdFx0JiA+ICoge1xuXHRcdFx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0XHR9XG5cdFx0Lm51bSB7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHR3aWR0aDogMTAwcHg7XG5cdFx0XHRoZWlnaHQ6IDUwcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0fVxuXHRcdC5sb2FkZXIge1xuXHRcdFx0bWFyZ2luLXRvcDogLTU0cHg7XG5cdFx0XHR0cmFuc2l0aW9uOiBhbGwgLjNzO1xuXHRcdFx0b3BhY2l0eTogMTtcblx0XHR9XG5cdFx0ZGl2IHtcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHdpZHRoOiBjYWxjKDEwMCUgLSAxMDRweCk7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuXHRcdFx0cGFkZGluZzogMzBweDtcblx0XHRcdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2VlZWVlZTtcblx0XHR9XG5cdFx0aDIge1xuXHRcdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdFx0bWFyZ2luLXRvcDogMDtcblx0XHRcdG1hcmdpbi1ib3R0b206IDE1cHg7XG5cdFx0fVxuXHRcdHAge1xuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdFx0Y29sb3I6ICM3Nzc3Nzc7XG5cdFx0fVxuXHRcdC5lcnJvciB7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRjb2xvcjogI2I5NzQ3NDtcblx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0fVxuXHRcdC5idXR0b24ge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogIzAwN2NiYTtcblx0XHRcdGNvbG9yOiAjZmZmZmZmO1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0XHRcdHBhZGRpbmc6IDEycHg7XG5cdFx0XHRtaW4td2lkdGg6IDIwMHB4O1xuXHRcdFx0aGVpZ2h0OiBhdXRvO1xuXHRcdFx0bGluZS1oZWlnaHQ6IDEzcHg7XG5cdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdFx0XHRmb250LXNpemU6IDE1cHg7XG5cdFx0XHRib3JkZXI6IG5vbmU7XG5cdFx0XHR0cmFuc2l0aW9uOiBhbGwgLjNzO1xuXG5cdFx0XHQmOmhvdmVyIHtcblx0XHRcdFx0YmFja2dyb3VuZDogIzAwNzFhMTtcblx0XHRcdH1cblxuXHRcdFx0Ji5ncmV5IHtcblx0XHRcdFx0YmFja2dyb3VuZDogI0Y2RjZGNjtcblx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZGRkZDtcblx0XHRcdFx0Ym94LXNoYWRvdzogbm9uZTtcblx0XHRcdFx0dGV4dC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRcdGNvbG9yOiAjOUZBNUFBO1xuXHRcdFx0fVxuXG5cdFx0XHQmLmRpc2FibGVkIHtcblx0XHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHQuaGlkZGVuIHtcblx0XHRcdG9wYWNpdHk6IDA7XG5cdFx0XHR0cmFuc2l0aW9uOiBhbGwgLjNzO1xuXHRcdH1cblx0fVxuXG5cdC5ncmV5IHtcblx0XHRvcGFjaXR5OiAwLjU7XG5cdH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG5cblx0I3dwZm9ybXMtYWRtaW4tYW5hbHl0aWNzIHtcblxuXHRcdHdpZHRoOiBhdXRvO1xuXHRcdG1hcmdpbjogMCAyMHB4O1xuXG5cdFx0LnNjcmVlbnNob3Qge1xuXHRcdFx0LmNvbnQge1xuXHRcdFx0XHR3aWR0aDogYXV0bztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQuYnV0dG9uIHtcblx0XHRcdHdoaXRlLXNwYWNlOiBub3JtYWw7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBTZXR0aW5ncyAtIGFkbWluLnBocD9wYWdlPXdwZm9ybXMtc2V0dGluZ3Ncbi8vIFRvb2xzIC0gYWRtaW4ucGhwP3BhZ2U9d3Bmb3Jtcy10b29sc1xuLndwZm9ybXMtYWRtaW4tc2V0dGluZ3Mge1xuXG5cdCosXG5cdCo6OmJlZm9yZSxcblx0Kjo6YWZ0ZXIge1xuXHRcdC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcblx0XHQtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcblx0fVxuXG5cdC8vIFNldHRpbmcgcm93cywgZWcgZmllbGQgcm93LlxuXHQud3Bmb3Jtcy1zZXR0aW5nLXJvdyB7XG5cdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlNGU0ZTQ7XG5cdFx0cGFkZGluZzogMzBweCAwO1xuXHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRsaW5lLWhlaWdodDogMS4zO1xuXG5cdFx0JjpmaXJzdC1vZi10eXBlIHtcblx0XHRcdHBhZGRpbmctdG9wOiAxMHB4ICFpbXBvcnRhbnQ7XG5cdFx0fVxuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8dGFibGV0XCIpIHtcblx0XHRcdHBhZGRpbmc6IDIwcHggMDtcblx0XHR9XG5cblx0XHQvLyBTZWN0aW9uIGhlYWRpbmcuXG5cdFx0Ji5zZWN0aW9uLWhlYWRpbmcge1xuXHRcdFx0cGFkZGluZzogMjBweCAwO1xuXG5cdFx0XHQmLm5vLWRlc2Mge1xuXHRcdFx0XHRoNCB7XG5cdFx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC53cGZvcm1zLXNldHRpbmctZmllbGQge1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRcdG1heC13aWR0aDogMTAwMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFRvb2xzIGZ1bGwgd2lkdGggZmllbGRzLlxuXHRcdCYudG9vbHMge1xuXG5cdFx0XHRwLFxuXHRcdFx0cDpmaXJzdC1vZi10eXBle1xuXHRcdFx0XHRtYXJnaW46IDAgMCAxNnB4IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2tib3ggc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LWNoZWNrYm94IHtcblxuXHRcdFx0aW5wdXRbdHlwZT1jaGVja2JveF0ge1xuXHRcdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdFx0bWFyZ2luOiAxcHggMCAwIDA7XG5cdFx0XHR9XG5cblx0XHRcdC5kZXNjIHtcblx0XHRcdFx0bWFyZ2luOiAwIDAgMCAzMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIExpY2Vuc2Ugc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LWxpY2Vuc2Uge1xuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWxhYmVsIHtcblx0XHRcdFx0cGFkZGluZy10b3A6IDhweDtcblx0XHRcdH1cblxuXHRcdFx0cC50eXBlIHtcblx0XHRcdFx0bWFyZ2luLXRvcDogMTJweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBUZXh0L251bWJlciBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctdGV4dCxcblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctbnVtYmVyIHtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1sYWJlbCB7XG5cdFx0XHRcdHBhZGRpbmctdG9wOiA4cHg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2VsZWN0IHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1zZWxlY3Qge1xuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWxhYmVsIHtcblx0XHRcdFx0cGFkZGluZy10b3A6IDhweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSYWRpbyBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctcmFkaW8ge1xuXG5cdFx0XHQud3Bmb3Jtcy1zZXR0aW5nLWZpZWxkIHtcblxuXHRcdFx0XHRpbnB1dFt0eXBlPXJhZGlvXSB7XG5cdFx0XHRcdFx0bWFyZ2luOiAtM3B4IDEwcHggMCAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGFiZWwge1xuXHRcdFx0XHRcdG1hcmdpbi1yaWdodDogMzBweDtcblx0XHRcdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdC8vIEVtYWlsIFRlbXBsYXRlIHNldHRpbmcgZmllbGQuXG5cdFx0JiN3cGZvcm1zLXNldHRpbmctcm93LWVtYWlsLXRlbXBsYXRlIHtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1maWVsZCB7XG5cblx0XHRcdFx0bGFiZWw6YmVmb3JlIHtcblx0XHRcdFx0XHRjb250ZW50OiBcIiBcIjtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHR3aWR0aDogMTU1cHg7XG5cdFx0XHRcdFx0aGVpZ2h0OiAxODBweDtcblx0XHRcdFx0XHRtYXJnaW46IDAgMCAxMHB4IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQub3B0aW9uLWRlZmF1bHQ6YmVmb3JlIHtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kOiB1cmwoLi4vaW1hZ2VzL3NldHRpbmdzLWVtYWlsLWh0bWwucG5nKSBjZW50ZXIgY2VudGVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Lm9wdGlvbi1ub25lOmJlZm9yZSB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9zZXR0aW5ncy1lbWFpbC1wbGFpbnRleHQucG5nKSBjZW50ZXIgY2VudGVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmFkaW8gc2V0dGluZ3MgZmllbGQuXG5cdFx0Ji53cGZvcm1zLXNldHRpbmctcm93LWltYWdlIHtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1maWVsZCB7XG5cblx0XHRcdFx0aW1nIHtcblx0XHRcdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdFx0XHRtYXJnaW46IDAgMCAyMHB4IDA7XG5cdFx0XHRcdFx0bWF4LXdpZHRoOiA0MDBweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbG9yIHBpY2tlciBzZXR0aW5ncyBmaWVsZC5cblx0XHQmLndwZm9ybXMtc2V0dGluZy1yb3ctY29sb3Ige1xuXG5cdFx0XHQud3Bmb3Jtcy1jb2xvci1waWNrZXIge1xuXHRcdFx0XHRwYWRkaW5nLWxlZnQ6IDQwcHg7XG5cdFx0XHR9XG5cblx0XHRcdC5taW5pY29sb3JzLWlucHV0LXN3YXRjaCB7XG5cdFx0XHRcdHRvcDogN3B4O1xuXHRcdFx0XHRsZWZ0OiA3cHg7XG5cdFx0XHRcdGhlaWdodDogMjFweDtcblx0XHRcdFx0d2lkdGg6IDIxcHg7XG5cdFx0XHRcdGJvcmRlci1yYWRpdXM6IDJweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb2x1bW5zIHNldHRpbmdzIGZpZWxkLlxuXHRcdCYud3Bmb3Jtcy1zZXR0aW5nLXJvdy1jb2x1bW5zIHtcblxuXHRcdFx0ZGlzcGxheTogZmxleDtcblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1sYWJlbCB7XG5cdFx0XHRcdGZsb2F0OiBub25lO1xuXHRcdFx0XHRhbGlnbi1zZWxmOiBjZW50ZXI7XG5cdFx0XHRcdGZsZXg6IDAgMCAyMDBweDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1maWVsZCB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdFx0ZmxleDogMTtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1jb2x1bW5zIHtcblx0XHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdFx0XHRmbGV4LXdyYXA6IHdyYXA7XG5cdFx0XHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtc2V0dGluZy1jb2x1bW4ge1xuXG5cdFx0XHRcdG1hcmdpbi1yaWdodDogNXB4O1xuXHRcdFx0XHRmbGV4LWJhc2lzOiAzOTBweDtcblxuXHRcdFx0XHQmID4gKiB7XG5cdFx0XHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsYWJlbCB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdG1hcmdpbi1ib3R0b206IDEwcHg7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQuZGVzYyB7XG5cdFx0XHRcdFx0bWFyZ2luLWJvdHRvbTogMTBweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEdlbmVyYWwgZWxlbWVudHMuXG5cdFx0aDUge1xuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdG1hcmdpbjogMCAwIDIwcHggMDtcblx0XHR9XG5cblx0XHRoNCB7XG5cdFx0XHRmb250LXNpemU6IDIwcHg7XG5cdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0bWFyZ2luOiAwIDAgNnB4IDA7XG5cdFx0fVxuXG5cdFx0aDMge1xuXHRcdFx0Zm9udC1zaXplOiAyNHB4O1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdG1hcmdpbjogMCAwIDIwcHggMDtcblx0XHR9XG5cblx0XHRwIHtcblx0XHRcdG1hcmdpbjogMTJweCAwIDA7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRsaW5lLWhlaWdodDogMS4zO1xuXG5cdFx0XHQmOmZpcnN0LW9mLXR5cGUge1xuXHRcdFx0XHRtYXJnaW46IDhweCAwIDA7XG5cdFx0XHR9XG5cblx0XHRcdCYuZGVzYyB7XG5cdFx0XHRcdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0XHRcdFx0Y29sb3I6ICM2NjY7XG5cdFx0XHR9XG5cblx0XHRcdCYuZGlzY291bnQtbm90ZSB7XG5cdFx0XHRcdGZvbnQtc3R5bGU6IGl0YWxpYztcblx0XHRcdFx0Y29sb3I6ICM2NjY7XG5cblx0XHRcdFx0c3Ryb25nIHtcblx0XHRcdFx0XHRjb2xvcjogZ3JlZW47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGb3JtIGVsZW1lbnRzLlxuXHRcdGlucHV0W3R5cGU9dGV4dF0sXG5cdFx0aW5wdXRbdHlwZT1wYXNzd29yZF0sXG5cdFx0aW5wdXRbdHlwZT1udW1iZXJdLFxuXHRcdHNlbGVjdCB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRjb2xvcjogIzMzMztcblx0XHRcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0XHRcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdFx0XHRwYWRkaW5nOiA3cHggMTJweDtcblx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblx0XHRcdHdpZHRoOiA0MDBweDtcblx0XHRcdG1pbi1oZWlnaHQ6IDM1cHg7XG5cdFx0XHRsaW5lLWhlaWdodDogMS4zO1xuXG5cdFx0XHRAaW5jbHVkZSBtZWRpYShcIjxkZXNrdG9wXCIpIHtcblx0XHRcdFx0d2lkdGg6IDMwMHB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlucHV0W3R5cGU9bnVtYmVyXSB7XG5cdFx0XHR3aWR0aDogMTAwcHg7XG5cdFx0fVxuXG5cdFx0dGV4dGFyZWEge1xuXG5cdFx0fVxuXG5cdFx0YnV0dG9uIHtcblx0XHRcdG1hcmdpbi1yaWdodDogMTBweDtcblx0XHR9XG5cblx0XHQuY2hvaWNlc2pzLXNlbGVjdC13cmFwIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0bWF4LXdpZHRoOiA0MDBweDtcblxuXHRcdFx0QGluY2x1ZGUgbWVkaWEoXCI8ZGVza3RvcFwiKSB7XG5cdFx0XHRcdHdpZHRoOiAzMDBweDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQucHJvZ3Jlc3MtYmFyIHtcblx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAkb3JhbmdlO1xuXHRcdFx0aGVpZ2h0OiAzMHB4O1xuXHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRtYXJnaW46IDAgMCAxNnB4IDA7XG5cblx0XHRcdCYuY29tcGxldGUge1xuXHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCAkZ3JlZW47XG5cblx0XHRcdFx0LmJhciB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogJGdyZWVuO1xuXG5cdFx0XHRcdFx0JjphZnRlciB7XG5cdFx0XHRcdFx0XHRjb250ZW50OiBub25lO1xuXHRcdFx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LmJhciB7XG5cdFx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0XHRiYWNrZ3JvdW5kOiAkb3JhbmdlO1xuXHRcdFx0XHRoZWlnaHQ6IDEwMCU7XG5cdFx0XHRcdGxlZnQ6IDA7XG5cdFx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdFx0LXdlYmtpdC10cmFuc2l0aW9uOiB3aWR0aCAwLjVzIGVhc2UtaW4tb3V0O1xuXHRcdFx0XHQtbW96LXRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZS1pbi1vdXQ7XG5cdFx0XHRcdC1vLXRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZS1pbi1vdXQ7XG5cdFx0XHRcdHRyYW5zaXRpb246IHdpZHRoIDAuNXMgZWFzZS1pbi1vdXQ7XG5cblx0XHRcdFx0QC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzIHtcblx0XHRcdFx0XHR0byB7IGJhY2tncm91bmQtcG9zaXRpb246IDYwcHggMDsgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0QC1tb3ota2V5ZnJhbWVzIHByb2dyZXNzIHtcblx0XHRcdFx0ICB0byB7IGJhY2tncm91bmQtcG9zaXRpb246IDYwcHggMDsgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0QGtleWZyYW1lcyBwcm9ncmVzcyB7XG5cdFx0XHRcdCAgdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA2MHB4IDA7IH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdCY6YWZ0ZXIge1xuXHRcdFx0XHRcdGNvbnRlbnQ6ICcnO1xuXHRcdFx0XHRcdGRpc3BsYXk6YmxvY2s7XG5cdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdHRvcDogMDtcblx0XHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRcdGhlaWdodDogMTAwJTtcblx0XHRcdFx0XHQtd2Via2l0LWFuaW1hdGlvbjogcHJvZ3Jlc3MgMXMgbGluZWFyIGluZmluaXRlO1xuXHRcdFx0XHRcdC1tb3otYW5pbWF0aW9uOiBwcm9ncmVzcyAxcyBsaW5lYXIgaW5maW5pdGU7XG5cdFx0XHRcdFx0YW5pbWF0aW9uOiBwcm9ncmVzcyAxcyBsaW5lYXIgaW5maW5pdGU7XG5cdFx0XHRcdFx0YmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuXHRcdFx0XHRcdGJhY2tncm91bmQtc2l6ZTogNjBweCA2MHB4O1xuXHRcdFx0XHRcdGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KC00NWRlZywgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA1MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcblx0XHRcdFx0XHRiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIDUwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSA3NSUsIHRyYW5zcGFyZW50IDc1JSwgdHJhbnNwYXJlbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUm93IGxhYmVsIChsZWZ0KS5cblx0LndwZm9ybXMtc2V0dGluZy1sYWJlbCB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0d2lkdGg6IDIwMHB4O1xuXHRcdHBhZGRpbmc6IDA7XG5cblx0XHRAaW5jbHVkZSBtZWRpYShcIjx0YWJsZXRcIikge1xuXHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHR3aWR0aDogMTAwJTtcblx0XHRcdHBhZGRpbmctYm90dG9tOiAxNXB4O1xuXHRcdH1cblxuXHRcdGxhYmVsIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHR9XG5cdH1cblxuXHQvLyBSb3cgZmllbGQgKHJpZ2h0KS5cblx0LndwZm9ybXMtc2V0dGluZy1maWVsZCB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0bWFyZ2luOiAwIDAgMCAyMDBweDtcblx0XHRtYXgtd2lkdGg6IDgwMHB4O1xuXG5cdFx0QGluY2x1ZGUgbWVkaWEoXCI8dGFibGV0XCIpIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHR9XG5cdH1cblxuXHRwLnN1Ym1pdCB7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHBhZGRpbmc6IDI1cHggMDtcblx0fVxuXG5cdC8vIEdlbmVyaWMgaW5mby9jb2RlIGluZm9ybWF0aW9uLlxuXHQuaW5mby1hcmVhLFxuXHQucHJlLWVycm9yIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHR3aWR0aDogMTAwJTtcblx0XHRtYXgtd2lkdGg6IDEwMDBweDtcblx0XHRoZWlnaHQ6IDQ1MHB4O1xuXHRcdGZvbnQtZmFtaWx5OiBNZW5sbyxNb25hY28sbW9ub3NwYWNlO1xuXHRcdGZvbnQtc2l6ZTogMTJweDtcblx0XHRiYWNrZ3JvdW5kOiAjZmZmO1xuXHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0Ym9yZGVyOiAxcHggc29saWQgI2RkZDtcblx0XHR3aGl0ZS1zcGFjZTogcHJlO1xuXHRcdG92ZXJmbG93OiBhdXRvO1xuXHRcdHBhZGRpbmc6IDIwcHg7XG5cdH1cblxuXHQucHJlLWVycm9yIHtcblx0XHRoZWlnaHQ6IGF1dG87XG5cdFx0bWF4LWhlaWdodDogMjUwcHg7XG5cdFx0bWFyZ2luLWJvdHRvbTogMjBweDtcblx0fVxuXG5cdC8vIENoZWNrYm94IG11bHRpLXNlbGVjdCBjb2x1bW5zLlxuXHQuY2hlY2tib3gtbXVsdGlzZWxlY3QtY29sdW1ucyB7XG5cdFx0bWF4LXdpZHRoOiA2MDBweDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHQmOmFmdGVyIHtcblx0XHRcdGNvbnRlbnQ6IFwiLlwiO1xuXHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRoZWlnaHQ6IDA7XG5cdFx0XHRsaW5lLWhlaWdodDogMDtcblx0XHRcdGZvbnQtc2l6ZTogMDtcblx0XHRcdGNsZWFyOiBib3RoO1xuXHRcdFx0bWluLWhlaWdodDogMDtcblx0XHRcdHZpc2liaWxpdHk6IGhpZGRlbjtcblx0XHR9XG5cblx0XHQmOmJlZm9yZSB7XG5cdFx0XHRjb250ZW50OiBcIlxcZjBlY1wiO1xuXHRcdFx0Y29sb3I6ICM5OTk7XG5cdFx0XHRmb250OiBub3JtYWwgbm9ybWFsIG5vcm1hbCAyMHB4LzEgRm9udEF3ZXNvbWU7XG5cdFx0XHR0ZXh0LXJlbmRlcmluZzogYXV0bztcblx0XHRcdC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuXHRcdFx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogMTMwcHg7XG5cdFx0XHRsZWZ0OiA1MCU7XG5cdFx0XHRtYXJnaW46IDAgMCAwIC0xMHB4O1xuXHRcdH1cblxuXHRcdC5oZWFkZXIge1xuXHRcdFx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDAgMCA1cHggMDtcblx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHR9XG5cblx0XHQuZmlyc3QtY29sdW1uLFxuXHRcdC5zZWNvbmQtY29sdW1uIHtcblx0XHRcdHdpZHRoOiA0NSU7XG5cdFx0XHRmbG9hdDogbGVmdDtcblx0XHR9XG5cblx0XHQuZmlyc3QtY29sdW1uIHtcblxuXHRcdH1cblxuXHRcdC5zZWNvbmQtY29sdW1uIHtcblx0XHRcdGZsb2F0OiByaWdodDtcblxuXHRcdFx0dWwge1xuXHRcdFx0XHRsaSB7XG5cdFx0XHRcdFx0cGFkZGluZzogMTBweDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHVsIHtcblx0XHRcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0aGVpZ2h0OiAyNTBweDtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRvdmVyZmxvdy15OiBhdXRvO1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0bGlzdC1zdHlsZS10eXBlOiBub25lO1xuXG5cdFx0XHRsaSB7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCAjZWVlIHNvbGlkO1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblxuXHRcdFx0XHRsYWJlbCB7XG5cdFx0XHRcdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0XHRcdFx0cGFkZGluZzogMTBweCAxMHB4IDEwcHggMzJweDtcblx0XHRcdFx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdFx0XHRcdFx0dmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuXG5cdFx0XHRcdFx0Jjpob3ZlciB7XG5cdFx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAkb3JhbmdlO1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNmZmY7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0JjpiZWZvcmUge1xuXHRcdFx0XHRcdFx0Y29udGVudDogXCJcXGYwYzhcIjtcblx0XHRcdFx0XHRcdGNvbG9yOiAjZGRkO1xuXHRcdFx0XHRcdFx0Zm9udDogbm9ybWFsIG5vcm1hbCBub3JtYWwgMTZweC8xIEZvbnRBd2Vzb21lO1xuXHRcdFx0XHRcdFx0dGV4dC1yZW5kZXJpbmc6IGF1dG87XG5cdFx0XHRcdFx0XHQtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcblx0XHRcdFx0XHRcdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdFx0XHR0b3A6IDEycHg7XG5cdFx0XHRcdFx0XHRsZWZ0OiAxMHB4O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuY2hlY2tlZCB7XG5cdFx0XHRcdFx0XHRvcGFjaXR5OiAwLjY7XG5cblx0XHRcdFx0XHRcdCY6YmVmb3JlIHtcblx0XHRcdFx0XHRcdFx0Y29udGVudDogXCJcXGYxNGFcIjtcblx0XHRcdFx0XHRcdFx0Y29sb3I6ICRncmVlbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpbnB1dCB7XG5cdFx0XHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC5hbGwge1xuXHRcdFx0Y29sb3I6ICM5OTk7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRmb250LXNpemU6IDEzcHg7XG5cdFx0XHRtYXJnaW46IDEwcHggMCAwO1xuXHRcdH1cblx0fVxuXG5cdC8vIE90aGVyIEltcG9ydGVycy4gKFRvb2xzKVxuXHQjd3Bmb3Jtcy1pbXBvcnRlci1hbmFseXplIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXG5cdFx0LnByb2Nlc3MtY291bnQsXG5cdFx0cCB7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0fVxuXG5cdFx0LnVwZ3JhZGUge1xuXHRcdFx0ZGlzcGxheTogbm9uZTtcblx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblxuXHRcdFx0aDUge1xuXHRcdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHRcdG1hcmdpbjogMzBweCAwIDIwcHggMDtcblx0XHRcdH1cblxuXHRcdFx0aHIge1xuXHRcdFx0XHRib3JkZXI6IG5vbmU7XG5cdFx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTRlNGU0O1xuXHRcdFx0XHRtYXJnaW46IDQwcHggMDtcblx0XHRcdH1cblxuXHRcdFx0LndwZm9ybXMtYnRuIHtcblx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAxMHB4O1xuXHRcdFx0fVxuXG5cdFx0XHR1bCB7XG5cdFx0XHRcdGxpIHtcblx0XHRcdFx0XHRsaXN0LXN0eWxlLXR5cGU6IGRpc2M7XG5cdFx0XHRcdFx0bWFyZ2luLWxlZnQ6IDE0cHg7XG5cblx0XHRcdFx0XHQmLmZvcm0ge1xuXHRcdFx0XHRcdFx0bGlzdC1zdHlsZS10eXBlOiBub25lO1xuXHRcdFx0XHRcdFx0bWFyZ2luLWxlZnQ6IDA7XG5cdFx0XHRcdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEV4cG9ydCBlbnRyaWVzLiAoVG9vbHMpXG5cdCN3cGZvcm1zLXRvb2xzLWVudHJpZXMtZXhwb3J0IHtcblxuXHRcdGg1IHtcblx0XHRcdGNsZWFyOiBib3RoO1xuXHRcdFx0bWFyZ2luOiAyMHB4IDAgMTBweCAwO1xuXHRcdH1cblxuXHRcdGxhYmVsIHtcblx0XHRcdGNsZWFyOiBib3RoO1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRtYXJnaW46IDNweCAwIDNweCAwO1xuXHRcdH1cblxuXHRcdC5jaG9pY2VzanMtc2VsZWN0LXdyYXAge1xuXHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0XHQuY2hvaWNlcyB7XG5cdFx0XHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0I3dwZm9ybXMtdG9vbHMtZW50cmllcy1leHBvcnQtc2VsZWN0Zm9ybS1zcGlubmVyIHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdHRvcDogNnB4O1xuXHRcdFx0cmlnaHQ6IC0zMHB4O1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLWRhdGUtc2VsZWN0b3Ige1xuXHRcdFx0d2lkdGg6IDIwMHB4O1xuXHRcdFx0Y3Vyc29yOiBwb2ludGVyO1xuXHRcdH1cblxuXHRcdC53cGZvcm1zLXNlYXJjaC1ib3gtZmllbGQge1xuXHRcdFx0d2lkdGg6IDIwMHB4O1xuXHRcdH1cblx0XHQud3Bmb3Jtcy1zZWFyY2gtYm94LWNvbXBhcmlzb24ge1xuXHRcdFx0d2lkdGg6IDE0MHB4O1xuXHRcdH1cblx0XHQud3Bmb3Jtcy1zZWFyY2gtYm94LXRlcm0ge1xuXHRcdFx0d2lkdGg6IDMwMHB4O1xuXHRcdH1cblxuXHRcdHNlY3Rpb24ge1xuXHRcdFx0bWFyZ2luLXRvcDogMjBweDtcblx0XHR9XG5cblx0XHRpZnJhbWUge1xuXHRcdFx0d2lkdGg6IDA7XG5cdFx0XHRoZWlnaHQ6IDA7XG5cdFx0XHR2aXNpYmlsaXR5OiBoaWRkZW47XG5cdFx0fVxuXG5cdFx0LndwZm9ybXMtYnRuLXRleHQge1xuXHRcdFx0b3BhY2l0eTogMTtcblx0XHRcdHRyYW5zaXRpb246IGFsbCAuNXM7XG5cdFx0fVxuXHRcdC53cGZvcm1zLWJ0bi1zcGlubmVyIHtcblx0XHRcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcblx0XHRcdGxlZnQ6IDUwJTtcblx0XHRcdHRvcDogNTAlO1xuXHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG5cdFx0XHRvcGFjaXR5OiAwO1xuXHRcdFx0dHJhbnNpdGlvbjogYWxsIC41cztcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1idG4tc3Bpbm5lci1vbiB7XG5cdFx0XHQud3Bmb3Jtcy1idG4tdGV4dCB7XG5cdFx0XHRcdG9wYWNpdHk6IDAgIWltcG9ydGFudDtcblx0XHRcdFx0dHJhbnNpdGlvbjogYWxsIC41cztcblx0XHRcdH1cblx0XHRcdC53cGZvcm1zLWJ0bi1zcGlubmVyIHtcblx0XHRcdFx0b3BhY2l0eTogMSAhaW1wb3J0YW50O1xuXHRcdFx0XHR0cmFuc2l0aW9uOiBhbGwgLjVzO1xuXHRcdFx0fVxuXHRcdFx0Y3Vyc29yOiBkZWZhdWx0O1xuXHRcdFx0b3BhY2l0eTogMC43NTtcblx0XHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHR9XG5cblx0XHQud3Bmb3Jtcy1idG4tc3Bpbm5lci1vbjpob3ZlciB7XG5cdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZTI3NzMwO1xuXHRcdFx0Ym9yZGVyLWNvbG9yOiAjZTI3NzMwO1xuXHRcdH1cblxuXHRcdCN3cGZvcm1zLXRvb2xzLWVudHJpZXMtZXhwb3J0LXByb2Nlc3MtbXNnLFxuXHRcdCN3cGZvcm1zLXRvb2xzLWVudHJpZXMtZXhwb3J0LXNlbGVjdGZvcm0tbXNnIHtcblx0XHRcdGJhY2tncm91bmQ6ICNmZmY7XG5cdFx0XHRib3JkZXItbGVmdDogNHB4IHNvbGlkICMyMkEwRDA7XG5cdFx0XHRsaW5lLWhlaWdodDogMS41ZW07XG5cdFx0XHRtYXJnaW46IDIwcHggMCAwIDA7XG5cdFx0XHRwYWRkaW5nOiAxMHB4O1xuXG5cdFx0XHQmLndwZm9ybXMtZXJyb3Ige1xuXHRcdFx0XHRib3JkZXItY29sb3I6ICNkYzMyMzI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0I3dwZm9ybXMtaW1wb3J0ZXItcHJvY2VzcyB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblxuXHRcdC5wcm9jZXNzLWNvdW50LFxuXHRcdC5wcm9jZXNzLWNvbXBsZXRlZCB7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0fVxuXG5cdFx0LnByb2Nlc3MtY29tcGxldGVkIHtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXG5cdFx0LnN0YXR1cyB7XG5cdFx0XHRtYXJnaW46IDIwcHggMCAzMHB4O1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdGJvcmRlci1yYWRpdXM6IDNweDtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRtYXgtaGVpZ2h0OiA4MDBweDtcblx0XHRcdG92ZXJmbG93LXk6IHNjcm9sbDtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cblx0XHRcdC5pdGVtLXdyYXAge1xuXG5cdFx0XHR9XG5cblx0XHRcdC5pdGVtIHtcblx0XHRcdFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRcdHBhZGRpbmc6IDIwcHg7XG5cblx0XHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRcdGJvcmRlcjogbm9uZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHAge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdFx0XHRtYXJnaW46IDEycHggMCAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dWwge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTNweDtcblx0XHRcdFx0XHRtYXJnaW46IDEycHggMCAwIDE2cHg7XG5cblx0XHRcdFx0XHRsaSB7XG5cdFx0XHRcdFx0XHRsaXN0LXN0eWxlOiBkaXNjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5zdGF0dXMtaWNvbiB7XG5cdFx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHRcdG1hcmdpbjogMCAxMHB4IDAgMDtcblxuXHRcdFx0XHRcdCYuZmEtaW5mby1jaXJjbGUge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICMwMGEwZDJcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQmLmZhLWNoZWNrIHtcblx0XHRcdFx0XHRcdGNvbG9yOiAjNDZiNDUwXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ji5mYS1leGNsYW1hdGlvbi10cmlhbmdsZSB7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2ZmYjkwMFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCYuZmEtdGltZXMsXG5cdFx0XHRcdFx0Ji5mYS1leGNsYW1hdGlvbi1jaXJjbGUge1xuXHRcdFx0XHRcdFx0Y29sb3I6ICNkYzMyMzI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Lm5hbWUge1xuXHRcdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdFx0XHRmbG9hdDogbGVmdDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC5hY3Rpb25zIHtcblx0XHRcdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRcdFx0ZmxvYXQ6IHJpZ2h0O1xuXG5cdFx0XHRcdFx0LnNlcCB7XG5cdFx0XHRcdFx0XHRjb2xvcjogI2RkZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBMaXRlIHVwZ3JhZGUuXG5cdC5zZXR0aW5ncy1saXRlLWN0YXtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuXHRcdGJvcmRlcjogMXB4IHNvbGlkICNkYWRhZGE7XG5cdFx0cGFkZGluZzogMjVweCAyMHB4O1xuXHRcdG1hcmdpbjogMTBweCAwIDAgMDtcblx0XHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cblx0XHQuZGlzbWlzcyB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDEwcHg7XG5cdFx0XHRyaWdodDogMTBweDtcblx0XHRcdGNvbG9yOiAjNjY2O1xuXHRcdFx0Zm9udC1zaXplOiAxNnB4O1xuXHRcdH1cblxuXHRcdGg1IHtcblx0XHRcdG1hcmdpbjogMCAwIDE2cHg7XG5cdFx0XHRmb250LXNpemU6IDE4cHg7XG5cdFx0XHRmb250LXdlaWdodDogNzAwO1xuXHRcdH1cblxuXHRcdGg2IHtcblx0XHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRtYXJnaW46IDAgMCAxNnB4O1xuXHRcdH1cblxuXHRcdHAge1xuXHRcdFx0Y29sb3I6ICM1NTU7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0XHRtYXJnaW46IDAgMCAxNnB4O1xuXG5cdFx0XHQmOmxhc3Qtb2YtdHlwZSB7XG5cdFx0XHRcdG1hcmdpbjogMDtcblx0XHRcdH1cblxuXHRcdFx0YSB7XG5cdFx0XHRcdGNvbG9yOiAkb3JhbmdlO1xuXG5cdFx0XHRcdCY6aG92ZXIge1xuXHRcdFx0XHRcdGNvbG9yOiAkZGFya29yYW5nZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHVsIHtcblx0XHRcdG1hcmdpbjogMDtcblx0XHRcdHBhZGRpbmc6IDA7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cblx0XHRcdEBpbmNsdWRlIG1lZGlhKFwiPD1waG9uZVwiKSB7XG5cdFx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0XHRmbG9hdDogbm9uZTtcblx0XHRcdH1cblxuXHRcdFx0bGkge1xuXHRcdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRcdHBhZGRpbmc6IDAgMCAycHggMTZweDtcblx0XHRcdFx0Y29sb3I6ICM1NTU7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMTRweDtcblx0XHRcdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdFx0XHRcdCY6YmVmb3JlIHtcblx0XHRcdFx0XHRjb250ZW50OiAnKyc7XG5cdFx0XHRcdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0XHRcdHRvcDogLTFweDtcblx0XHRcdFx0XHRsZWZ0OiAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Lmxpc3Qge1xuXHRcdFx0bWFyZ2luOiAwIDAgMTZweCAwO1xuXHRcdFx0b3ZlcmZsb3c6IGF1dG87XG5cdFx0XHRtYXgtd2lkdGg6IDkwMHB4O1xuXHRcdH1cblxuXHRcdC5ncmVlbiB7XG5cdFx0XHRjb2xvcjogIzIxODkwMDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA3MDA7XG5cdFx0fVxuXG5cdFx0LmZhLXN0YXIge1xuXHRcdFx0Y29sb3I6ICNmZjk4MmQ7XG5cdFx0fVxuXHR9XG59XG4iLCIvLyBJbnRlZ3JhdGlvbnMgdGFiIGNvbnRlbnQuXG4vLyBMZWdhY3kgQ1NTIGFuZCBzaG91bGQgYmUgY2xlYW5lZCB1cCB3aGVuIHRpbWUgcGVybWl0cy5cbiN3cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVycyB7XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXIge1xuXHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuXHRcdHBhZGRpbmc6IDMwcHggMDtcblxuXHRcdCYuZm9jdXMtb3V0IHtcblx0XHRcdG9wYWNpdHk6IDAuNDtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1oZWFkZXIge1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRtYXgtd2lkdGg6IDEwMDBweDtcblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWxvZ28ge1xuXHRcdGZsb2F0OiBsZWZ0O1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRcdC5mYSB7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDUwJTtcblx0XHRcdG1hcmdpbjogLTlweCAwIDAgMDtcblx0XHRcdGxlZnQ6IDEwcHg7XG5cdFx0XHRjb2xvcjogIzY2Njtcblx0XHRcdGZvbnQtc2l6ZTogMThweDtcblx0XHR9XG5cblx0XHRpbWcge1xuXHRcdFx0YmFja2dyb3VuZDogI2ZmZjtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRtYXgtd2lkdGg6IDkwcHg7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdG1hcmdpbjogMCAwIDAgNDBweDtcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1pbmZvIHtcblx0XHRtYXJnaW46IDAgMCAwIDE2MHB4O1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0XHRwYWRkaW5nOiAyMHB4IDAgMDtcblxuXHRcdGgzIHtcblx0XHRcdG1hcmdpbjogMCAwIDEwcHggMDtcblx0XHRcdGZvbnQtc2l6ZTogMjBweDtcblx0XHRcdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdFx0fVxuXG5cdFx0cCB7XG5cdFx0XHRtYXJnaW46IDA7XG5cdFx0XHRmb250LXNpemU6IDE0cHg7XG5cdFx0fVxuXG5cdFx0LmNvbm5lY3RlZC1pbmRpY2F0b3Ige1xuXHRcdFx0Y29sb3I6ICM4M2MxMWY7XG5cdFx0XHR3aWR0aDogMTM1cHg7XG5cdFx0XHRib3JkZXI6IDFweCBzb2xpZCAjODNjMTFmO1xuXHRcdFx0Ym9yZGVyLXJhZGl1czogNHB4O1xuXHRcdFx0cGFkZGluZzogOHB4IDE0cHg7XG5cdFx0XHRmb250LXNpemU6IDE2cHg7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDI4cHg7XG5cdFx0XHRyaWdodDogMDtcblx0XHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0fVxuXHR9XG5cblx0LmNvbm5lY3RlZCAud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1pbmZvIC5jb25uZWN0ZWQtaW5kaWNhdG9yIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzIHtcblx0XHRtYXJnaW46IDAgMCAwIDE2MHB4O1xuXHRcdGRpc3BsYXk6IG5vbmU7XG5cdFx0bWF4LXdpZHRoOiA4NDBweDtcblx0fVxuXG5cdC5mb2N1cy1pbiAud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cyB7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cy1saXN0IHVsIHtcblx0XHRwYWRkaW5nOiAwO1xuXHRcdG1hcmdpbjogMDtcblxuXHRcdGxpIHtcblx0XHRcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuXHRcdFx0bWFyZ2luOiAwO1xuXHRcdFx0cGFkZGluZzogMTBweCAwO1xuXHRcdFx0Zm9udC1zaXplOiAxNHB4O1xuXG5cdFx0XHQmOmZpcnN0LW9mLXR5cGUge1xuXHRcdFx0XHRib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcblx0XHRcdH1cblxuXHRcdFx0JjpsYXN0LW9mLXR5cGUge1xuXHRcdFx0XHRtYXJnaW4tYm90dG9tOiAxNnB4O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNwYW4ubGFiZWwge1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHR3aWR0aDogNTAlO1xuXHRcdH1cblxuXHRcdHNwYW4uZGF0ZSB7XG5cdFx0XHRjb2xvcjogIzk5OTtcblx0XHRcdGZsb2F0OiBsZWZ0O1xuXHRcdFx0d2lkdGg6IDM1JTtcblx0XHR9XG5cblx0XHRzcGFuLnJlbW92ZSB7XG5cdFx0XHRmbG9hdDogcmlnaHQ7XG5cdFx0XHR3aWR0aDogMTUlO1xuXHRcdFx0dGV4dC1hbGlnbjogcmlnaHRcblx0XHR9XG5cdH1cblxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cy1jb25uZWN0IHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHRcdHBhZGRpbmc6IDIwcHg7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogJGxpZ2h0Qmx1ZTtcblx0XHRib3JkZXI6IDFweCBzb2xpZCAkYmx1ZTtcblxuXHRcdGlucHV0W3R5cGU9dGV4dF0ge1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblx0XHRcdGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG5cdFx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cdFx0XHRib3gtc2hhZG93OiBub25lO1xuXHRcdFx0Y29sb3I6ICMzMzM7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdHBhZGRpbmc6IDdweCAxMnB4O1xuXHRcdFx0bWFyZ2luOiA1cHggMDtcblx0XHRcdHdpZHRoOiA0MDBweDtcblx0XHRcdG1pbi1oZWlnaHQ6IDM1cHg7XG5cdFx0XHRsaW5lLWhlaWdodDogMS4zO1xuXG5cdFx0fVxuXHR9XG5cblx0LmZvY3VzLWluIC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzLWNvbm5lY3QgIHtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0fVxuXG5cdC53cGZvcm1zLXNldHRpbmdzLXByb3ZpZGVyLWFjY291bnRzLWNvbm5lY3QgLmZhIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0LndwZm9ybXMtc2V0dGluZ3MtcHJvdmlkZXItYWNjb3VudHMtY29ubmVjdCBwLFxuXHQud3Bmb3Jtcy1zZXR0aW5ncy1wcm92aWRlci1hY2NvdW50cyBwIHtcblx0XHRtYXJnaW46IDAgMCAxNXB4IDA7XG5cdFx0Zm9udC1zaXplOiAxNHB4O1xuXHR9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFLQUEsQUFBQSxRQUFRLENBQWM7RUFDcEIsUUFBUSxFQUFFLFFBQVE7RUFDbEIsYUFBYSxFREFLLElBQUk7Q0M0QnZCOztBQTlCRCxBQUdFLFFBSE0sQUFHTCxNQUFNLENBQUM7RUFBRSxPQUFPLEVBQUUsSUFBSTtDQUFJOztBQUg3QixBQUlFLFFBSk0sQUFJTCxXQUFXLENBQUM7RUFBRSxhQUFhLEVBQUUsQ0FBQztDQUFJOztBQUpyQyxBQU1JLFFBTkksQUFLTCxZQUFZLENBQ1gsZUFBZSxFQU5uQixRQUFRLEFBS0wsWUFBWSxDQUNNLGVBQWUsQ0FBMkI7RUFDekQsZ0JBQWdCLEVERE0sT0FBTztFQ0U3QixNQUFNLEVBQUUsV0FBVztFQUNuQixXQUFXLEVBQUUsSUFBSTtDQUNsQjs7QUFWTCxBQVdJLFFBWEksQUFLTCxZQUFZLENBTVgsY0FBYyxDQUFjO0VBQUUsTUFBTSxFQUFFLFdBQVc7Q0FBSTs7QUFYekQsQUFhRSxRQWJNLEVBYUosQUFBQSxNQUFDLEFBQUEsRUFBUTtFQUNULE9BQU8sRUFBRSxlQUFlO0NBQ3pCOztBQWZILEFBZ0JFLFFBaEJNLENBZ0JOLEtBQUssQ0FBQSxBQUFBLElBQUMsQ0FBRCxJQUFDLEFBQUEsQ0FBVSxlQUFlLENBQWM7RUFDNUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLFVBQVU7RUFDckMsTUFBTSxFQUFFLGVBQWU7RUFDdkIsT0FBTyxFQUFFLG1CQUFtQjtFQUM1QixVQUFVLEVBQUUscUJBQXFCO0VBQ2pDLE1BQU0sRUFBRSx5QkFBeUI7RUFDakMsYUFB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QztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsYUFBYTtDQUFFOztBQUNuRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLGFBQWE7Q0FBRTs7QUFDbkUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxhQUFhO0NBQUU7O0FBQ25FLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsUUFBUTtDQUFFOztBQUM5RCxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7RUFBQyxtQkFBbUIsRUFBRSxZQUFZO0NBQUU7O0FBQ2xFLEFBQUEsYUFBYSxBQUFBLGdCQUFnQixDQUFDO0VBQUMsbUJBQW1CLEVBQUUsWUFBWTtDQUFFOztBQUNsRSxBQUFBLGFBQWEsQUFBQSxnQkFBZ0IsQ0FBQztFQUFDLG1CQUFtQixFQUFFLFlBQVk7Q0FBRTs7QUFDbEUsQUFBQSxhQUFhLEFBQUEsZ0JBQWdCLENBQUM7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 */
|
css/admin/aioseop-flyout.css
ADDED
@@ -0,0 +1,163 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#aioseop-flyout {
|
2 |
+
position: fixed;
|
3 |
+
z-index: 99999;
|
4 |
+
transition: all 0.2s ease-in-out;
|
5 |
+
right: 40px;
|
6 |
+
bottom: 40px;
|
7 |
+
opacity: 1;
|
8 |
+
}
|
9 |
+
|
10 |
+
@media (max-width: 959px) {
|
11 |
+
#aioseop-flyout {
|
12 |
+
display: none;
|
13 |
+
}
|
14 |
+
}
|
15 |
+
|
16 |
+
#aioseop-flyout .aioseop-flyout-head {
|
17 |
+
display: block;
|
18 |
+
}
|
19 |
+
|
20 |
+
#aioseop-flyout .aioseop-flyout-head img {
|
21 |
+
width: 54px;
|
22 |
+
height: 54px;
|
23 |
+
padding: 5px;
|
24 |
+
display: block;
|
25 |
+
border: 2px solid rgb(13, 44, 129);
|
26 |
+
border-radius: 50%;
|
27 |
+
overflow: hidden;
|
28 |
+
box-shadow: 0 3px 20px rgba(0, 0, 0, 0.2);
|
29 |
+
transition: all 0.2s ease-in-out;
|
30 |
+
background-color: white;
|
31 |
+
}
|
32 |
+
|
33 |
+
#aioseop-flyout .aioseop-flyout-head:hover img {
|
34 |
+
box-shadow: 0 3px 30px rgba(0, 0, 0, 0.25);
|
35 |
+
}
|
36 |
+
|
37 |
+
#aioseop-flyout .aioseop-flyout-head .aioseop-flyout-label {
|
38 |
+
opacity: 0;
|
39 |
+
transform: translateY(-50%) scale(0);
|
40 |
+
margin-right: -50px;
|
41 |
+
}
|
42 |
+
|
43 |
+
#aioseop-flyout .aioseop-flyout-head:hover .aioseop-flyout-label {
|
44 |
+
opacity: 1;
|
45 |
+
transform: translateY(-50%) scale(1);
|
46 |
+
margin-right: 0;
|
47 |
+
}
|
48 |
+
|
49 |
+
#aioseop-flyout .aioseop-flyout-head:focus {
|
50 |
+
box-shadow: none;
|
51 |
+
}
|
52 |
+
|
53 |
+
#aioseop-flyout .aioseop-flyout-head .aioseop-flyout-label {
|
54 |
+
right: calc(100% + 15px);
|
55 |
+
}
|
56 |
+
|
57 |
+
#aioseop-flyout .aioseop-flyout-label {
|
58 |
+
position: absolute;
|
59 |
+
display: block;
|
60 |
+
top: 50%;
|
61 |
+
right: calc(100% + 25px);
|
62 |
+
transform: translateY(-50%);
|
63 |
+
-moz-transform: translateY(-50%);
|
64 |
+
-webkit-transform: translateY(-50%);
|
65 |
+
color: #fff;
|
66 |
+
background: #5F5E5E 0 0 no-repeat padding-box;
|
67 |
+
font-size: 12px;
|
68 |
+
white-space: nowrap;
|
69 |
+
padding: 5px 10px;
|
70 |
+
height: auto !important;
|
71 |
+
line-height: initial;
|
72 |
+
transition: all 0.2s ease-out;
|
73 |
+
border-radius: 3px;
|
74 |
+
-moz-border-radius: 3px;
|
75 |
+
-webkit-border-radius: 3px;
|
76 |
+
}
|
77 |
+
|
78 |
+
#aioseop-flyout .aioseop-flyout-item {
|
79 |
+
position: absolute;
|
80 |
+
left: 15px;
|
81 |
+
width: 40px;
|
82 |
+
height: 40px;
|
83 |
+
opacity: 0;
|
84 |
+
visibility: hidden;
|
85 |
+
transition: all 0.2s ease-in-out;
|
86 |
+
transform: scale(0);
|
87 |
+
border-radius: 50%;
|
88 |
+
box-shadow: 0 3px 20px rgba(0, 0, 0, 0.2);
|
89 |
+
background: #036AAB 0 0 no-repeat padding-box;
|
90 |
+
text-align: center;
|
91 |
+
vertical-align: middle;
|
92 |
+
}
|
93 |
+
|
94 |
+
#aioseop-flyout .aioseop-flyout-item img {
|
95 |
+
width: 20px;
|
96 |
+
height: 20px;
|
97 |
+
position: relative;
|
98 |
+
top: 22%;
|
99 |
+
}
|
100 |
+
|
101 |
+
#aioseop-flyout .aioseop-flyout-item.aioseop-flyout-item-0 {
|
102 |
+
bottom: 75px;
|
103 |
+
}
|
104 |
+
|
105 |
+
#aioseop-flyout .aioseop-flyout-item.aioseop-flyout-item-1 {
|
106 |
+
bottom: 130px;
|
107 |
+
}
|
108 |
+
|
109 |
+
#aioseop-flyout .aioseop-flyout-item.aioseop-flyout-item-2 {
|
110 |
+
bottom: 185px;
|
111 |
+
}
|
112 |
+
|
113 |
+
#aioseop-flyout .aioseop-flyout-item.aioseop-flyout-item-3 {
|
114 |
+
bottom: 240px;
|
115 |
+
}
|
116 |
+
|
117 |
+
#aioseop-flyout .aioseop-flyout-item.aioseop-flyout-item-4 {
|
118 |
+
bottom: 295px;
|
119 |
+
}
|
120 |
+
|
121 |
+
#aioseop-flyout .aioseop-flyout-item:hover {
|
122 |
+
box-shadow: 0 3px 30px rgba(0, 0, 0, 0.25);
|
123 |
+
background: #0096F0 0 0 no-repeat padding-box;
|
124 |
+
}
|
125 |
+
|
126 |
+
#aioseop-flyout .aioseop-flyout-item:hover .aioseop-flyout-label {
|
127 |
+
background: #444444 0 0 no-repeat padding-box;
|
128 |
+
}
|
129 |
+
|
130 |
+
#aioseop-flyout.opened .aioseop-flyout-item {
|
131 |
+
opacity: 1;
|
132 |
+
visibility: visible;
|
133 |
+
transform: scale(1);
|
134 |
+
}
|
135 |
+
|
136 |
+
#aioseop-flyout.opened .aioseop-flyout-head .aioseop-flyout-label {
|
137 |
+
display: none;
|
138 |
+
}
|
139 |
+
|
140 |
+
#aioseop-flyout.opened .aioseop-flyout-item-0 {
|
141 |
+
transition: transform 0.2s 0ms, background-color 0.2s;
|
142 |
+
}
|
143 |
+
|
144 |
+
#aioseop-flyout.opened .aioseop-flyout-item-1 {
|
145 |
+
transition: transform 0.2s 35ms, background-color 0.2s;
|
146 |
+
}
|
147 |
+
|
148 |
+
#aioseop-flyout.opened .aioseop-flyout-item-2 {
|
149 |
+
transition: transform 0.2s 70ms, background-color 0.2s;
|
150 |
+
}
|
151 |
+
|
152 |
+
#aioseop-flyout.opened .aioseop-flyout-item-3 {
|
153 |
+
transition: transform 0.2s 105ms, background-color 0.2s;
|
154 |
+
}
|
155 |
+
|
156 |
+
#aioseop-flyout.opened .aioseop-flyout-item-4 {
|
157 |
+
transition: transform 0.2s 140ms, background-color 0.2s;
|
158 |
+
}
|
159 |
+
|
160 |
+
#aioseop-flyout.out {
|
161 |
+
opacity: 0;
|
162 |
+
visibility: hidden;
|
163 |
+
}
|
css/admin/selectize-v0.12.6/selectize.css
ADDED
@@ -0,0 +1,333 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* selectize.css (v0.12.6)
|
3 |
+
* Copyright (c) 2013–2015 Brian Reavis & contributors
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
|
6 |
+
* file except in compliance with the License. You may obtain a copy of the License at:
|
7 |
+
* http://www.apache.org/licenses/LICENSE-2.0
|
8 |
+
*
|
9 |
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
10 |
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11 |
+
* ANY KIND, either express or implied. See the License for the specific language
|
12 |
+
* governing permissions and limitations under the License.
|
13 |
+
*
|
14 |
+
* @author Brian Reavis <brian@thirdroute.com>
|
15 |
+
*/
|
16 |
+
|
17 |
+
.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {
|
18 |
+
visibility: visible !important;
|
19 |
+
background: #f2f2f2 !important;
|
20 |
+
background: rgba(0, 0, 0, 0.06) !important;
|
21 |
+
border: 0 none !important;
|
22 |
+
-webkit-box-shadow: inset 0 0 12px 4px #fff;
|
23 |
+
box-shadow: inset 0 0 12px 4px #fff;
|
24 |
+
}
|
25 |
+
.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after {
|
26 |
+
content: '!';
|
27 |
+
visibility: hidden;
|
28 |
+
}
|
29 |
+
.selectize-control.plugin-drag_drop .ui-sortable-helper {
|
30 |
+
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
|
31 |
+
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
|
32 |
+
}
|
33 |
+
.selectize-dropdown-header {
|
34 |
+
position: relative;
|
35 |
+
padding: 5px 8px;
|
36 |
+
border-bottom: 1px solid #d0d0d0;
|
37 |
+
background: #f8f8f8;
|
38 |
+
-webkit-border-radius: 3px 3px 0 0;
|
39 |
+
-moz-border-radius: 3px 3px 0 0;
|
40 |
+
border-radius: 3px 3px 0 0;
|
41 |
+
}
|
42 |
+
.selectize-dropdown-header-close {
|
43 |
+
position: absolute;
|
44 |
+
right: 8px;
|
45 |
+
top: 50%;
|
46 |
+
color: #303030;
|
47 |
+
opacity: 0.4;
|
48 |
+
margin-top: -12px;
|
49 |
+
line-height: 20px;
|
50 |
+
font-size: 20px !important;
|
51 |
+
}
|
52 |
+
.selectize-dropdown-header-close:hover {
|
53 |
+
color: #000000;
|
54 |
+
}
|
55 |
+
.selectize-dropdown.plugin-optgroup_columns .optgroup {
|
56 |
+
border-right: 1px solid #f2f2f2;
|
57 |
+
border-top: 0 none;
|
58 |
+
float: left;
|
59 |
+
-webkit-box-sizing: border-box;
|
60 |
+
-moz-box-sizing: border-box;
|
61 |
+
box-sizing: border-box;
|
62 |
+
}
|
63 |
+
.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child {
|
64 |
+
border-right: 0 none;
|
65 |
+
}
|
66 |
+
.selectize-dropdown.plugin-optgroup_columns .optgroup:before {
|
67 |
+
display: none;
|
68 |
+
}
|
69 |
+
.selectize-dropdown.plugin-optgroup_columns .optgroup-header {
|
70 |
+
border-top: 0 none;
|
71 |
+
}
|
72 |
+
.selectize-control.plugin-remove_button [data-value] {
|
73 |
+
position: relative;
|
74 |
+
padding-right: 24px !important;
|
75 |
+
}
|
76 |
+
.selectize-control.plugin-remove_button [data-value] .remove {
|
77 |
+
z-index: 1;
|
78 |
+
/* fixes ie bug (see #392) */
|
79 |
+
position: absolute;
|
80 |
+
top: 0;
|
81 |
+
right: 0;
|
82 |
+
bottom: 0;
|
83 |
+
width: 17px;
|
84 |
+
text-align: center;
|
85 |
+
font-weight: bold;
|
86 |
+
font-size: 12px;
|
87 |
+
color: inherit;
|
88 |
+
text-decoration: none;
|
89 |
+
vertical-align: middle;
|
90 |
+
display: inline-block;
|
91 |
+
padding: 2px 0 0 0;
|
92 |
+
border-left: 1px solid #d0d0d0;
|
93 |
+
-webkit-border-radius: 0 2px 2px 0;
|
94 |
+
-moz-border-radius: 0 2px 2px 0;
|
95 |
+
border-radius: 0 2px 2px 0;
|
96 |
+
-webkit-box-sizing: border-box;
|
97 |
+
-moz-box-sizing: border-box;
|
98 |
+
box-sizing: border-box;
|
99 |
+
}
|
100 |
+
.selectize-control.plugin-remove_button [data-value] .remove:hover {
|
101 |
+
background: rgba(0, 0, 0, 0.05);
|
102 |
+
}
|
103 |
+
.selectize-control.plugin-remove_button [data-value].active .remove {
|
104 |
+
border-left-color: #cacaca;
|
105 |
+
}
|
106 |
+
.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover {
|
107 |
+
background: none;
|
108 |
+
}
|
109 |
+
.selectize-control.plugin-remove_button .disabled [data-value] .remove {
|
110 |
+
border-left-color: #ffffff;
|
111 |
+
}
|
112 |
+
.selectize-control.plugin-remove_button .remove-single {
|
113 |
+
position: absolute;
|
114 |
+
right: 0;
|
115 |
+
top: 0;
|
116 |
+
font-size: 23px;
|
117 |
+
}
|
118 |
+
.selectize-control {
|
119 |
+
position: relative;
|
120 |
+
}
|
121 |
+
.selectize-dropdown,
|
122 |
+
.selectize-input,
|
123 |
+
.selectize-input input {
|
124 |
+
color: #303030;
|
125 |
+
font-family: inherit;
|
126 |
+
font-size: 13px;
|
127 |
+
line-height: 18px;
|
128 |
+
-webkit-font-smoothing: inherit;
|
129 |
+
}
|
130 |
+
.selectize-input,
|
131 |
+
.selectize-control.single .selectize-input.input-active {
|
132 |
+
background: #fff;
|
133 |
+
cursor: text;
|
134 |
+
display: inline-block;
|
135 |
+
}
|
136 |
+
.selectize-input {
|
137 |
+
border: 1px solid #d0d0d0;
|
138 |
+
padding: 8px 8px;
|
139 |
+
display: inline-block;
|
140 |
+
width: 100%;
|
141 |
+
overflow: hidden;
|
142 |
+
position: relative;
|
143 |
+
z-index: 1;
|
144 |
+
-webkit-box-sizing: border-box;
|
145 |
+
-moz-box-sizing: border-box;
|
146 |
+
box-sizing: border-box;
|
147 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
|
148 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
|
149 |
+
-webkit-border-radius: 3px;
|
150 |
+
-moz-border-radius: 3px;
|
151 |
+
border-radius: 3px;
|
152 |
+
}
|
153 |
+
.selectize-control.multi .selectize-input.has-items {
|
154 |
+
padding: 6px 8px 3px;
|
155 |
+
}
|
156 |
+
.selectize-input.full {
|
157 |
+
background-color: #fff;
|
158 |
+
}
|
159 |
+
.selectize-input.disabled,
|
160 |
+
.selectize-input.disabled * {
|
161 |
+
cursor: default !important;
|
162 |
+
}
|
163 |
+
.selectize-input.focus {
|
164 |
+
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
|
165 |
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
|
166 |
+
}
|
167 |
+
.selectize-input.dropdown-active {
|
168 |
+
-webkit-border-radius: 3px 3px 0 0;
|
169 |
+
-moz-border-radius: 3px 3px 0 0;
|
170 |
+
border-radius: 3px 3px 0 0;
|
171 |
+
}
|
172 |
+
.selectize-input > * {
|
173 |
+
vertical-align: baseline;
|
174 |
+
display: -moz-inline-stack;
|
175 |
+
display: inline-block;
|
176 |
+
zoom: 1;
|
177 |
+
*display: inline;
|
178 |
+
}
|
179 |
+
.selectize-control.multi .selectize-input > div {
|
180 |
+
cursor: pointer;
|
181 |
+
margin: 0 3px 3px 0;
|
182 |
+
padding: 2px 6px;
|
183 |
+
background: #f2f2f2;
|
184 |
+
color: #303030;
|
185 |
+
border: 0 solid #d0d0d0;
|
186 |
+
}
|
187 |
+
.selectize-control.multi .selectize-input > div.active {
|
188 |
+
background: #e8e8e8;
|
189 |
+
color: #303030;
|
190 |
+
border: 0 solid #cacaca;
|
191 |
+
}
|
192 |
+
.selectize-control.multi .selectize-input.disabled > div,
|
193 |
+
.selectize-control.multi .selectize-input.disabled > div.active {
|
194 |
+
color: #7d7d7d;
|
195 |
+
background: #ffffff;
|
196 |
+
border: 0 solid #ffffff;
|
197 |
+
}
|
198 |
+
.selectize-input > input {
|
199 |
+
display: inline-block !important;
|
200 |
+
padding: 0 !important;
|
201 |
+
min-height: 0 !important;
|
202 |
+
max-height: none !important;
|
203 |
+
max-width: 100% !important;
|
204 |
+
margin: 0 2px 0 0 !important;
|
205 |
+
text-indent: 0 !important;
|
206 |
+
border: 0 none !important;
|
207 |
+
background: none !important;
|
208 |
+
line-height: inherit !important;
|
209 |
+
-webkit-user-select: auto !important;
|
210 |
+
-webkit-box-shadow: none !important;
|
211 |
+
box-shadow: none !important;
|
212 |
+
}
|
213 |
+
.selectize-input > input::-ms-clear {
|
214 |
+
display: none;
|
215 |
+
}
|
216 |
+
.selectize-input > input:focus {
|
217 |
+
outline: none !important;
|
218 |
+
}
|
219 |
+
.selectize-input::after {
|
220 |
+
content: ' ';
|
221 |
+
display: block;
|
222 |
+
clear: left;
|
223 |
+
}
|
224 |
+
.selectize-input.dropdown-active::before {
|
225 |
+
content: ' ';
|
226 |
+
display: block;
|
227 |
+
position: absolute;
|
228 |
+
background: #f0f0f0;
|
229 |
+
height: 1px;
|
230 |
+
bottom: 0;
|
231 |
+
left: 0;
|
232 |
+
right: 0;
|
233 |
+
}
|
234 |
+
.selectize-dropdown {
|
235 |
+
position: absolute;
|
236 |
+
z-index: 10;
|
237 |
+
border: 1px solid #d0d0d0;
|
238 |
+
background: #fff;
|
239 |
+
margin: -1px 0 0 0;
|
240 |
+
border-top: 0 none;
|
241 |
+
-webkit-box-sizing: border-box;
|
242 |
+
-moz-box-sizing: border-box;
|
243 |
+
box-sizing: border-box;
|
244 |
+
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
245 |
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
246 |
+
-webkit-border-radius: 0 0 3px 3px;
|
247 |
+
-moz-border-radius: 0 0 3px 3px;
|
248 |
+
border-radius: 0 0 3px 3px;
|
249 |
+
}
|
250 |
+
.selectize-dropdown [data-selectable] {
|
251 |
+
cursor: pointer;
|
252 |
+
overflow: hidden;
|
253 |
+
}
|
254 |
+
.selectize-dropdown [data-selectable] .highlight {
|
255 |
+
background: rgba(125, 168, 208, 0.2);
|
256 |
+
-webkit-border-radius: 1px;
|
257 |
+
-moz-border-radius: 1px;
|
258 |
+
border-radius: 1px;
|
259 |
+
}
|
260 |
+
.selectize-dropdown .option,
|
261 |
+
.selectize-dropdown .optgroup-header {
|
262 |
+
padding: 5px 8px;
|
263 |
+
}
|
264 |
+
.selectize-dropdown .option,
|
265 |
+
.selectize-dropdown [data-disabled],
|
266 |
+
.selectize-dropdown [data-disabled] [data-selectable].option {
|
267 |
+
cursor: inherit;
|
268 |
+
opacity: 0.5;
|
269 |
+
}
|
270 |
+
.selectize-dropdown [data-selectable].option {
|
271 |
+
opacity: 1;
|
272 |
+
}
|
273 |
+
.selectize-dropdown .optgroup:first-child .optgroup-header {
|
274 |
+
border-top: 0 none;
|
275 |
+
}
|
276 |
+
.selectize-dropdown .optgroup-header {
|
277 |
+
color: #303030;
|
278 |
+
background: #fff;
|
279 |
+
cursor: default;
|
280 |
+
}
|
281 |
+
.selectize-dropdown .active {
|
282 |
+
background-color: #f5fafd;
|
283 |
+
color: #495c68;
|
284 |
+
}
|
285 |
+
.selectize-dropdown .active.create {
|
286 |
+
color: #495c68;
|
287 |
+
}
|
288 |
+
.selectize-dropdown .create {
|
289 |
+
color: rgba(48, 48, 48, 0.5);
|
290 |
+
}
|
291 |
+
.selectize-dropdown-content {
|
292 |
+
overflow-y: auto;
|
293 |
+
overflow-x: hidden;
|
294 |
+
max-height: 200px;
|
295 |
+
-webkit-overflow-scrolling: touch;
|
296 |
+
}
|
297 |
+
.selectize-control.single .selectize-input,
|
298 |
+
.selectize-control.single .selectize-input input {
|
299 |
+
cursor: pointer;
|
300 |
+
}
|
301 |
+
.selectize-control.single .selectize-input.input-active,
|
302 |
+
.selectize-control.single .selectize-input.input-active input {
|
303 |
+
cursor: text;
|
304 |
+
}
|
305 |
+
.selectize-control.single .selectize-input:after {
|
306 |
+
content: ' ';
|
307 |
+
display: block;
|
308 |
+
position: absolute;
|
309 |
+
top: 50%;
|
310 |
+
right: 15px;
|
311 |
+
margin-top: -3px;
|
312 |
+
width: 0;
|
313 |
+
height: 0;
|
314 |
+
border-style: solid;
|
315 |
+
border-width: 5px 5px 0 5px;
|
316 |
+
border-color: #808080 transparent transparent transparent;
|
317 |
+
}
|
318 |
+
.selectize-control.single .selectize-input.dropdown-active:after {
|
319 |
+
margin-top: -4px;
|
320 |
+
border-width: 0 5px 5px 5px;
|
321 |
+
border-color: transparent transparent #808080 transparent;
|
322 |
+
}
|
323 |
+
.selectize-control.rtl.single .selectize-input:after {
|
324 |
+
left: 15px;
|
325 |
+
right: auto;
|
326 |
+
}
|
327 |
+
.selectize-control.rtl .selectize-input > input {
|
328 |
+
margin: 0 4px 0 -2px !important;
|
329 |
+
}
|
330 |
+
.selectize-control .selectize-input.disabled {
|
331 |
+
opacity: 0.5;
|
332 |
+
background-color: #fafafa;
|
333 |
+
}
|
css/admin/selectize-v0.12.6/selectize.default.css
ADDED
@@ -0,0 +1,403 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* selectize.default.css (v0.12.6) - Default Theme
|
3 |
+
* Copyright (c) 2013–2015 Brian Reavis & contributors
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
|
6 |
+
* file except in compliance with the License. You may obtain a copy of the License at:
|
7 |
+
* http://www.apache.org/licenses/LICENSE-2.0
|
8 |
+
*
|
9 |
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
10 |
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11 |
+
* ANY KIND, either express or implied. See the License for the specific language
|
12 |
+
* governing permissions and limitations under the License.
|
13 |
+
*
|
14 |
+
* @author Brian Reavis <brian@thirdroute.com>
|
15 |
+
*/
|
16 |
+
.selectize-control.plugin-drag_drop.multi > .selectize-input > div.ui-sortable-placeholder {
|
17 |
+
visibility: visible !important;
|
18 |
+
background: #f2f2f2 !important;
|
19 |
+
background: rgba(0, 0, 0, 0.06) !important;
|
20 |
+
border: 0 none !important;
|
21 |
+
-webkit-box-shadow: inset 0 0 12px 4px #fff;
|
22 |
+
box-shadow: inset 0 0 12px 4px #fff;
|
23 |
+
}
|
24 |
+
.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after {
|
25 |
+
content: '!';
|
26 |
+
visibility: hidden;
|
27 |
+
}
|
28 |
+
.selectize-control.plugin-drag_drop .ui-sortable-helper {
|
29 |
+
-webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
|
30 |
+
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
|
31 |
+
}
|
32 |
+
.selectize-dropdown-header {
|
33 |
+
position: relative;
|
34 |
+
padding: 5px 8px;
|
35 |
+
border-bottom: 1px solid #d0d0d0;
|
36 |
+
background: #f8f8f8;
|
37 |
+
-webkit-border-radius: 3px 3px 0 0;
|
38 |
+
-moz-border-radius: 3px 3px 0 0;
|
39 |
+
border-radius: 3px 3px 0 0;
|
40 |
+
}
|
41 |
+
.selectize-dropdown-header-close {
|
42 |
+
position: absolute;
|
43 |
+
right: 8px;
|
44 |
+
top: 50%;
|
45 |
+
color: #303030;
|
46 |
+
opacity: 0.4;
|
47 |
+
margin-top: -12px;
|
48 |
+
line-height: 20px;
|
49 |
+
font-size: 20px !important;
|
50 |
+
}
|
51 |
+
.selectize-dropdown-header-close:hover {
|
52 |
+
color: #000000;
|
53 |
+
}
|
54 |
+
.selectize-dropdown.plugin-optgroup_columns .optgroup {
|
55 |
+
border-right: 1px solid #f2f2f2;
|
56 |
+
border-top: 0 none;
|
57 |
+
float: left;
|
58 |
+
-webkit-box-sizing: border-box;
|
59 |
+
-moz-box-sizing: border-box;
|
60 |
+
box-sizing: border-box;
|
61 |
+
}
|
62 |
+
.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child {
|
63 |
+
border-right: 0 none;
|
64 |
+
}
|
65 |
+
.selectize-dropdown.plugin-optgroup_columns .optgroup:before {
|
66 |
+
display: none;
|
67 |
+
}
|
68 |
+
.selectize-dropdown.plugin-optgroup_columns .optgroup-header {
|
69 |
+
border-top: 0 none;
|
70 |
+
}
|
71 |
+
.selectize-control.plugin-remove_button [data-value] {
|
72 |
+
position: relative;
|
73 |
+
padding-right: 24px !important;
|
74 |
+
}
|
75 |
+
.selectize-control.plugin-remove_button [data-value] .remove {
|
76 |
+
z-index: 1;
|
77 |
+
/* fixes ie bug (see #392) */
|
78 |
+
position: absolute;
|
79 |
+
top: 0;
|
80 |
+
right: 0;
|
81 |
+
bottom: 0;
|
82 |
+
width: 17px;
|
83 |
+
text-align: center;
|
84 |
+
font-weight: bold;
|
85 |
+
font-size: 12px;
|
86 |
+
color: inherit;
|
87 |
+
text-decoration: none;
|
88 |
+
vertical-align: middle;
|
89 |
+
display: inline-block;
|
90 |
+
padding: 2px 0 0 0;
|
91 |
+
border-left: 1px solid #0073bb;
|
92 |
+
-webkit-border-radius: 0 2px 2px 0;
|
93 |
+
-moz-border-radius: 0 2px 2px 0;
|
94 |
+
border-radius: 0 2px 2px 0;
|
95 |
+
-webkit-box-sizing: border-box;
|
96 |
+
-moz-box-sizing: border-box;
|
97 |
+
box-sizing: border-box;
|
98 |
+
}
|
99 |
+
.selectize-control.plugin-remove_button [data-value] .remove:hover {
|
100 |
+
background: rgba(0, 0, 0, 0.05);
|
101 |
+
}
|
102 |
+
.selectize-control.plugin-remove_button [data-value].active .remove {
|
103 |
+
border-left-color: #00578d;
|
104 |
+
}
|
105 |
+
.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover {
|
106 |
+
background: none;
|
107 |
+
}
|
108 |
+
.selectize-control.plugin-remove_button .disabled [data-value] .remove {
|
109 |
+
border-left-color: #aaaaaa;
|
110 |
+
}
|
111 |
+
.selectize-control.plugin-remove_button .remove-single {
|
112 |
+
position: absolute;
|
113 |
+
right: 0;
|
114 |
+
top: 0;
|
115 |
+
font-size: 23px;
|
116 |
+
}
|
117 |
+
.selectize-control {
|
118 |
+
position: relative;
|
119 |
+
}
|
120 |
+
.selectize-dropdown,
|
121 |
+
.selectize-input,
|
122 |
+
.selectize-input input {
|
123 |
+
color: #303030;
|
124 |
+
font-family: inherit;
|
125 |
+
font-size: 13px;
|
126 |
+
line-height: 18px;
|
127 |
+
-webkit-font-smoothing: inherit;
|
128 |
+
}
|
129 |
+
.selectize-input,
|
130 |
+
.selectize-control.single .selectize-input.input-active {
|
131 |
+
background: #fff;
|
132 |
+
cursor: text;
|
133 |
+
display: inline-block;
|
134 |
+
}
|
135 |
+
.selectize-input {
|
136 |
+
border: 1px solid #d0d0d0;
|
137 |
+
padding: 8px 8px;
|
138 |
+
display: inline-block;
|
139 |
+
width: 100%;
|
140 |
+
overflow: hidden;
|
141 |
+
position: relative;
|
142 |
+
z-index: 1;
|
143 |
+
-webkit-box-sizing: border-box;
|
144 |
+
-moz-box-sizing: border-box;
|
145 |
+
box-sizing: border-box;
|
146 |
+
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
|
147 |
+
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
|
148 |
+
-webkit-border-radius: 3px;
|
149 |
+
-moz-border-radius: 3px;
|
150 |
+
border-radius: 3px;
|
151 |
+
}
|
152 |
+
.selectize-control.multi .selectize-input.has-items {
|
153 |
+
padding: 5px 8px 2px;
|
154 |
+
}
|
155 |
+
.selectize-input.full {
|
156 |
+
background-color: #fff;
|
157 |
+
}
|
158 |
+
.selectize-input.disabled,
|
159 |
+
.selectize-input.disabled * {
|
160 |
+
cursor: default !important;
|
161 |
+
}
|
162 |
+
.selectize-input.focus {
|
163 |
+
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
|
164 |
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.15);
|
165 |
+
}
|
166 |
+
.selectize-input.dropdown-active {
|
167 |
+
-webkit-border-radius: 3px 3px 0 0;
|
168 |
+
-moz-border-radius: 3px 3px 0 0;
|
169 |
+
border-radius: 3px 3px 0 0;
|
170 |
+
}
|
171 |
+
.selectize-input > * {
|
172 |
+
vertical-align: baseline;
|
173 |
+
display: -moz-inline-stack;
|
174 |
+
display: inline-block;
|
175 |
+
zoom: 1;
|
176 |
+
*display: inline;
|
177 |
+
}
|
178 |
+
.selectize-control.multi .selectize-input > div {
|
179 |
+
cursor: pointer;
|
180 |
+
margin: 0 3px 3px 0;
|
181 |
+
padding: 2px 6px;
|
182 |
+
background: #1da7ee;
|
183 |
+
color: #fff;
|
184 |
+
border: 1px solid #0073bb;
|
185 |
+
}
|
186 |
+
.selectize-control.multi .selectize-input > div.active {
|
187 |
+
background: #92c836;
|
188 |
+
color: #fff;
|
189 |
+
border: 1px solid #00578d;
|
190 |
+
}
|
191 |
+
.selectize-control.multi .selectize-input.disabled > div,
|
192 |
+
.selectize-control.multi .selectize-input.disabled > div.active {
|
193 |
+
color: #ffffff;
|
194 |
+
background: #d2d2d2;
|
195 |
+
border: 1px solid #aaaaaa;
|
196 |
+
}
|
197 |
+
.selectize-input > input {
|
198 |
+
display: inline-block !important;
|
199 |
+
padding: 0 !important;
|
200 |
+
min-height: 0 !important;
|
201 |
+
max-height: none !important;
|
202 |
+
max-width: 100% !important;
|
203 |
+
margin: 0 1px !important;
|
204 |
+
text-indent: 0 !important;
|
205 |
+
border: 0 none !important;
|
206 |
+
background: none !important;
|
207 |
+
line-height: inherit !important;
|
208 |
+
-webkit-user-select: auto !important;
|
209 |
+
-webkit-box-shadow: none !important;
|
210 |
+
box-shadow: none !important;
|
211 |
+
}
|
212 |
+
.selectize-input > input::-ms-clear {
|
213 |
+
display: none;
|
214 |
+
}
|
215 |
+
.selectize-input > input:focus {
|
216 |
+
outline: none !important;
|
217 |
+
}
|
218 |
+
.selectize-input::after {
|
219 |
+
content: ' ';
|
220 |
+
display: block;
|
221 |
+
clear: left;
|
222 |
+
}
|
223 |
+
.selectize-input.dropdown-active::before {
|
224 |
+
content: ' ';
|
225 |
+
display: block;
|
226 |
+
position: absolute;
|
227 |
+
background: #f0f0f0;
|
228 |
+
height: 1px;
|
229 |
+
bottom: 0;
|
230 |
+
left: 0;
|
231 |
+
right: 0;
|
232 |
+
}
|
233 |
+
.selectize-dropdown {
|
234 |
+
position: absolute;
|
235 |
+
z-index: 10;
|
236 |
+
border: 1px solid #d0d0d0;
|
237 |
+
background: #fff;
|
238 |
+
margin: -1px 0 0 0;
|
239 |
+
border-top: 0 none;
|
240 |
+
-webkit-box-sizing: border-box;
|
241 |
+
-moz-box-sizing: border-box;
|
242 |
+
box-sizing: border-box;
|
243 |
+
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
244 |
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
245 |
+
-webkit-border-radius: 0 0 3px 3px;
|
246 |
+
-moz-border-radius: 0 0 3px 3px;
|
247 |
+
border-radius: 0 0 3px 3px;
|
248 |
+
}
|
249 |
+
.selectize-dropdown [data-selectable] {
|
250 |
+
cursor: pointer;
|
251 |
+
overflow: hidden;
|
252 |
+
}
|
253 |
+
.selectize-dropdown [data-selectable] .highlight {
|
254 |
+
background: rgba(125, 168, 208, 0.2);
|
255 |
+
-webkit-border-radius: 1px;
|
256 |
+
-moz-border-radius: 1px;
|
257 |
+
border-radius: 1px;
|
258 |
+
}
|
259 |
+
.selectize-dropdown .option,
|
260 |
+
.selectize-dropdown .optgroup-header {
|
261 |
+
padding: 5px 8px;
|
262 |
+
}
|
263 |
+
.selectize-dropdown .option,
|
264 |
+
.selectize-dropdown [data-disabled],
|
265 |
+
.selectize-dropdown [data-disabled] [data-selectable].option {
|
266 |
+
cursor: inherit;
|
267 |
+
opacity: 0.5;
|
268 |
+
}
|
269 |
+
.selectize-dropdown [data-selectable].option {
|
270 |
+
opacity: 1;
|
271 |
+
}
|
272 |
+
.selectize-dropdown .optgroup:first-child .optgroup-header {
|
273 |
+
border-top: 0 none;
|
274 |
+
}
|
275 |
+
.selectize-dropdown .optgroup-header {
|
276 |
+
color: #303030;
|
277 |
+
background: #fff;
|
278 |
+
cursor: default;
|
279 |
+
}
|
280 |
+
.selectize-dropdown .active {
|
281 |
+
background-color: #f5fafd;
|
282 |
+
color: #495c68;
|
283 |
+
}
|
284 |
+
.selectize-dropdown .active.create {
|
285 |
+
color: #495c68;
|
286 |
+
}
|
287 |
+
.selectize-dropdown .create {
|
288 |
+
color: rgba(48, 48, 48, 0.5);
|
289 |
+
}
|
290 |
+
.selectize-dropdown-content {
|
291 |
+
overflow-y: auto;
|
292 |
+
overflow-x: hidden;
|
293 |
+
max-height: 200px;
|
294 |
+
-webkit-overflow-scrolling: touch;
|
295 |
+
}
|
296 |
+
.selectize-control.single .selectize-input,
|
297 |
+
.selectize-control.single .selectize-input input {
|
298 |
+
cursor: pointer;
|
299 |
+
}
|
300 |
+
.selectize-control.single .selectize-input.input-active,
|
301 |
+
.selectize-control.single .selectize-input.input-active input {
|
302 |
+
cursor: text;
|
303 |
+
}
|
304 |
+
.selectize-control.single .selectize-input:after {
|
305 |
+
content: ' ';
|
306 |
+
display: block;
|
307 |
+
position: absolute;
|
308 |
+
top: 50%;
|
309 |
+
right: 15px;
|
310 |
+
margin-top: -3px;
|
311 |
+
width: 0;
|
312 |
+
height: 0;
|
313 |
+
border-style: solid;
|
314 |
+
border-width: 5px 5px 0 5px;
|
315 |
+
border-color: #808080 transparent transparent transparent;
|
316 |
+
}
|
317 |
+
.selectize-control.single .selectize-input.dropdown-active:after {
|
318 |
+
margin-top: -4px;
|
319 |
+
border-width: 0 5px 5px 5px;
|
320 |
+
border-color: transparent transparent #808080 transparent;
|
321 |
+
}
|
322 |
+
.selectize-control.rtl.single .selectize-input:after {
|
323 |
+
left: 15px;
|
324 |
+
right: auto;
|
325 |
+
}
|
326 |
+
.selectize-control.rtl .selectize-input > input {
|
327 |
+
margin: 0 4px 0 -2px !important;
|
328 |
+
}
|
329 |
+
.selectize-control .selectize-input.disabled {
|
330 |
+
opacity: 0.5;
|
331 |
+
background-color: #fafafa;
|
332 |
+
}
|
333 |
+
.selectize-control.multi .selectize-input.has-items {
|
334 |
+
padding-left: 5px;
|
335 |
+
padding-right: 5px;
|
336 |
+
}
|
337 |
+
.selectize-control.multi .selectize-input.disabled [data-value] {
|
338 |
+
color: #999;
|
339 |
+
text-shadow: none;
|
340 |
+
background: none;
|
341 |
+
-webkit-box-shadow: none;
|
342 |
+
box-shadow: none;
|
343 |
+
}
|
344 |
+
.selectize-control.multi .selectize-input.disabled [data-value],
|
345 |
+
.selectize-control.multi .selectize-input.disabled [data-value] .remove {
|
346 |
+
border-color: #e6e6e6;
|
347 |
+
}
|
348 |
+
.selectize-control.multi .selectize-input.disabled [data-value] .remove {
|
349 |
+
background: none;
|
350 |
+
}
|
351 |
+
.selectize-control.multi .selectize-input [data-value] {
|
352 |
+
text-shadow: 0 1px 0 rgba(0, 51, 83, 0.3);
|
353 |
+
-webkit-border-radius: 3px;
|
354 |
+
-moz-border-radius: 3px;
|
355 |
+
border-radius: 3px;
|
356 |
+
background-color: #1b9dec;
|
357 |
+
background-image: -moz-linear-gradient(top, #1da7ee, #178ee9);
|
358 |
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#1da7ee), to(#178ee9));
|
359 |
+
background-image: -webkit-linear-gradient(top, #1da7ee, #178ee9);
|
360 |
+
background-image: -o-linear-gradient(top, #1da7ee, #178ee9);
|
361 |
+
background-image: linear-gradient(to bottom, #1da7ee, #178ee9);
|
362 |
+
background-repeat: repeat-x;
|
363 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1da7ee', endColorstr='#ff178ee9', GradientType=0);
|
364 |
+
-webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03);
|
365 |
+
box-shadow: 0 1px 0 rgba(0,0,0,0.2),inset 0 1px rgba(255,255,255,0.03);
|
366 |
+
}
|
367 |
+
.selectize-control.multi .selectize-input [data-value].active {
|
368 |
+
background-color: #0085d4;
|
369 |
+
background-image: -moz-linear-gradient(top, #008fd8, #0075cf);
|
370 |
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#008fd8), to(#0075cf));
|
371 |
+
background-image: -webkit-linear-gradient(top, #008fd8, #0075cf);
|
372 |
+
background-image: -o-linear-gradient(top, #008fd8, #0075cf);
|
373 |
+
background-image: linear-gradient(to bottom, #008fd8, #0075cf);
|
374 |
+
background-repeat: repeat-x;
|
375 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff008fd8', endColorstr='#ff0075cf', GradientType=0);
|
376 |
+
}
|
377 |
+
.selectize-control.single .selectize-input {
|
378 |
+
-webkit-box-shadow: 0 1px 0 rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.8);
|
379 |
+
box-shadow: 0 1px 0 rgba(0,0,0,0.05), inset 0 1px 0 rgba(255,255,255,0.8);
|
380 |
+
background-color: #f9f9f9;
|
381 |
+
background-image: -moz-linear-gradient(top, #fefefe, #f2f2f2);
|
382 |
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fefefe), to(#f2f2f2));
|
383 |
+
background-image: -webkit-linear-gradient(top, #fefefe, #f2f2f2);
|
384 |
+
background-image: -o-linear-gradient(top, #fefefe, #f2f2f2);
|
385 |
+
background-image: linear-gradient(to bottom, #fefefe, #f2f2f2);
|
386 |
+
background-repeat: repeat-x;
|
387 |
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffefefe', endColorstr='#fff2f2f2', GradientType=0);
|
388 |
+
}
|
389 |
+
.selectize-control.single .selectize-input,
|
390 |
+
.selectize-dropdown.single {
|
391 |
+
border-color: #b8b8b8;
|
392 |
+
}
|
393 |
+
.selectize-dropdown .optgroup-header {
|
394 |
+
padding-top: 7px;
|
395 |
+
font-weight: bold;
|
396 |
+
font-size: 0.85em;
|
397 |
+
}
|
398 |
+
.selectize-dropdown .optgroup {
|
399 |
+
border-top: 1px solid #f0f0f0;
|
400 |
+
}
|
401 |
+
.selectize-dropdown .optgroup:first-child {
|
402 |
+
border-top: 0 none;
|
403 |
+
}
|
css/admin/selectize-v0.12.6/selectize.default.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.selectize-control.plugin-drag_drop.multi>.selectize-input>div.ui-sortable-placeholder{visibility:visible!important;background:#f2f2f2!important;background:rgba(0,0,0,.06)!important;border:0 none!important;-webkit-box-shadow:inset 0 0 12px 4px #fff;box-shadow:inset 0 0 12px 4px #fff}.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after{content:'!';visibility:hidden}.selectize-control.plugin-drag_drop .ui-sortable-helper{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.2);box-shadow:0 2px 5px rgba(0,0,0,.2)}.selectize-dropdown-header{position:relative;padding:5px 8px;border-bottom:1px solid #d0d0d0;background:#f8f8f8;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-dropdown-header-close{position:absolute;right:8px;top:50%;color:#303030;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px!important}.selectize-dropdown-header-close:hover{color:#000}.selectize-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.selectize-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.selectize-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.selectize-control.plugin-remove_button [data-value]{position:relative;padding-right:24px!important}.selectize-control.plugin-remove_button [data-value] .remove{z-index:1;position:absolute;top:0;right:0;bottom:0;width:17px;text-align:center;font-weight:700;font-size:12px;color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:2px 0 0 0;border-left:1px solid #0073bb;-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-control.plugin-remove_button [data-value] .remove:hover{background:rgba(0,0,0,.05)}.selectize-control.plugin-remove_button [data-value].active .remove{border-left-color:#00578d}.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover{background:0 0}.selectize-control.plugin-remove_button .disabled [data-value] .remove{border-left-color:#aaa}.selectize-control.plugin-remove_button .remove-single{position:absolute;right:0;top:0;font-size:23px}.selectize-control{position:relative}.selectize-dropdown,.selectize-input,.selectize-input input{color:#303030;font-family:inherit;font-size:13px;line-height:18px;-webkit-font-smoothing:inherit}.selectize-control.single .selectize-input.input-active,.selectize-input{background:#fff;cursor:text;display:inline-block}.selectize-input{border:1px solid #d0d0d0;padding:8px 8px;display:inline-block;width:100%;overflow:hidden;position:relative;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.selectize-control.multi .selectize-input.has-items{padding:5px 8px 2px}.selectize-input.full{background-color:#fff}.selectize-input.disabled,.selectize-input.disabled *{cursor:default!important}.selectize-input.focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.15)}.selectize-input.dropdown-active{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-input>*{vertical-align:baseline;display:-moz-inline-stack;display:inline-block;zoom:1}.selectize-control.multi .selectize-input>div{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;background:#1da7ee;color:#fff;border:1px solid #0073bb}.selectize-control.multi .selectize-input>div.active{background:#92c836;color:#fff;border:1px solid #00578d}.selectize-control.multi .selectize-input.disabled>div,.selectize-control.multi .selectize-input.disabled>div.active{color:#fff;background:#d2d2d2;border:1px solid #aaa}.selectize-input>input{display:inline-block!important;padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0 1px!important;text-indent:0!important;border:0 none!important;background:0 0!important;line-height:inherit!important;-webkit-user-select:auto!important;-webkit-box-shadow:none!important;box-shadow:none!important}.selectize-input>input::-ms-clear{display:none}.selectize-input>input:focus{outline:0!important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';display:block;position:absolute;background:#f0f0f0;height:1px;bottom:0;left:0;right:0}.selectize-dropdown{position:absolute;z-index:10;border:1px solid #d0d0d0;background:#fff;margin:-1px 0 0 0;border-top:0 none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(125,168,208,.2);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.selectize-dropdown .optgroup-header,.selectize-dropdown .option{padding:5px 8px}.selectize-dropdown .option,.selectize-dropdown [data-disabled],.selectize-dropdown [data-disabled] [data-selectable].option{cursor:inherit;opacity:.5}.selectize-dropdown [data-selectable].option{opacity:1}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.selectize-dropdown .optgroup-header{color:#303030;background:#fff;cursor:default}.selectize-dropdown .active{background-color:#f5fafd;color:#495c68}.selectize-dropdown .active.create{color:#495c68}.selectize-dropdown .create{color:rgba(48,48,48,.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px;-webkit-overflow-scrolling:touch}.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.single .selectize-input:after{content:' ';display:block;position:absolute;top:50%;right:15px;margin-top:-3px;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:grey transparent transparent transparent}.selectize-control.single .selectize-input.dropdown-active:after{margin-top:-4px;border-width:0 5px 5px 5px;border-color:transparent transparent grey transparent}.selectize-control.rtl.single .selectize-input:after{left:15px;right:auto}.selectize-control.rtl .selectize-input>input{margin:0 4px 0 -2px!important}.selectize-control .selectize-input.disabled{opacity:.5;background-color:#fafafa}.selectize-control.multi .selectize-input.has-items{padding-left:5px;padding-right:5px}.selectize-control.multi .selectize-input.disabled [data-value]{color:#999;text-shadow:none;background:0 0;-webkit-box-shadow:none;box-shadow:none}.selectize-control.multi .selectize-input.disabled [data-value],.selectize-control.multi .selectize-input.disabled [data-value] .remove{border-color:#e6e6e6}.selectize-control.multi .selectize-input.disabled [data-value] .remove{background:0 0}.selectize-control.multi .selectize-input [data-value]{text-shadow:0 1px 0 rgba(0,51,83,.3);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background-color:#1b9dec;background-image:-moz-linear-gradient(top,#1da7ee,#178ee9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1da7ee),to(#178ee9));background-image:-webkit-linear-gradient(top,#1da7ee,#178ee9);background-image:-o-linear-gradient(top,#1da7ee,#178ee9);background-image:linear-gradient(to bottom,#1da7ee,#178ee9);background-repeat:repeat-x;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 1px rgba(255,255,255,.03);box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 1px rgba(255,255,255,.03)}.selectize-control.multi .selectize-input [data-value].active{background-color:#0085d4;background-image:-moz-linear-gradient(top,#008fd8,#0075cf);background-image:-webkit-gradient(linear,0 0,0 100%,from(#008fd8),to(#0075cf));background-image:-webkit-linear-gradient(top,#008fd8,#0075cf);background-image:-o-linear-gradient(top,#008fd8,#0075cf);background-image:linear-gradient(to bottom,#008fd8,#0075cf);background-repeat:repeat-x}.selectize-control.single .selectize-input{-webkit-box-shadow:0 1px 0 rgba(0,0,0,.05),inset 0 1px 0 rgba(255,255,255,.8);box-shadow:0 1px 0 rgba(0,0,0,.05),inset 0 1px 0 rgba(255,255,255,.8);background-color:#f9f9f9;background-image:-moz-linear-gradient(top,#fefefe,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fefefe),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fefefe,#f2f2f2);background-image:-o-linear-gradient(top,#fefefe,#f2f2f2);background-image:linear-gradient(to bottom,#fefefe,#f2f2f2);background-repeat:repeat-x}.selectize-control.single .selectize-input,.selectize-dropdown.single{border-color:#b8b8b8}.selectize-dropdown .optgroup-header{padding-top:7px;font-weight:700;font-size:.85em}.selectize-dropdown .optgroup{border-top:1px solid #f0f0f0}.selectize-dropdown .optgroup:first-child{border-top:0 none}
|
css/admin/selectize-v0.12.6/selectize.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.selectize-control.plugin-drag_drop.multi>.selectize-input>div.ui-sortable-placeholder{visibility:visible!important;background:#f2f2f2!important;background:rgba(0,0,0,.06)!important;border:0 none!important;-webkit-box-shadow:inset 0 0 12px 4px #fff;box-shadow:inset 0 0 12px 4px #fff}.selectize-control.plugin-drag_drop .ui-sortable-placeholder::after{content:'!';visibility:hidden}.selectize-control.plugin-drag_drop .ui-sortable-helper{-webkit-box-shadow:0 2px 5px rgba(0,0,0,.2);box-shadow:0 2px 5px rgba(0,0,0,.2)}.selectize-dropdown-header{position:relative;padding:5px 8px;border-bottom:1px solid #d0d0d0;background:#f8f8f8;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-dropdown-header-close{position:absolute;right:8px;top:50%;color:#303030;opacity:.4;margin-top:-12px;line-height:20px;font-size:20px!important}.selectize-dropdown-header-close:hover{color:#000}.selectize-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0 none;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0 none}.selectize-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.selectize-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0 none}.selectize-control.plugin-remove_button [data-value]{position:relative;padding-right:24px!important}.selectize-control.plugin-remove_button [data-value] .remove{z-index:1;position:absolute;top:0;right:0;bottom:0;width:17px;text-align:center;font-weight:700;font-size:12px;color:inherit;text-decoration:none;vertical-align:middle;display:inline-block;padding:2px 0 0 0;border-left:1px solid #d0d0d0;-webkit-border-radius:0 2px 2px 0;-moz-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.selectize-control.plugin-remove_button [data-value] .remove:hover{background:rgba(0,0,0,.05)}.selectize-control.plugin-remove_button [data-value].active .remove{border-left-color:#cacaca}.selectize-control.plugin-remove_button .disabled [data-value] .remove:hover{background:0 0}.selectize-control.plugin-remove_button .disabled [data-value] .remove{border-left-color:#fff}.selectize-control.plugin-remove_button .remove-single{position:absolute;right:0;top:0;font-size:23px}.selectize-control{position:relative}.selectize-dropdown,.selectize-input,.selectize-input input{color:#303030;font-family:inherit;font-size:13px;line-height:18px;-webkit-font-smoothing:inherit}.selectize-control.single .selectize-input.input-active,.selectize-input{background:#fff;cursor:text;display:inline-block}.selectize-input{border:1px solid #d0d0d0;padding:8px 8px;display:inline-block;width:100%;overflow:hidden;position:relative;z-index:1;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.selectize-control.multi .selectize-input.has-items{padding:6px 8px 3px}.selectize-input.full{background-color:#fff}.selectize-input.disabled,.selectize-input.disabled *{cursor:default!important}.selectize-input.focus{-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.15)}.selectize-input.dropdown-active{-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.selectize-input>*{vertical-align:baseline;display:-moz-inline-stack;display:inline-block;zoom:1}.selectize-control.multi .selectize-input>div{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;background:#f2f2f2;color:#303030;border:0 solid #d0d0d0}.selectize-control.multi .selectize-input>div.active{background:#e8e8e8;color:#303030;border:0 solid #cacaca}.selectize-control.multi .selectize-input.disabled>div,.selectize-control.multi .selectize-input.disabled>div.active{color:#7d7d7d;background:#fff;border:0 solid #fff}.selectize-input>input{display:inline-block!important;padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0 2px 0 0!important;text-indent:0!important;border:0 none!important;background:0 0!important;line-height:inherit!important;-webkit-user-select:auto!important;-webkit-box-shadow:none!important;box-shadow:none!important}.selectize-input>input::-ms-clear{display:none}.selectize-input>input:focus{outline:0!important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';display:block;position:absolute;background:#f0f0f0;height:1px;bottom:0;left:0;right:0}.selectize-dropdown{position:absolute;z-index:10;border:1px solid #d0d0d0;background:#fff;margin:-1px 0 0 0;border-top:0 none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1);-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(125,168,208,.2);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.selectize-dropdown .optgroup-header,.selectize-dropdown .option{padding:5px 8px}.selectize-dropdown .option,.selectize-dropdown [data-disabled],.selectize-dropdown [data-disabled] [data-selectable].option{cursor:inherit;opacity:.5}.selectize-dropdown [data-selectable].option{opacity:1}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0 none}.selectize-dropdown .optgroup-header{color:#303030;background:#fff;cursor:default}.selectize-dropdown .active{background-color:#f5fafd;color:#495c68}.selectize-dropdown .active.create{color:#495c68}.selectize-dropdown .create{color:rgba(48,48,48,.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px;-webkit-overflow-scrolling:touch}.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.single .selectize-input:after{content:' ';display:block;position:absolute;top:50%;right:15px;margin-top:-3px;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:grey transparent transparent transparent}.selectize-control.single .selectize-input.dropdown-active:after{margin-top:-4px;border-width:0 5px 5px 5px;border-color:transparent transparent grey transparent}.selectize-control.rtl.single .selectize-input:after{left:15px;right:auto}.selectize-control.rtl .selectize-input>input{margin:0 4px 0 -2px!important}.selectize-control .selectize-input.disabled{opacity:.5;background-color:#fafafa}
|
css/aioseop-font-icons.css
CHANGED
@@ -1,8 +1,7 @@
|
|
1 |
/**
|
2 |
* GlyphIcons / Custom Icons.
|
3 |
*
|
4 |
-
* @author
|
5 |
-
* @author Semper Fi Web Design.
|
6 |
* @copyright http://semperplugins.com
|
7 |
* @package All-in-One-SEO-Pack.
|
8 |
*/
|
@@ -99,29 +98,6 @@
|
|
99 |
content: '\71';
|
100 |
}
|
101 |
|
102 |
-
/* QUICKEDIT */
|
103 |
-
|
104 |
-
.aioseop_edit_link {
|
105 |
-
display: inline-block;
|
106 |
-
position: absolute;
|
107 |
-
}
|
108 |
-
|
109 |
-
.aioseop-icon-cog-edit {
|
110 |
-
color: #72777c;
|
111 |
-
}
|
112 |
-
|
113 |
-
.aioseop-icon-cog-edit:hover {
|
114 |
-
color: #0073aa;
|
115 |
-
}
|
116 |
-
|
117 |
-
.aioseop-icon-cog-edit:before {
|
118 |
-
content: '\6e';
|
119 |
-
}
|
120 |
-
|
121 |
-
.aioseop-label-quickedit {
|
122 |
-
padding-left: 20px;
|
123 |
-
}
|
124 |
-
|
125 |
/* TIP ICON ( Robots ) */
|
126 |
|
127 |
div.aioseop_tip_icon {
|
1 |
/**
|
2 |
* GlyphIcons / Custom Icons.
|
3 |
*
|
4 |
+
* @author All in One SEO Team.
|
|
|
5 |
* @copyright http://semperplugins.com
|
6 |
* @package All-in-One-SEO-Pack.
|
7 |
*/
|
98 |
content: '\71';
|
99 |
}
|
100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
/* TIP ICON ( Robots ) */
|
102 |
|
103 |
div.aioseop_tip_icon {
|
css/aiosp_admin.css
CHANGED
@@ -1,70 +1,446 @@
|
|
1 |
#aioseop_settings_header #message {
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
}
|
10 |
|
11 |
-
@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
19 |
}
|
20 |
|
21 |
.proupgrade a {
|
22 |
-
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
}
|
26 |
|
27 |
li#wp-admin-bar-aioseop-pro-upgrade a.ab-item {
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
}
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
font-size: 110%;
|
37 |
}
|
38 |
|
39 |
.upgrade_menu_link {
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
}
|
44 |
|
45 |
-
label[for=aioseop_edit_profile_header]
|
46 |
-
|
47 |
-
font-size: 1.3em;
|
48 |
}
|
49 |
|
50 |
#aioseop_edit_profile_header {
|
51 |
-
|
52 |
}
|
53 |
|
54 |
.ui-tooltip.ui-widget.ui-corner-all.ui-widget-content.aioseop-ui-tooltip {
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
}
|
62 |
|
63 |
.ui-tooltip.ui-widget.ui-corner-all.ui-widget-content.aioseop-ui-tooltip a {
|
64 |
-
|
65 |
-
|
66 |
}
|
67 |
|
68 |
.ui-tooltip.ui-widget.ui-corner-all.ui-widget-content.aioseop-ui-tooltip dt {
|
69 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
#aioseop_settings_header #message {
|
2 |
+
padding: 5px 0px 5px 50px;
|
3 |
+
background-image: url(../images/update32.png);
|
4 |
+
background-repeat: no-repeat;
|
5 |
+
background-position: 10px;
|
6 |
+
font-size: 14px;
|
7 |
+
min-height: 32px;
|
8 |
+
clear: none;
|
9 |
}
|
10 |
|
11 |
+
@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
|
12 |
+
only screen and ( min--moz-device-pixel-ratio: 1.5),
|
13 |
+
only screen and ( -o-min-device-pixel-ratio: 3/2),
|
14 |
+
only screen and ( min-device-pixel-ratio: 1.5),
|
15 |
+
only screen and ( min-resolution: 1.5dppx) {
|
16 |
+
#aioseop_settings_header #message {
|
17 |
+
background-image: url(../images/update64.png) !important;
|
18 |
+
-webkit-background-size: 32px 32px !important;
|
19 |
+
-moz-background-size: 32px 32px !important;
|
20 |
+
background-size: 32px 32px !important;
|
21 |
+
}
|
22 |
}
|
23 |
|
24 |
.proupgrade a {
|
25 |
+
font-weight: 900;
|
26 |
+
color: #d54e21;
|
27 |
+
font-size: 105%;
|
28 |
+
}
|
29 |
+
|
30 |
+
.proupgrade a:hover {
|
31 |
+
font-weight: 900;
|
32 |
+
color: #ca3909;
|
33 |
+
font-size: 105%;
|
34 |
}
|
35 |
|
36 |
li#wp-admin-bar-aioseop-pro-upgrade a.ab-item {
|
37 |
+
font-weight: 900;
|
38 |
+
color: #d54e21 !important;
|
39 |
+
font-size: 110%;
|
40 |
+
}
|
41 |
+
|
42 |
+
.aioseop-metabox-pro-cta {
|
43 |
+
font-weight: 800;
|
44 |
+
color: #9a1313 !important;
|
45 |
+
font-size: 110%;
|
46 |
+
text-decoration: none;
|
47 |
}
|
48 |
|
49 |
+
.aioseop-metabox-pro-cta:hover {
|
50 |
+
color: #ca1111 !important;
|
51 |
+
box-shadow: none;
|
|
|
52 |
}
|
53 |
|
54 |
.upgrade_menu_link {
|
55 |
+
font-weight: 900;
|
56 |
+
color: #d54e21;
|
57 |
+
font-size: 105%;
|
58 |
}
|
59 |
|
60 |
+
label[for=aioseop_edit_profile_header] {
|
61 |
+
font-size: 1.3em;
|
|
|
62 |
}
|
63 |
|
64 |
#aioseop_edit_profile_header {
|
65 |
+
display: none;
|
66 |
}
|
67 |
|
68 |
.ui-tooltip.ui-widget.ui-corner-all.ui-widget-content.aioseop-ui-tooltip {
|
69 |
+
font-family: 'Open Sans', sans-serif;
|
70 |
+
-webkit-box-shadow: 0px 1px 6px -2px #0073AA;
|
71 |
+
box-shadow: 0px 1px 6px -2px #0073AA;
|
72 |
+
border: 0px;
|
73 |
+
border-radius: 0px;
|
74 |
+
background: #FEFEFE;
|
75 |
}
|
76 |
|
77 |
.ui-tooltip.ui-widget.ui-corner-all.ui-widget-content.aioseop-ui-tooltip a {
|
78 |
+
color: #0073AA;
|
79 |
+
text-decoration: none;
|
80 |
}
|
81 |
|
82 |
.ui-tooltip.ui-widget.ui-corner-all.ui-widget-content.aioseop-ui-tooltip dt {
|
83 |
+
font-weight: bold;
|
84 |
+
}
|
85 |
+
|
86 |
+
|
87 |
+
/** --- Product Education --- **/
|
88 |
+
|
89 |
+
|
90 |
+
/** License box **/
|
91 |
+
|
92 |
+
.license-box {
|
93 |
+
max-width: 800px;
|
94 |
+
}
|
95 |
+
|
96 |
+
.license-box p:first-of-type {
|
97 |
+
margin-top: 0;
|
98 |
+
}
|
99 |
+
|
100 |
+
.license-box a {
|
101 |
+
font-weight: bold;
|
102 |
+
}
|
103 |
+
|
104 |
+
.license-box p:last-of-type {
|
105 |
+
font-style: italic;
|
106 |
+
}
|
107 |
+
|
108 |
+
|
109 |
+
/** Notice bar **/
|
110 |
+
|
111 |
+
#aioseop-notice-bar {
|
112 |
+
background-color: #DDDDDD;
|
113 |
+
border-top: 3px solid #007cba;
|
114 |
+
color: #777777;
|
115 |
+
text-align: center;
|
116 |
+
position: relative;
|
117 |
+
padding: 7px;
|
118 |
+
margin-left: -20px;
|
119 |
+
margin-bottom: -4px;
|
120 |
+
opacity: 1;
|
121 |
+
transition: all .3s ease-in-out;
|
122 |
+
max-height: 100px;
|
123 |
+
overflow: hidden;
|
124 |
+
}
|
125 |
+
|
126 |
+
#aioseop-notice-bar a {
|
127 |
+
color: #007cba;
|
128 |
+
}
|
129 |
+
|
130 |
+
#aioseop-notice-bar a:hover {
|
131 |
+
color: #00a0d2;
|
132 |
+
}
|
133 |
+
|
134 |
+
#aioseop-notice-bar .dismiss {
|
135 |
+
position: absolute;
|
136 |
+
top: 0;
|
137 |
+
right: 0;
|
138 |
+
border: none;
|
139 |
+
padding: 5px;
|
140 |
+
margin-top: 1px;
|
141 |
+
background: 0 0;
|
142 |
+
color: #72777c;
|
143 |
+
cursor: pointer;
|
144 |
+
}
|
145 |
+
|
146 |
+
#aioseop-notice-bar .dismiss:before {
|
147 |
+
background: 0 0;
|
148 |
+
color: #72777c;
|
149 |
+
content: "\f335";
|
150 |
+
display: block;
|
151 |
+
font: normal 20px/20px dashicons;
|
152 |
+
speak: none;
|
153 |
+
height: 20px;
|
154 |
+
text-align: center;
|
155 |
+
width: 20px;
|
156 |
+
-webkit-font-smoothing: antialiased;
|
157 |
+
}
|
158 |
+
|
159 |
+
#aioseop-notice-bar.out {
|
160 |
+
opacity: .5;
|
161 |
+
max-height: 0;
|
162 |
+
}
|
163 |
+
|
164 |
+
|
165 |
+
/** Video sitemap upsell **/
|
166 |
+
|
167 |
+
#aioseop-video-sitemap-upsell {
|
168 |
+
padding: 25px 20px;
|
169 |
+
margin: 10px 0 0 0;
|
170 |
+
position: relative;
|
171 |
+
background-color: #fff;
|
172 |
+
border: 1px solid #dadada;
|
173 |
+
}
|
174 |
+
|
175 |
+
#aioseop-video-sitemap-upsell h5 {
|
176 |
+
margin: 0;
|
177 |
+
font-size: 18px;
|
178 |
+
font-weight: 700;
|
179 |
+
}
|
180 |
+
|
181 |
+
#aioseop-video-sitemap-upsell p {
|
182 |
+
font-size: rem;
|
183 |
+
}
|
184 |
+
|
185 |
+
#aioseop-video-sitemap-upsell .dismiss {
|
186 |
+
position: absolute;
|
187 |
+
top: 10px;
|
188 |
+
right: 10px;
|
189 |
+
color: #666;
|
190 |
+
font-size: 1rem;
|
191 |
+
}
|
192 |
+
|
193 |
+
#aioseop-video-sitemap-upsell .dismiss:hover {
|
194 |
+
cursor: pointer;
|
195 |
+
color: rgb(72, 70, 70);
|
196 |
+
}
|
197 |
+
|
198 |
+
.aioseop-rating-star {
|
199 |
+
width: 15px;
|
200 |
+
height: 15px;
|
201 |
+
font-size: 15px;
|
202 |
+
line-height: 1.5;
|
203 |
+
color: orange;
|
204 |
+
}
|
205 |
+
|
206 |
+
|
207 |
+
/** Taxonomies upsell **/
|
208 |
+
|
209 |
+
.aioseop-preview-wrapper{
|
210 |
+
max-width:800px;
|
211 |
+
margin-top:30px;
|
212 |
+
}
|
213 |
+
|
214 |
+
.aioseop-upsell-blurred {
|
215 |
+
-webkit-filter: blur(3px);
|
216 |
+
-moz-filter: blur(3px);
|
217 |
+
-ms-filter: blur(3px);
|
218 |
+
-o-filter: blur(3px);
|
219 |
+
filter: blur(3px);
|
220 |
+
-webkit-touch-callout: none;
|
221 |
+
-webkit-user-select: none;
|
222 |
+
-khtml-user-select: none;
|
223 |
+
-moz-user-select: none;
|
224 |
+
-ms-user-select: none;
|
225 |
+
user-select: none;
|
226 |
+
}
|
227 |
+
|
228 |
+
.aioseop-taxonomies-upsell-modal {
|
229 |
+
text-align: center;
|
230 |
+
width: 750px;
|
231 |
+
box-shadow: 0 0 60px 30px rgba(0, 0, 0, 0.15);
|
232 |
+
border-radius: 3px;
|
233 |
+
|
234 |
+
position: absolute;
|
235 |
+
margin-top: -750px;
|
236 |
+
margin-left: 25px;
|
237 |
+
z-index: 100;
|
238 |
+
background-color: white;
|
239 |
+
}
|
240 |
+
|
241 |
+
@media (max-width: 1000px) {
|
242 |
+
body .aioseop-preview-wrapper {
|
243 |
+
display: none;
|
244 |
+
}
|
245 |
+
}
|
246 |
+
|
247 |
+
.aioseop-taxonomies-upsell-modal *,
|
248 |
+
.aioseop-taxonomies-upsell-modal *::before,
|
249 |
+
.aioseop-taxonomies-upsell-modal *::after {
|
250 |
+
-webkit-box-sizing: border-box;
|
251 |
+
-moz-box-sizing: border-box;
|
252 |
+
box-sizing: border-box;
|
253 |
+
}
|
254 |
+
|
255 |
+
.aioseop-taxonomies-upsell-modal h2 {
|
256 |
+
font-size: 20px;
|
257 |
+
margin: 0 0 16px 0;
|
258 |
+
padding: 0;
|
259 |
}
|
260 |
+
|
261 |
+
.aioseop-taxonomies-upsell-modal p {
|
262 |
+
font-size: 16px;
|
263 |
+
color: #666;
|
264 |
+
margin: 0 0 30px 0;
|
265 |
+
padding: 0;
|
266 |
+
}
|
267 |
+
|
268 |
+
.aioseop-taxonomies-upsell-modal-content {
|
269 |
+
background-color: #fff;
|
270 |
+
border-radius: 3px 3px 0 0;
|
271 |
+
padding: 40px;
|
272 |
+
height: 350px;
|
273 |
+
}
|
274 |
+
|
275 |
+
.aioseop-taxonomies-upsell-modal ul {
|
276 |
+
float: left;
|
277 |
+
width: 50%;
|
278 |
+
margin: 0;
|
279 |
+
padding: 0 0 0 30px;
|
280 |
+
text-align: left;
|
281 |
+
}
|
282 |
+
|
283 |
+
.aioseop-taxonomies-upsell-modal li {
|
284 |
+
color: #666;
|
285 |
+
font-size: 16px;
|
286 |
+
padding: 6px 0;
|
287 |
+
}
|
288 |
+
|
289 |
+
.aioseop-taxonomies-upsell-modal li .fa {
|
290 |
+
color: #2a9b39;
|
291 |
+
margin: 0 8px 0 0;
|
292 |
+
}
|
293 |
+
|
294 |
+
.aioseop-taxonomies-upsell-modal-button {
|
295 |
+
border-radius: 0 0 3px 3px;
|
296 |
+
padding: 30px;
|
297 |
+
background: #f5f5f5;
|
298 |
+
text-align: center;
|
299 |
+
}
|
300 |
+
|
301 |
+
.aioseop-taxonomies-upsell-modal-button a:first-of-type {
|
302 |
+
font-weight: 500;
|
303 |
+
}
|
304 |
+
|
305 |
+
.aioseop-modal-checkmark {
|
306 |
+
display: inline-block;
|
307 |
+
margin-right: 20px;
|
308 |
+
color: rgb(15, 156, 15);
|
309 |
+
font-size: 1.8rem;
|
310 |
+
line-height: 0.5;
|
311 |
+
}
|
312 |
+
|
313 |
+
|
314 |
+
/** Sidebar **/
|
315 |
+
|
316 |
+
.button.button-primary.button-hero.button-pro-cta {
|
317 |
+
display: block;
|
318 |
+
margin: 0 auto;
|
319 |
+
max-width: 300px;
|
320 |
+
text-align: center;
|
321 |
+
}
|
322 |
+
|
323 |
+
|
324 |
+
/** Other **/
|
325 |
+
|
326 |
+
.aioseop-upsell-discount-amount {
|
327 |
+
color: green;
|
328 |
+
font-weight: bold;
|
329 |
+
}
|
330 |
+
|
331 |
+
.aioseop-sitemap-prio-upsell {
|
332 |
+
position: absolute;
|
333 |
+
margin: 30px 0 0 20px;
|
334 |
+
font-style: italic;
|
335 |
+
font-weight: bold;
|
336 |
+
text-decoration: none;
|
337 |
+
color: #0073AA !important;
|
338 |
+
}
|
339 |
+
|
340 |
+
#aiosp_feature_manager_default_metabox a.feature-manager-cta-button{
|
341 |
+
float:right;
|
342 |
+
margin: 0 10px 10px 0;
|
343 |
+
background: #d54e21;
|
344 |
+
border-color: #aa3e1a;
|
345 |
+
-webkit-box-shadow: 0 1px 0 #aa3e1a;
|
346 |
+
box-shadow: 0 1px 0 #aa3e1a;
|
347 |
+
color: #fff;
|
348 |
+
text-decoration: none;
|
349 |
+
text-shadow: 0 -1px 1px #d54e21,1px 0 1px #d54e21,0 1px 1px #d54e21,-1px 0 1px #d54e21;
|
350 |
+
}
|
351 |
+
|
352 |
+
/* Image SEO - Media Library */
|
353 |
+
|
354 |
+
.aioseop-image-attribute {
|
355 |
+
height: 100px;
|
356 |
+
}
|
357 |
+
|
358 |
+
.aioseop-media-lib-dashicon:hover {
|
359 |
+
cursor: help;
|
360 |
+
color: #00a0d2;
|
361 |
+
}
|
362 |
+
|
363 |
+
.aioseop-media-lib-tooltip {
|
364 |
+
display: inline-block;
|
365 |
+
position: relative;
|
366 |
+
}
|
367 |
+
|
368 |
+
.aioseop-media-lib-tooltip .aioseop-media-lib-tooltip-text {
|
369 |
+
visibility: hidden;
|
370 |
+
position: absolute;
|
371 |
+
width: 120px;
|
372 |
+
|
373 |
+
border-radius: 6px;
|
374 |
+
padding: 10px;
|
375 |
+
z-index: 1;
|
376 |
+
bottom: 125%;
|
377 |
+
left: 50%;
|
378 |
+
margin-left: -70px;
|
379 |
+
|
380 |
+
color: #fff;
|
381 |
+
background-color: rgb(95, 95, 95);
|
382 |
+
|
383 |
+
text-align: center;
|
384 |
+
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
|
385 |
+
font-size: 0.8rem;
|
386 |
+
line-height: 1rem;
|
387 |
+
|
388 |
+
opacity: 0;
|
389 |
+
transition: opacity 0.3s;
|
390 |
+
}
|
391 |
+
|
392 |
+
.aioseop-media-lib-tooltip .aioseop-media-lib-tooltip-text::after {
|
393 |
+
content: "";
|
394 |
+
position: absolute;
|
395 |
+
top: 100%;
|
396 |
+
left: 50%;
|
397 |
+
margin-left: -5px;
|
398 |
+
|
399 |
+
border-width: 5px;
|
400 |
+
border-style: solid;
|
401 |
+
border-color: #555 transparent transparent transparent;
|
402 |
+
}
|
403 |
+
|
404 |
+
.aioseop-media-lib-tooltip:hover .aioseop-media-lib-tooltip-text {
|
405 |
+
visibility: visible;
|
406 |
+
opacity: 1;
|
407 |
+
}
|
408 |
+
|
409 |
+
/* QUICKEDIT */
|
410 |
+
|
411 |
+
.aioseop-quickedit-pencil {
|
412 |
+
margin-right: 5px;
|
413 |
+
color: #72777c;
|
414 |
+
}
|
415 |
+
|
416 |
+
.aioseop-quickedit-pencil:hover {
|
417 |
+
color: #0073aa;
|
418 |
+
outline: 0;
|
419 |
+
}
|
420 |
+
|
421 |
+
.aioseop-quickedit-input {
|
422 |
+
float:left;
|
423 |
+
position:relative;
|
424 |
+
margin-bottom: 10px;
|
425 |
+
font-size:13px;
|
426 |
+
width:100%;
|
427 |
+
z-index:1;
|
428 |
+
}
|
429 |
+
|
430 |
+
.aioseop-quickedit-input-save {
|
431 |
+
margin-right: 5px;
|
432 |
+
color: rgb(22, 204, 22);
|
433 |
+
}
|
434 |
+
|
435 |
+
.aioseop-quickedit-input-cancel {
|
436 |
+
color: red;
|
437 |
+
}
|
438 |
+
|
439 |
+
.aioseop-quickedit-pencil:focus, .aioseop-quickedit-input-save:focus, .aioseop-quickedit-input-cancel:focus {
|
440 |
+
box-shadow: none;
|
441 |
+
}
|
442 |
+
|
443 |
+
.aioseop-quickedit-spinner {
|
444 |
+
float:left;
|
445 |
+
width:20px;
|
446 |
+
margin-right:5px;
|
css/modules/aioseop_module.css
CHANGED
@@ -1,8 +1,7 @@
|
|
1 |
/**
|
2 |
* Controls all the styling of the plugin.
|
3 |
*
|
4 |
-
* @author
|
5 |
-
* @author Semper Fi Web Design.
|
6 |
* @copyright http://semperplugins.com
|
7 |
* @package All-in-One-SEO-Pack.
|
8 |
*/
|
@@ -87,7 +86,7 @@
|
|
87 |
|
88 |
.aioseop_tabs .aioseop_meta_box_help,
|
89 |
.aioseop_tabs .aioseop_meta_box_help:active {
|
90 |
-
margin
|
91 |
}
|
92 |
|
93 |
.aioseop_tabs #aioseop_opengraph_settings .aioseop_meta_box_help,
|
@@ -122,7 +121,7 @@
|
|
122 |
border: 1px solid #e1e1e1;
|
123 |
}
|
124 |
|
125 |
-
.aioseop input[type="text"],
|
126 |
.aioseop input[type="url"] {
|
127 |
color: #515151;
|
128 |
min-height: 40px;
|
@@ -144,7 +143,7 @@
|
|
144 |
min-height: 36px;
|
145 |
}
|
146 |
|
147 |
-
.aioseop input,
|
148 |
.aioseop textarea {
|
149 |
border-radius: 4px;
|
150 |
border: 1px solid #8d96a0;
|
@@ -152,7 +151,7 @@
|
|
152 |
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif !important;
|
153 |
}
|
154 |
|
155 |
-
.aioseop input:focus,
|
156 |
.aioseop textarea:focus {
|
157 |
box-shadow: 0 0 0 1px #007cba;
|
158 |
}
|
@@ -263,23 +262,6 @@
|
|
263 |
float: right;
|
264 |
}
|
265 |
|
266 |
-
.wincherad {
|
267 |
-
width: 100%;
|
268 |
-
height: 100%;
|
269 |
-
background-size: 100%;
|
270 |
-
background-repeat: no-repeat;
|
271 |
-
margin-bottom: 0;
|
272 |
-
border: none;
|
273 |
-
}
|
274 |
-
|
275 |
-
#wincher21 {
|
276 |
-
background-image: url(../../modules/images/banner21.jpg);
|
277 |
-
}
|
278 |
-
|
279 |
-
#wincher22 {
|
280 |
-
background-image: url(../../modules/images/banner22.jpg);
|
281 |
-
}
|
282 |
-
|
283 |
.aioseop_content {
|
284 |
min-width: 760px;
|
285 |
clear: left;
|
@@ -385,10 +367,7 @@
|
|
385 |
}
|
386 |
|
387 |
.aioseop_sidebar #mc-embedded-subscribe-form {
|
388 |
-
|
389 |
-
background: white;
|
390 |
-
padding: 10px 10px;
|
391 |
-
border: 1px solid #DDD;
|
392 |
}
|
393 |
|
394 |
#aioseop-about .aioseop_metabox_text ul {
|
@@ -428,7 +407,7 @@ body.all-in-one-seo_page_all-in-one-seo-pack-pro-aioseop_feature_manager .aioseo
|
|
428 |
|
429 |
.aioseop_top {
|
430 |
margin: 10px 10px 0 0;
|
431 |
-
/*
|
432 |
}
|
433 |
|
434 |
.aioseop_top #aioseop-list {
|
@@ -441,7 +420,7 @@ body.all-in-one-seo_page_all-in-one-seo-pack-pro-aioseop_feature_manager .aioseo
|
|
441 |
|
442 |
.aioseop_right_sidebar {
|
443 |
float: right;
|
444 |
-
margin-top:
|
445 |
}
|
446 |
|
447 |
#aiosp_settings_form .button-primary.hidden {
|
@@ -529,10 +508,6 @@ div.aioseop_feature {
|
|
529 |
right: 0;
|
530 |
}
|
531 |
|
532 |
-
.aioseop_feature .flag.pro {
|
533 |
-
display: none;
|
534 |
-
}
|
535 |
-
|
536 |
#aioseop_coming_soon .free.flag,
|
537 |
.all-in-one-seo_page_all-in-one-seo-pack-pro-modules-aioseop_feature_manager .aioseop_feature .free.flag {
|
538 |
display: none;
|
@@ -635,12 +610,12 @@ div.aioseop_feature#aioseop_opengraph .aioseop_featured_image.active {
|
|
635 |
background-image: url(../../modules/images/SocialMeta-Color-Standard.png);
|
636 |
}
|
637 |
|
638 |
-
div.aioseop_feature#aioseop_robots .aioseop_featured_image,
|
639 |
div.aioseop_feature#aioseop_bad_robots .aioseop_featured_image {
|
640 |
background-image: url(../../modules/images/Robots-BW-Standard.png);
|
641 |
}
|
642 |
|
643 |
-
div.aioseop_feature#aioseop_robots .aioseop_featured_image.active,
|
644 |
div.aioseop_feature#aioseop_bad_robots .aioseop_featured_image.active {
|
645 |
background-image: url(../../modules/images/Robots-Color-Standard.png);
|
646 |
}
|
@@ -737,12 +712,12 @@ div.aioseop_feature#aioseop_coming_soon2 .aioseop_featured_image {
|
|
737 |
background-image: url(../../modules/images/SocialMeta-Color-Retina.png);
|
738 |
}
|
739 |
|
740 |
-
div.aioseop_feature#aioseop_robots .aioseop_featured_image,
|
741 |
div.aioseop_feature#aioseop_bad_robots .aioseop_featured_image {
|
742 |
background-image: url(../../modules/images/Robots-BW-Retina.png);
|
743 |
}
|
744 |
|
745 |
-
div.aioseop_feature#aioseop_robots .aioseop_featured_image.active,
|
746 |
div.aioseop_feature#aioseop_bad_robots .aioseop_featured_image.active {
|
747 |
background-image: url(../../modules/images/Robots-Color-Retina.png);
|
748 |
}
|
@@ -811,7 +786,7 @@ div.aioseop_feature#aioseop_coming_soon2 .aioseop_featured_image {
|
|
811 |
margin: 0;
|
812 |
padding-left: 1px;
|
813 |
min-width: 160px;
|
814 |
-
/*
|
815 |
}
|
816 |
|
817 |
/*** Sitemap Additional Pages section ***/
|
@@ -967,7 +942,7 @@ table.aioseop_table td {
|
|
967 |
padding-right: 2%;
|
968 |
}
|
969 |
|
970 |
-
table.aioseop_table td,
|
971 |
table.aioseop_table th {
|
972 |
padding: 3px;
|
973 |
}
|
@@ -1047,7 +1022,7 @@ table.aioseop_table th {
|
|
1047 |
margin: 1.5em 0.6em 0.3em;
|
1048 |
}
|
1049 |
|
1050 |
-
#aiosp_settings_form .aioseop_no_label,
|
1051 |
.aioseop_no_label {
|
1052 |
float: left;
|
1053 |
width: 92%;
|
@@ -1263,16 +1238,6 @@ div.aioseop_notice a.aioseop_dismiss_link {
|
|
1263 |
padding: 10px;
|
1264 |
}
|
1265 |
|
1266 |
-
.aioseop_loading {
|
1267 |
-
background-image: url('../../images/activity.gif');
|
1268 |
-
display: inline-block;
|
1269 |
-
width: 24px;
|
1270 |
-
height: 24px;
|
1271 |
-
margin: 0;
|
1272 |
-
padding: 0;
|
1273 |
-
vertical-align: bottom;
|
1274 |
-
}
|
1275 |
-
|
1276 |
.aioseop_tabs.ui-widget-content {
|
1277 |
background: none !important;
|
1278 |
}
|
@@ -1387,7 +1352,7 @@ div.sfwd_debug_error {
|
|
1387 |
max-height: 420px;
|
1388 |
}
|
1389 |
|
1390 |
-
#aioseop_coming_soon,
|
1391 |
#aioseop_coming_soon2 {
|
1392 |
padding-top: 40px;
|
1393 |
text-align: center;
|
@@ -1462,9 +1427,8 @@ div.sfwd_debug_error {
|
|
1462 |
margin: 0;
|
1463 |
}
|
1464 |
|
1465 |
-
#
|
1466 |
-
|
1467 |
-
margin-top: 35px;
|
1468 |
}
|
1469 |
|
1470 |
/**
|
1 |
/**
|
2 |
* Controls all the styling of the plugin.
|
3 |
*
|
4 |
+
* @author All in One SEO Team.
|
|
|
5 |
* @copyright http://semperplugins.com
|
6 |
* @package All-in-One-SEO-Pack.
|
7 |
*/
|
86 |
|
87 |
.aioseop_tabs .aioseop_meta_box_help,
|
88 |
.aioseop_tabs .aioseop_meta_box_help:active {
|
89 |
+
margin: 15px 0;
|
90 |
}
|
91 |
|
92 |
.aioseop_tabs #aioseop_opengraph_settings .aioseop_meta_box_help,
|
121 |
border: 1px solid #e1e1e1;
|
122 |
}
|
123 |
|
124 |
+
.aioseop input[type="text"],
|
125 |
.aioseop input[type="url"] {
|
126 |
color: #515151;
|
127 |
min-height: 40px;
|
143 |
min-height: 36px;
|
144 |
}
|
145 |
|
146 |
+
.aioseop input,
|
147 |
.aioseop textarea {
|
148 |
border-radius: 4px;
|
149 |
border: 1px solid #8d96a0;
|
151 |
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif !important;
|
152 |
}
|
153 |
|
154 |
+
.aioseop input:focus,
|
155 |
.aioseop textarea:focus {
|
156 |
box-shadow: 0 0 0 1px #007cba;
|
157 |
}
|
262 |
float: right;
|
263 |
}
|
264 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
265 |
.aioseop_content {
|
266 |
min-width: 760px;
|
267 |
clear: left;
|
367 |
}
|
368 |
|
369 |
.aioseop_sidebar #mc-embedded-subscribe-form {
|
370 |
+
padding: 0px 10px;
|
|
|
|
|
|
|
371 |
}
|
372 |
|
373 |
#aioseop-about .aioseop_metabox_text ul {
|
407 |
|
408 |
.aioseop_top {
|
409 |
margin: 10px 10px 0 0;
|
410 |
+
/* margin: 10px 477px 0px 0px; */
|
411 |
}
|
412 |
|
413 |
.aioseop_top #aioseop-list {
|
420 |
|
421 |
.aioseop_right_sidebar {
|
422 |
float: right;
|
423 |
+
margin-top: 50px;
|
424 |
}
|
425 |
|
426 |
#aiosp_settings_form .button-primary.hidden {
|
508 |
right: 0;
|
509 |
}
|
510 |
|
|
|
|
|
|
|
|
|
511 |
#aioseop_coming_soon .free.flag,
|
512 |
.all-in-one-seo_page_all-in-one-seo-pack-pro-modules-aioseop_feature_manager .aioseop_feature .free.flag {
|
513 |
display: none;
|
610 |
background-image: url(../../modules/images/SocialMeta-Color-Standard.png);
|
611 |
}
|
612 |
|
613 |
+
div.aioseop_feature#aioseop_robots .aioseop_featured_image,
|
614 |
div.aioseop_feature#aioseop_bad_robots .aioseop_featured_image {
|
615 |
background-image: url(../../modules/images/Robots-BW-Standard.png);
|
616 |
}
|
617 |
|
618 |
+
div.aioseop_feature#aioseop_robots .aioseop_featured_image.active,
|
619 |
div.aioseop_feature#aioseop_bad_robots .aioseop_featured_image.active {
|
620 |
background-image: url(../../modules/images/Robots-Color-Standard.png);
|
621 |
}
|
712 |
background-image: url(../../modules/images/SocialMeta-Color-Retina.png);
|
713 |
}
|
714 |
|
715 |
+
div.aioseop_feature#aioseop_robots .aioseop_featured_image,
|
716 |
div.aioseop_feature#aioseop_bad_robots .aioseop_featured_image {
|
717 |
background-image: url(../../modules/images/Robots-BW-Retina.png);
|
718 |
}
|
719 |
|
720 |
+
div.aioseop_feature#aioseop_robots .aioseop_featured_image.active,
|
721 |
div.aioseop_feature#aioseop_bad_robots .aioseop_featured_image.active {
|
722 |
background-image: url(../../modules/images/Robots-Color-Retina.png);
|
723 |
}
|
786 |
margin: 0;
|
787 |
padding-left: 1px;
|
788 |
min-width: 160px;
|
789 |
+
/* max-width: 900px; */
|
790 |
}
|
791 |
|
792 |
/*** Sitemap Additional Pages section ***/
|
942 |
padding-right: 2%;
|
943 |
}
|
944 |
|
945 |
+
table.aioseop_table td,
|
946 |
table.aioseop_table th {
|
947 |
padding: 3px;
|
948 |
}
|
1022 |
margin: 1.5em 0.6em 0.3em;
|
1023 |
}
|
1024 |
|
1025 |
+
#aiosp_settings_form .aioseop_no_label,
|
1026 |
.aioseop_no_label {
|
1027 |
float: left;
|
1028 |
width: 92%;
|
1238 |
padding: 10px;
|
1239 |
}
|
1240 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1241 |
.aioseop_tabs.ui-widget-content {
|
1242 |
background: none !important;
|
1243 |
}
|
1352 |
max-height: 420px;
|
1353 |
}
|
1354 |
|
1355 |
+
#aioseop_coming_soon,
|
1356 |
#aioseop_coming_soon2 {
|
1357 |
padding-top: 40px;
|
1358 |
text-align: center;
|
1427 |
margin: 0;
|
1428 |
}
|
1429 |
|
1430 |
+
#aioseop_opengraph_settings_upgrade_wrapper {
|
1431 |
+
margin-top: 10px;
|
|
|
1432 |
}
|
1433 |
|
1434 |
/**
|
images/about/about-team.jpg
ADDED
Binary file
|
images/about/icon-full.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg viewBox="0 0 37 28" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M12.29 26.462c.328.375.75.562 1.266.562s.937-.187 1.266-.562L35.563 5.79c.329-.328.493-.75.493-1.265 0-.516-.164-.938-.493-1.266L32.962.728a1.567 1.567 0 00-1.23-.563c-.493 0-.926.188-1.301.563L13.556 17.603 5.681 9.728c-.375-.375-.808-.563-1.301-.563-.492 0-.902.188-1.23.563L.548 12.259c-.328.328-.492.75-.492 1.265 0 .516.164.938.492 1.266L12.29 26.462z" fill="#6ab255" fill-rule="nonzero"/></svg>
|
images/about/icon-none.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg viewBox="0 0 33 33" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M27.592 32.359a1.928 1.928 0 01-1.417.583 1.928 1.928 0 01-1.416-.583l-8.084-8.084-8.083 8.084a1.928 1.928 0 01-1.417.583 1.93 1.93 0 01-1.417-.583l-4.5-4.5a1.932 1.932 0 01-.583-1.417c0-.555.195-1.028.583-1.417l8.084-8.083-8.084-8.084a1.931 1.931 0 01-.583-1.416c0-.556.195-1.028.583-1.417l4.5-4.5A1.93 1.93 0 017.175.942c.556 0 1.028.194 1.417.583l8.083 8.083 8.084-8.083a1.928 1.928 0 011.416-.583c.556 0 1.028.194 1.417.583l4.5 4.5c.389.389.583.861.583 1.417 0 .555-.194 1.027-.583 1.416l-8.083 8.084 8.083 8.083c.389.389.583.862.583 1.417 0 .556-.194 1.028-.583 1.417l-4.5 4.5z" fill="#d83638" fill-rule="nonzero"/></svg>
|
images/about/icon-partial.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg viewBox="0 0 53 53" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-miterlimit="10"><path d="M37.592 42.359a1.928 1.928 0 01-1.417.583 1.928 1.928 0 01-1.416-.583l-8.084-8.084-8.083 8.084a1.928 1.928 0 01-1.417.583 1.93 1.93 0 01-1.417-.583l-4.5-4.5a1.932 1.932 0 01-.583-1.417c0-.556.195-1.028.583-1.417l8.084-8.083-8.084-8.084a1.93 1.93 0 01-.583-1.416c0-.556.195-1.028.583-1.417l4.5-4.5a1.93 1.93 0 011.417-.584 1.93 1.93 0 011.417.584l8.083 8.083 8.084-8.083a1.928 1.928 0 011.416-.584 1.93 1.93 0 011.417.584l4.5 4.5c.389.389.583.861.583 1.417 0 .555-.194 1.028-.583 1.416l-8.083 8.084 8.083 8.083c.389.389.583.861.583 1.417s-.194 1.028-.583 1.417l-4.5 4.5z" fill="none" stroke="#d83638" stroke-width="2" stroke-dasharray="4,2"/></svg>
|
images/about/plugin-mi.png
ADDED
Binary file
|
images/about/plugin-om.png
ADDED
Binary file
|
images/about/plugin-rp.png
ADDED
Binary file
|
images/about/plugin-smtp.png
ADDED
Binary file
|
images/about/plugin-wpforms.png
ADDED
Binary file
|
images/flyout/comments-solid.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="comments" class="svg-inline--fa fa-comments fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="white" d="M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z"></path></svg>
|
images/flyout/gear-default.png
ADDED
Binary file
|
images/flyout/life-ring-regular.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg aria-hidden="true" fill="#fffff" focusable="false" data-prefix="far" data-icon="life-ring" class="svg-inline--fa fa-life-ring fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="white" d="M256 504c136.967 0 248-111.033 248-248S392.967 8 256 8 8 119.033 8 256s111.033 248 248 248zm-103.398-76.72l53.411-53.411c31.806 13.506 68.128 13.522 99.974 0l53.411 53.411c-63.217 38.319-143.579 38.319-206.796 0zM336 256c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zm91.28 103.398l-53.411-53.411c13.505-31.806 13.522-68.128 0-99.974l53.411-53.411c38.319 63.217 38.319 143.579 0 206.796zM359.397 84.72l-53.411 53.411c-31.806-13.505-68.128-13.522-99.973 0L152.602 84.72c63.217-38.319 143.579-38.319 206.795 0zM84.72 152.602l53.411 53.411c-13.506 31.806-13.522 68.128 0 99.974L84.72 359.398c-38.319-63.217-38.319-143.579 0-206.796z"></path></svg>
|
images/flyout/lightbulb-regular.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb fa-w-11" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="white" d="M176 80c-52.94 0-96 43.06-96 96 0 8.84 7.16 16 16 16s16-7.16 16-16c0-35.3 28.72-64 64-64 8.84 0 16-7.16 16-16s-7.16-16-16-16zM96.06 459.17c0 3.15.93 6.22 2.68 8.84l24.51 36.84c2.97 4.46 7.97 7.14 13.32 7.14h78.85c5.36 0 10.36-2.68 13.32-7.14l24.51-36.84c1.74-2.62 2.67-5.7 2.68-8.84l.05-43.18H96.02l.04 43.18zM176 0C73.72 0 0 82.97 0 176c0 44.37 16.45 84.85 43.56 115.78 16.64 18.99 42.74 58.8 52.42 92.16v.06h48v-.12c-.01-4.77-.72-9.51-2.15-14.07-5.59-17.81-22.82-64.77-62.17-109.67-20.54-23.43-31.52-53.15-31.61-84.14-.2-73.64 59.67-128 127.95-128 70.58 0 128 57.42 128 128 0 30.97-11.24 60.85-31.65 84.14-39.11 44.61-56.42 91.47-62.1 109.46a47.507 47.507 0 0 0-2.22 14.3v.1h48v-.05c9.68-33.37 35.78-73.18 52.42-92.16C335.55 260.85 352 220.37 352 176 352 78.8 273.2 0 176 0z"></path></svg>
|
images/flyout/star-solid.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="star" class="svg-inline--fa fa-star fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="white" d="M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"></path></svg>
|
inc/admin/class-aioseop-education.php
ADDED
@@ -0,0 +1,964 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* AIOSEOP_Education
|
4 |
+
*
|
5 |
+
* @package All_in_One_SEO_Pack
|
6 |
+
* @since 3.4.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Contains all Product Education related code.
|
11 |
+
*
|
12 |
+
* @author Arnaud Broes
|
13 |
+
* @since 3.4.0
|
14 |
+
*/
|
15 |
+
class AIOSEOP_Education {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Initializes the code.
|
19 |
+
*
|
20 |
+
* @since 3.4.0
|
21 |
+
*/
|
22 |
+
public static function init() {
|
23 |
+
self::register_hooks();
|
24 |
+
self::register_wp_ajax_endpoints();
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Registers our hooks.
|
29 |
+
*
|
30 |
+
* @since 3.4.0
|
31 |
+
*/
|
32 |
+
private static function register_hooks() {
|
33 |
+
if ( is_admin() ) {
|
34 |
+
add_action( 'admin_footer_text', array( 'AIOSEOP_Education', 'admin_footer_text' ) );
|
35 |
+
add_action( 'admin_enqueue_scripts', array( 'AIOSEOP_Education', 'admin_enqueue_scripts' ) );
|
36 |
+
|
37 |
+
return;
|
38 |
+
}
|
39 |
+
|
40 |
+
add_filter( 'admin_bar_menu', array( 'AIOSEOP_Education', 'wp_admin_bar_menu' ) );
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Registers our AJAX endpoints.
|
45 |
+
*
|
46 |
+
* @since 3.4.0
|
47 |
+
*/
|
48 |
+
private static function register_wp_ajax_endpoints() {
|
49 |
+
if ( ! is_admin() ) {
|
50 |
+
return;
|
51 |
+
}
|
52 |
+
|
53 |
+
add_action( 'wp_ajax_aioseop_deactivate_conflicting_plugins', array( 'AIOSEOP_Education', 'deactivate_conflicting_plugins' ) );
|
54 |
+
|
55 |
+
if ( AIOSEOPPRO ) {
|
56 |
+
return;
|
57 |
+
}
|
58 |
+
|
59 |
+
add_action( 'wp_ajax_aioseop_get_license_box', array( 'AIOSEOP_Education', 'get_license_box' ) );
|
60 |
+
|
61 |
+
add_action( 'wp_ajax_aioseop_get_notice_bar', array( 'AIOSEOP_Education', 'get_notice_bar' ) );
|
62 |
+
add_action( 'wp_ajax_aioseop_get_video_sitemap_upsell', array( 'AIOSEOP_Education', 'get_video_sitemap_upsell' ) );
|
63 |
+
add_action( 'wp_ajax_aioseop_get_taxonomies_upsell', array( 'AIOSEOP_Education', 'get_taxonomies_upsell' ) );
|
64 |
+
add_action( 'wp_ajax_aioseop_get_sitemap_prio_upsell', array( 'AIOSEOP_Education', 'get_sitemap_prio_upsell' ) );
|
65 |
+
|
66 |
+
add_action( 'wp_ajax_aioseop_dismiss_notice_bar', array( 'AIOSEOP_Education', 'dismiss_notice_bar' ) );
|
67 |
+
add_action( 'wp_ajax_aioseop_dismiss_video_sitemap_upsell', array( 'AIOSEOP_Education', 'dismiss_video_sitemap_upsell' ) );
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Enqueues our scripts.
|
72 |
+
*
|
73 |
+
* @since 3.4.0
|
74 |
+
*/
|
75 |
+
public static function admin_enqueue_scripts() {
|
76 |
+
self::enqueue_deactivate_conflicting_plugins_script();
|
77 |
+
|
78 |
+
if ( AIOSEOPPRO ) {
|
79 |
+
return;
|
80 |
+
}
|
81 |
+
|
82 |
+
self::enqueue_license_box_script();
|
83 |
+
self::enqueue_notice_bar_script();
|
84 |
+
self::enqueue_video_sitemap_upsell_script();
|
85 |
+
self::enqueue_taxonomies_upsell_script();
|
86 |
+
self::enqueue_sitemap_prio_upsell_script();
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Enqueues the license box script.
|
91 |
+
*
|
92 |
+
* @since 3.4.0
|
93 |
+
*/
|
94 |
+
private static function enqueue_license_box_script() {
|
95 |
+
if ( 'toplevel_page_' . AIOSEOP_PLUGIN_DIRNAME . '/aioseop_class' !== get_current_screen()->id ) {
|
96 |
+
return;
|
97 |
+
}
|
98 |
+
|
99 |
+
wp_enqueue_script( 'aioseop-license-box', AIOSEOP_PLUGIN_URL . 'js/admin/education/aioseop-license-box.js', array( 'jquery' ), AIOSEOP_VERSION, false );
|
100 |
+
|
101 |
+
$ajax_data = array(
|
102 |
+
'requestUrl' => admin_url( 'admin-ajax.php' ),
|
103 |
+
'nonce' => wp_create_nonce( 'license-box' ),
|
104 |
+
);
|
105 |
+
|
106 |
+
wp_localize_script( 'aioseop-license-box', 'aioseopLicenseBoxData', $ajax_data );
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* Enqueues the notice bar script.
|
111 |
+
*
|
112 |
+
* @since 3.4.0
|
113 |
+
*/
|
114 |
+
private static function enqueue_notice_bar_script() {
|
115 |
+
if ( ! in_array( get_current_screen()->id, aioseop_get_admin_screens(), true ) ) {
|
116 |
+
return;
|
117 |
+
}
|
118 |
+
|
119 |
+
wp_enqueue_script( 'aioseop-notice-bar', AIOSEOP_PLUGIN_URL . 'js/admin/education/aioseop-notice-bar.js', array( 'jquery' ), AIOSEOP_VERSION, false );
|
120 |
+
|
121 |
+
$ajax_data = array(
|
122 |
+
'requestUrl' => admin_url( 'admin-ajax.php' ),
|
123 |
+
'nonce' => wp_create_nonce( 'notice-bar' ),
|
124 |
+
);
|
125 |
+
|
126 |
+
wp_localize_script( 'aioseop-notice-bar', 'aioseopNoticeBarData', $ajax_data );
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Enqueues the video sitemap upsell script.
|
131 |
+
*
|
132 |
+
* @since 3.4.0
|
133 |
+
*/
|
134 |
+
private static function enqueue_video_sitemap_upsell_script() {
|
135 |
+
if ( 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_sitemap' !== get_current_screen()->id ) {
|
136 |
+
return;
|
137 |
+
}
|
138 |
+
|
139 |
+
wp_enqueue_script( 'aioseop-video-sitemap-upsell', AIOSEOP_PLUGIN_URL . 'js/admin/education/aioseop-video-sitemap-upsell.js', array( 'jquery' ), AIOSEOP_VERSION, false );
|
140 |
+
|
141 |
+
$ajax_data = array(
|
142 |
+
'requestUrl' => admin_url( 'admin-ajax.php' ),
|
143 |
+
'nonce' => wp_create_nonce( 'video-sitemap-upsell' ),
|
144 |
+
);
|
145 |
+
|
146 |
+
wp_localize_script( 'aioseop-video-sitemap-upsell', 'aioseopVideoSitemapUpsellData', $ajax_data );
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Enqueues the taxonomy upsell script.
|
151 |
+
*
|
152 |
+
* @since 3.4.0
|
153 |
+
*/
|
154 |
+
private static function enqueue_taxonomies_upsell_script() {
|
155 |
+
$allowed_screens = array(
|
156 |
+
'edit-category',
|
157 |
+
'edit-post_tag',
|
158 |
+
'edit-product_cat',
|
159 |
+
'edit-product_tag',
|
160 |
+
);
|
161 |
+
|
162 |
+
$screen = get_current_screen();
|
163 |
+
if ( 'term' !== $screen->base || ! in_array( $screen->id, $allowed_screens ) ) {
|
164 |
+
return;
|
165 |
+
}
|
166 |
+
|
167 |
+
wp_enqueue_script( 'aioseop-taxonomies-upsell', AIOSEOP_PLUGIN_URL . 'js/admin/education/aioseop-taxonomies-upsell.js', array( 'jquery' ), AIOSEOP_VERSION, true );
|
168 |
+
|
169 |
+
$ajax_data = array(
|
170 |
+
'requestUrl' => admin_url( 'admin-ajax.php' ),
|
171 |
+
'nonce' => wp_create_nonce( "taxonomies-upsell-$screen->id" ),
|
172 |
+
'pageId' => $screen->id,
|
173 |
+
);
|
174 |
+
|
175 |
+
wp_localize_script( 'aioseop-taxonomies-upsell', 'aioseopTaxonomiesUpsellData', $ajax_data );
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Enqueues the deactivate conflicting plugins script.
|
180 |
+
*
|
181 |
+
* @since 3.4.0
|
182 |
+
*/
|
183 |
+
private static function enqueue_deactivate_conflicting_plugins_script() {
|
184 |
+
global $aioseop_notices;
|
185 |
+
|
186 |
+
if ( ! isset( $aioseop_notices->active_notices['conflicting_plugin'] ) ) {
|
187 |
+
return;
|
188 |
+
}
|
189 |
+
|
190 |
+
wp_enqueue_script( 'aioseop-deactivate-conflicting-plugins', AIOSEOP_PLUGIN_URL . 'js/admin/education/aioseop-deactivate-conflicting-plugins.js', array( 'jquery' ), AIOSEOP_VERSION, true );
|
191 |
+
|
192 |
+
$ajax_data = array(
|
193 |
+
'requestUrl' => admin_url( 'admin-ajax.php' ),
|
194 |
+
'nonce' => wp_create_nonce( 'aioseop-deactivate-conflicting-plugins' ),
|
195 |
+
);
|
196 |
+
|
197 |
+
wp_localize_script( 'aioseop-deactivate-conflicting-plugins', 'aioseopDeactivateConflictingPluginsData', $ajax_data );
|
198 |
+
}
|
199 |
+
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Enqueues the sitemap prio upsell script.
|
203 |
+
*
|
204 |
+
* @since 3.4.0
|
205 |
+
*/
|
206 |
+
private static function enqueue_sitemap_prio_upsell_script() {
|
207 |
+
$screen = get_current_screen();
|
208 |
+
if ( 'post' !== $screen->base ) {
|
209 |
+
return;
|
210 |
+
}
|
211 |
+
|
212 |
+
wp_enqueue_script( 'aioseop-sitemap-prio-upsell', AIOSEOP_PLUGIN_URL . 'js/admin/education/aioseop-sitemap-prio-upsell.js', array( 'jquery' ), AIOSEOP_VERSION, true );
|
213 |
+
|
214 |
+
$ajax_data = array(
|
215 |
+
'requestUrl' => admin_url( 'admin-ajax.php' ),
|
216 |
+
'nonce' => wp_create_nonce( 'aioseop-sitemap-prio-upsell' ),
|
217 |
+
'pageId' => $screen->id,
|
218 |
+
);
|
219 |
+
|
220 |
+
wp_localize_script( 'aioseop-sitemap-prio-upsell', 'aioseopSitemapPrioUpsellData', $ajax_data );
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Returns the license box markup for the General Settings menu.
|
225 |
+
*
|
226 |
+
* Acts as a callback for our "wp_ajax_aioseop_get_license_box" endpoint.
|
227 |
+
*
|
228 |
+
* @since 3.4.0
|
229 |
+
*/
|
230 |
+
public static function get_license_box() {
|
231 |
+
if ( ! isset( $_GET ) ) {
|
232 |
+
return;
|
233 |
+
}
|
234 |
+
|
235 |
+
check_ajax_referer( 'license-box', '_ajax_nonce' );
|
236 |
+
|
237 |
+
/* translators: %s: "All in One SEO Pack" */
|
238 |
+
$link_title = sprintf( __( 'Upgrade to %s', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' );
|
239 |
+
|
240 |
+
$link = sprintf(
|
241 |
+
'<a href="%1$s" target="_blank" title="%2$s">%3$s</a>',
|
242 |
+
aioseop_get_utm_url( 'license-box' ),
|
243 |
+
$link_title,
|
244 |
+
/* translators: The full sentence reads as: "To unlock more features consider upgrading to Pro." */
|
245 |
+
__( 'upgrading to PRO', 'all-in-one-seo-pack' )
|
246 |
+
);
|
247 |
+
|
248 |
+
$span = sprintf(
|
249 |
+
"<span class='aioseop-upsell-discount-amount'>%s</span>",
|
250 |
+
/* translators: This refers to a discount. The full sentence reads as: "As a valued user you receive 30% off, automatically applied at checkout!" */
|
251 |
+
__( '30% off', 'all-in-one-seo-pack' )
|
252 |
+
);
|
253 |
+
|
254 |
+
$license_box_content = array(
|
255 |
+
/* translators: %s: "All in One SEO Pack" */
|
256 |
+
'p1' => sprintf( __( "You're using %s - no license needed. Enjoy! 🙂", 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Lite' ),
|
257 |
+
/* translators: %s: "upgrading to Pro" */
|
258 |
+
'p2' => sprintf( __( 'To unlock more features consider %s', 'all-in-one-seo-pack' ), $link ),
|
259 |
+
/* translators: %1$s: "All in One SEO Pack" - %2$s: "30% off" */
|
260 |
+
'p3' => sprintf( __( 'As a valued %1$s user you receive %2$s, automatically applied at checkout!', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME, $span ),
|
261 |
+
);
|
262 |
+
|
263 |
+
printf(
|
264 |
+
'<div class="license-box">
|
265 |
+
<p>%1$s</p>
|
266 |
+
<p>%2$s</p>
|
267 |
+
<p>%3$s</p>
|
268 |
+
</div>',
|
269 |
+
$license_box_content['p1'],
|
270 |
+
$license_box_content['p2'],
|
271 |
+
$license_box_content['p3']
|
272 |
+
);
|
273 |
+
|
274 |
+
wp_die();
|
275 |
+
}
|
276 |
+
|
277 |
+
/**
|
278 |
+
* Returns the notice bar markup.
|
279 |
+
*
|
280 |
+
* Acts as a callback for our "wp_ajax_aioseop_get_notice_bar" endpoint.
|
281 |
+
*
|
282 |
+
* @since 3.4.0
|
283 |
+
*/
|
284 |
+
public static function get_notice_bar() {
|
285 |
+
if ( ! isset( $_GET ) ) {
|
286 |
+
return;
|
287 |
+
}
|
288 |
+
|
289 |
+
check_ajax_referer( 'notice-bar', '_ajax_nonce' );
|
290 |
+
|
291 |
+
if ( self::check_if_dismissed( 'notice-bar' ) ) {
|
292 |
+
return;
|
293 |
+
}
|
294 |
+
|
295 |
+
/* translators: %s: "All in One SEO Pack" */
|
296 |
+
$link_title = sprintf( __( 'Upgrade to %s', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' );
|
297 |
+
|
298 |
+
$link = sprintf(
|
299 |
+
'<a href="%1$s" target="_blank" title="%2$s">%3$s</a>',
|
300 |
+
aioseop_get_utm_url( 'notice-bar' ),
|
301 |
+
$link_title,
|
302 |
+
/* translators: The full sentence reads as: "To unlock more features consider upgrading to Pro." */
|
303 |
+
__( 'upgrading to PRO', 'all-in-one-seo-pack' )
|
304 |
+
);
|
305 |
+
|
306 |
+
$message = sprintf(
|
307 |
+
/* translators: %1$s: "ALl in One SEO Pack" - %2$s: "upgrading to Pro" */
|
308 |
+
__( 'You’re using %1$s. To unlock more features consider %2$s.', 'all-in-one-seo-pack' ),
|
309 |
+
AIOSEOP_PLUGIN_NAME . ' Lite',
|
310 |
+
$link
|
311 |
+
);
|
312 |
+
|
313 |
+
printf(
|
314 |
+
'<div id="aioseop-notice-bar">
|
315 |
+
<span class="aioseop-notice-bar-message">%1$s</span>
|
316 |
+
<button type="button" class="dismiss" title="%2$s" />
|
317 |
+
</div>',
|
318 |
+
$message,
|
319 |
+
__( 'Dismiss this message.', 'all-in-one-seo-pack' )
|
320 |
+
);
|
321 |
+
|
322 |
+
wp_die();
|
323 |
+
}
|
324 |
+
|
325 |
+
/**
|
326 |
+
* Returns the video sitemap upsell markup.
|
327 |
+
*
|
328 |
+
* Acts as a callback for our "wp_ajax_aioseop_get_notice_bar" endpoint.
|
329 |
+
*
|
330 |
+
* @since 3.4.0
|
331 |
+
*/
|
332 |
+
public static function get_video_sitemap_upsell() {
|
333 |
+
if ( ! isset( $_GET ) ) {
|
334 |
+
return;
|
335 |
+
}
|
336 |
+
|
337 |
+
check_ajax_referer( 'video-sitemap-upsell', '_ajax_nonce' );
|
338 |
+
|
339 |
+
if ( self::check_if_dismissed( 'video-sitemap-upsell' ) ) {
|
340 |
+
return;
|
341 |
+
}
|
342 |
+
|
343 |
+
/* translators: %s: "All in One SEO Pack" */
|
344 |
+
$header = sprintf( __( 'Get %s and Unlock all the Powerful Features', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' );
|
345 |
+
$p1 = sprintf(
|
346 |
+
'Thanks for being a loyal %1$s user. Did you know that our premium version also supports video sitemaps?
|
347 |
+
Upgrade to %2$s to unlock all the awesome features and experience why %3$s is considered the best WordPress SEO plugin.',
|
348 |
+
AIOSEOP_PLUGIN_NAME . ' Lite',
|
349 |
+
AIOSEOP_PLUGIN_NAME . ' Pro',
|
350 |
+
AIOSEOP_PLUGIN_NAME
|
351 |
+
);
|
352 |
+
$p2 = sprintf(
|
353 |
+
__( 'We know that you will truly love %1$s. It has over 300+ five star ratings (%2$s) and is active on over 2 million websites.', 'all-in-one-seo-pack' ),
|
354 |
+
AIOSEOP_PLUGIN_NAME,
|
355 |
+
str_repeat( '<span class="dashicons dashicons-star-filled aioseop-rating-star"></span>', 5 )
|
356 |
+
);
|
357 |
+
$p3 = sprintf(
|
358 |
+
__( 'Bonus: %1$s users get %2$s the regular price, automatically applied at checkout.', 'all-in-one-seo-pack' ),
|
359 |
+
AIOSEOP_PLUGIN_NAME . ' Lite',
|
360 |
+
sprintf(
|
361 |
+
'<span class="aioseop-upsell-discount-amount">%s</span>',
|
362 |
+
__( '30% off', 'all-in-one-seo-pack' )
|
363 |
+
)
|
364 |
+
);
|
365 |
+
|
366 |
+
/* translators: %s: "All in One SEO Pack" */
|
367 |
+
$link_title = sprintf( __( 'Upgrade to %s', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' );
|
368 |
+
|
369 |
+
$link = sprintf(
|
370 |
+
'<a href="%1$s" target="_blank" title="%2$s">%3$s</a>',
|
371 |
+
aioseop_get_utm_url( 'video-sitemap-upsell' ),
|
372 |
+
$link_title,
|
373 |
+
$header . ' »'
|
374 |
+
);
|
375 |
+
|
376 |
+
echo
|
377 |
+
"<div id='aioseop-video-sitemap-upsell'>
|
378 |
+
<span class='dashicons dashicons-dismiss dismiss'></span><h5>$header</h5><br/><p>$p1</p><p>$p2</p></p><p>$link</p><p>$p3</p>
|
379 |
+
</div>";
|
380 |
+
|
381 |
+
wp_die();
|
382 |
+
}
|
383 |
+
|
384 |
+
/**
|
385 |
+
* Returns the taxonomies upsell markup.
|
386 |
+
*
|
387 |
+
* Acts as a callback for our "wp_ajax_aioseop_get_taxonomies_upsell" endpoint.
|
388 |
+
*
|
389 |
+
* @since 3.4.0
|
390 |
+
*/
|
391 |
+
public static function get_taxonomies_upsell() {
|
392 |
+
if ( ! isset( $_GET ) ) {
|
393 |
+
return;
|
394 |
+
}
|
395 |
+
|
396 |
+
$page_id = $_GET['page_id'];
|
397 |
+
|
398 |
+
check_ajax_referer( "taxonomies-upsell-$page_id", '_ajax_nonce' );
|
399 |
+
|
400 |
+
$content = self::get_taxonomies_upsell_content( $page_id );
|
401 |
+
if ( ! empty( $content ) ) {
|
402 |
+
echo $content;
|
403 |
+
}
|
404 |
+
|
405 |
+
die();
|
406 |
+
}
|
407 |
+
|
408 |
+
/**
|
409 |
+
* Returns the sitemap prio upsell markup.
|
410 |
+
*
|
411 |
+
* Acts as a callback for our "wp_ajax_aioseop_get_sitemap_prio_upsell" endpoint.
|
412 |
+
*
|
413 |
+
* @since 3.4.0
|
414 |
+
*/
|
415 |
+
public static function get_sitemap_prio_upsell() {
|
416 |
+
check_ajax_referer( 'aioseop-sitemap-prio-upsell', '_ajax_nonce' );
|
417 |
+
|
418 |
+
printf(
|
419 |
+
'<a class="aioseop-sitemap-prio-upsell" href="%1$s" title="%2$s" target="_blank">%3$s</a>',
|
420 |
+
aioseop_get_utm_url( 'sitemap-prio-upsell' ),
|
421 |
+
/* translators: %s: "All in One SEO Pack Pro" */
|
422 |
+
sprintf( __( 'Upgrade to %s', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' ),
|
423 |
+
__( 'Upgrade to Pro to unlock this feature.', 'all-in-one-seo-pack' )
|
424 |
+
);
|
425 |
+
|
426 |
+
die();
|
427 |
+
}
|
428 |
+
|
429 |
+
/**
|
430 |
+
* Checks if an upsell with a given key has been dismissed by the user.
|
431 |
+
*
|
432 |
+
* @since 3.4.0
|
433 |
+
*
|
434 |
+
* @param string $key The name of the upsell.
|
435 |
+
* @return bool Whether or not the upsell has been dismissed.
|
436 |
+
*/
|
437 |
+
private static function check_if_dismissed( $key ) {
|
438 |
+
|
439 |
+
$current_user = wp_get_current_user();
|
440 |
+
$dismissed = get_user_meta( $current_user->ID, 'aioseop_dismissed', true );
|
441 |
+
|
442 |
+
if ( ! empty( $dismissed[ $key ] ) ) {
|
443 |
+
return true;
|
444 |
+
}
|
445 |
+
|
446 |
+
return false;
|
447 |
+
}
|
448 |
+
|
449 |
+
/**
|
450 |
+
* Dismisses the notice bar for the current user.
|
451 |
+
*
|
452 |
+
* @since 3.4.0
|
453 |
+
*/
|
454 |
+
public static function dismiss_notice_bar() {
|
455 |
+
if ( ! isset( $_GET ) ) {
|
456 |
+
return;
|
457 |
+
}
|
458 |
+
|
459 |
+
self::dismiss_upsell( 'notice-bar' );
|
460 |
+
}
|
461 |
+
|
462 |
+
/**
|
463 |
+
* Dismisses the video sitemap upsell for the current user.
|
464 |
+
*
|
465 |
+
* @since 3.4.0
|
466 |
+
*/
|
467 |
+
public static function dismiss_video_sitemap_upsell() {
|
468 |
+
if ( ! isset( $_GET ) ) {
|
469 |
+
return;
|
470 |
+
}
|
471 |
+
|
472 |
+
self::dismiss_upsell( 'video-sitemap-upsell' );
|
473 |
+
}
|
474 |
+
|
475 |
+
/**
|
476 |
+
* Dismisses an upsell with a given key.
|
477 |
+
*
|
478 |
+
* @since 3.4.0
|
479 |
+
*
|
480 |
+
* @param string $key The name of the upsell.
|
481 |
+
*/
|
482 |
+
private static function dismiss_upsell( $key ) {
|
483 |
+
$current_user = wp_get_current_user();
|
484 |
+
$dismissed = get_user_meta( $current_user->ID, 'aioseop_dismissed', true );
|
485 |
+
|
486 |
+
if ( empty( $dismissed ) ) {
|
487 |
+
$dismissed = array();
|
488 |
+
}
|
489 |
+
|
490 |
+
$dismissed[ $key ] = time();
|
491 |
+
|
492 |
+
update_user_meta( $current_user->ID, 'aioseop_dismissed', $dismissed );
|
493 |
+
wp_send_json_success();
|
494 |
+
}
|
495 |
+
|
496 |
+
/**
|
497 |
+
* Deactivates all conflicting seo & sitemap plugins.
|
498 |
+
*
|
499 |
+
* @since 3.4.0
|
500 |
+
*
|
501 |
+
* @param string $key The name of the upsell.
|
502 |
+
*/
|
503 |
+
public static function deactivate_conflicting_plugins() {
|
504 |
+
if ( ! is_admin() ) {
|
505 |
+
return;
|
506 |
+
}
|
507 |
+
|
508 |
+
$plugins = array_merge(
|
509 |
+
self::get_conflicting_plugins( 'seo' ),
|
510 |
+
self::get_conflicting_plugins( 'sitemap' )
|
511 |
+
);
|
512 |
+
|
513 |
+
if ( empty( $plugins ) ) {
|
514 |
+
return;
|
515 |
+
}
|
516 |
+
|
517 |
+
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
518 |
+
foreach ( $plugins as $plugin_name => $plugin_path ) {
|
519 |
+
if ( is_plugin_active( $plugin_path ) ) {
|
520 |
+
deactivate_plugins( $plugin_path );
|
521 |
+
}
|
522 |
+
}
|
523 |
+
}
|
524 |
+
|
525 |
+
/**
|
526 |
+
* Adds external tools to our admin bar menu.
|
527 |
+
*
|
528 |
+
* Acts as a callback for the "wp_admin_bar_menu" action hook.
|
529 |
+
*
|
530 |
+
* @param Object $wp_admin_bar
|
531 |
+
*/
|
532 |
+
public static function wp_admin_bar_menu( $wp_admin_bar ) {
|
533 |
+
$url = get_permalink();
|
534 |
+
|
535 |
+
if ( ! $url ) {
|
536 |
+
return;
|
537 |
+
}
|
538 |
+
|
539 |
+
$wp_admin_bar->add_menu(
|
540 |
+
array(
|
541 |
+
'id' => 'aioseop-external-tools',
|
542 |
+
'parent' => AIOSEOP_PLUGIN_DIRNAME,
|
543 |
+
'title' => __( 'Analyze this page', 'all-in-one-seo-pack' ),
|
544 |
+
)
|
545 |
+
);
|
546 |
+
|
547 |
+
$url = urlencode( $url );
|
548 |
+
|
549 |
+
$submenu_items = array(
|
550 |
+
array(
|
551 |
+
'id' => 'aioseop-external-tools-inlinks',
|
552 |
+
'title' => __( 'Check links to this URL', 'all-in-one-seo-pack' ),
|
553 |
+
'href' => 'https://search.google.com/search-console/links/drilldown?resource_id=' . urlencode( get_option( 'siteurl' ) ) . '&type=EXTERNAL&target=' . $url . '&domain=',
|
554 |
+
),
|
555 |
+
array(
|
556 |
+
'id' => 'aioseop-external-tools-cache',
|
557 |
+
'title' => __( 'Check Google Cache', 'all-in-one-seo-pack' ),
|
558 |
+
'href' => '//webcache.googleusercontent.com/search?strip=1&q=cache:' . $url,
|
559 |
+
),
|
560 |
+
array(
|
561 |
+
'id' => 'aioseop-external-tools-structureddata',
|
562 |
+
'title' => __( 'Google Structured Data Test', 'all-in-one-seo-pack' ),
|
563 |
+
'href' => 'https://search.google.com/structured-data/testing-tool#url=' . $url,
|
564 |
+
),
|
565 |
+
array(
|
566 |
+
'id' => 'aioseop-external-tools-facebookdebug',
|
567 |
+
'title' => __( 'Facebook Debugger', 'all-in-one-seo-pack' ),
|
568 |
+
'href' => '//developers.facebook.com/tools/debug/og/object?q=' . $url,
|
569 |
+
),
|
570 |
+
array(
|
571 |
+
'id' => 'aioseop-external-tools-pinterestvalidator',
|
572 |
+
'title' => __( 'Pinterest Rich Pins Validator', 'all-in-one-seo-pack' ),
|
573 |
+
'href' => 'https://developers.pinterest.com/tools/url-debugger/?link=' . $url,
|
574 |
+
),
|
575 |
+
array(
|
576 |
+
'id' => 'aioseop-external-tools-htmlvalidation',
|
577 |
+
'title' => __( 'HTML Validator', 'all-in-one-seo-pack' ),
|
578 |
+
'href' => '//validator.w3.org/check?uri=' . $url,
|
579 |
+
),
|
580 |
+
array(
|
581 |
+
'id' => 'aioseop-external-tools-cssvalidation',
|
582 |
+
'title' => __( 'CSS Validator', 'all-in-one-seo-pack' ),
|
583 |
+
'href' => '//jigsaw.w3.org/css-validator/validator?uri=' . $url,
|
584 |
+
),
|
585 |
+
array(
|
586 |
+
'id' => 'aioseop-external-tools-pagespeed',
|
587 |
+
'title' => __( 'Google Page Speed Test', 'all-in-one-seo-pack' ),
|
588 |
+
'href' => '//developers.google.com/speed/pagespeed/insights/?url=' . $url,
|
589 |
+
),
|
590 |
+
array(
|
591 |
+
'id' => 'aioseop-external-tools-google-mobile-friendly',
|
592 |
+
'title' => __( 'Mobile-Friendly Test', 'all-in-one-seo-pack' ),
|
593 |
+
'href' => 'https://www.google.com/webmasters/tools/mobile-friendly/?url=' . $url,
|
594 |
+
),
|
595 |
+
);
|
596 |
+
|
597 |
+
foreach ( $submenu_items as $menu_item ) {
|
598 |
+
$menu_args = array(
|
599 |
+
'parent' => 'aioseop-external-tools',
|
600 |
+
'id' => $menu_item['id'],
|
601 |
+
'title' => $menu_item['title'],
|
602 |
+
'href' => $menu_item['href'],
|
603 |
+
'meta' => array( 'target' => '_blank' ),
|
604 |
+
);
|
605 |
+
|
606 |
+
$wp_admin_bar->add_menu( $menu_args );
|
607 |
+
}
|
608 |
+
|
609 |
+
return $wp_admin_bar;
|
610 |
+
}
|
611 |
+
|
612 |
+
/**
|
613 |
+
* Adds our rating request as a footer to our screens.
|
614 |
+
*
|
615 |
+
* @since 3.4.0
|
616 |
+
*/
|
617 |
+
public static function admin_footer_text() {
|
618 |
+
if ( ! in_array( get_current_screen()->base, aioseop_get_admin_screens(), true ) ) {
|
619 |
+
return;
|
620 |
+
}
|
621 |
+
|
622 |
+
$href = 'https://wordpress.org/support/plugin/all-in-one-seo-pack/reviews/?filter=5#new-post';
|
623 |
+
|
624 |
+
$link1 = sprintf(
|
625 |
+
'<a href="%1$s" target="_blank" title="%2$s">★★★★★</a>',
|
626 |
+
$href,
|
627 |
+
__( 'Give us a 5-star rating!', 'all-in-one-seo-pack' )
|
628 |
+
);
|
629 |
+
|
630 |
+
$link2 = sprintf(
|
631 |
+
'<a href="%1$s" target="_blank" title="%2$s">WordPress.org</a>',
|
632 |
+
$href,
|
633 |
+
__( 'Give us a 5-star rating!', 'all-in-one-seo-pack' )
|
634 |
+
);
|
635 |
+
|
636 |
+
printf(
|
637 |
+
/* translators: %1$s: "All in One SEO Pack" - %2$s: This placeholder will be replaced with star icons. - %3$s: "WordPress.org" - %4$s: "All in One SEO Pack" */
|
638 |
+
__( 'Please rate %1$s %2$s on %3$s to help us spread the word. Thank you from the %4$s team!', 'all-in-one-seo-pack' ),
|
639 |
+
sprintf( '<strong>%s</strong>', AIOSEOP_PLUGIN_NAME ),
|
640 |
+
$link1,
|
641 |
+
$link2,
|
642 |
+
AIOSEOP_PLUGIN_NAME
|
643 |
+
);
|
644 |
+
}
|
645 |
+
|
646 |
+
/**
|
647 |
+
* Register a notice if conflicting plugins have been detected.
|
648 |
+
*
|
649 |
+
* @since 3.4.0
|
650 |
+
*/
|
651 |
+
public static function register_conflicting_plugin_notice() {
|
652 |
+
global $aioseop_notices;
|
653 |
+
global $aioseop_options;
|
654 |
+
|
655 |
+
$conflicting_seo_plugins = self::get_conflicting_plugins( 'seo' );
|
656 |
+
$conflicting_sitemap_plugins = array();
|
657 |
+
|
658 |
+
if ( // This value does not exist if user has never (de)activated a module before.
|
659 |
+
! isset( $aioseop_options['modules']['aiosp_feature_manager_options'] ) ||
|
660 |
+
! empty( $aioseop_options['modules']['aiosp_feature_manager_options']['aiosp_feature_manager_enable_sitemap'] ) ) {
|
661 |
+
$conflicting_sitemap_plugins = self::get_conflicting_plugins( 'sitemap' );
|
662 |
+
}
|
663 |
+
|
664 |
+
if ( empty( $conflicting_seo_plugins ) && empty( $conflicting_sitemap_plugins ) ) {
|
665 |
+
if ( isset( $aioseop_notices->active_notices['conflicting_plugin'] ) ) {
|
666 |
+
$aioseop_notices->remove_notice( 'conflicting_plugin' );
|
667 |
+
}
|
668 |
+
return;
|
669 |
+
}
|
670 |
+
|
671 |
+
$aioseop_notices->activate_notice( 'conflicting_plugin' );
|
672 |
+
add_filter( 'aioseop_admin_notice-conflicting_plugin', array( 'AIOSEOP_Education', 'filter_conflicting_plugin_notice_data' ) );
|
673 |
+
}
|
674 |
+
|
675 |
+
/**
|
676 |
+
* Filters the data that goes into our conflicting plugins notice.
|
677 |
+
*
|
678 |
+
* @since 3.4.0
|
679 |
+
*
|
680 |
+
* @param Object $notice_data The default data of the notice.
|
681 |
+
*/
|
682 |
+
public static function filter_conflicting_plugin_notice_data( $notice_data ) {
|
683 |
+
global $aioseop_options;
|
684 |
+
$seo_plugin_list = '';
|
685 |
+
$sitemap_plugin_list = '';
|
686 |
+
|
687 |
+
$conflicting_seo_plugins = self::get_conflicting_plugins( 'seo' );
|
688 |
+
$conflicting_sitemap_plugins = self::get_conflicting_plugins( 'sitemap' );
|
689 |
+
|
690 |
+
if ( ! empty( $conflicting_seo_plugins ) ) {
|
691 |
+
$list_header = sprintf( '<strong>%s</strong>', __( 'SEO Plugins', 'all-in-one-seo-pack' ) );
|
692 |
+
|
693 |
+
$list = '';
|
694 |
+
foreach ( $conflicting_seo_plugins as $plugin_name => $plugin_path ) {
|
695 |
+
$plugin_name = str_replace( '_', ' ', $plugin_name );
|
696 |
+
$list .= "<li>${plugin_name}</li>";
|
697 |
+
}
|
698 |
+
|
699 |
+
$seo_plugin_list = sprintf( '%s<ul class="aioseop-notice-list">%s</ul>', $list_header, $list );
|
700 |
+
}
|
701 |
+
|
702 |
+
if ( ! empty( $conflicting_sitemap_plugins ) &&
|
703 |
+
// This value does not exist if user has never (de)activated a module before.
|
704 |
+
( ! isset( $aioseop_options['modules']['aiosp_feature_manager_options'] ) || ! empty( $aioseop_options['modules']['aiosp_feature_manager_options']['aiosp_feature_manager_enable_sitemap'] ) )
|
705 |
+
) {
|
706 |
+
$list_header = sprintf( '<strong>%s</strong>', __( 'Sitemap Plugins', 'all-in-one-seo-pack' ) );
|
707 |
+
|
708 |
+
$list = '';
|
709 |
+
foreach ( $conflicting_sitemap_plugins as $plugin_name => $plugin_path ) {
|
710 |
+
$plugin_name = str_replace( '_', ' ', $plugin_name );
|
711 |
+
$list .= "<li>${plugin_name}</li>";
|
712 |
+
}
|
713 |
+
|
714 |
+
$sitemap_plugin_list = sprintf( '%s<ul class="aioseop-notice-list">%s</ul>', $list_header, $list );
|
715 |
+
}
|
716 |
+
|
717 |
+
$notice_data['html'] =
|
718 |
+
'<div><p>' .
|
719 |
+
|
720 |
+
sprintf(
|
721 |
+
__(
|
722 |
+
'<strong>Warning</strong>: %s has detected other active SEO or sitemap plugins.
|
723 |
+
We recommend that you deactivate the following plugins to prevent any conflicts:',
|
724 |
+
'all-in-one-seo-pack'
|
725 |
+
),
|
726 |
+
AIOSEOP_PLUGIN_NAME
|
727 |
+
) .
|
728 |
+
|
729 |
+
'</p><div class="aioseop-notice-indented">' . $seo_plugin_list . $sitemap_plugin_list . '</div></div>';
|
730 |
+
|
731 |
+
return $notice_data;
|
732 |
+
}
|
733 |
+
|
734 |
+
/**
|
735 |
+
* Returns an unordered list of SEO plugins that are known to conflict with All in One SEO Pack.
|
736 |
+
*
|
737 |
+
* @since 3.4.0
|
738 |
+
*
|
739 |
+
* @param string $type The type of conflicting plugin ("seo" or "sitemap").
|
740 |
+
*
|
741 |
+
* @return array The list of plugins that are known to conflict.
|
742 |
+
*/
|
743 |
+
private static function get_conflicting_plugins( $type ) {
|
744 |
+
$active_plugins = get_option( 'active_plugins' );
|
745 |
+
|
746 |
+
$conflicting_plugins = array();
|
747 |
+
switch ( $type ) {
|
748 |
+
case 'seo': {
|
749 |
+
$conflicting_plugins = array(
|
750 |
+
'Yoast SEO' => 'wordpress-seo/wp-seo.php',
|
751 |
+
'Yoast SEO Premium' => 'wordpress-seo-premium/wp-seo-premium.php',
|
752 |
+
'Rank Math SEO' => 'seo-by-rank-math/rank-math.php',
|
753 |
+
'SEOPress' => 'wp-seopress/seopress.php',
|
754 |
+
'The SEO Framework' => 'autodescription/autodescription.php',
|
755 |
+
);
|
756 |
+
break;
|
757 |
+
}
|
758 |
+
case 'sitemap': {
|
759 |
+
$conflicting_plugins = array(
|
760 |
+
'Google XML Sitemaps' => 'google-sitemap-generator/sitemap.php',
|
761 |
+
'XML Sitemap & Google News' => 'xml-sitemap-feed/xml-sitemap.php',
|
762 |
+
'Google XML Sitemap Generator' => 'www-xml-sitemap-generator-org/www-xml-sitemap-generator-org.php',
|
763 |
+
'Sitemap by BestWebSoft' => 'google-sitemap-plugin/google-sitemap-plugin.php',
|
764 |
+
);
|
765 |
+
break;
|
766 |
+
}
|
767 |
+
}
|
768 |
+
|
769 |
+
return array_intersect( $conflicting_plugins, $active_plugins );
|
770 |
+
}
|
771 |
+
|
772 |
+
/**
|
773 |
+
* Returns the taxonomies upsell markup.
|
774 |
+
*
|
775 |
+
* @since 3.4.0
|
776 |
+
*
|
777 |
+
* @param string $page_id The ID of the current page.
|
778 |
+
*
|
779 |
+
* @return string The taxonomies upsell markup.
|
780 |
+
*/
|
781 |
+
private static function get_taxonomies_upsell_content( $page_id ) {
|
782 |
+
$is_woocommerce_page = false;
|
783 |
+
if ( 'edit-product_cat' === $page_id || 'edit-product_tag' === $page_id ) {
|
784 |
+
$is_woocommerce_page = true;
|
785 |
+
}
|
786 |
+
|
787 |
+
return self::get_taxonomies_upsell_markup( $page_id, $is_woocommerce_page );
|
788 |
+
}
|
789 |
+
|
790 |
+
/**
|
791 |
+
* Returns the modal markup for the taxonomies upsell.
|
792 |
+
*
|
793 |
+
* @since 3.4.0
|
794 |
+
*
|
795 |
+
* @param string $page_id The ID of the current page.
|
796 |
+
* @param bool $is_woocommerce_page Whether or not the current page is a WooCommerce taxonomy page.
|
797 |
+
*
|
798 |
+
* @return string The taxonomies upsell modal markup.
|
799 |
+
*/
|
800 |
+
private static function get_taxonomies_upsell_modal_markup( $page_id, $is_woocommerce_page = false ) {
|
801 |
+
$header = ( $is_woocommerce_page ) ? __( 'Unlock SEO for WooCommerce Product Categories & Product Tags', 'all-in-one-seo-pack' ) : __( 'Unlock SEO for Categories, Tags and Custom Taxonomies', 'all-in-one-seo-pack' );
|
802 |
+
|
803 |
+
return
|
804 |
+
'<div class="aioseop-taxonomies-upsell-modal">
|
805 |
+
<div class="aioseop-taxonomies-upsell-modal-content">
|
806 |
+
<h2>' . $header . '</h2>
|
807 |
+
<p>
|
808 |
+
<strong>' .
|
809 |
+
__( 'This feature is exclusive to our premium version.', 'all-in-one-seo-pack' ) .
|
810 |
+
'</strong><br>' .
|
811 |
+
/* translators: %s: "All in One SEO Pack Pro" */
|
812 |
+
sprintf( __( 'Once you upgrade to %s, you will gain access to all of our exclusive premium features, providing you with even more control over your SEO.', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' ) .
|
813 |
+
'
|
814 |
+
</p>
|
815 |
+
<div>
|
816 |
+
<ul class="left">
|
817 |
+
<li><span class="dashicons dashicons-yes aioseop-modal-checkmark"></span>' . __( 'SEO and Social Meta for Taxonomies', 'all-in-one-seo-pack' ) . '</li>
|
818 |
+
<li><span class="dashicons dashicons-yes aioseop-modal-checkmark"></span>' . __( 'Advanced support for WooCommerce', 'all-in-one-seo-pack' ) . '</li>
|
819 |
+
<li><span class="dashicons dashicons-yes aioseop-modal-checkmark"></span>' . __( 'Video Sitemap Module', 'all-in-one-seo-pack' ) . '</li>
|
820 |
+
<li><span class="dashicons dashicons-yes aioseop-modal-checkmark"></span>' . __( 'Image SEO Module', 'all-in-one-seo-pack' ) . '</li>
|
821 |
+
</ul>
|
822 |
+
<ul class="right">
|
823 |
+
<li><span class="dashicons dashicons-yes aioseop-modal-checkmark"></span>' . __( 'Support for Google Tag Manager', 'all-in-one-seo-pack' ) . '</li>
|
824 |
+
<li><span class="dashicons dashicons-yes aioseop-modal-checkmark"></span>' . __( 'Advanced Google Analytics tracking', 'all-in-one-seo-pack' ) . '</li>
|
825 |
+
<li><span class="dashicons dashicons-yes aioseop-modal-checkmark"></span>' . __( 'Access to Premium Support', 'all-in-one-seo-pack' ) . '</li>
|
826 |
+
<li><span class="dashicons dashicons-yes aioseop-modal-checkmark"></span>' . __( 'Ad free (no banner adverts)', 'all-in-one-seo-pack' ) . '</li>
|
827 |
+
</ul>
|
828 |
+
</div>
|
829 |
+
</div>
|
830 |
+
<div class="aioseop-taxonomies-upsell-modal-button">
|
831 |
+
<a href="' . aioseop_get_utm_url( "taxonomies-upsell-{$page_id}" ) . '" class="button button-primary button-hero" target="_blank" rel="noopener noreferrer">' .
|
832 |
+
/* translators: %s: "All in One SEO Pack Pro" */
|
833 |
+
sprintf( __( 'Upgrade to %s Now', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' ) .
|
834 |
+
'</a>
|
835 |
+
</div>
|
836 |
+
</div>';
|
837 |
+
}
|
838 |
+
|
839 |
+
/**
|
840 |
+
* Returns the markup for the taxonomies upsell.
|
841 |
+
*
|
842 |
+
* @since 3.4.0
|
843 |
+
*
|
844 |
+
* @param string $page_id The ID of the current page.
|
845 |
+
* @param bool $is_woocommerce_page Whether or not the current page is a WooCommerce taxonomy page.
|
846 |
+
*
|
847 |
+
* @return string The taxonomies upsell AIOSEOP metabox markup.
|
848 |
+
*/
|
849 |
+
private static function get_taxonomies_upsell_markup( $page_id, $is_woocommerce_page ) {
|
850 |
+
return
|
851 |
+
'<div class="aioseop-preview-wrapper">
|
852 |
+
<div id="poststuff" class="aioseop-upsell-blurred">
|
853 |
+
<div id="advanced-sortables" class="meta-box-sortables">
|
854 |
+
<div id="aiosp_tabbed" class="postbox ">
|
855 |
+
<button type="button" class="handlediv" aria-expanded="true" disabled="disabled"><span class="screen-reader-text">Toggle panel: All in One SEO Pack Pro</span><span class="toggle-indicator" aria-hidden="true"></span></button>
|
856 |
+
<h2 class="hndle"><span>All in One SEO Pack Pro</span></h2>
|
857 |
+
<div class="inside">
|
858 |
+
<div class="aioseop_tabs ui-tabs ui-widget ui-widget-content ui-corner-all">
|
859 |
+
<ul class="aioseop_header_tabs hide ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" role="tablist">
|
860 |
+
<li class="ui-state-default ui-corner-top ui-tabs-active ui-state-active" role="tab" tabindex="0" aria-controls="aiosp" aria-labelledby="ui-id-1" aria-selected="true" aria-expanded="true"><label class="aioseop_header_nav"><a class="aioseop_header_tab active ui-tabs-anchor" href="#aiosp" role="presentation" tabindex="-1" id="ui-id-1">Main Settings</a></label></li>
|
861 |
+
<li class="ui-state-default ui-corner-top" role="tab" tabindex="-1" aria-controls="aioseop_opengraph_settings" aria-labelledby="ui-id-2" aria-selected="false" aria-expanded="false"><label class="aioseop_header_nav"><a class="aioseop_header_tab ui-tabs-anchor" href="#aioseop_opengraph_settings" role="presentation" tabindex="-1" id="ui-id-2">Social Settings</a></label></li>
|
862 |
+
</ul>
|
863 |
+
<div id="aiosp" class="aioseop_tab ui-tabs-panel ui-widget-content ui-corner-bottom" aria-labelledby="ui-id-1" role="tabpanel" aria-hidden="false">
|
864 |
+
<input name="aiosp_edit" type="hidden" value="aiosp_edit" autocomplete="aioseop-1583681284" disabled="disabled">
|
865 |
+
<div class="aioseop aioseop_options aiosp_settings">
|
866 |
+
<div class="aioseop_wrapper aioseop_html_type" id="aiosp_snippet_wrapper">
|
867 |
+
<div class="aioseop_input"><span class="aioseop_option_label" style="text-align:left;vertical-align:top;"><a tabindex="0" class="aioseop_help_text_link"></a><label class="aioseop_label textinput">Preview Snippet</label></span></div>
|
868 |
+
<div class="aioseop_input aioseop_top_label">
|
869 |
+
<div class="aioseop_option_input">
|
870 |
+
<div class="aioseop_option_div">
|
871 |
+
<div class="preview_snippet">
|
872 |
+
<div id="aioseop_snippet">
|
873 |
+
<h3><a>Bacon Ipsum | Dev AIOSEOP</a></h3>
|
874 |
+
<div>
|
875 |
+
<div><cite id="aioseop_snippet_link">http://bacon-ipsum</cite></div>
|
876 |
+
<span id="aioseop_snippet_description">Bacon ipsum dolor brisket beef ribs pork chop. Pig venison bresaola alcatra buffalo t-bone tail.</span>
|
877 |
+
</div>
|
878 |
+
</div>
|
879 |
+
</div>
|
880 |
+
</div>
|
881 |
+
</div>
|
882 |
+
<p style="clear:left"></p>
|
883 |
+
</div>
|
884 |
+
</div>
|
885 |
+
<div class="aioseop_wrapper aioseop_text_type" id="aiosp_title_wrapper">
|
886 |
+
<div class="aioseop_input">
|
887 |
+
<span class="aioseop_option_label" style="text-align:right;vertical-align:top;"><a tabindex="0" class="aioseop_help_text_link"></a><label class="aioseop_label textinput">Title</label></span>
|
888 |
+
<div class="aioseop_option_input">
|
889 |
+
<div class="aioseop_option_div"><input name="aiosp_title" type="text" size="60" placeholder="Bacon Ipsum" class=" aioseop_count_chars" data-length-field="length1" value="Bacon Ipsum" autocomplete="aioseop-1583681284" disabled="disabled">
|
890 |
+
<br><input readonly="" tabindex="-1" type="text" name="length1" size="3" maxlength="3" style="width:53px;height:23px;margin:0px;padding:0px 0px 0px 10px;" value="11" class="aioseop_count_good" disabled="disabled"> characters. Most search engines use a maximum of 60 chars for the title.
|
891 |
+
</div>
|
892 |
+
</div>
|
893 |
+
<p style="clear:left"></p>
|
894 |
+
</div>
|
895 |
+
</div>
|
896 |
+
<div class="aioseop_wrapper aioseop_textarea_type" id="aiosp_description_wrapper">
|
897 |
+
<div class="aioseop_input">
|
898 |
+
<span class="aioseop_option_label" style="text-align:right;vertical-align:top;"><a tabindex="0" class="aioseop_help_text_link"></a><label class="aioseop_label textinput">Description</label></span>
|
899 |
+
<div class="aioseop_option_input">
|
900 |
+
<div class="aioseop_option_div"><textarea name="aiosp_description" placeholder="Bacon ipsum dolor brisket beef ribs pork chop. Pig venison bresaola alcatra buffalo t-bone tail." rows="2" cols="80" class=" aioseop_count_chars" data-length-field="length2" disabled="disabled" style="margin-top: 1px; margin-bottom: 1px; height: 143px;"></textarea><br><input readonly="" tabindex="-1" type="text" name="length2" size="3" maxlength="3" style="width:53px;height:23px;margin:0px;padding:0px 0px 0px 10px;" value="139" class="aioseop_count_good" disabled="disabled"> characters. Most search engines use a maximum of 160 chars for the description.</div>
|
901 |
+
</div>
|
902 |
+
<p style="clear:left"></p>
|
903 |
+
</div>
|
904 |
+
</div>
|
905 |
+
<div class="aioseop_wrapper aioseop_text_type" id="aiosp_custom_link_wrapper">
|
906 |
+
<div class="aioseop_input">
|
907 |
+
<span class="aioseop_option_label" style="text-align:right;vertical-align:top;"><a tabindex="0" class="aioseop_help_text_link"></a><label class="aioseop_label textinput">Custom Canonical URL</label></span>
|
908 |
+
<div class="aioseop_option_input">
|
909 |
+
<div class="aioseop_option_div"><input name="aiosp_custom_link" type="text" size="60" value="bacon-ipsum" autocomplete="aioseop-1583681284" disabled="disabled">
|
910 |
+
</div>
|
911 |
+
</div>
|
912 |
+
<p style="clear:left"></p>
|
913 |
+
</div>
|
914 |
+
</div>
|
915 |
+
<div class="aioseop_wrapper aioseop_checkbox_type" id="aiosp_noindex_wrapper">
|
916 |
+
<div class="aioseop_input">
|
917 |
+
<span class="aioseop_option_label" style="text-align:right;vertical-align:top;"><a tabindex="0" class="aioseop_help_text_link"></a><label class="aioseop_label textinput">NOINDEX this page/post</label></span>
|
918 |
+
<div class="aioseop_option_input">
|
919 |
+
<div class="aioseop_option_div"><input name="aiosp_noindex" type="checkbox" disabled="disabled">
|
920 |
+
</div>
|
921 |
+
</div>
|
922 |
+
<p style="clear:left"></p>
|
923 |
+
</div>
|
924 |
+
</div>
|
925 |
+
<div class="aioseop_wrapper aioseop_checkbox_type" id="aiosp_nofollow_wrapper">
|
926 |
+
<div class="aioseop_input">
|
927 |
+
<span class="aioseop_option_label" style="text-align:right;vertical-align:top;"><a tabindex="0" class="aioseop_help_text_link"></a><label class="aioseop_label textinput">NOFOLLOW this page/post</label></span>
|
928 |
+
<div class="aioseop_option_input">
|
929 |
+
<div class="aioseop_option_div"><input name="aiosp_nofollow" type="checkbox" checked="" disabled="disabled">
|
930 |
+
</div>
|
931 |
+
</div>
|
932 |
+
<p style="clear:left"></p>
|
933 |
+
</div>
|
934 |
+
</div>
|
935 |
+
<div class="aioseop_wrapper aioseop_checkbox_type" id="aiosp_disable_wrapper">
|
936 |
+
<div class="aioseop_input">
|
937 |
+
<span class="aioseop_option_label" style="text-align:right;vertical-align:top;"><a tabindex="0" class="aioseop_help_text_link"></a><label class="aioseop_label textinput">Disable on this page/post</label></span>
|
938 |
+
<div class="aioseop_option_input">
|
939 |
+
<div class="aioseop_option_div"><input name="aiosp_disable" type="checkbox" disabled="disabled">
|
940 |
+
</div>
|
941 |
+
</div>
|
942 |
+
<p style="clear:left"></p>
|
943 |
+
</div>
|
944 |
+
</div>
|
945 |
+
<div class="aioseop_wrapper aioseop_checkbox_type" id="aiosp_disable_analytics_wrapper" style="display: none;">
|
946 |
+
<div class="aioseop_input">
|
947 |
+
<span class="aioseop_option_label" style="text-align:right;vertical-align:top;"><a tabindex="0" class="aioseop_help_text_link" style=";" title="<h4 aria-hidden>Disable Google Analytics:</h4> Disable Google Analytics on this page.<br /><br /><a href="https://semperplugins.com/documentation/post-settings/#disable-google-analytics" target="_blank">Click here for documentation on this setting.</a>"></a><label class="aioseop_label textinput">Disable Google Analytics</label></span>
|
948 |
+
<div class="aioseop_option_input">
|
949 |
+
<div class="aioseop_option_div"><input name="aiosp_disable_analytics" type="checkbox" disabled="disabled">
|
950 |
+
</div>
|
951 |
+
</div>
|
952 |
+
<p style="clear:left"></p>
|
953 |
+
</div>
|
954 |
+
</div>
|
955 |
+
</div>
|
956 |
+
</div>
|
957 |
+
</div>
|
958 |
+
</div>
|
959 |
+
</div>
|
960 |
+
</div>
|
961 |
+
</div>' .
|
962 |
+
self::get_taxonomies_upsell_modal_markup( $page_id, $is_woocommerce_page ) . '</div>';
|
963 |
+
}
|
964 |
+
}
|
inc/admin/class-aioseop-link-attributes.php
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Extends the Gutenberg Editor and Classic Editor with extra rich text features.
|
4 |
+
*
|
5 |
+
* @since 3.4.0
|
6 |
+
* @package All-in-One-SEO-Pack
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Enqueues scripts that allow users to add nofollow, sponsored and title attributes to links in the Gutenberg Editor and Classic Editor.
|
11 |
+
*
|
12 |
+
* @since 3.4.0
|
13 |
+
*/
|
14 |
+
class AIOSEOP_Link_Attributes {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Enqueues the script for the Classic Editor.
|
18 |
+
*
|
19 |
+
* Acts as a callback for the wp_enqueue_editor action hook.
|
20 |
+
*
|
21 |
+
* @since 3.4.0
|
22 |
+
*
|
23 |
+
* @return void
|
24 |
+
*/
|
25 |
+
public static function enqueue_link_attributes_classic_editor() {
|
26 |
+
wp_deregister_script( 'wplink' );
|
27 |
+
wp_enqueue_script(
|
28 |
+
'aioseop-link-attributes-classic-editor',
|
29 |
+
AIOSEOP_PLUGIN_URL . 'js/admin/aioseop-link-attributes-classic-editor.js',
|
30 |
+
array( 'jquery', 'wp-a11y' ),
|
31 |
+
AIOSEOP_VERSION,
|
32 |
+
true
|
33 |
+
);
|
34 |
+
|
35 |
+
wp_localize_script(
|
36 |
+
'aioseop-link-attributes-classic-editor',
|
37 |
+
'aioseopL10n',
|
38 |
+
array(
|
39 |
+
'update' => __( 'Update', 'all-in-one-seo-pack' ),
|
40 |
+
'save' => __( 'Add Link', 'all-in-one-seo-pack' ),
|
41 |
+
'noTitle' => __( '(no title)', 'all-in-one-seo-pack' ),
|
42 |
+
'labelTitle' => __( 'Title', 'all-in-one-seo-pack' ),
|
43 |
+
'noMatchesFound' => __( 'No results found.', 'all-in-one-seo-pack' ),
|
44 |
+
'linkInserted' => __( 'Link has been inserted.', 'all-in-one-seo-pack' ),
|
45 |
+
'noFollow' => __( ' Add <code>rel="nofollow"</code> to link', 'all-in-one-seo-pack' ),
|
46 |
+
'sponsored' => __( ' Add <code>rel="sponsored"</code> to link', 'all-in-one-seo-pack' ),
|
47 |
+
)
|
48 |
+
);
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Registers the script for the Gutenberg Editor.
|
53 |
+
*
|
54 |
+
* Acts as a callback for the admin_init action hook.
|
55 |
+
*
|
56 |
+
* @since 3.4.0
|
57 |
+
*
|
58 |
+
* @return void
|
59 |
+
*/
|
60 |
+
public static function register_link_attributes_gutenberg_editor() {
|
61 |
+
wp_register_script(
|
62 |
+
'aioseop-link-attributes-gutenberg-editor',
|
63 |
+
AIOSEOP_PLUGIN_URL . 'build/aioseop-link-attributes-gutenberg-editor.js',
|
64 |
+
array(
|
65 |
+
'wp-blocks',
|
66 |
+
'wp-i18n',
|
67 |
+
'wp-element',
|
68 |
+
'wp-plugins',
|
69 |
+
'wp-components',
|
70 |
+
'wp-edit-post',
|
71 |
+
'wp-api',
|
72 |
+
'wp-editor',
|
73 |
+
'wp-hooks',
|
74 |
+
'lodash',
|
75 |
+
),
|
76 |
+
AIOSEOP_VERSION,
|
77 |
+
true
|
78 |
+
);
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Enqueues the script for the Gutenberg Editor.
|
83 |
+
*
|
84 |
+
* Acts as a callback for the enqueue_block_editor_assets action hook.
|
85 |
+
*
|
86 |
+
* @since 3.4.0
|
87 |
+
*
|
88 |
+
* @return void
|
89 |
+
*/
|
90 |
+
public static function enqueue_link_attributes_gutenberg_editor() {
|
91 |
+
wp_enqueue_script( 'aioseop-link-attributes-gutenberg-editor' );
|
92 |
+
}
|
93 |
+
}
|
inc/admin/helpers/PluginSilentUpgrader.php
ADDED
@@ -0,0 +1,571 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile
|
3 |
+
|
4 |
+
/** \WP_Upgrader class */
|
5 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
6 |
+
|
7 |
+
/** \Plugin_Upgrader class */
|
8 |
+
require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
|
9 |
+
|
10 |
+
/**
|
11 |
+
* In WP 5.3 a PHP 5.6 splat operator (...$args) was added to \WP_Upgrader_Skin::feedback().
|
12 |
+
* We need to remove all calls to *Skin::feedback() method, as we can't override it in own Skins
|
13 |
+
* without breaking support for PHP 5.3-5.5.
|
14 |
+
*
|
15 |
+
* @internal Please do not use this class outside of core All in One SEO development. May be removed at any time.
|
16 |
+
*
|
17 |
+
* @since 1.5.6.1
|
18 |
+
*/
|
19 |
+
class PluginSilentUpgrader extends \Plugin_Upgrader {
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Run an upgrade/installation.
|
23 |
+
*
|
24 |
+
* Attempts to download the package (if it is not a local file), unpack it, and
|
25 |
+
* install it in the destination folder.
|
26 |
+
*
|
27 |
+
* @since 1.5.6.1
|
28 |
+
*
|
29 |
+
* @param array $options {
|
30 |
+
* Array or string of arguments for upgrading/installing a package.
|
31 |
+
*
|
32 |
+
* @type string $package The full path or URI of the package to install.
|
33 |
+
* Default empty.
|
34 |
+
* @type string $destination The full path to the destination folder.
|
35 |
+
* Default empty.
|
36 |
+
* @type bool $clear_destination Whether to delete any files already in the
|
37 |
+
* destination folder. Default false.
|
38 |
+
* @type bool $clear_working Whether to delete the files form the working
|
39 |
+
* directory after copying to the destination.
|
40 |
+
* Default false.
|
41 |
+
* @type bool $abort_if_destination_exists Whether to abort the installation if the destination
|
42 |
+
* folder already exists. When true, `$clear_destination`
|
43 |
+
* should be false. Default true.
|
44 |
+
* @type bool $is_multi Whether this run is one of multiple upgrade/installation
|
45 |
+
* actions being performed in bulk. When true, the skin
|
46 |
+
* WP_Upgrader::header() and WP_Upgrader::footer()
|
47 |
+
* aren't called. Default false.
|
48 |
+
* @type array $hook_extra Extra arguments to pass to the filter hooks called by
|
49 |
+
* WP_Upgrader::run().
|
50 |
+
* }
|
51 |
+
* @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error,
|
52 |
+
* or false if unable to connect to the filesystem.
|
53 |
+
*/
|
54 |
+
public function run( $options ) {
|
55 |
+
|
56 |
+
$defaults = array(
|
57 |
+
'package' => '', // Please always pass this.
|
58 |
+
'destination' => '', // And this
|
59 |
+
'clear_destination' => false,
|
60 |
+
'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please
|
61 |
+
'clear_working' => true,
|
62 |
+
'is_multi' => false,
|
63 |
+
'hook_extra' => array(), // Pass any extra $hook_extra args here, this will be passed to any hooked filters.
|
64 |
+
);
|
65 |
+
|
66 |
+
$options = wp_parse_args( $options, $defaults );
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Filters the package options before running an update.
|
70 |
+
*
|
71 |
+
* See also {@see 'upgrader_process_complete'}.
|
72 |
+
*
|
73 |
+
* @since 4.3.0
|
74 |
+
*
|
75 |
+
* @param array $options {
|
76 |
+
* Options used by the upgrader.
|
77 |
+
*
|
78 |
+
* @type string $package Package for update.
|
79 |
+
* @type string $destination Update location.
|
80 |
+
* @type bool $clear_destination Clear the destination resource.
|
81 |
+
* @type bool $clear_working Clear the working resource.
|
82 |
+
* @type bool $abort_if_destination_exists Abort if the Destination directory exists.
|
83 |
+
* @type bool $is_multi Whether the upgrader is running multiple times.
|
84 |
+
* @type array $hook_extra {
|
85 |
+
* Extra hook arguments.
|
86 |
+
*
|
87 |
+
* @type string $action Type of action. Default 'update'.
|
88 |
+
* @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'.
|
89 |
+
* @type bool $bulk Whether the update process is a bulk update. Default true.
|
90 |
+
* @type string $plugin Path to the plugin file relative to the plugins directory.
|
91 |
+
* @type string $theme The stylesheet or template name of the theme.
|
92 |
+
* @type string $language_update_type The language pack update type. Accepts 'plugin', 'theme',
|
93 |
+
* or 'core'.
|
94 |
+
* @type object $language_update The language pack update offer.
|
95 |
+
* }
|
96 |
+
* }
|
97 |
+
*/
|
98 |
+
$options = apply_filters( 'upgrader_package_options', $options );
|
99 |
+
|
100 |
+
if ( ! $options['is_multi'] ) { // call $this->header separately if running multiple times
|
101 |
+
$this->skin->header();
|
102 |
+
}
|
103 |
+
|
104 |
+
// Connect to the Filesystem first.
|
105 |
+
$res = $this->fs_connect( array( WP_CONTENT_DIR, $options['destination'] ) );
|
106 |
+
// Mainly for non-connected filesystem.
|
107 |
+
if ( ! $res ) {
|
108 |
+
if ( ! $options['is_multi'] ) {
|
109 |
+
$this->skin->footer();
|
110 |
+
}
|
111 |
+
return false;
|
112 |
+
}
|
113 |
+
|
114 |
+
$this->skin->before();
|
115 |
+
|
116 |
+
if ( is_wp_error( $res ) ) {
|
117 |
+
$this->skin->error( $res );
|
118 |
+
$this->skin->after();
|
119 |
+
if ( ! $options['is_multi'] ) {
|
120 |
+
$this->skin->footer();
|
121 |
+
}
|
122 |
+
return $res;
|
123 |
+
}
|
124 |
+
|
125 |
+
/*
|
126 |
+
* Download the package (Note, This just returns the filename
|
127 |
+
* of the file if the package is a local file)
|
128 |
+
*/
|
129 |
+
$download = $this->download_package( $options['package'], true );
|
130 |
+
|
131 |
+
// Allow for signature soft-fail.
|
132 |
+
// WARNING: This may be removed in the future.
|
133 |
+
if ( is_wp_error( $download ) && $download->get_error_data( 'softfail-filename' ) ) {
|
134 |
+
|
135 |
+
// Don't output the 'no signature could be found' failure message for now.
|
136 |
+
if ( 'signature_verification_no_signature' != $download->get_error_code() || WP_DEBUG ) {
|
137 |
+
// Outout the failure error as a normal feedback, and not as an error:
|
138 |
+
// $this->skin->feedback( $download->get_error_message() );
|
139 |
+
|
140 |
+
// Report this failure back to WordPress.org for debugging purposes.
|
141 |
+
wp_version_check(
|
142 |
+
array(
|
143 |
+
'signature_failure_code' => $download->get_error_code(),
|
144 |
+
'signature_failure_data' => $download->get_error_data(),
|
145 |
+
)
|
146 |
+
);
|
147 |
+
}
|
148 |
+
|
149 |
+
// Pretend this error didn't happen.
|
150 |
+
$download = $download->get_error_data( 'softfail-filename' );
|
151 |
+
}
|
152 |
+
|
153 |
+
if ( is_wp_error( $download ) ) {
|
154 |
+
$this->skin->error( $download );
|
155 |
+
$this->skin->after();
|
156 |
+
if ( ! $options['is_multi'] ) {
|
157 |
+
$this->skin->footer();
|
158 |
+
}
|
159 |
+
return $download;
|
160 |
+
}
|
161 |
+
|
162 |
+
$delete_package = ( $download != $options['package'] ); // Do not delete a "local" file
|
163 |
+
|
164 |
+
// Unzips the file into a temporary directory.
|
165 |
+
$working_dir = $this->unpack_package( $download, $delete_package );
|
166 |
+
if ( is_wp_error( $working_dir ) ) {
|
167 |
+
$this->skin->error( $working_dir );
|
168 |
+
$this->skin->after();
|
169 |
+
if ( ! $options['is_multi'] ) {
|
170 |
+
$this->skin->footer();
|
171 |
+
}
|
172 |
+
return $working_dir;
|
173 |
+
}
|
174 |
+
|
175 |
+
// With the given options, this installs it to the destination directory.
|
176 |
+
$result = $this->install_package(
|
177 |
+
array(
|
178 |
+
'source' => $working_dir,
|
179 |
+
'destination' => $options['destination'],
|
180 |
+
'clear_destination' => $options['clear_destination'],
|
181 |
+
'abort_if_destination_exists' => $options['abort_if_destination_exists'],
|
182 |
+
'clear_working' => $options['clear_working'],
|
183 |
+
'hook_extra' => $options['hook_extra'],
|
184 |
+
)
|
185 |
+
);
|
186 |
+
|
187 |
+
$this->skin->set_result( $result );
|
188 |
+
if ( is_wp_error( $result ) ) {
|
189 |
+
$this->skin->error( $result );
|
190 |
+
// $this->skin->feedback( 'process_failed' );
|
191 |
+
} else {
|
192 |
+
// Installation succeeded.
|
193 |
+
// $this->skin->feedback( 'process_success' );
|
194 |
+
}
|
195 |
+
|
196 |
+
$this->skin->after();
|
197 |
+
|
198 |
+
if ( ! $options['is_multi'] ) {
|
199 |
+
|
200 |
+
/**
|
201 |
+
* Fires when the upgrader process is complete.
|
202 |
+
*
|
203 |
+
* See also {@see 'upgrader_package_options'}.
|
204 |
+
*
|
205 |
+
* @since 3.6.0
|
206 |
+
* @since 3.7.0 Added to WP_Upgrader::run().
|
207 |
+
* @since 4.6.0 `$translations` was added as a possible argument to `$hook_extra`.
|
208 |
+
*
|
209 |
+
* @param WP_Upgrader $this WP_Upgrader instance. In other contexts, $this, might be a
|
210 |
+
* Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance.
|
211 |
+
* @param array $hook_extra {
|
212 |
+
* Array of bulk item update data.
|
213 |
+
*
|
214 |
+
* @type string $action Type of action. Default 'update'.
|
215 |
+
* @type string $type Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'.
|
216 |
+
* @type bool $bulk Whether the update process is a bulk update. Default true.
|
217 |
+
* @type array $plugins Array of the basename paths of the plugins' main files.
|
218 |
+
* @type array $themes The theme slugs.
|
219 |
+
* @type array $translations {
|
220 |
+
* Array of translations update data.
|
221 |
+
*
|
222 |
+
* @type string $language The locale the translation is for.
|
223 |
+
* @type string $type Type of translation. Accepts 'plugin', 'theme', or 'core'.
|
224 |
+
* @type string $slug Text domain the translation is for. The slug of a theme/plugin or
|
225 |
+
* 'default' for core translations.
|
226 |
+
* @type string $version The version of a theme, plugin, or core.
|
227 |
+
* }
|
228 |
+
* }
|
229 |
+
*/
|
230 |
+
do_action( 'upgrader_process_complete', $this, $options['hook_extra'] );
|
231 |
+
|
232 |
+
$this->skin->footer();
|
233 |
+
}
|
234 |
+
|
235 |
+
return $result;
|
236 |
+
}
|
237 |
+
|
238 |
+
/**
|
239 |
+
* Toggle maintenance mode for the site.
|
240 |
+
*
|
241 |
+
* Create/delete the maintenance file to enable/disable maintenance mode.
|
242 |
+
*
|
243 |
+
* @since 2.8.0
|
244 |
+
*
|
245 |
+
* @global WP_Filesystem_Base $wp_filesystem Subclass
|
246 |
+
*
|
247 |
+
* @param bool $enable True to enable maintenance mode, false to disable.
|
248 |
+
*/
|
249 |
+
public function maintenance_mode( $enable = false ) {
|
250 |
+
global $wp_filesystem;
|
251 |
+
$file = $wp_filesystem->abspath() . '.maintenance';
|
252 |
+
if ( $enable ) {
|
253 |
+
// $this->skin->feedback( 'maintenance_start' );
|
254 |
+
// Create maintenance file to signal that we are upgrading
|
255 |
+
$maintenance_string = '<?php $upgrading = ' . time() . '; ?>';
|
256 |
+
$wp_filesystem->delete( $file );
|
257 |
+
$wp_filesystem->put_contents( $file, $maintenance_string, FS_CHMOD_FILE );
|
258 |
+
} elseif ( ! $enable && $wp_filesystem->exists( $file ) ) {
|
259 |
+
// $this->skin->feedback( 'maintenance_end' );
|
260 |
+
$wp_filesystem->delete( $file );
|
261 |
+
}
|
262 |
+
}
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Download a package.
|
266 |
+
*
|
267 |
+
* @since 2.8.0
|
268 |
+
*
|
269 |
+
* @param string $package The URI of the package. If this is the full path to an
|
270 |
+
* existing local file, it will be returned untouched.
|
271 |
+
* @param bool $check_signatures Whether to validate file signatures. Default false.
|
272 |
+
* @return string|WP_Error The full path to the downloaded package file, or a WP_Error object.
|
273 |
+
*/
|
274 |
+
public function download_package( $package, $check_signatures = false ) {
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Filters whether to return the package.
|
278 |
+
*
|
279 |
+
* @since 3.7.0
|
280 |
+
*
|
281 |
+
* @param bool $reply Whether to bail without returning the package.
|
282 |
+
* Default false.
|
283 |
+
* @param string $package The package file name.
|
284 |
+
* @param WP_Upgrader $this The WP_Upgrader instance.
|
285 |
+
*/
|
286 |
+
$reply = apply_filters( 'upgrader_pre_download', false, $package, $this );
|
287 |
+
if ( false !== $reply ) {
|
288 |
+
return $reply;
|
289 |
+
}
|
290 |
+
|
291 |
+
if ( ! preg_match( '!^(http|https|ftp)://!i', $package ) && file_exists( $package ) ) { // Local file or remote?
|
292 |
+
return $package; // must be a local file..
|
293 |
+
}
|
294 |
+
|
295 |
+
if ( empty( $package ) ) {
|
296 |
+
return new WP_Error( 'no_package', $this->strings['no_package'] );
|
297 |
+
}
|
298 |
+
|
299 |
+
// $this->skin->feedback( 'downloading_package', $package );
|
300 |
+
|
301 |
+
$download_file = download_url( $package, 300, $check_signatures );
|
302 |
+
|
303 |
+
if ( is_wp_error( $download_file ) && ! $download_file->get_error_data( 'softfail-filename' ) ) {
|
304 |
+
return new WP_Error( 'download_failed', $this->strings['download_failed'], $download_file->get_error_message() );
|
305 |
+
}
|
306 |
+
|
307 |
+
return $download_file;
|
308 |
+
}
|
309 |
+
|
310 |
+
/**
|
311 |
+
* Unpack a compressed package file.
|
312 |
+
*
|
313 |
+
* @since 2.8.0
|
314 |
+
*
|
315 |
+
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
316 |
+
*
|
317 |
+
* @param string $package Full path to the package file.
|
318 |
+
* @param bool $delete_package Optional. Whether to delete the package file after attempting
|
319 |
+
* to unpack it. Default true.
|
320 |
+
* @return string|WP_Error The path to the unpacked contents, or a WP_Error on failure.
|
321 |
+
*/
|
322 |
+
public function unpack_package( $package, $delete_package = true ) {
|
323 |
+
global $wp_filesystem;
|
324 |
+
|
325 |
+
// $this->skin->feedback( 'unpack_package' );
|
326 |
+
|
327 |
+
$upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/';
|
328 |
+
|
329 |
+
// Clean up contents of upgrade directory beforehand.
|
330 |
+
$upgrade_files = $wp_filesystem->dirlist( $upgrade_folder );
|
331 |
+
if ( ! empty( $upgrade_files ) ) {
|
332 |
+
foreach ( $upgrade_files as $file ) {
|
333 |
+
$wp_filesystem->delete( $upgrade_folder . $file['name'], true );
|
334 |
+
}
|
335 |
+
}
|
336 |
+
|
337 |
+
// We need a working directory - Strip off any .tmp or .zip suffixes
|
338 |
+
$working_dir = $upgrade_folder . basename( basename( $package, '.tmp' ), '.zip' );
|
339 |
+
|
340 |
+
// Clean up working directory
|
341 |
+
if ( $wp_filesystem->is_dir( $working_dir ) ) {
|
342 |
+
$wp_filesystem->delete( $working_dir, true );
|
343 |
+
}
|
344 |
+
|
345 |
+
// Unzip package to working directory
|
346 |
+
$result = unzip_file( $package, $working_dir );
|
347 |
+
|
348 |
+
// Once extracted, delete the package if required.
|
349 |
+
if ( $delete_package ) {
|
350 |
+
unlink( $package );
|
351 |
+
}
|
352 |
+
|
353 |
+
if ( is_wp_error( $result ) ) {
|
354 |
+
$wp_filesystem->delete( $working_dir, true );
|
355 |
+
if ( 'incompatible_archive' == $result->get_error_code() ) {
|
356 |
+
return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], $result->get_error_data() );
|
357 |
+
}
|
358 |
+
return $result;
|
359 |
+
}
|
360 |
+
|
361 |
+
return $working_dir;
|
362 |
+
}
|
363 |
+
|
364 |
+
/**
|
365 |
+
* Install a package.
|
366 |
+
*
|
367 |
+
* Copies the contents of a package form a source directory, and installs them in
|
368 |
+
* a destination directory. Optionally removes the source. It can also optionally
|
369 |
+
* clear out the destination folder if it already exists.
|
370 |
+
*
|
371 |
+
* @since 2.8.0
|
372 |
+
*
|
373 |
+
* @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
|
374 |
+
* @global array $wp_theme_directories
|
375 |
+
*
|
376 |
+
* @param array|string $args {
|
377 |
+
* Optional. Array or string of arguments for installing a package. Default empty array.
|
378 |
+
*
|
379 |
+
* @type string $source Required path to the package source. Default empty.
|
380 |
+
* @type string $destination Required path to a folder to install the package in.
|
381 |
+
* Default empty.
|
382 |
+
* @type bool $clear_destination Whether to delete any files already in the destination
|
383 |
+
* folder. Default false.
|
384 |
+
* @type bool $clear_working Whether to delete the files form the working directory
|
385 |
+
* after copying to the destination. Default false.
|
386 |
+
* @type bool $abort_if_destination_exists Whether to abort the installation if
|
387 |
+
* the destination folder already exists. Default true.
|
388 |
+
* @type array $hook_extra Extra arguments to pass to the filter hooks called by
|
389 |
+
* WP_Upgrader::install_package(). Default empty array.
|
390 |
+
* }
|
391 |
+
*
|
392 |
+
* @return array|WP_Error The result (also stored in `WP_Upgrader::$result`), or a WP_Error on failure.
|
393 |
+
*/
|
394 |
+
public function install_package( $args = array() ) {
|
395 |
+
global $wp_filesystem, $wp_theme_directories;
|
396 |
+
|
397 |
+
$defaults = array(
|
398 |
+
'source' => '', // Please always pass this
|
399 |
+
'destination' => '', // and this
|
400 |
+
'clear_destination' => false,
|
401 |
+
'clear_working' => false,
|
402 |
+
'abort_if_destination_exists' => true,
|
403 |
+
'hook_extra' => array(),
|
404 |
+
);
|
405 |
+
|
406 |
+
$args = wp_parse_args( $args, $defaults );
|
407 |
+
|
408 |
+
// These were previously extract()'d.
|
409 |
+
$source = $args['source'];
|
410 |
+
$destination = $args['destination'];
|
411 |
+
$clear_destination = $args['clear_destination'];
|
412 |
+
|
413 |
+
set_time_limit( 300 );
|
414 |
+
|
415 |
+
if ( empty( $source ) || empty( $destination ) ) {
|
416 |
+
return new WP_Error( 'bad_request', $this->strings['bad_request'] );
|
417 |
+
}
|
418 |
+
// $this->skin->feedback( 'installing_package' );
|
419 |
+
|
420 |
+
/**
|
421 |
+
* Filters the install response before the installation has started.
|
422 |
+
*
|
423 |
+
* Returning a truthy value, or one that could be evaluated as a WP_Error
|
424 |
+
* will effectively short-circuit the installation, returning that value
|
425 |
+
* instead.
|
426 |
+
*
|
427 |
+
* @since 2.8.0
|
428 |
+
*
|
429 |
+
* @param bool|WP_Error $response Response.
|
430 |
+
* @param array $hook_extra Extra arguments passed to hooked filters.
|
431 |
+
*/
|
432 |
+
$res = apply_filters( 'upgrader_pre_install', true, $args['hook_extra'] );
|
433 |
+
|
434 |
+
if ( is_wp_error( $res ) ) {
|
435 |
+
return $res;
|
436 |
+
}
|
437 |
+
|
438 |
+
// Retain the Original source and destinations
|
439 |
+
$remote_source = $args['source'];
|
440 |
+
$local_destination = $destination;
|
441 |
+
|
442 |
+
$source_files = array_keys( $wp_filesystem->dirlist( $remote_source ) );
|
443 |
+
$remote_destination = $wp_filesystem->find_folder( $local_destination );
|
444 |
+
|
445 |
+
// Locate which directory to copy to the new folder, This is based on the actual folder holding the files.
|
446 |
+
if ( 1 == count( $source_files ) && $wp_filesystem->is_dir( trailingslashit( $args['source'] ) . $source_files[0] . '/' ) ) { // Only one folder? Then we want its contents.
|
447 |
+
$source = trailingslashit( $args['source'] ) . trailingslashit( $source_files[0] );
|
448 |
+
} elseif ( count( $source_files ) == 0 ) {
|
449 |
+
return new WP_Error( 'incompatible_archive_empty', $this->strings['incompatible_archive'], $this->strings['no_files'] ); // There are no files?
|
450 |
+
} else { // It's only a single file, the upgrader will use the folder name of this file as the destination folder. Folder name is based on zip filename.
|
451 |
+
$source = trailingslashit( $args['source'] );
|
452 |
+
}
|
453 |
+
|
454 |
+
/**
|
455 |
+
* Filters the source file location for the upgrade package.
|
456 |
+
*
|
457 |
+
* @since 2.8.0
|
458 |
+
* @since 4.4.0 The $hook_extra parameter became available.
|
459 |
+
*
|
460 |
+
* @param string $source File source location.
|
461 |
+
* @param string $remote_source Remote file source location.
|
462 |
+
* @param WP_Upgrader $this WP_Upgrader instance.
|
463 |
+
* @param array $hook_extra Extra arguments passed to hooked filters.
|
464 |
+
*/
|
465 |
+
$source = apply_filters( 'upgrader_source_selection', $source, $remote_source, $this, $args['hook_extra'] );
|
466 |
+
|
467 |
+
if ( is_wp_error( $source ) ) {
|
468 |
+
return $source;
|
469 |
+
}
|
470 |
+
|
471 |
+
// Has the source location changed? If so, we need a new source_files list.
|
472 |
+
if ( $source !== $remote_source ) {
|
473 |
+
$source_files = array_keys( $wp_filesystem->dirlist( $source ) );
|
474 |
+
}
|
475 |
+
|
476 |
+
/*
|
477 |
+
* Protection against deleting files in any important base directories.
|
478 |
+
* Theme_Upgrader & Plugin_Upgrader also trigger this, as they pass the
|
479 |
+
* destination directory (WP_PLUGIN_DIR / wp-content/themes) intending
|
480 |
+
* to copy the directory into the directory, whilst they pass the source
|
481 |
+
* as the actual files to copy.
|
482 |
+
*/
|
483 |
+
$protected_directories = array( ABSPATH, WP_CONTENT_DIR, WP_PLUGIN_DIR, WP_CONTENT_DIR . '/themes' );
|
484 |
+
|
485 |
+
if ( is_array( $wp_theme_directories ) ) {
|
486 |
+
$protected_directories = array_merge( $protected_directories, $wp_theme_directories );
|
487 |
+
}
|
488 |
+
|
489 |
+
if ( in_array( $destination, $protected_directories ) ) {
|
490 |
+
$remote_destination = trailingslashit( $remote_destination ) . trailingslashit( basename( $source ) );
|
491 |
+
$destination = trailingslashit( $destination ) . trailingslashit( basename( $source ) );
|
492 |
+
}
|
493 |
+
|
494 |
+
if ( $clear_destination ) {
|
495 |
+
// We're going to clear the destination if there's something there.
|
496 |
+
// $this->skin->feedback( 'remove_old' );
|
497 |
+
|
498 |
+
$removed = $this->clear_destination( $remote_destination );
|
499 |
+
|
500 |
+
/**
|
501 |
+
* Filters whether the upgrader cleared the destination.
|
502 |
+
*
|
503 |
+
* @since 2.8.0
|
504 |
+
*
|
505 |
+
* @param mixed $removed Whether the destination was cleared. true on success, WP_Error on failure
|
506 |
+
* @param string $local_destination The local package destination.
|
507 |
+
* @param string $remote_destination The remote package destination.
|
508 |
+
* @param array $hook_extra Extra arguments passed to hooked filters.
|
509 |
+
*/
|
510 |
+
$removed = apply_filters( 'upgrader_clear_destination', $removed, $local_destination, $remote_destination, $args['hook_extra'] );
|
511 |
+
|
512 |
+
if ( is_wp_error( $removed ) ) {
|
513 |
+
return $removed;
|
514 |
+
}
|
515 |
+
} elseif ( $args['abort_if_destination_exists'] && $wp_filesystem->exists( $remote_destination ) ) {
|
516 |
+
// If we're not clearing the destination folder and something exists there already, Bail.
|
517 |
+
// But first check to see if there are actually any files in the folder.
|
518 |
+
$_files = $wp_filesystem->dirlist( $remote_destination );
|
519 |
+
if ( ! empty( $_files ) ) {
|
520 |
+
$wp_filesystem->delete( $remote_source, true ); // Clear out the source files.
|
521 |
+
return new WP_Error( 'folder_exists', $this->strings['folder_exists'], $remote_destination );
|
522 |
+
}
|
523 |
+
}
|
524 |
+
|
525 |
+
// Create destination if needed
|
526 |
+
if ( ! $wp_filesystem->exists( $remote_destination ) ) {
|
527 |
+
if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) {
|
528 |
+
return new WP_Error( 'mkdir_failed_destination', $this->strings['mkdir_failed'], $remote_destination );
|
529 |
+
}
|
530 |
+
}
|
531 |
+
// Copy new version of item into place.
|
532 |
+
$result = copy_dir( $source, $remote_destination );
|
533 |
+
if ( is_wp_error( $result ) ) {
|
534 |
+
if ( $args['clear_working'] ) {
|
535 |
+
$wp_filesystem->delete( $remote_source, true );
|
536 |
+
}
|
537 |
+
return $result;
|
538 |
+
}
|
539 |
+
|
540 |
+
// Clear the Working folder?
|
541 |
+
if ( $args['clear_working'] ) {
|
542 |
+
$wp_filesystem->delete( $remote_source, true );
|
543 |
+
}
|
544 |
+
|
545 |
+
$destination_name = basename( str_replace( $local_destination, '', $destination ) );
|
546 |
+
if ( '.' == $destination_name ) {
|
547 |
+
$destination_name = '';
|
548 |
+
}
|
549 |
+
|
550 |
+
$this->result = compact( 'source', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination' );
|
551 |
+
|
552 |
+
/**
|
553 |
+
* Filters the installation response after the installation has finished.
|
554 |
+
*
|
555 |
+
* @since 2.8.0
|
556 |
+
*
|
557 |
+
* @param bool $response Installation response.
|
558 |
+
* @param array $hook_extra Extra arguments passed to hooked filters.
|
559 |
+
* @param array $result Installation result data.
|
560 |
+
*/
|
561 |
+
$res = apply_filters( 'upgrader_post_install', true, $args['hook_extra'], $this->result );
|
562 |
+
|
563 |
+
if ( is_wp_error( $res ) ) {
|
564 |
+
$this->result = $res;
|
565 |
+
return $res;
|
566 |
+
}
|
567 |
+
|
568 |
+
// Bombard the calling function will all the info which we've just used.
|
569 |
+
return $this->result;
|
570 |
+
}
|
571 |
+
}
|
inc/admin/helpers/PluginSilentUpgraderSkin.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile
|
3 |
+
|
4 |
+
/** \WP_Upgrader_Skin class */
|
5 |
+
require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader-skin.php';
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Class PluginSilentUpgraderSkin.
|
9 |
+
*
|
10 |
+
* @internal Please do not use this class outside of core All in One SEO development. May be removed at any time.
|
11 |
+
*
|
12 |
+
* @since 1.5.6.1
|
13 |
+
*/
|
14 |
+
class PluginSilentUpgraderSkin extends \WP_Upgrader_Skin {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Empty out the header of its HTML content and only check to see if it has
|
18 |
+
* been performed or not.
|
19 |
+
*
|
20 |
+
* @since 1.5.6.1
|
21 |
+
*/
|
22 |
+
public function header() {
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Empty out the footer of its HTML contents.
|
27 |
+
*
|
28 |
+
* @since 1.5.6.1
|
29 |
+
*/
|
30 |
+
public function footer() {
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Instead of outputting HTML for errors, just return them.
|
35 |
+
* Ajax request will just ignore it.
|
36 |
+
*
|
37 |
+
* @since 1.5.6.1
|
38 |
+
*
|
39 |
+
* @param array $errors Array of errors with the install process.
|
40 |
+
*
|
41 |
+
* @return array
|
42 |
+
*/
|
43 |
+
public function error( $errors ) {
|
44 |
+
return $errors;
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* Empty out JavaScript output that calls function to decrement the update counts.
|
49 |
+
*
|
50 |
+
* @since 1.5.6.1
|
51 |
+
*
|
52 |
+
* @param string $type Type of update count to decrement.
|
53 |
+
*/
|
54 |
+
public function decrement_update_count( $type ) {
|
55 |
+
}
|
56 |
+
}
|
inc/admin/helpers/class-install-skin.php
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
// phpcs:ignoreFile
|
3 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/admin/helpers/PluginSilentUpgraderSkin.php';
|
4 |
+
|
5 |
+
/**
|
6 |
+
* @since 3.4.0
|
7 |
+
*/
|
8 |
+
class AIOSEOP_Install_Skin extends PluginSilentUpgraderSkin {
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @since 3.4.0
|
12 |
+
*/
|
13 |
+
public function error( $errors ) {
|
14 |
+
|
15 |
+
if ( ! empty( $errors ) ) {
|
16 |
+
wp_send_json_error( $errors );
|
17 |
+
}
|
18 |
+
}
|
19 |
+
}
|
inc/admin/views/class-aioseop-about.php
ADDED
@@ -0,0 +1,830 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* AIOSEOP_About
|
4 |
+
*
|
5 |
+
* @package All_in_One_SEO_Pack
|
6 |
+
* @since 3.4.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Handles the About Us page.
|
11 |
+
*
|
12 |
+
* @since 3.4.0
|
13 |
+
*/
|
14 |
+
class AIOSEOP_About {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* The current view.
|
18 |
+
*
|
19 |
+
* @var string
|
20 |
+
*/
|
21 |
+
private static $view;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Initializes the code.
|
25 |
+
*
|
26 |
+
* @since 3.4.0
|
27 |
+
*/
|
28 |
+
public static function init() {
|
29 |
+
if ( ! is_admin() ||
|
30 |
+
! get_current_screen()->id === aioseop_get_admin_screens()
|
31 |
+
) {
|
32 |
+
return;
|
33 |
+
}
|
34 |
+
|
35 |
+
self::$view = 'about';
|
36 |
+
if ( isset( $_GET['view'] ) ) {
|
37 |
+
self::$view = $_GET['view'];
|
38 |
+
}
|
39 |
+
|
40 |
+
self::enqueue_files();
|
41 |
+
self::render_page();
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Enqueues the required files.
|
46 |
+
*
|
47 |
+
* @since 3.4.0
|
48 |
+
*/
|
49 |
+
private static function enqueue_files() {
|
50 |
+
wp_enqueue_style(
|
51 |
+
'aioseop-about',
|
52 |
+
AIOSEOP_PLUGIN_URL . 'css/admin/aioseop-about.css',
|
53 |
+
array(),
|
54 |
+
AIOSEOP_VERSION
|
55 |
+
);
|
56 |
+
|
57 |
+
if ( 'about' !== self::$view ) {
|
58 |
+
return;
|
59 |
+
}
|
60 |
+
|
61 |
+
wp_enqueue_script(
|
62 |
+
'jquery-matchheight',
|
63 |
+
AIOSEOP_PLUGIN_URL . 'js/dependencies/jquery.matchHeight-min.js',
|
64 |
+
array( 'jquery' ),
|
65 |
+
'0.7.0',
|
66 |
+
false
|
67 |
+
);
|
68 |
+
|
69 |
+
wp_enqueue_script( 'aioseop-about', AIOSEOP_PLUGIN_URL . 'js/admin/aioseop-about.js', array( 'jquery' ), AIOSEOP_VERSION, false );
|
70 |
+
|
71 |
+
$ajax_data = array(
|
72 |
+
'requestUrl' => admin_url( 'admin-ajax.php' ),
|
73 |
+
'nonce' => wp_create_nonce( 'aioseop-am-plugins' ),
|
74 |
+
'aioseopL10n' => array(
|
75 |
+
'active' => __( 'Active', 'all-in-one-seo-pack' ),
|
76 |
+
'inactive' => __( 'Inactive', 'all-in-one-seo-pack' ),
|
77 |
+
'activated' => __( 'Activated', 'all-in-one-seo-pack' ),
|
78 |
+
'install' => __( 'Install Plugin', 'all-in-one-seo-pack' ),
|
79 |
+
'activate' => __( 'Activate', 'all-in-one-seo-pack' ),
|
80 |
+
'install_failed' => __( 'Installation Failed', 'all-in-one-seo-pack' ),
|
81 |
+
'activation_failed' => __( 'Activation Failed', 'all-in-one-seo-pack' ),
|
82 |
+
'wait' => __( 'Please wait...', 'all-in-one-seo-pack' ),
|
83 |
+
),
|
84 |
+
);
|
85 |
+
|
86 |
+
wp_localize_script( 'aioseop-about', 'aioseopAboutData', $ajax_data );
|
87 |
+
}
|
88 |
+
|
89 |
+
private static function require_files() {
|
90 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/admin/helpers/class-install-skin.php';
|
91 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/admin/helpers/PluginSilentUpgraderSkin.php';
|
92 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/admin/helpers/PluginSilentUpgrader.php';
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Installs a given plugin.
|
97 |
+
*
|
98 |
+
* Acts as a callback for our "wp_ajax_aioseop_install_plugin" endpoint.
|
99 |
+
*
|
100 |
+
* @since 3.4.0
|
101 |
+
*/
|
102 |
+
public static function install_plugin() {
|
103 |
+
check_ajax_referer( 'aioseop-am-plugins', '_ajax_nonce' );
|
104 |
+
|
105 |
+
if ( ! current_user_can( 'administrator' ) ) {
|
106 |
+
wp_send_json_error();
|
107 |
+
}
|
108 |
+
|
109 |
+
if ( empty( $_POST['plugin'] ) ) {
|
110 |
+
wp_send_json_error();
|
111 |
+
}
|
112 |
+
|
113 |
+
$url = esc_url_raw(
|
114 |
+
add_query_arg(
|
115 |
+
array(
|
116 |
+
'page' => 'aioseop-addons',
|
117 |
+
),
|
118 |
+
admin_url( 'admin.php' )
|
119 |
+
)
|
120 |
+
);
|
121 |
+
|
122 |
+
$creds = request_filesystem_credentials( $url, '', false, false, null );
|
123 |
+
|
124 |
+
// Check for file system permissions.
|
125 |
+
if ( false === $creds ) {
|
126 |
+
wp_send_json_error();
|
127 |
+
}
|
128 |
+
|
129 |
+
if ( ! WP_Filesystem( $creds ) ) {
|
130 |
+
wp_send_json_error();
|
131 |
+
}
|
132 |
+
|
133 |
+
self::require_files();
|
134 |
+
|
135 |
+
// Do not allow WordPress to search for translations as this will break JS output.
|
136 |
+
remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
|
137 |
+
|
138 |
+
// Create the plugin upgrader with our custom skin.
|
139 |
+
$installer = new PluginSilentUpgrader( new AIOSEOP_Install_Skin() );
|
140 |
+
|
141 |
+
if ( ! method_exists( $installer, 'install' ) || empty( $_POST['plugin'] ) ) {
|
142 |
+
wp_send_json_error();
|
143 |
+
}
|
144 |
+
|
145 |
+
$installer->install( $_POST['plugin'] );
|
146 |
+
|
147 |
+
// Flush the cache and return the installed plugin's basename.
|
148 |
+
wp_cache_flush();
|
149 |
+
|
150 |
+
$plugin_basename = $installer->plugin_info();
|
151 |
+
|
152 |
+
if ( $plugin_basename ) {
|
153 |
+
|
154 |
+
$activated = activate_plugin( $plugin_basename );
|
155 |
+
|
156 |
+
if ( ! is_wp_error( $activated ) ) {
|
157 |
+
wp_send_json_success(
|
158 |
+
array(
|
159 |
+
'msg' => __( 'Plugin installed & activated.', 'all-in-one-seo-pack' ),
|
160 |
+
'is_activated' => true,
|
161 |
+
'basename' => $plugin_basename,
|
162 |
+
)
|
163 |
+
);
|
164 |
+
} else {
|
165 |
+
wp_send_json_success(
|
166 |
+
array(
|
167 |
+
'msg' => __( 'Plugin installed.', 'all-in-one-seo-pack' ),
|
168 |
+
'is_activated' => false,
|
169 |
+
'basename' => $plugin_basename,
|
170 |
+
)
|
171 |
+
);
|
172 |
+
}
|
173 |
+
}
|
174 |
+
|
175 |
+
wp_send_json_error();
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Activates a given plugin.
|
180 |
+
*
|
181 |
+
* Acts as a callback for our "wp_ajax_aioseop_activate_plugin" endpoint.
|
182 |
+
*
|
183 |
+
* @since 3.4.0
|
184 |
+
*/
|
185 |
+
public static function activate_plugin() {
|
186 |
+
|
187 |
+
check_ajax_referer( 'aioseop-am-plugins', '_ajax_nonce' );
|
188 |
+
|
189 |
+
if ( ! current_user_can( 'administrator' ) ) {
|
190 |
+
wp_send_json_error();
|
191 |
+
}
|
192 |
+
|
193 |
+
if ( isset( $_POST['plugin'] ) ) {
|
194 |
+
|
195 |
+
$activate = activate_plugins( $_POST['plugin'] );
|
196 |
+
|
197 |
+
if ( ! is_wp_error( $activate ) ) {
|
198 |
+
wp_send_json_success(
|
199 |
+
array(
|
200 |
+
'msg' => __( 'Plugin activated.', 'all-in-one-seo-pack' ),
|
201 |
+
)
|
202 |
+
);
|
203 |
+
}
|
204 |
+
}
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Renders a given view on the About Us page.
|
209 |
+
*
|
210 |
+
* @since 3.4.0
|
211 |
+
*/
|
212 |
+
private static function render_page() {
|
213 |
+
echo '<div id="aioseop-admin-about" class="wrap aioseop-admin-wrap">';
|
214 |
+
|
215 |
+
switch ( self::$view ) {
|
216 |
+
case 'about': {
|
217 |
+
self::output_tab_bar();
|
218 |
+
self::output_about_info();
|
219 |
+
self::output_about_addons();
|
220 |
+
break;
|
221 |
+
}
|
222 |
+
case 'versus': {
|
223 |
+
self::output_tab_bar();
|
224 |
+
self::output_versus_grid();
|
225 |
+
break;
|
226 |
+
}
|
227 |
+
}
|
228 |
+
|
229 |
+
echo '</div>';
|
230 |
+
|
231 |
+
}
|
232 |
+
|
233 |
+
/**
|
234 |
+
* Outputs the tab bar.
|
235 |
+
*
|
236 |
+
* @since 3.4.0
|
237 |
+
*/
|
238 |
+
private static function output_tab_bar() {
|
239 |
+
$views = array(
|
240 |
+
'About Us' => 'about',
|
241 |
+
);
|
242 |
+
|
243 |
+
if ( ! AIOSEOPPRO ) {
|
244 |
+
$views['Lite vs Pro'] = 'versus';
|
245 |
+
}
|
246 |
+
|
247 |
+
if ( 1 >= count( $views ) ) {
|
248 |
+
return;
|
249 |
+
}
|
250 |
+
|
251 |
+
echo '<ul class="aioseop-admin-tabs">';
|
252 |
+
foreach ( $views as $label => $view ) {
|
253 |
+
echo '<li>';
|
254 |
+
printf(
|
255 |
+
'<a href="%s" class="%s">%s</a>',
|
256 |
+
esc_url( admin_url( 'admin.php?page=aioseop-about&view=' . $view ) ),
|
257 |
+
( $view === self::$view ) ? 'active' : '',
|
258 |
+
esc_html( $label )
|
259 |
+
);
|
260 |
+
echo '</li>';
|
261 |
+
}
|
262 |
+
echo '</ul>';
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Outputs the About Us info section.
|
267 |
+
*
|
268 |
+
* @since 3.4.0
|
269 |
+
*/
|
270 |
+
private static function output_about_info() {
|
271 |
+
|
272 |
+
?>
|
273 |
+
|
274 |
+
<div class="aioseop-admin-about-section aioseop-admin-columns">
|
275 |
+
|
276 |
+
<div class="aioseop-admin-column-60">
|
277 |
+
<h3>
|
278 |
+
<?php
|
279 |
+
printf(
|
280 |
+
/* translators: %1$s: "All in One SEO Pack" */
|
281 |
+
__( 'Welcome to %1$s, the original SEO plugin for WordPress. At %2$s, we build software that helps you rank your website in search results and gain organic traffic.', 'all-in-one-seo-pack' ),
|
282 |
+
AIOSEOP_PLUGIN_NAME,
|
283 |
+
AIOSEOP_PLUGIN_NAME
|
284 |
+
);
|
285 |
+
?>
|
286 |
+
</h3>
|
287 |
+
|
288 |
+
<p>
|
289 |
+
<?php esc_html_e( 'Over the years, we found that most other WordPress SEO plugins were bloated, buggy, slow, and very hard to use. So we designed our plugin as an easy and powerful tool.', 'all-in-one-seo-pack' ); ?>
|
290 |
+
</p>
|
291 |
+
<p>
|
292 |
+
<?php esc_html_e( 'Our goal is to take the pain out of optimizing your website for search engines.', 'all-in-one-seo-pack' ); ?>
|
293 |
+
</p>
|
294 |
+
<p>
|
295 |
+
<?php
|
296 |
+
printf(
|
297 |
+
wp_kses(
|
298 |
+
/* translators: %1$s: "All in One SEO Pack" - %2$s: hyperlink - %3$s: hyperlink - %4$s: hyperlink */
|
299 |
+
__( '%1$s is brought to you by Awesome Motive, the same team that’s behind the largest WordPress resource site, <a href="%2$s" target="_blank" rel="noopener noreferrer">WPBeginner</a>, the most popular lead-generation software, <a href="%3$s" target="_blank" rel="noopener noreferrer">OptinMonster</a>, the best WordPress analytics plugin, <a href="%4$s" target="_blank" rel="noopener noreferrer">MonsterInsights</a> and many more.', 'all-in-one-seo-pack' ),
|
300 |
+
array(
|
301 |
+
'a' => array(
|
302 |
+
'href' => array(),
|
303 |
+
'rel' => array(),
|
304 |
+
'target' => array(),
|
305 |
+
),
|
306 |
+
)
|
307 |
+
),
|
308 |
+
AIOSEOP_PLUGIN_NAME,
|
309 |
+
'https://www.wpbeginner.com/?utm_source=WordPress&utm_medium=aioseop&utm_campaign=aioseop-about',
|
310 |
+
'https://optinmonster.com/?utm_source=WordPress&utm_medium=aioseop&utm_campaign=aioseop-about',
|
311 |
+
'https://www.monsterinsights.com/?utm_source=WordPress&utm_medium=aioseop&utm_campaign=aioseop-about'
|
312 |
+
);
|
313 |
+
?>
|
314 |
+
</p>
|
315 |
+
<p>
|
316 |
+
<?php esc_html_e( 'Yup, we know a thing or two about building awesome products that customers love.', 'all-in-one-seo-pack' ); ?>
|
317 |
+
</p>
|
318 |
+
</div>
|
319 |
+
|
320 |
+
<div class="aioseop-admin-column-40 aioseop-admin-column-last">
|
321 |
+
<figure>
|
322 |
+
<img src="<?php echo AIOSEOP_PLUGIN_URL; ?>images/about/about-team.jpg" alt="<?php esc_attr_e( 'The Awesome Motive Team photo', 'all-in-one-seo-pack' ); ?>">
|
323 |
+
<figcaption>
|
324 |
+
<?php esc_html_e( 'The Awesome Motive Team', 'all-in-one-seo-pack' ); ?><br>
|
325 |
+
</figcaption>
|
326 |
+
</figure>
|
327 |
+
</div>
|
328 |
+
|
329 |
+
</div>
|
330 |
+
<?php
|
331 |
+
}
|
332 |
+
|
333 |
+
/**
|
334 |
+
* Outputs the About Us addon section.
|
335 |
+
*
|
336 |
+
* @since 3.4.0
|
337 |
+
*/
|
338 |
+
private static function output_about_addons() {
|
339 |
+
$all_plugins = get_plugins();
|
340 |
+
$am_plugins = self::get_am_plugins();
|
341 |
+
|
342 |
+
?>
|
343 |
+
<div id="aioseop-admin-addons">
|
344 |
+
<div class="addons-container">
|
345 |
+
<?php
|
346 |
+
foreach ( $am_plugins as $plugin => $details ) :
|
347 |
+
|
348 |
+
$plugin_data = self::get_plugin_data( $plugin, $details, $all_plugins );
|
349 |
+
|
350 |
+
?>
|
351 |
+
<div class="addon-container">
|
352 |
+
<div class="addon-item">
|
353 |
+
<div class="details aioseop-clear">
|
354 |
+
<img src="<?php echo esc_url( $plugin_data['details']['icon'] ); ?>">
|
355 |
+
<h5 class="addon-name">
|
356 |
+
<?php echo esc_html( $plugin_data['details']['name'] ); ?>
|
357 |
+
</h5>
|
358 |
+
<p class="addon-desc">
|
359 |
+
<?php echo wp_kses_post( $plugin_data['details']['desc'] ); ?>
|
360 |
+
</p>
|
361 |
+
</div>
|
362 |
+
<div class="actions aioseop-clear">
|
363 |
+
<div class="status">
|
364 |
+
<strong>
|
365 |
+
<?php
|
366 |
+
printf(
|
367 |
+
esc_html__( 'Status: %s', 'all-in-one-seo-pack' ),
|
368 |
+
'<span class="status-label ' . esc_attr( $plugin_data['status_class'] ) . '">' . wp_kses_post( $plugin_data['status_text'] ) . '</span>'
|
369 |
+
);
|
370 |
+
?>
|
371 |
+
</strong>
|
372 |
+
</div>
|
373 |
+
<div class="action-button">
|
374 |
+
<button class="<?php echo esc_attr( $plugin_data['action_class'] ); ?>" data-plugin="<?php echo esc_attr( $plugin_data['plugin_src'] ); ?>" data-type="plugin">
|
375 |
+
<?php echo wp_kses_post( $plugin_data['action_text'] ); ?>
|
376 |
+
</button>
|
377 |
+
</div>
|
378 |
+
</div>
|
379 |
+
</div>
|
380 |
+
</div>
|
381 |
+
<?php endforeach; ?>
|
382 |
+
</div>
|
383 |
+
</div>
|
384 |
+
<?php
|
385 |
+
}
|
386 |
+
|
387 |
+
/**
|
388 |
+
* Outputs the Lite vs Pro tab content.
|
389 |
+
*
|
390 |
+
* @since 3.4.0
|
391 |
+
*/
|
392 |
+
private static function output_versus_grid() {
|
393 |
+
$license = 'Lite';
|
394 |
+
$next_license = 'Pro';
|
395 |
+
|
396 |
+
$license_features = array(
|
397 |
+
'seo' => esc_html__( 'Search Engine Optimization (SEO)', 'all-in-one-seo-pack' ),
|
398 |
+
'open_graph' => esc_html__( 'Social Meta (Open Graph Markup)', 'all-in-one-seo-pack' ),
|
399 |
+
'woocommerce' => esc_html__( 'WooCommerce Integration', 'all-in-one-seo-pack' ),
|
400 |
+
'xml_sitemap' => esc_html__( 'XML Sitemap', 'all-in-one-seo-pack' ),
|
401 |
+
'video_sitemap' => esc_html__( 'Video XML Sitemap', 'all-in-one-seo-pack' ),
|
402 |
+
// 'news_sitemap' => esc_html__( 'News Sitemap', 'all-in-one-seo-pack' ),
|
403 |
+
'google_tag_manager' => esc_html__( 'Google Tag Manager', 'all-in-one-seo-pack' ),
|
404 |
+
'image_seo' => esc_html__( 'Image SEO', 'all-in-one-seo-pack' ),
|
405 |
+
'schema' => esc_html__( 'Schema Rich Snippets', 'all-in-one-seo-pack' ),
|
406 |
+
'support' => esc_html__( 'Customer Support', 'all-in-one-seo-pack' ),
|
407 |
+
);
|
408 |
+
|
409 |
+
?>
|
410 |
+
|
411 |
+
<div class="aioseop-admin-about-section aioseop-admin-about-section-squashed">
|
412 |
+
<h1 class="centered">
|
413 |
+
<strong><?php echo esc_html( ucfirst( $license ) ); ?></strong> vs <strong><?php echo esc_html( $next_license ); ?></strong>
|
414 |
+
</h1>
|
415 |
+
|
416 |
+
<p class="centered">
|
417 |
+
<?php
|
418 |
+
/* translators: %s: "All in One SEO Pack" */
|
419 |
+
printf( __( 'Get the most out of %s by upgrading to Pro and unlocking all of the powerful features.', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME );
|
420 |
+
?>
|
421 |
+
</p>
|
422 |
+
</div>
|
423 |
+
|
424 |
+
<div class="aioseop-admin-about-section aioseop-admin-about-section-squashed aioseop-admin-about-section-hero aioseop-admin-about-section-table">
|
425 |
+
|
426 |
+
<div class="aioseop-admin-about-section-hero-main aioseop-admin-columns">
|
427 |
+
<div class="aioseop-admin-column-33">
|
428 |
+
<h3 class="no-margin">
|
429 |
+
<?php esc_html_e( 'Feature', 'all-in-one-seo-pack' ); ?>
|
430 |
+
</h3>
|
431 |
+
</div>
|
432 |
+
<div class="aioseop-admin-column-33">
|
433 |
+
<h3 class="no-margin">
|
434 |
+
<?php echo esc_html( ucfirst( $license ) ); ?>
|
435 |
+
</h3>
|
436 |
+
</div>
|
437 |
+
<div class="aioseop-admin-column-33">
|
438 |
+
<h3 class="no-margin">
|
439 |
+
<?php echo esc_html( $next_license ); ?>
|
440 |
+
</h3>
|
441 |
+
</div>
|
442 |
+
</div>
|
443 |
+
<div class="aioseop-admin-about-section-hero-extra no-padding aioseop-admin-columns">
|
444 |
+
|
445 |
+
<table>
|
446 |
+
<?php
|
447 |
+
foreach ( $license_features as $slug => $name ) {
|
448 |
+
$current = self::get_license_data( $slug, $license );
|
449 |
+
$next = self::get_license_data( $slug, strtolower( $next_license ) );
|
450 |
+
|
451 |
+
if ( empty( $current ) || empty( $next ) ) {
|
452 |
+
continue;
|
453 |
+
}
|
454 |
+
?>
|
455 |
+
<tr class="aioseop-admin-columns">
|
456 |
+
<td class="aioseop-admin-column-33">
|
457 |
+
<p><?php echo esc_html( $name ); ?></p>
|
458 |
+
</td>
|
459 |
+
<td class="aioseop-admin-column-33">
|
460 |
+
<?php if ( is_array( $current ) ) : ?>
|
461 |
+
<p class="features-<?php echo esc_attr( $current['status'] ); ?>">
|
462 |
+
<?php echo wp_kses_post( implode( '<br>', $current['text'] ) ); ?>
|
463 |
+
</p>
|
464 |
+
<?php endif; ?>
|
465 |
+
</td>
|
466 |
+
<td class="aioseop-admin-column-33">
|
467 |
+
<?php if ( is_array( $current ) ) : ?>
|
468 |
+
<p class="features-full">
|
469 |
+
<?php echo wp_kses_post( implode( '<br>', $next['text'] ) ); ?>
|
470 |
+
</p>
|
471 |
+
<?php endif; ?>
|
472 |
+
</td>
|
473 |
+
</tr>
|
474 |
+
<?php
|
475 |
+
}
|
476 |
+
?>
|
477 |
+
</table>
|
478 |
+
|
479 |
+
</div>
|
480 |
+
|
481 |
+
</div>
|
482 |
+
|
483 |
+
<div class="aioseop-admin-about-section aioseop-admin-about-section-hero">
|
484 |
+
<div class="aioseop-admin-about-section-hero-main no-border">
|
485 |
+
<h3 class="call-to-action centered">
|
486 |
+
<?php
|
487 |
+
echo '<a href="' . aioseop_get_utm_url( 'lite-vs-pro' ) . '" target="_blank" rel="noopener noreferrer">';
|
488 |
+
|
489 |
+
printf(
|
490 |
+
/* translators: %s: "All in One SEO Pack Pro" */
|
491 |
+
sprintf( __( 'Get %s Today and Unlock all the Powerful Features', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' ),
|
492 |
+
esc_html( $next_license )
|
493 |
+
);
|
494 |
+
?>
|
495 |
+
</a>
|
496 |
+
</h3>
|
497 |
+
|
498 |
+
<p class="centered">
|
499 |
+
<?php
|
500 |
+
echo wp_kses(
|
501 |
+
sprintf(
|
502 |
+
/* translators: %s: "All in One SEO Pack Lite" */
|
503 |
+
__( 'Bonus: %s users get <span class="price-20-off">30%% off regular price</span>, automatically applied at checkout.', 'all-in-one-seo-pack' ),
|
504 |
+
AIOSEOP_PLUGIN_NAME . ' Lite'
|
505 |
+
),
|
506 |
+
array(
|
507 |
+
'span' => array(
|
508 |
+
'class' => array(),
|
509 |
+
),
|
510 |
+
)
|
511 |
+
);
|
512 |
+
?>
|
513 |
+
</p>
|
514 |
+
</div>
|
515 |
+
</div>
|
516 |
+
|
517 |
+
<?php
|
518 |
+
}
|
519 |
+
|
520 |
+
private static function get_license_data( $feature, $license ) {
|
521 |
+
|
522 |
+
$license = strtolower( $license );
|
523 |
+
|
524 |
+
$data = array(
|
525 |
+
'seo' => array(
|
526 |
+
'lite' => array(
|
527 |
+
'status' => 'partial',
|
528 |
+
'text' => array(
|
529 |
+
'<strong>' . esc_html__( 'Limited Support', 'all-in-one-seo-pack' ) . '</strong>',
|
530 |
+
esc_html__( 'Posts, Pages and Custom Post Types Only', 'all-in-one-seo-pack' ),
|
531 |
+
),
|
532 |
+
),
|
533 |
+
'pro' => array(
|
534 |
+
'status' => 'full',
|
535 |
+
'text' => array(
|
536 |
+
'<strong>' . esc_html__( 'Complete Support', 'all-in-one-seo-pack' ) . '</strong>',
|
537 |
+
esc_html__( 'Posts, Pages, Custom Post Types + Categories, Tags and Custom Taxonomies', 'all-in-one-seo-pack' ),
|
538 |
+
),
|
539 |
+
),
|
540 |
+
),
|
541 |
+
'open_graph' => array(
|
542 |
+
'lite' => array(
|
543 |
+
'status' => 'partial',
|
544 |
+
'text' => array(
|
545 |
+
'<strong>' . esc_html__( 'Limited Support', 'all-in-one-seo-pack' ) . '</strong>',
|
546 |
+
esc_html__( 'Posts, Pages and Custom Post Types Only', 'all-in-one-seo-pack' ),
|
547 |
+
),
|
548 |
+
),
|
549 |
+
'pro' => array(
|
550 |
+
'status' => 'full',
|
551 |
+
'text' => array(
|
552 |
+
'<strong>' . esc_html__( 'Complete Support', 'all-in-one-seo-pack' ) . '</strong>',
|
553 |
+
esc_html__( 'Posts, Pages, Custom Post Types + Categories, Tags and Custom Taxonomies', 'all-in-one-seo-pack' ),
|
554 |
+
),
|
555 |
+
),
|
556 |
+
),
|
557 |
+
'woocommerce' => array(
|
558 |
+
'lite' => array(
|
559 |
+
'status' => 'partial',
|
560 |
+
'text' => array(
|
561 |
+
'<strong>' . esc_html__( 'Limited Support', 'all-in-one-seo-pack' ) . '</strong>',
|
562 |
+
esc_html__( 'WooCommerce Products Only', 'all-in-one-seo-pack' ),
|
563 |
+
),
|
564 |
+
),
|
565 |
+
'pro' => array(
|
566 |
+
'status' => 'full',
|
567 |
+
'text' => array(
|
568 |
+
'<strong>' . esc_html__( 'Complete Support', 'all-in-one-seo-pack' ) . '</strong>',
|
569 |
+
esc_html__( 'WooCommerce Products, Product Categories, Product Tags and Other Product Attributes', 'all-in-one-seo-pack' ),
|
570 |
+
),
|
571 |
+
),
|
572 |
+
),
|
573 |
+
'xml_sitemap' => array(
|
574 |
+
'lite' => array(
|
575 |
+
'status' => 'partial',
|
576 |
+
'text' => array(
|
577 |
+
'<strong>' . esc_html__( 'Limited Support', 'all-in-one-seo-pack' ) . '</strong>',
|
578 |
+
esc_html__( 'Basic Control of Sitemap Priority & Frequency', 'all-in-one-seo-pack' ),
|
579 |
+
),
|
580 |
+
),
|
581 |
+
'pro' => array(
|
582 |
+
'status' => 'full',
|
583 |
+
'text' => array(
|
584 |
+
'<strong>' . esc_html__( 'Complete Support', 'all-in-one-seo-pack' ) . '</strong>',
|
585 |
+
esc_html__( 'Granular Control of Sitemap Priority & Frequency for Each Post, Page, Category, Tag, etc.', 'all-in-one-seo-pack' ),
|
586 |
+
),
|
587 |
+
),
|
588 |
+
),
|
589 |
+
'video_sitemap' => array(
|
590 |
+
'lite' => array(
|
591 |
+
'status' => 'none',
|
592 |
+
'text' => array(
|
593 |
+
'<strong>' . esc_html__( 'Not Available', 'all-in-one-seo-pack' ) . '</strong>',
|
594 |
+
),
|
595 |
+
),
|
596 |
+
'pro' => array(
|
597 |
+
'status' => 'full',
|
598 |
+
'text' => array(
|
599 |
+
'<strong>' . esc_html__( 'Submit Your Videos to Search Engines', 'all-in-one-seo-pack' ) . '</strong>',
|
600 |
+
),
|
601 |
+
),
|
602 |
+
),
|
603 |
+
'news_sitemap' => array(
|
604 |
+
'lite' => array(
|
605 |
+
'status' => 'none',
|
606 |
+
'text' => array(
|
607 |
+
'<strong>' . esc_html__( 'Not Available', 'all-in-one-seo-pack' ) . '</strong>',
|
608 |
+
),
|
609 |
+
),
|
610 |
+
'pro' => array(
|
611 |
+
'status' => 'full',
|
612 |
+
'text' => array(
|
613 |
+
'<strong>' . esc_html__( 'Submit Your Latest News Stories to Search Engines', 'all-in-one-seo-pack' ) . '</strong>',
|
614 |
+
),
|
615 |
+
),
|
616 |
+
),
|
617 |
+
'image_seo' => array(
|
618 |
+
'lite' => array(
|
619 |
+
'status' => 'none',
|
620 |
+
'text' => array(
|
621 |
+
'<strong>' . esc_html__( 'Not Available', 'all-in-one-seo-pack' ) . '</strong>',
|
622 |
+
),
|
623 |
+
),
|
624 |
+
'pro' => array(
|
625 |
+
'status' => 'full',
|
626 |
+
'text' => array(
|
627 |
+
'<strong>' . esc_html__( 'Control The Title & Alt Tag Attribute of Your Images', 'all-in-one-seo-pack' ) . '</strong>',
|
628 |
+
),
|
629 |
+
),
|
630 |
+
),
|
631 |
+
'google_tag_manager' => array(
|
632 |
+
'lite' => array(
|
633 |
+
'status' => 'none',
|
634 |
+
'text' => array(
|
635 |
+
'<strong>' . esc_html__( 'Not Available', 'all-in-one-seo-pack' ) . '</strong>',
|
636 |
+
),
|
637 |
+
),
|
638 |
+
'pro' => array(
|
639 |
+
'status' => 'full',
|
640 |
+
'text' => array(
|
641 |
+
'<strong>' . esc_html__( 'Connect to Google Tag Manager for Advanced Analytics', 'all-in-one-seo-pack' ) . '</strong>',
|
642 |
+
),
|
643 |
+
),
|
644 |
+
),
|
645 |
+
'schema' => array(
|
646 |
+
'lite' => array(
|
647 |
+
'status' => 'partial',
|
648 |
+
'text' => array(
|
649 |
+
'<strong>' . esc_html__( 'Limited Support', 'all-in-one-seo-pack' ) . '</strong>',
|
650 |
+
esc_html__( 'Posts, Pages, Categories and Tags Only', 'all-in-one-seo-pack' ),
|
651 |
+
),
|
652 |
+
),
|
653 |
+
'pro' => array(
|
654 |
+
'status' => 'full',
|
655 |
+
'text' => array(
|
656 |
+
'<strong>' . esc_html__( 'Complete Support', 'all-in-one-seo-pack' ) . '</strong>',
|
657 |
+
esc_html__( 'Posts, Pages, Categories, Tags + Breadcrumb Navigation', 'all-in-one-seo-pack' ),
|
658 |
+
),
|
659 |
+
),
|
660 |
+
),
|
661 |
+
'support' => array(
|
662 |
+
'lite' => array(
|
663 |
+
'status' => 'partial',
|
664 |
+
'text' => array(
|
665 |
+
'<strong>' . esc_html__( 'Limited Support', 'all-in-one-seo-pack' ) . '</strong>',
|
666 |
+
),
|
667 |
+
),
|
668 |
+
'pro' => array(
|
669 |
+
'status' => 'full',
|
670 |
+
'text' => array(
|
671 |
+
'<strong>' . esc_html__( 'Priority Support', 'all-in-one-seo-pack' ) . '</strong>',
|
672 |
+
),
|
673 |
+
),
|
674 |
+
),
|
675 |
+
);
|
676 |
+
|
677 |
+
if ( ! isset( $data[ $feature ] ) ) {
|
678 |
+
return false;
|
679 |
+
}
|
680 |
+
|
681 |
+
if ( isset( $data[ $feature ][ $license ] ) ) {
|
682 |
+
return $data[ $feature ][ $license ];
|
683 |
+
}
|
684 |
+
}
|
685 |
+
|
686 |
+
/**
|
687 |
+
* Returns a list with all Awesome Motive plugins and their data.
|
688 |
+
*
|
689 |
+
* @since 3.4.0
|
690 |
+
*
|
691 |
+
* @return array
|
692 |
+
*/
|
693 |
+
private static function get_am_plugins() {
|
694 |
+
|
695 |
+
$images_url = AIOSEOP_PLUGIN_URL . 'images/about/';
|
696 |
+
|
697 |
+
return array(
|
698 |
+
|
699 |
+
'google-analytics-for-wordpress/googleanalytics.php' => array(
|
700 |
+
'icon' => $images_url . 'plugin-mi.png',
|
701 |
+
'name' => 'MonsterInsights',
|
702 |
+
'desc' => esc_html__( 'MonsterInsights makes it “effortless” to properly connect your WordPress site with Google Analytics, so you can start making data-driven decisions to grow your business.', 'all-in-one-seo-pack' ),
|
703 |
+
'url' => 'https://downloads.wordpress.org/plugin/google-analytics-for-wordpress.zip',
|
704 |
+
'pro' => array(
|
705 |
+
'plug' => 'google-analytics-premium/googleanalytics-premium.php',
|
706 |
+
'icon' => $images_url . 'plugin-mi.png',
|
707 |
+
'name' => 'MonsterInsights Pro',
|
708 |
+
'desc' => esc_html__( 'MonsterInsights makes it “effortless” to properly connect your WordPress site with Google Analytics, so you can start making data-driven decisions to grow your business.', 'all-in-one-seo-pack' ),
|
709 |
+
'url' => 'https://www.monsterinsights.com/?utm_source=proplugin&utm_medium=pluginheader&utm_campaign=pluginurl&utm_content=7%2E0%2E0',
|
710 |
+
'act' => 'go-to-url',
|
711 |
+
),
|
712 |
+
),
|
713 |
+
|
714 |
+
'optinmonster/optin-monster-wp-api.php' => array(
|
715 |
+
'icon' => $images_url . 'plugin-om.png',
|
716 |
+
'name' => 'OptinMonster',
|
717 |
+
'desc' => esc_html__( 'Our high-converting optin forms like Exit-Intent® popups, Fullscreen Welcome Mats, and Scroll boxes help you dramatically boost conversions and get more email subscribers.', 'all-in-one-seo-pack' ),
|
718 |
+
'url' => 'https://downloads.wordpress.org/plugin/optinmonster.zip',
|
719 |
+
),
|
720 |
+
|
721 |
+
'wp-mail-smtp/wp_mail_smtp.php' => array(
|
722 |
+
'icon' => $images_url . 'plugin-smtp.png',
|
723 |
+
'name' => 'WP Mail SMTP',
|
724 |
+
'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'all-in-one-seo-pack' ),
|
725 |
+
'url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
|
726 |
+
'pro' => array(
|
727 |
+
'plug' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
|
728 |
+
'icon' => $images_url . 'plugin-smtp.png',
|
729 |
+
'name' => 'WP Mail SMTP Pro',
|
730 |
+
'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'all-in-one-seo-pack' ),
|
731 |
+
'url' => 'https://wpmailsmtp.com/pricing/',
|
732 |
+
'act' => 'go-to-url',
|
733 |
+
),
|
734 |
+
),
|
735 |
+
|
736 |
+
'wpforms-lite/wpforms.php' => array(
|
737 |
+
'icon' => $images_url . 'plugin-wpforms.png',
|
738 |
+
'name' => 'WPForms',
|
739 |
+
'desc' => esc_html__( 'WPForms allows you to create beautiful contact forms for your site in minutes, not hours!', 'all-in-one-seo-pack' ),
|
740 |
+
'url' => 'https://downloads.wordpress.org/plugin/wpforms-lite.zip',
|
741 |
+
),
|
742 |
+
|
743 |
+
'rafflepress/rafflepress.php' => array(
|
744 |
+
'icon' => $images_url . 'plugin-rp.png',
|
745 |
+
'name' => 'RafflePress',
|
746 |
+
'desc' => esc_html__( 'Turn your visitors into brand ambassadors! Easily grow your email list, website traffic, and social media followers with powerful viral giveaways & contests.', 'all-in-one-seo-pack' ),
|
747 |
+
'url' => 'https://downloads.wordpress.org/plugin/rafflepress.zip',
|
748 |
+
'pro' => array(
|
749 |
+
'plug' => 'rafflepress-pro/rafflepress-pro.php',
|
750 |
+
'icon' => $images_url . 'plugin-rp.png',
|
751 |
+
'name' => 'RafflePress Pro',
|
752 |
+
'desc' => esc_html__( 'Turn your visitors into brand ambassadors! Easily grow your email list, website traffic, and social media followers with powerful viral giveaways & contests.', 'all-in-one-seo-pack' ),
|
753 |
+
'url' => 'https://rafflepress.com/pricing/',
|
754 |
+
'act' => 'go-to-url',
|
755 |
+
),
|
756 |
+
),
|
757 |
+
);
|
758 |
+
}
|
759 |
+
|
760 |
+
/**
|
761 |
+
* Returns AM plugin data for the Addons section of the About Us tab.
|
762 |
+
*
|
763 |
+
* @since 3.4.0
|
764 |
+
*
|
765 |
+
* @param string $plugin The plugin slug.
|
766 |
+
* @param array $details The details of the plugin.
|
767 |
+
* @param array $all_plugins The list of all plugins.
|
768 |
+
*
|
769 |
+
* @return array
|
770 |
+
*/
|
771 |
+
private static function get_plugin_data( $plugin, $details, $all_plugins ) {
|
772 |
+
|
773 |
+
$have_pro = ( ! empty( $details['pro'] ) && ! empty( $details['pro']['plug'] ) );
|
774 |
+
$show_pro = false;
|
775 |
+
|
776 |
+
$plugin_data = array();
|
777 |
+
|
778 |
+
if ( $have_pro ) {
|
779 |
+
if ( array_key_exists( $details['pro']['plug'], $all_plugins ) ) {
|
780 |
+
if ( is_plugin_active( $details['pro']['plug'] ) ) {
|
781 |
+
$show_pro = true;
|
782 |
+
}
|
783 |
+
}
|
784 |
+
if ( $show_pro ) {
|
785 |
+
$plugin = $details['pro']['plug'];
|
786 |
+
$details = $details['pro'];
|
787 |
+
}
|
788 |
+
}
|
789 |
+
|
790 |
+
if ( array_key_exists( $plugin, $all_plugins ) ) {
|
791 |
+
if ( is_plugin_active( $plugin ) ) {
|
792 |
+
|
793 |
+
// Status text/status.
|
794 |
+
$plugin_data['status_class'] = 'status-active';
|
795 |
+
$plugin_data['status_text'] = esc_html__( 'Active', 'all-in-one-seo-pack' );
|
796 |
+
|
797 |
+
// Button text/status.
|
798 |
+
$plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-secondary disabled';
|
799 |
+
$plugin_data['action_text'] = esc_html__( 'Activated', 'all-in-one-seo-pack' );
|
800 |
+
$plugin_data['plugin_src'] = esc_attr( $plugin );
|
801 |
+
} else {
|
802 |
+
|
803 |
+
// Status text/status.
|
804 |
+
$plugin_data['status_class'] = 'status-inactive';
|
805 |
+
$plugin_data['status_text'] = esc_html__( 'Inactive', 'all-in-one-seo-pack' );
|
806 |
+
|
807 |
+
// Button text/status.
|
808 |
+
$plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-secondary';
|
809 |
+
$plugin_data['action_text'] = esc_html__( 'Activate', 'all-in-one-seo-pack' );
|
810 |
+
$plugin_data['plugin_src'] = esc_attr( $plugin );
|
811 |
+
}
|
812 |
+
} else {
|
813 |
+
// Doesn't exist, install.
|
814 |
+
// Status text/status.
|
815 |
+
$plugin_data['status_class'] = 'status-download';
|
816 |
+
if ( isset( $details['act'] ) && 'go-to-url' === $details['act'] ) {
|
817 |
+
$plugin_data['status_class'] = 'status-go-to-url';
|
818 |
+
}
|
819 |
+
$plugin_data['status_text'] = esc_html__( 'Not Installed', 'all-in-one-seo-pack' );
|
820 |
+
// Button text/status.
|
821 |
+
$plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-primary';
|
822 |
+
$plugin_data['action_text'] = esc_html__( 'Install Plugin', 'all-in-one-seo-pack' );
|
823 |
+
$plugin_data['plugin_src'] = esc_url( $details['url'] );
|
824 |
+
}
|
825 |
+
|
826 |
+
$plugin_data['details'] = $details;
|
827 |
+
|
828 |
+
return $plugin_data;
|
829 |
+
}
|
830 |
+
}
|
inc/admin/views/class-aioseop-flyout.php
ADDED
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* AIOSEOP_FLyout
|
4 |
+
*
|
5 |
+
* @package All-in-One-SEO-Pack
|
6 |
+
* @since 3.4.0
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Handles our flyout menu.
|
11 |
+
*
|
12 |
+
* @since
|
13 |
+
*/
|
14 |
+
class AIOSEOP_Flyout {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Initializes the code.
|
18 |
+
*
|
19 |
+
* @since 3.4.0
|
20 |
+
*/
|
21 |
+
public static function init() {
|
22 |
+
if ( ! is_admin() ) {
|
23 |
+
return;
|
24 |
+
}
|
25 |
+
|
26 |
+
if ( ! apply_filters( 'aioseop_admin_flyout_menu', true ) ) {
|
27 |
+
return;
|
28 |
+
}
|
29 |
+
|
30 |
+
add_action( 'admin_enqueue_scripts', array( 'AIOSEOP_Flyout', 'enqueue_files' ) );
|
31 |
+
add_action( 'admin_footer', array( 'AIOSEOP_Flyout', 'output_flyout_menu' ) );
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Enqueues the required files.
|
36 |
+
*
|
37 |
+
* @since 3.4.0
|
38 |
+
*/
|
39 |
+
public static function enqueue_files() {
|
40 |
+
if ( ! in_array( get_current_screen()->id, aioseop_get_admin_screens() ) ) {
|
41 |
+
return;
|
42 |
+
}
|
43 |
+
|
44 |
+
wp_enqueue_style(
|
45 |
+
'aioseop-flyout',
|
46 |
+
AIOSEOP_PLUGIN_URL . 'css/admin/aioseop-flyout.css',
|
47 |
+
array(),
|
48 |
+
AIOSEOP_VERSION
|
49 |
+
);
|
50 |
+
|
51 |
+
wp_enqueue_script(
|
52 |
+
'aioseop-flyout',
|
53 |
+
AIOSEOP_PLUGIN_URL . 'js/admin/aioseop-flyout.js',
|
54 |
+
array(),
|
55 |
+
AIOSEOP_VERSION,
|
56 |
+
false
|
57 |
+
);
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Outputs our flyout menu.
|
62 |
+
*
|
63 |
+
* @since 3.4.0
|
64 |
+
*/
|
65 |
+
public static function output_flyout_menu() {
|
66 |
+
if ( ! in_array( get_current_screen()->id, aioseop_get_admin_screens() ) ) {
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
|
70 |
+
printf(
|
71 |
+
'<div id="aioseop-flyout">
|
72 |
+
<div id="aioseop-flyout-items">
|
73 |
+
%1$s
|
74 |
+
</div>
|
75 |
+
<a href="#" class="aioseop-flyout-button aioseop-flyout-head">
|
76 |
+
<div class="aioseop-flyout-label">%2$s</div>
|
77 |
+
<img src="%3$s" alt="%2$s" data-active="%4$s" />
|
78 |
+
</a>
|
79 |
+
</div>',
|
80 |
+
self::get_items_html(), // phpcs:ignore
|
81 |
+
esc_attr__( 'See Quick Links', 'all-in-one-seo-pack' ),
|
82 |
+
esc_url( AIOSEOP_PLUGIN_URL . 'images/flyout/gear-default.png' ),
|
83 |
+
esc_url( AIOSEOP_PLUGIN_URL . 'images/flyout/gear-default.png' )
|
84 |
+
);
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Returns the HTML markup for our flyout menu items.
|
89 |
+
*
|
90 |
+
* @since 3.4.0
|
91 |
+
*
|
92 |
+
* @return string $items_html
|
93 |
+
*/
|
94 |
+
private static function get_items_html() {
|
95 |
+
|
96 |
+
$items = array_reverse( self::menu_items() );
|
97 |
+
$items_html = '';
|
98 |
+
|
99 |
+
foreach ( $items as $item_key => $item ) {
|
100 |
+
$items_html .= sprintf(
|
101 |
+
'<a href="%1$s" target="_blank" rel="noopener noreferrer" class="aioseop-flyout-button aioseop-flyout-item aioseop-flyout-item-%2$d"%5$s%6$s>
|
102 |
+
<div class="aioseop-flyout-label">%3$s</div>
|
103 |
+
<img src="' . AIOSEOP_PLUGIN_URL . 'images/flyout/' . $item['icon'] . '.svg"/>
|
104 |
+
</a>',
|
105 |
+
esc_url( $item['url'] ),
|
106 |
+
(int) $item_key,
|
107 |
+
esc_html( $item['title'] ),
|
108 |
+
sanitize_html_class( $item['icon'] ),
|
109 |
+
! empty( $item['bgcolor'] ) ? ' style="background-color: ' . esc_attr( $item['bgcolor'] ) . '"' : '',
|
110 |
+
! empty( $item['hover_bgcolor'] ) ? ' onMouseOver="this.style.backgroundColor=\'' . esc_attr( $item['hover_bgcolor'] ) . '\'" onMouseOut="this.style.backgroundColor=\'' . esc_attr( $item['bgcolor'] ) . '\'"' : ''
|
111 |
+
);
|
112 |
+
}
|
113 |
+
|
114 |
+
return $items_html;
|
115 |
+
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Returns a list of items for our flyout menu.
|
119 |
+
*
|
120 |
+
* @since 3.4.0
|
121 |
+
*
|
122 |
+
* @return array
|
123 |
+
*/
|
124 |
+
private static function menu_items() {
|
125 |
+
$medium = ( AIOSEOPPRO ) ? 'proplugin' : 'liteplugin';
|
126 |
+
$utm_campaign = 'flyout-menu';
|
127 |
+
|
128 |
+
$items = array(
|
129 |
+
array(
|
130 |
+
'title' => sprintf( __( 'Upgrade to All in One SEO Pack Pro', 'all-in-one-seo-pack' ), AIOSEOP_PLUGIN_NAME . ' Pro' ),
|
131 |
+
'url' => aioseop_get_utm_url( $utm_campaign, 'WordPress', $medium ) . '&utm_content=Upgrade',
|
132 |
+
'icon' => 'star-solid',
|
133 |
+
'bgcolor' => '#E1772F',
|
134 |
+
'hover_bgcolor' => '#ff8931',
|
135 |
+
),
|
136 |
+
array(
|
137 |
+
'title' => esc_html__( 'Support & Docs', 'all-in-one-seo-pack' ),
|
138 |
+
'url' => 'https://semperplugins.com/documentation/?utm_source=WordPress&utm_medium=' . $medium . '&utm_campaign=' . $utm_campaign . '&utm_content=Support',
|
139 |
+
'icon' => 'life-ring-regular',
|
140 |
+
),
|
141 |
+
array(
|
142 |
+
'title' => esc_html__( 'Join Our Community', 'all-in-one-seo-pack' ),
|
143 |
+
'url' => 'https://www.facebook.com/groups/wpbeginner/',
|
144 |
+
'icon' => 'comments-solid',
|
145 |
+
),
|
146 |
+
array(
|
147 |
+
'title' => esc_html__( 'Suggest a Feature', 'all-in-one-seo-pack' ),
|
148 |
+
'url' => 'https://semperplugins.com/suggest-a-feature/?utm_source=WordPress&utm_medium=' . $medium . '&utm_campaign=' . $utm_campaign . '&utm_content=Feature',
|
149 |
+
'icon' => 'lightbulb-regular',
|
150 |
+
),
|
151 |
+
);
|
152 |
+
|
153 |
+
if ( AIOSEOPPRO ) {
|
154 |
+
array_shift( $items );
|
155 |
+
}
|
156 |
+
|
157 |
+
return $items;
|
158 |
+
}
|
159 |
+
}
|
inc/aioseop_functions.php
CHANGED
@@ -202,11 +202,11 @@ if ( ! function_exists( 'aioseop_addmycolumns' ) ) {
|
|
202 |
add_filter( 'manage_posts_columns', 'aioseop_mrt_pcolumns' );
|
203 |
}
|
204 |
if ( 'attachment' === $post_type ) {
|
205 |
-
add_action( 'manage_media_custom_column', '
|
206 |
} elseif ( is_post_type_hierarchical( $post_type ) ) {
|
207 |
-
add_action( 'manage_pages_custom_column', '
|
208 |
} else {
|
209 |
-
add_action( 'manage_posts_custom_column', '
|
210 |
}
|
211 |
}
|
212 |
}
|
@@ -242,7 +242,7 @@ if ( ! function_exists( 'aioseop_admin_head' ) ) {
|
|
242 |
* @since ?
|
243 |
*/
|
244 |
function aioseop_admin_head() {
|
245 |
-
wp_enqueue_script( '
|
246 |
?>
|
247 |
<style>
|
248 |
.aioseop_mpc_admin_meta_options {
|
@@ -295,7 +295,13 @@ if ( ! function_exists( 'aioseop_admin_head' ) ) {
|
|
295 |
pleaseWait: "<?php _e( 'Please wait...', 'all-in-one-seo-pack' ); ?>",
|
296 |
slugEmpty: "<?php _e( 'Slug may not be empty!', 'all-in-one-seo-pack' ); ?>",
|
297 |
Revisions: "<?php _e( 'Revisions', 'all-in-one-seo-pack' ); ?>",
|
298 |
-
Time: "<?php _e( 'Insert time', 'all-in-one-seo-pack' ); ?>"
|
|
|
|
|
|
|
|
|
|
|
|
|
299 |
}
|
300 |
//]]>
|
301 |
</script>
|
@@ -386,55 +392,6 @@ if ( ! function_exists( 'aioseop_output_dismissable_notice' ) ) {
|
|
386 |
}
|
387 |
}
|
388 |
|
389 |
-
if ( ! function_exists( 'aioseop_ajax_save_meta' ) ) {
|
390 |
-
|
391 |
-
/**
|
392 |
-
* AIOSEOP AJAX Save Meta
|
393 |
-
*/
|
394 |
-
function aioseop_ajax_save_meta() {
|
395 |
-
if ( ! empty( $_POST['_inline_edit'] ) && ( 'undefined' !== $_POST['_inline_edit'] ) ) {
|
396 |
-
check_ajax_referer( 'inlineeditnonce', '_inline_edit' );
|
397 |
-
}
|
398 |
-
$post_id = intval( $_POST['post_id'] );
|
399 |
-
$new_meta = strip_tags( $_POST['new_meta'] );
|
400 |
-
$target = $_POST['target_meta'];
|
401 |
-
check_ajax_referer( 'aioseop_meta_' . $target . '_' . $post_id, '_nonce' );
|
402 |
-
$result = '';
|
403 |
-
if ( in_array(
|
404 |
-
$target,
|
405 |
-
array(
|
406 |
-
'title',
|
407 |
-
'description',
|
408 |
-
'keywords',
|
409 |
-
)
|
410 |
-
) && current_user_can( 'edit_post', $post_id )
|
411 |
-
) {
|
412 |
-
update_post_meta( $post_id, '_aioseop_' . $target, esc_attr( $new_meta ) );
|
413 |
-
$result = get_post_meta( $post_id, '_aioseop_' . $target, true );
|
414 |
-
} else {
|
415 |
-
die();
|
416 |
-
}
|
417 |
-
if ( '' != $result ) :
|
418 |
-
$label = "<label id='aioseop_label_{$target}_{$post_id}' class='aioseop-label-quickedit' for='{$target}editlink{$post_id}'>" . $result . '</label>';
|
419 |
-
else :
|
420 |
-
$label = "<label id='aioseop_label_{$target}_{$post_id}' class='aioseop-label-quickedit' for='{$target}editlink{$post_id}'></label><strong><i>" . __( 'No', 'all-in-one-seo-pack' ) . ' ' . $target . '</i></strong>';
|
421 |
-
endif;
|
422 |
-
$nonce = wp_create_nonce( "aioseop_meta_{$target}_{$post_id}" );
|
423 |
-
$output = '<a id="' . $target . 'editlink' . $post_id . '" '
|
424 |
-
. 'class="aioseop_edit_link aioseop-icon-cog-edit" '
|
425 |
-
. 'href="javascript:void(0);" '
|
426 |
-
. 'onclick=\'aioseop_ajax_edit_meta_form(' . $post_id . ', "' . $target . '", "' . $nonce . '");return false;\' '
|
427 |
-
. 'title="' . __( 'Edit', 'all-in-one-seo-pack' ) . '"></a>';
|
428 |
-
$output .= $label;
|
429 |
-
die(
|
430 |
-
"jQuery('div#aioseop_" . $target . '_' . $post_id . "').fadeOut('fast', function() {
|
431 |
-
var my_label = " . json_encode( $output ) . ";
|
432 |
-
jQuery('div#aioseop_" . $target . '_' . $post_id . "').html(my_label).fadeIn('fast');
|
433 |
-
});"
|
434 |
-
);
|
435 |
-
}
|
436 |
-
}
|
437 |
-
|
438 |
if ( ! function_exists( 'aioseop_ajax_init' ) ) {
|
439 |
|
440 |
/**
|
@@ -514,7 +471,11 @@ if ( ! function_exists( 'aioseop_ajax_save_url' ) ) {
|
|
514 |
} elseif ( ! empty( $_POST['settings'] ) && ( 'news_sitemap_addl_pages' === $_POST['settings'] ) ) {
|
515 |
$module = $aioseop_modules->return_module( 'All_in_One_SEO_Pack_News_Sitemap' );
|
516 |
} else {
|
517 |
-
|
|
|
|
|
|
|
|
|
518 |
}
|
519 |
$_POST['location'] = null;
|
520 |
$_POST['Submit'] = 'ajax';
|
@@ -561,7 +522,10 @@ if ( ! function_exists( 'aioseop_ajax_delete_url' ) ) {
|
|
561 |
global $aiosp, $aioseop_modules;
|
562 |
aioseop_load_modules();
|
563 |
$aiosp->admin_menu();
|
564 |
-
$module
|
|
|
|
|
|
|
565 |
$_POST['location'] = null;
|
566 |
$_POST['Submit'] = 'ajax';
|
567 |
$module->add_page_hooks();
|
@@ -812,57 +776,151 @@ if ( ! function_exists( 'aioseop_ajax_get_menu_links' ) ) {
|
|
812 |
}
|
813 |
}
|
814 |
|
815 |
-
if ( ! function_exists( '
|
816 |
|
817 |
/**
|
818 |
-
*
|
819 |
*
|
820 |
-
* @since
|
|
|
|
|
|
|
821 |
*
|
822 |
-
* @
|
823 |
-
* @param $aioseoppi
|
824 |
*/
|
825 |
-
function
|
826 |
-
$
|
827 |
-
$
|
828 |
-
|
829 |
-
|
|
|
|
|
830 |
}
|
831 |
-
|
832 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
833 |
}
|
834 |
-
|
835 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
836 |
}
|
837 |
-
|
838 |
-
|
|
|
839 |
}
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
865 |
}
|
|
|
|
|
866 |
}
|
867 |
}
|
868 |
|
@@ -1278,6 +1336,7 @@ function aioseop_do_shortcodes( $content ) {
|
|
1278 |
'WooCommerce Checkout' => '[woocommerce_checkout]',
|
1279 |
'WooCommerce Order Tracking' => '[woocommerce_order_tracking]',
|
1280 |
'WooCommerce Cart' => '[woocommerce_cart]',
|
|
|
1281 |
);
|
1282 |
|
1283 |
$rtn_conflict_shortcodes = array();
|
@@ -1397,3 +1456,92 @@ function get_major_version( $version ) {
|
|
1397 |
|
1398 |
return $major_version;
|
1399 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
202 |
add_filter( 'manage_posts_columns', 'aioseop_mrt_pcolumns' );
|
203 |
}
|
204 |
if ( 'attachment' === $post_type ) {
|
205 |
+
add_action( 'manage_media_custom_column', 'render_seo_column', 10, 2 );
|
206 |
} elseif ( is_post_type_hierarchical( $post_type ) ) {
|
207 |
+
add_action( 'manage_pages_custom_column', 'render_seo_column', 10, 2 );
|
208 |
} else {
|
209 |
+
add_action( 'manage_posts_custom_column', 'render_seo_column', 10, 2 );
|
210 |
}
|
211 |
}
|
212 |
}
|
242 |
* @since ?
|
243 |
*/
|
244 |
function aioseop_admin_head() {
|
245 |
+
wp_enqueue_script( 'aioseop-quickedit', AIOSEOP_PLUGIN_URL . 'js/admin/aioseop-quickedit.js', array( 'jquery' ), AIOSEOP_VERSION );
|
246 |
?>
|
247 |
<style>
|
248 |
.aioseop_mpc_admin_meta_options {
|
295 |
pleaseWait: "<?php _e( 'Please wait...', 'all-in-one-seo-pack' ); ?>",
|
296 |
slugEmpty: "<?php _e( 'Slug may not be empty!', 'all-in-one-seo-pack' ); ?>",
|
297 |
Revisions: "<?php _e( 'Revisions', 'all-in-one-seo-pack' ); ?>",
|
298 |
+
Time: "<?php _e( 'Insert time', 'all-in-one-seo-pack' ); ?>",
|
299 |
+
i18n: {
|
300 |
+
save: "<?php _e( 'Save', 'all-in-one-seo-pack' ); ?>",
|
301 |
+
cancel: "<?php _e( 'Cancel', 'all-in-one-seo-pack' ); ?>",
|
302 |
+
wait: "<?php _e( 'Please wait...', 'all-in-one-seo-pack' ); ?>",
|
303 |
+
noValue: "<?php _e( 'No value', 'all-in-one-seo-pack' ); ?>"
|
304 |
+
}
|
305 |
}
|
306 |
//]]>
|
307 |
</script>
|
392 |
}
|
393 |
}
|
394 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
395 |
if ( ! function_exists( 'aioseop_ajax_init' ) ) {
|
396 |
|
397 |
/**
|
471 |
} elseif ( ! empty( $_POST['settings'] ) && ( 'news_sitemap_addl_pages' === $_POST['settings'] ) ) {
|
472 |
$module = $aioseop_modules->return_module( 'All_in_One_SEO_Pack_News_Sitemap' );
|
473 |
} else {
|
474 |
+
if ( AIOSEOPPRO ) {
|
475 |
+
$module = $aioseop_modules->return_module( 'All_in_One_SEO_Pack_Sitemap_Pro' );
|
476 |
+
} else {
|
477 |
+
$module = $aioseop_modules->return_module( 'All_in_One_SEO_Pack_Sitemap' );
|
478 |
+
}
|
479 |
}
|
480 |
$_POST['location'] = null;
|
481 |
$_POST['Submit'] = 'ajax';
|
522 |
global $aiosp, $aioseop_modules;
|
523 |
aioseop_load_modules();
|
524 |
$aiosp->admin_menu();
|
525 |
+
$module = $aioseop_modules->return_module( 'All_in_One_SEO_Pack_Sitemap' );
|
526 |
+
if ( AIOSEOPPRO ) {
|
527 |
+
$module = $aioseop_modules->return_module( 'All_in_One_SEO_Pack_Sitemap_Pro' );
|
528 |
+
}
|
529 |
$_POST['location'] = null;
|
530 |
$_POST['Submit'] = 'ajax';
|
531 |
$module->add_page_hooks();
|
776 |
}
|
777 |
}
|
778 |
|
779 |
+
if ( ! function_exists( 'render_seo_column' ) ) {
|
780 |
|
781 |
/**
|
782 |
+
* Generates the content for a given SEO column.
|
783 |
*
|
784 |
+
* @since 3.4.0 Added support for image title attribute and alt tag attribute. Refactored + renamed function to better reflect purpose.
|
785 |
+
*
|
786 |
+
* @param string $column_name The name of the column.
|
787 |
+
* @param int $post_id The ID of the post.
|
788 |
*
|
789 |
+
* @return void
|
|
|
790 |
*/
|
791 |
+
function render_seo_column( $column_name, $post_id ) {
|
792 |
+
$name = '';
|
793 |
+
$value = '';
|
794 |
+
$label = '';
|
795 |
+
|
796 |
+
if ( ! current_user_can( 'edit_post', $post_id ) && ! current_user_can( 'manage_aiosp' ) ) {
|
797 |
+
return;
|
798 |
}
|
799 |
+
|
800 |
+
$post_type = get_post_type( $post_id );
|
801 |
+
|
802 |
+
if ( 'attachment' === $post_type ) {
|
803 |
+
$image_seo_columns = array( 'image_title', 'image_alt_tag' );
|
804 |
+
$supported_mime_types = array( 'image/jpeg', 'image/jpg', 'image/png', 'image/gif' );
|
805 |
+
$mime_type = get_post_mime_type( $post_id );
|
806 |
+
|
807 |
+
if ( in_array( $column_name, $image_seo_columns ) && ! in_array( $mime_type, $supported_mime_types ) ) {
|
808 |
+
return;
|
809 |
+
}
|
810 |
}
|
811 |
+
|
812 |
+
switch ( $column_name ) {
|
813 |
+
case 'seotitle': {
|
814 |
+
$name = __( 'title', 'all-in-one-seo-pack' );
|
815 |
+
$value = get_post_meta( $post_id, '_aioseop_title', true );
|
816 |
+
break;
|
817 |
+
}
|
818 |
+
case 'seodesc': {
|
819 |
+
$name = __( 'description', 'all-in-one-seo-pack' );
|
820 |
+
$value = get_post_meta( $post_id, '_aioseop_description', true );
|
821 |
+
break;
|
822 |
+
}
|
823 |
+
case 'seokeywords': {
|
824 |
+
$name = __( 'keywords', 'all-in-one-seo-pack' );
|
825 |
+
$value = get_post_meta( $post_id, '_aioseop_keywords', true );
|
826 |
+
break;
|
827 |
+
}
|
828 |
+
case 'image_title': {
|
829 |
+
$name = __( 'image_title', 'all-in-one-seo-pack' );
|
830 |
+
$value = get_the_title( get_post( $post_id ) );
|
831 |
+
break;
|
832 |
+
}
|
833 |
+
case 'image_alt_tag': {
|
834 |
+
$name = __( 'image_alt_tag', 'all-in-one-seo-pack' );
|
835 |
+
$value = get_post_meta( $post_id, '_wp_attachment_image_alt', true );
|
836 |
+
break;
|
837 |
+
}
|
838 |
+
default: {
|
839 |
+
return;
|
840 |
+
}
|
841 |
}
|
842 |
+
|
843 |
+
if ( empty( $value ) ) {
|
844 |
+
$value = sprintf( '<strong>%s</strong>', sprintf( __( 'No value', 'all-in-one-seo-pack' ), str_replace( '_', ' ', $name ) ) );
|
845 |
}
|
846 |
+
|
847 |
+
$span = "<span id='aioseop_{$column_name}_{$post_id}_value'>" . trim( $value ) . '</span>';
|
848 |
+
$nonce = wp_create_nonce( "aioseop_meta_{$column_name}_{$post_id}" );
|
849 |
+
|
850 |
+
?>
|
851 |
+
<div id="<?php echo "aioseop_${column_name}_${post_id}"; ?>" class="aioseop_mpc_admin_meta_options aio_editing">
|
852 |
+
<a
|
853 |
+
class="dashicons dashicons-edit aioseop-quickedit-pencil"
|
854 |
+
href="javascript:void(0);"
|
855 |
+
onclick="<?php printf( 'aioseopQuickEdit.aioseop_ajax_edit_meta_form(%s, \'%s\', \'%s\'); return false;', $post_id, $column_name, $nonce ); ?>"
|
856 |
+
title="<?php _e( 'Edit', 'all-in-one-seo-pack' ); ?>"
|
857 |
+
>
|
858 |
+
</a><?php echo $span; ?></div>
|
859 |
+
<?php
|
860 |
+
}
|
861 |
+
}
|
862 |
+
|
863 |
+
if ( ! function_exists( 'aioseop_ajax_save_meta' ) ) {
|
864 |
+
|
865 |
+
/**
|
866 |
+
* Updates the post meta value for a given key.
|
867 |
+
*
|
868 |
+
* @since 3.4.0 Added support for image title attribute and alt tag attribute. Refactored.
|
869 |
+
*/
|
870 |
+
function aioseop_ajax_save_meta() {
|
871 |
+
$post_id = intval( $_POST['post_id'] );
|
872 |
+
$value = sanitize_text_field( $_POST['value'] );
|
873 |
+
$key = $_POST['key'];
|
874 |
+
|
875 |
+
check_ajax_referer( "aioseop_meta_${key}_${post_id}" );
|
876 |
+
|
877 |
+
$allowed_attributes = array(
|
878 |
+
'seotitle',
|
879 |
+
'seodesc',
|
880 |
+
'seokeywords',
|
881 |
+
'image_title',
|
882 |
+
'image_alt_tag',
|
883 |
+
);
|
884 |
+
|
885 |
+
$result = '';
|
886 |
+
|
887 |
+
if ( ! current_user_can( 'edit_post', $post_id ) && ! current_user_can( 'manage_aiosp' ) ) {
|
888 |
+
die();
|
889 |
+
}
|
890 |
+
|
891 |
+
if ( ! in_array( $key, $allowed_attributes ) ) {
|
892 |
+
die();
|
893 |
+
}
|
894 |
+
|
895 |
+
switch ( $key ) {
|
896 |
+
case 'seotitle': {
|
897 |
+
$key = '_aioseop_title';
|
898 |
+
break;
|
899 |
+
}
|
900 |
+
case 'seodesc': {
|
901 |
+
$key = '_aioseop_description';
|
902 |
+
break;
|
903 |
+
}
|
904 |
+
case 'seokeywords': {
|
905 |
+
$key = '_aioseop_keywords';
|
906 |
+
break;
|
907 |
+
}
|
908 |
+
case 'image_title': {
|
909 |
+
wp_update_post(
|
910 |
+
array(
|
911 |
+
'ID' => $post_id,
|
912 |
+
'post_title' => $value,
|
913 |
+
)
|
914 |
+
);
|
915 |
+
die();
|
916 |
+
}
|
917 |
+
case 'image_alt_tag': {
|
918 |
+
$key = '_wp_attachment_image_alt';
|
919 |
+
break;
|
920 |
+
}
|
921 |
}
|
922 |
+
|
923 |
+
update_post_meta( $post_id, $key, $value );
|
924 |
}
|
925 |
}
|
926 |
|
1336 |
'WooCommerce Checkout' => '[woocommerce_checkout]',
|
1337 |
'WooCommerce Order Tracking' => '[woocommerce_order_tracking]',
|
1338 |
'WooCommerce Cart' => '[woocommerce_cart]',
|
1339 |
+
'WooCommerce Registration' => '[wwp_registration_form]',
|
1340 |
);
|
1341 |
|
1342 |
$rtn_conflict_shortcodes = array();
|
1456 |
|
1457 |
return $major_version;
|
1458 |
}
|
1459 |
+
|
1460 |
+
if ( ! function_exists( 'aioseop_get_admin_screens' ) ) {
|
1461 |
+
|
1462 |
+
/**
|
1463 |
+
* Returns a list with our admin screens.
|
1464 |
+
*
|
1465 |
+
* @since 3.4.0
|
1466 |
+
*
|
1467 |
+
* @return array A key-value array with our admin screens.
|
1468 |
+
*/
|
1469 |
+
function aioseop_get_admin_screens() {
|
1470 |
+
return array(
|
1471 |
+
'General Settings' => 'toplevel_page_' . AIOSEOP_PLUGIN_DIRNAME . '/aioseop_class',
|
1472 |
+
'Performance' => 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_performance',
|
1473 |
+
'XML Sitemap' => AIOSEOPPRO ? 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/pro/class-aioseop-pro-sitemap' : 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_sitemap',
|
1474 |
+
'Social Meta' => 'all-in-one-seo_page_aiosp_opengraph',
|
1475 |
+
'Robots Generator' => 'all-in-one-seo_page_aiosp_robots_generator',
|
1476 |
+
'Robots.txt' => 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_robots',
|
1477 |
+
'File Editor' => 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_file_editor',
|
1478 |
+
'Importer/Exporter' => 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_importer_exporter',
|
1479 |
+
'Bad Robots Blocker' => 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_bad_robots',
|
1480 |
+
'Feature Manager' => 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/modules/aioseop_feature_manager',
|
1481 |
+
'Video Sitemap' => 'all-in-one-seo_page_' . AIOSEOP_PLUGIN_DIRNAME . '/pro/video_sitemap',
|
1482 |
+
'Image SEO' => 'all-in-one-seo_page_aiosp_image_seo',
|
1483 |
+
'About Us' => 'all-in-one-seo_page_aioseop-about',
|
1484 |
+
);
|
1485 |
+
}
|
1486 |
+
}
|
1487 |
+
|
1488 |
+
if ( ! function_exists( 'aioseop_get_utm_url' ) ) {
|
1489 |
+
|
1490 |
+
/**
|
1491 |
+
* Returns a UTM structured URL to our product page.
|
1492 |
+
*
|
1493 |
+
* @since 3.4.0
|
1494 |
+
*
|
1495 |
+
* @param string $medium
|
1496 |
+
* @param string $source
|
1497 |
+
* @param string $campaign
|
1498 |
+
*
|
1499 |
+
* @return string $href
|
1500 |
+
*/
|
1501 |
+
function aioseop_get_utm_url( $medium, $source = 'WordPress', $campaign = 'liteplugin' ) {
|
1502 |
+
|
1503 |
+
$href = 'https://semperplugins.com/all-in-one-seo-pack-pro-version/';
|
1504 |
+
|
1505 |
+
$href = add_query_arg(
|
1506 |
+
array(
|
1507 |
+
'utm_source' => $source,
|
1508 |
+
'utm_campaign' => $campaign,
|
1509 |
+
'utm_medium' => $medium,
|
1510 |
+
),
|
1511 |
+
$href
|
1512 |
+
);
|
1513 |
+
|
1514 |
+
return $href;
|
1515 |
+
}
|
1516 |
+
}
|
1517 |
+
|
1518 |
+
if ( ! function_exists( 'aioseop_get_site_logo_url' ) ) {
|
1519 |
+
/**
|
1520 |
+
* Returns the URL of the site logo if it exists.
|
1521 |
+
*
|
1522 |
+
* @since 3.4.0
|
1523 |
+
*
|
1524 |
+
* @return string
|
1525 |
+
*/
|
1526 |
+
function aioseop_get_site_logo_url() {
|
1527 |
+
if ( ! get_theme_support( 'custom-logo' ) ) {
|
1528 |
+
return false;
|
1529 |
+
}
|
1530 |
+
|
1531 |
+
$custom_logo_id = get_theme_mod( 'custom_logo' );
|
1532 |
+
$image = wp_get_attachment_image_src( $custom_logo_id, 'full' );
|
1533 |
+
|
1534 |
+
if ( empty( $image ) ) {
|
1535 |
+
return false;
|
1536 |
+
}
|
1537 |
+
|
1538 |
+
return $image[0];
|
1539 |
+
}
|
1540 |
+
}
|
1541 |
+
|
1542 |
+
if ( ! function_exists( 'aioseop_filter_styles' ) ) {
|
1543 |
+
function aioseop_filter_styles( $styles ) {
|
1544 |
+
$styles[] = 'display';
|
1545 |
+
return $styles;
|
1546 |
+
}
|
1547 |
+
}
|
inc/aioseop_updates_class.php
CHANGED
@@ -133,12 +133,6 @@ class AIOSEOP_Updates {
|
|
133 |
$this->sitemap_excl_terms_201905();
|
134 |
}
|
135 |
|
136 |
-
if (
|
137 |
-
version_compare( $old_version, '3.0.3', '<' )
|
138 |
-
) {
|
139 |
-
$this->reset_review_notice_201906();
|
140 |
-
}
|
141 |
-
|
142 |
if (
|
143 |
version_compare( $old_version, '3.1', '<' )
|
144 |
) {
|
@@ -348,18 +342,6 @@ class AIOSEOP_Updates {
|
|
348 |
}
|
349 |
}
|
350 |
|
351 |
-
/**
|
352 |
-
* Removes Review Plugin Notice
|
353 |
-
*
|
354 |
-
* @since 3.0.3
|
355 |
-
*/
|
356 |
-
public function reset_review_notice_201906() {
|
357 |
-
global $aioseop_notices;
|
358 |
-
|
359 |
-
$aioseop_notices->reset_notice( 'review_plugin' );
|
360 |
-
$aioseop_notices->remove_notice( 'review_plugin' );
|
361 |
-
}
|
362 |
-
|
363 |
/**
|
364 |
* Flushes rewrite rules for XML Sitemap URL changes
|
365 |
*
|
@@ -421,5 +403,3 @@ class AIOSEOP_Updates {
|
|
421 |
}
|
422 |
|
423 |
}
|
424 |
-
|
425 |
-
|
133 |
$this->sitemap_excl_terms_201905();
|
134 |
}
|
135 |
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
if (
|
137 |
version_compare( $old_version, '3.1', '<' )
|
138 |
) {
|
342 |
}
|
343 |
}
|
344 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
345 |
/**
|
346 |
* Flushes rewrite rules for XML Sitemap URL changes
|
347 |
*
|
403 |
}
|
404 |
|
405 |
}
|
|
|
|
inc/compatibility/abstract/aiosep_compatible.php
CHANGED
@@ -12,7 +12,7 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Compatible' ) ) {
|
|
12 |
*
|
13 |
* @package All-in-One-SEO-Pack
|
14 |
* @author Alejandro Mostajo
|
15 |
-
* @copyright
|
16 |
* @version 2.3.13
|
17 |
* @since 2.3.12.3
|
18 |
*/
|
12 |
*
|
13 |
* @package All-in-One-SEO-Pack
|
14 |
* @author Alejandro Mostajo
|
15 |
+
* @copyright All in One SEO <https://semperplugins.com/>
|
16 |
* @version 2.3.13
|
17 |
* @since 2.3.12.3
|
18 |
*/
|
inc/compatibility/class-aioseop-php-functions.php
ADDED
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* AIOSEOP_PHP_Functions class
|
4 |
+
*
|
5 |
+
* Alternative PHP functions for improved operations or compatibility with pre-existing functions that had param changes.
|
6 |
+
*
|
7 |
+
* @package All-in-One-SEO-Pack
|
8 |
+
* @since 3.4.0
|
9 |
+
*/
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Class AIOSEOP_PHP_Functions
|
13 |
+
*
|
14 |
+
* Access to these methods is done statically.
|
15 |
+
* Adding any additional methods for PHP functions should be reserved only for pre-existing functions.
|
16 |
+
* Any non-existing functions in older PHP versions should use `inc/compatibility/php-functions.php`.
|
17 |
+
*
|
18 |
+
* @since 3.4.0
|
19 |
+
*/
|
20 |
+
class AIOSEOP_PHP_Functions {
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Convert a string to lower case
|
24 |
+
* Compatible with mb_strtolower(), an UTF-8 friendly replacement for strtolower()
|
25 |
+
*
|
26 |
+
* @since ?
|
27 |
+
* @since 3.4.0 Change to static method.
|
28 |
+
*
|
29 |
+
* @param string $str
|
30 |
+
* @return string
|
31 |
+
*/
|
32 |
+
public static function strtolower( $str ) {
|
33 |
+
return AIOSEOP_PHP_Functions::convert_case( $str, 'lower' );
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* Convert a string to upper case
|
38 |
+
* Compatible with mb_strtoupper(), an UTF-8 friendly replacement for strtoupper()
|
39 |
+
*
|
40 |
+
* @since ?
|
41 |
+
* @since 3.4.0 Change to static method.
|
42 |
+
*
|
43 |
+
* @param string $str
|
44 |
+
* @return string
|
45 |
+
*/
|
46 |
+
public static function strtoupper( $str ) {
|
47 |
+
return AIOSEOP_PHP_Functions::convert_case( $str, 'upper' );
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Convert a string to title case
|
52 |
+
* Compatible with mb_convert_case(), an UTF-8 friendly replacement for ucwords()
|
53 |
+
*
|
54 |
+
* @since ?
|
55 |
+
* @since 3.4.0 Change to static method.
|
56 |
+
*
|
57 |
+
* @param string $str
|
58 |
+
* @return string
|
59 |
+
*/
|
60 |
+
public static function ucwords( $str ) {
|
61 |
+
return AIOSEOP_PHP_Functions::convert_case( $str, 'title' );
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Case conversion; handle non UTF-8 encodings and fallback **
|
66 |
+
*
|
67 |
+
* @since ?
|
68 |
+
* @since 3.4.0 Change to static method.
|
69 |
+
*
|
70 |
+
* @param string $str
|
71 |
+
* @param string $mode
|
72 |
+
* @return string
|
73 |
+
*/
|
74 |
+
private static function convert_case( $str, $mode = 'upper' ) {
|
75 |
+
static $charset = null;
|
76 |
+
if ( null == $charset ) {
|
77 |
+
$charset = get_bloginfo( 'charset' );
|
78 |
+
}
|
79 |
+
$str = (string) $str;
|
80 |
+
if ( 'title' == $mode ) {
|
81 |
+
if ( function_exists( 'mb_convert_case' ) ) {
|
82 |
+
return mb_convert_case( $str, MB_CASE_TITLE, $charset );
|
83 |
+
} else {
|
84 |
+
return ucwords( $str );
|
85 |
+
}
|
86 |
+
}
|
87 |
+
|
88 |
+
if ( 'UTF-8' == $charset ) {
|
89 |
+
// phpcs:disable WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
|
90 |
+
global $UTF8_TABLES;
|
91 |
+
include_once( AIOSEOP_PLUGIN_DIR . 'inc/aioseop_UTF8.php' );
|
92 |
+
if ( is_array( $UTF8_TABLES ) ) {
|
93 |
+
if ( 'upper' == $mode ) {
|
94 |
+
return strtr( $str, $UTF8_TABLES['strtoupper'] );
|
95 |
+
}
|
96 |
+
if ( 'lower' == $mode ) {
|
97 |
+
return strtr( $str, $UTF8_TABLES['strtolower'] );
|
98 |
+
}
|
99 |
+
}
|
100 |
+
// phpcs:enable
|
101 |
+
}
|
102 |
+
|
103 |
+
if ( 'upper' == $mode ) {
|
104 |
+
if ( function_exists( 'mb_strtoupper' ) ) {
|
105 |
+
return mb_strtoupper( $str, $charset );
|
106 |
+
} else {
|
107 |
+
return strtoupper( $str );
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
if ( 'lower' == $mode ) {
|
112 |
+
if ( function_exists( 'mb_strtolower' ) ) {
|
113 |
+
return mb_strtolower( $str, $charset );
|
114 |
+
} else {
|
115 |
+
return strtolower( $str );
|
116 |
+
}
|
117 |
+
}
|
118 |
+
|
119 |
+
return $str;
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Wrapper for strlen() - uses mb_strlen() if possible.
|
124 |
+
*
|
125 |
+
* @since ?
|
126 |
+
* @since 3.4.0 Change to static method.
|
127 |
+
*
|
128 |
+
* @param $string
|
129 |
+
* @return int
|
130 |
+
*/
|
131 |
+
public static function strlen( $string ) {
|
132 |
+
if ( function_exists( 'mb_strlen' ) ) {
|
133 |
+
return mb_strlen( $string, 'UTF-8' );
|
134 |
+
}
|
135 |
+
|
136 |
+
return strlen( $string );
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Wrapper for substr() - uses mb_substr() if possible.
|
141 |
+
*
|
142 |
+
* @since ?
|
143 |
+
* @since 3.4.0 Change to static method.
|
144 |
+
*
|
145 |
+
* @param $string
|
146 |
+
* @param int $start
|
147 |
+
* @param int $length
|
148 |
+
* @return mixed
|
149 |
+
*/
|
150 |
+
public static function substr( $string, $start = 0, $length = 2147483647 ) {
|
151 |
+
$args = func_get_args();
|
152 |
+
if ( function_exists( 'mb_substr' ) ) {
|
153 |
+
return call_user_func_array( 'mb_substr', $args );
|
154 |
+
}
|
155 |
+
|
156 |
+
return call_user_func_array( 'substr', $args );
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* Wrapper for strpos() - uses mb_strpos() if possible.
|
161 |
+
*
|
162 |
+
* @since ?
|
163 |
+
* @since 3.4.0 Change to static method.
|
164 |
+
*
|
165 |
+
* @param $haystack
|
166 |
+
* @param string $needle
|
167 |
+
* @param int $offset
|
168 |
+
* @return bool|int
|
169 |
+
*/
|
170 |
+
public static function strpos( $haystack, $needle, $offset = 0 ) {
|
171 |
+
if ( function_exists( 'mb_strpos' ) ) {
|
172 |
+
return mb_strpos( $haystack, $needle, $offset, 'UTF-8' );
|
173 |
+
}
|
174 |
+
|
175 |
+
return strpos( $haystack, $needle, $offset );
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* Wrapper for strrpos() - uses mb_strrpos() if possible.
|
180 |
+
*
|
181 |
+
* @since ?
|
182 |
+
* @since 3.4.0 Change to static method.
|
183 |
+
*
|
184 |
+
* @param $haystack
|
185 |
+
* @param string $needle
|
186 |
+
* @param int $offset
|
187 |
+
* @return bool|int
|
188 |
+
*/
|
189 |
+
public static function strrpos( $haystack, $needle, $offset = 0 ) {
|
190 |
+
if ( function_exists( 'mb_strrpos' ) ) {
|
191 |
+
return mb_strrpos( $haystack, $needle, $offset, 'UTF-8' );
|
192 |
+
}
|
193 |
+
|
194 |
+
return strrpos( $haystack, $needle, $offset );
|
195 |
+
}
|
196 |
+
}
|
inc/compatibility/compat-wpml.php
CHANGED
@@ -13,7 +13,7 @@ if ( ! class_exists( 'All_in_One_SEO_Pack_Wpml' ) ) {
|
|
13 |
* @link https://wpml.org/
|
14 |
* @package All-in-One-SEO-Pack
|
15 |
* @author Alejandro Mostajo
|
16 |
-
* @copyright
|
17 |
* @version 2.3.13
|
18 |
*/
|
19 |
class All_in_One_SEO_Pack_Wpml extends All_in_One_SEO_Pack_Compatible {
|
13 |
* @link https://wpml.org/
|
14 |
* @package All-in-One-SEO-Pack
|
15 |
* @author Alejandro Mostajo
|
16 |
+
* @copyright All in One SEO <https://semperplugins.com/>
|
17 |
* @version 2.3.13
|
18 |
*/
|
19 |
class All_in_One_SEO_Pack_Wpml extends All_in_One_SEO_Pack_Compatible {
|
inc/compatibility/gutenberg-chrome.php
CHANGED
@@ -13,7 +13,7 @@ aioseop_chrome_fix_overlapping_metabox();
|
|
13 |
* Fixes a CSS compatibility issue between Gutenberg and Chrome v77 that affects meta boxes.
|
14 |
*
|
15 |
* @see https://github.com/WordPress/gutenberg/issues/17406
|
16 |
-
* @link https://github.com/
|
17 |
*
|
18 |
* @since 3.2.8
|
19 |
*
|
@@ -36,7 +36,7 @@ function aioseop_chrome_fix_overlapping_metabox() {
|
|
36 |
* Change height of a specific Gutenberg CSS class.
|
37 |
*
|
38 |
* @see https://github.com/WordPress/gutenberg/issues/17406
|
39 |
-
* @link https://github.com/
|
40 |
*
|
41 |
* @since 3.2.8
|
42 |
*
|
13 |
* Fixes a CSS compatibility issue between Gutenberg and Chrome v77 that affects meta boxes.
|
14 |
*
|
15 |
* @see https://github.com/WordPress/gutenberg/issues/17406
|
16 |
+
* @link https://github.com/awesomemotive/all-in-one-seo-pack/issues/2914
|
17 |
*
|
18 |
* @since 3.2.8
|
19 |
*
|
36 |
* Change height of a specific Gutenberg CSS class.
|
37 |
*
|
38 |
* @see https://github.com/WordPress/gutenberg/issues/17406
|
39 |
+
* @link https://github.com/awesomemotive/all-in-one-seo-pack/issues/2914
|
40 |
*
|
41 |
* @since 3.2.8
|
42 |
*
|
inc/schema/aioseop-context.php
ADDED
@@ -0,0 +1,877 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Context Handler
|
4 |
+
*
|
5 |
+
* @package All_in_One_SEO_Pack
|
6 |
+
*/
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Website Context Handler.
|
10 |
+
*
|
11 |
+
* Handles data from multiple WordPress classes which contain content, structure, and properties.
|
12 |
+
*
|
13 |
+
* Multiton (Multi-Singleton)
|
14 |
+
*
|
15 |
+
* @since 3.4.0
|
16 |
+
*/
|
17 |
+
class AIOSEOP_Context {
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Multi-Instances
|
21 |
+
*
|
22 |
+
* @since 3.4.0
|
23 |
+
*
|
24 |
+
* @var array $type {
|
25 |
+
* @type array $key {
|
26 |
+
* @type AIOSEOP_Context
|
27 |
+
* }
|
28 |
+
* }
|
29 |
+
*/
|
30 |
+
protected static $instances = array();
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Context Key (ID|slug).
|
34 |
+
*
|
35 |
+
* @since 3.4.0
|
36 |
+
*
|
37 |
+
* @var string
|
38 |
+
*/
|
39 |
+
public $context_type = '';
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Unique key for WP Objects
|
43 |
+
*
|
44 |
+
* Could be a numeric ID or a string Slug.
|
45 |
+
*
|
46 |
+
* @since 3.4.0
|
47 |
+
*
|
48 |
+
* @var string
|
49 |
+
*/
|
50 |
+
public $context_key = '';
|
51 |
+
|
52 |
+
/**
|
53 |
+
* WP Class Properties
|
54 |
+
*
|
55 |
+
* Stores essential properties to query by or potentially reduce querying.
|
56 |
+
*
|
57 |
+
* These properties can also be used with `$context` param to query by.
|
58 |
+
*
|
59 |
+
* @since 3.4.0
|
60 |
+
*
|
61 |
+
* @var array {
|
62 |
+
* @type string $taxonomy (Optional) Terms limited to those matching `taxonomy`.
|
63 |
+
* Used with: WP_Terms.
|
64 |
+
* @type array|string $object_type Name(s) of the post type(s) the taxonomy object is registered for.
|
65 |
+
* Used with: WP_Taxonomy.
|
66 |
+
* @type string $user_login Username.
|
67 |
+
* Used with: WP_User.
|
68 |
+
* @type int $site_id Site ID.
|
69 |
+
* Used with: WP_User.
|
70 |
+
* }
|
71 |
+
*/
|
72 |
+
public $wp_props = array();
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Get Instance
|
76 |
+
*
|
77 |
+
* @since 3.4.0
|
78 |
+
*
|
79 |
+
* @param string|array|AIOSEOP_Context|WP_Site|WP_Post|WP_Post_Type|WP_Taxonomy|WP_Term|WP_User $context
|
80 |
+
* @return AIOSEOP_Context
|
81 |
+
*/
|
82 |
+
public static function get_instance( $context = '' ) {
|
83 |
+
$type = self::get_context_type( $context );
|
84 |
+
$key = self::get_context_key( $context, $type );
|
85 |
+
$props = self::get_wp_props( $context, $type, $key );
|
86 |
+
|
87 |
+
if ( ! isset( self::$instances[ $type ] ) ) {
|
88 |
+
self::$instances[ $type ] = array();
|
89 |
+
}
|
90 |
+
if ( ! isset( self::$instances[ $type ][ $key ] ) ) {
|
91 |
+
if ( ! $context instanceof $type ) {
|
92 |
+
$context = self::get_object( $type, $key, $props );
|
93 |
+
}
|
94 |
+
|
95 |
+
self::$instances[ $type ][ $key ] = new self( $context );
|
96 |
+
}
|
97 |
+
|
98 |
+
return self::$instances[ $type ][ $key ];
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* AIOSEOP_Context constructor.
|
103 |
+
*
|
104 |
+
* @since 3.4.0
|
105 |
+
*
|
106 |
+
* @param string $context
|
107 |
+
*/
|
108 |
+
protected function __construct( $context = '' ) {
|
109 |
+
$type = self::get_context_type( $context );
|
110 |
+
$this->context_type = $type;
|
111 |
+
$key = self::get_context_key( $context, $type );
|
112 |
+
$this->context_key = $key;
|
113 |
+
$props = self::get_wp_props( $context, $type, $key );
|
114 |
+
$this->wp_props = $props;
|
115 |
+
}
|
116 |
+
|
117 |
+
/**
|
118 |
+
* Get current is_*() state.
|
119 |
+
*
|
120 |
+
* @since 3.4.0
|
121 |
+
*
|
122 |
+
* @return string
|
123 |
+
*/
|
124 |
+
public static function get_is() {
|
125 |
+
$state_is = '';
|
126 |
+
if ( is_front_page() || is_home() ) {
|
127 |
+
global $wp_query;
|
128 |
+
|
129 |
+
if ( $wp_query->is_front_page() ) {
|
130 |
+
$state_is = 'front_page';
|
131 |
+
} elseif ( $wp_query->is_posts_page ) {
|
132 |
+
$state_is = 'posts_page';
|
133 |
+
} else {
|
134 |
+
$state_is = 'home'; // Static front page.
|
135 |
+
}
|
136 |
+
} elseif ( is_archive() ) {
|
137 |
+
if ( is_author() ) {
|
138 |
+
$state_is = 'author_archive';
|
139 |
+
} elseif ( is_post_type_archive() ) {
|
140 |
+
$state_is = 'post_type_archive';
|
141 |
+
} elseif ( is_tax() || is_category() || is_tag() ) {
|
142 |
+
$state_is = 'taxonomy_term_archive';
|
143 |
+
} elseif ( is_date() ) {
|
144 |
+
$state_is = 'date_archive';
|
145 |
+
if ( is_year() ) {
|
146 |
+
$state_is = 'year_date_archive';
|
147 |
+
} elseif ( is_month() ) {
|
148 |
+
$state_is = 'month_date_archive';
|
149 |
+
} elseif ( is_day() ) {
|
150 |
+
$state_is = 'day_date_archive';
|
151 |
+
}
|
152 |
+
}
|
153 |
+
} elseif ( is_singular() || is_single() ) {
|
154 |
+
$post = get_post();
|
155 |
+
|
156 |
+
$state_is = 'single_post';
|
157 |
+
if ( is_post_type_hierarchical( $post->post_type ) ) {
|
158 |
+
$state_is = 'single_page';
|
159 |
+
} elseif ( is_attachment() ) {
|
160 |
+
$state_is = 'single_attachment';
|
161 |
+
}
|
162 |
+
} elseif ( is_search() ) {
|
163 |
+
$state_is = 'search';
|
164 |
+
} elseif ( is_attachment() ) {
|
165 |
+
$state_is = 'attachment';
|
166 |
+
} elseif ( is_404() ) {
|
167 |
+
$state_is = '404';
|
168 |
+
}
|
169 |
+
|
170 |
+
return $state_is;
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Get Object Type of Context
|
175 |
+
*
|
176 |
+
* @since 3.4.0
|
177 |
+
*
|
178 |
+
* @param string $context
|
179 |
+
* @return string
|
180 |
+
*/
|
181 |
+
public static function get_context_type( $context = '' ) {
|
182 |
+
if ( is_array( $context ) && isset( $context['context_type'] ) ) {
|
183 |
+
if ( 'WP_Site' === $context['context_type'] && ! class_exists( 'WP_Site' ) ) {
|
184 |
+
$context['context_type'] = 'var_site';
|
185 |
+
}
|
186 |
+
return $context['context_type'];
|
187 |
+
} elseif ( $context instanceof AIOSEOP_Context || ! empty( $context->context_type ) ) {
|
188 |
+
if ( 'WP_Site' === $context->context_type && ! class_exists( 'WP_Site' ) ) {
|
189 |
+
$context->context_type = 'var_site';
|
190 |
+
}
|
191 |
+
return $context->context_type;
|
192 |
+
}
|
193 |
+
|
194 |
+
$obj_type = '';
|
195 |
+
if ( $context instanceof WP_Network ) {
|
196 |
+
$obj_type = 'WP_Site';
|
197 |
+
} elseif ( $context instanceof WP_Site ) {
|
198 |
+
$obj_type = 'WP_Site';
|
199 |
+
} elseif ( $context instanceof WP_Post_Type ) {
|
200 |
+
$obj_type = 'WP_Post_Type';
|
201 |
+
} elseif ( $context instanceof WP_Taxonomy ) {
|
202 |
+
$obj_type = 'WP_Taxonomy';
|
203 |
+
} elseif ( $context instanceof WP_Term ) {
|
204 |
+
$obj_type = 'WP_Term';
|
205 |
+
} elseif ( $context instanceof WP_Post ) {
|
206 |
+
$obj_type = 'WP_Post';
|
207 |
+
} elseif ( $context instanceof WP_User ) {
|
208 |
+
$obj_type = 'WP_User';
|
209 |
+
}
|
210 |
+
|
211 |
+
// If context isn't a WP object, or is empty, then set by current is_*() condition.
|
212 |
+
if ( empty( $obj_type ) ) {
|
213 |
+
$current_is = self::get_is();
|
214 |
+
|
215 |
+
switch ( $current_is ) {
|
216 |
+
case 'front_page':
|
217 |
+
if ( is_multisite() ) {
|
218 |
+
$obj_type = 'WP_Site';
|
219 |
+
} else {
|
220 |
+
$obj_type = 'var_site';
|
221 |
+
}
|
222 |
+
break;
|
223 |
+
|
224 |
+
case 'author_archive':
|
225 |
+
$obj_type = 'WP_User';
|
226 |
+
break;
|
227 |
+
|
228 |
+
case 'post_type_archive':
|
229 |
+
$obj_type = 'WP_Post_Type';
|
230 |
+
break;
|
231 |
+
|
232 |
+
case 'taxonomy_term_archive':
|
233 |
+
$obj_type = 'WP_Term';
|
234 |
+
break;
|
235 |
+
|
236 |
+
case 'home':
|
237 |
+
case 'posts_page':
|
238 |
+
case 'single_page':
|
239 |
+
case 'single_post':
|
240 |
+
case 'single_attachment':
|
241 |
+
case 'attachment':
|
242 |
+
$obj_type = 'WP_Post';
|
243 |
+
break;
|
244 |
+
|
245 |
+
case 'date_archive':
|
246 |
+
$obj_type = 'var_date';
|
247 |
+
break;
|
248 |
+
|
249 |
+
case 'year_date_archive':
|
250 |
+
$obj_type = 'var_date_year';
|
251 |
+
break;
|
252 |
+
|
253 |
+
case 'month_date_archive':
|
254 |
+
$obj_type = 'var_date_month';
|
255 |
+
break;
|
256 |
+
|
257 |
+
case 'day_date_archive':
|
258 |
+
$obj_type = 'var_date_day';
|
259 |
+
break;
|
260 |
+
|
261 |
+
case 'search':
|
262 |
+
$obj_type = 'var_search';
|
263 |
+
break;
|
264 |
+
|
265 |
+
case '404':
|
266 |
+
// TODO Find current object.
|
267 |
+
break;
|
268 |
+
}
|
269 |
+
}
|
270 |
+
|
271 |
+
return $obj_type;
|
272 |
+
}
|
273 |
+
|
274 |
+
/**
|
275 |
+
* Get (WP) Object ID
|
276 |
+
*
|
277 |
+
* Searches for an object's ID, if there is not an ID then the current ID available is fetched.
|
278 |
+
* This would also contain majority of the query operations for (individual) objects since this
|
279 |
+
* is a Unique Key for a given class type; wp_props is also used to refine a query.
|
280 |
+
*
|
281 |
+
* @since 3.4.0
|
282 |
+
*
|
283 |
+
* @param $context
|
284 |
+
* @param string $type
|
285 |
+
* @return int
|
286 |
+
*/
|
287 |
+
public static function get_context_key( $context, $type = '' ) {
|
288 |
+
if ( is_array( $context ) && isset( $context['context_key'] ) ) {
|
289 |
+
return $context['context_key'];
|
290 |
+
} elseif ( $context instanceof AIOSEOP_Context || ! empty( $context->context_key ) ) {
|
291 |
+
return $context->context_key;
|
292 |
+
}
|
293 |
+
|
294 |
+
$key = 0;
|
295 |
+
if ( empty( $type ) ) {
|
296 |
+
$type = self::get_context_type( $context );
|
297 |
+
}
|
298 |
+
switch ( $type ) {
|
299 |
+
case 'var_site':
|
300 |
+
$key = 0;
|
301 |
+
break;
|
302 |
+
|
303 |
+
case 'WP_Site':
|
304 |
+
if ( $context instanceof WP_Site ) {
|
305 |
+
$key = $context->blog_id;
|
306 |
+
} else {
|
307 |
+
$key = get_current_blog_id();
|
308 |
+
}
|
309 |
+
break;
|
310 |
+
|
311 |
+
case 'WP_Post':
|
312 |
+
if ( ! $context instanceof WP_Post ) {
|
313 |
+
if ( 'posts_page' === self::get_is() ) {
|
314 |
+
$context = get_queried_object();
|
315 |
+
} else {
|
316 |
+
global $post;
|
317 |
+
$context = $post;
|
318 |
+
}
|
319 |
+
}
|
320 |
+
$key = $context->ID;
|
321 |
+
break;
|
322 |
+
|
323 |
+
case 'WP_Taxonomy':
|
324 |
+
if ( ! $context instanceof WP_Taxonomy ) {
|
325 |
+
get_queried_object();
|
326 |
+
}
|
327 |
+
$key = $context->name;
|
328 |
+
break;
|
329 |
+
|
330 |
+
case 'WP_Term':
|
331 |
+
if ( ! $context instanceof WP_Term ) {
|
332 |
+
$context = get_queried_object();
|
333 |
+
}
|
334 |
+
$key = $context->term_id;
|
335 |
+
break;
|
336 |
+
|
337 |
+
case 'WP_User':
|
338 |
+
if ( $context instanceof WP_User ) {
|
339 |
+
$key = $context->ID;
|
340 |
+
break;
|
341 |
+
}
|
342 |
+
|
343 |
+
if ( is_array( $context ) && is_array( $context['wp_props'] ) ) {
|
344 |
+
if ( ! empty( $context['wp_props']['user_nicename'] ) ) {
|
345 |
+
$context = get_user_by( 'slug', $context['wp_props']['user_nicename'] );
|
346 |
+
} elseif ( ! empty( $context['wp_props']['user_email'] ) ) {
|
347 |
+
$context = get_user_by( 'email', $context['wp_props']['user_email'] );
|
348 |
+
} elseif ( ! empty( $context['wp_props']['user_login'] ) ) {
|
349 |
+
$context = get_user_by( 'login', $context['wp_props']['user_login'] );
|
350 |
+
}
|
351 |
+
}
|
352 |
+
|
353 |
+
if ( $context instanceof WP_User ) {
|
354 |
+
$key = $context->ID;
|
355 |
+
} else {
|
356 |
+
// Current author/user page on frontend.
|
357 |
+
$key = get_the_author_meta( 'ID' );
|
358 |
+
}
|
359 |
+
break;
|
360 |
+
|
361 |
+
default:
|
362 |
+
// Do stuff.
|
363 |
+
}
|
364 |
+
|
365 |
+
return $key;
|
366 |
+
}
|
367 |
+
|
368 |
+
/**
|
369 |
+
* Get (Required/Requested) WP Object Fields
|
370 |
+
*
|
371 |
+
* @since 3.4.0
|
372 |
+
*
|
373 |
+
* @param mixed $context
|
374 |
+
* @param string $type
|
375 |
+
* @param string $key
|
376 |
+
* @return array|mixed
|
377 |
+
*/
|
378 |
+
public static function get_wp_props( $context, $type = '', $key = '' ) {
|
379 |
+
$wp_props = array();
|
380 |
+
if ( empty( $type ) ) {
|
381 |
+
$type = self::get_context_type( $context );
|
382 |
+
}
|
383 |
+
if ( empty( $key ) && 0 !== $key ) {
|
384 |
+
$key = self::get_context_key( $context, $type );
|
385 |
+
}
|
386 |
+
|
387 |
+
if ( is_array( $context ) && isset( $context['wp_props'] ) ) {
|
388 |
+
$wp_props = $context['wp_props'];
|
389 |
+
} elseif ( $context instanceof AIOSEOP_Context || ! empty( $context->wp_props ) ) {
|
390 |
+
$wp_props = $context->wp_props;
|
391 |
+
}
|
392 |
+
|
393 |
+
$object = new stdClass();
|
394 |
+
switch ( $type ) {
|
395 |
+
case 'WP_Taxonomy':
|
396 |
+
$object = self::get_object( $type, $key, $wp_props );
|
397 |
+
$wp_props['object_type'] = $object->object_type;
|
398 |
+
break;
|
399 |
+
case 'WP_Term':
|
400 |
+
// $object = self::get_object( $type, $key, $wp_props );
|
401 |
+
// $wp_props['taxonomy'] = $object->taxonomy;
|
402 |
+
break;
|
403 |
+
case 'WP_User':
|
404 |
+
$object = self::get_object( $type, $key, $wp_props );
|
405 |
+
// $wp_props['user_login'] = $object->user_login;
|
406 |
+
$wp_props['site_id'] = $object->site_id;
|
407 |
+
break;
|
408 |
+
}
|
409 |
+
|
410 |
+
// Also get only the object properties that match in $context['wp_props'] | $context->wp_props.
|
411 |
+
foreach ( $wp_props as $key => $value ) {
|
412 |
+
if ( isset( $object->$key ) ) {
|
413 |
+
$wp_props[ $key ] = $object->$key;
|
414 |
+
}
|
415 |
+
}
|
416 |
+
|
417 |
+
return $wp_props;
|
418 |
+
}
|
419 |
+
|
420 |
+
/**
|
421 |
+
* Get Object
|
422 |
+
*
|
423 |
+
* @since 3.4.0
|
424 |
+
*
|
425 |
+
* @param string $type WP object type.
|
426 |
+
* @param string $key Integer or slug.
|
427 |
+
* @param array $args
|
428 |
+
* @return false|WP_Site|WP_Post|WP_Post_Type|WP_Taxonomy|WP_Term|WP_User
|
429 |
+
*/
|
430 |
+
public static function get_object( $type, $key, $args = array() ) {
|
431 |
+
$object = false;
|
432 |
+
switch ( $type ) {
|
433 |
+
case 'var_site':
|
434 |
+
case 'var_date':
|
435 |
+
case 'var_date_year':
|
436 |
+
case 'var_date_month':
|
437 |
+
case 'var_date_day':
|
438 |
+
$object = array(
|
439 |
+
'context_type' => $type,
|
440 |
+
'context_key' => $key,
|
441 |
+
);
|
442 |
+
break;
|
443 |
+
|
444 |
+
case 'WP_Site':
|
445 |
+
/*
|
446 |
+
* PHP 5.2 conflict. Could merge WP_Site & WP_Post together after WP 5.1 becomes the required version.
|
447 |
+
*
|
448 |
+
* Change to...
|
449 |
+
* $object = $type::get_instance( $key );
|
450 |
+
*/
|
451 |
+
|
452 |
+
$object = WP_Site::get_instance( $key );
|
453 |
+
break;
|
454 |
+
|
455 |
+
case 'WP_Post':
|
456 |
+
$object = WP_Post::get_instance( $key );
|
457 |
+
break;
|
458 |
+
|
459 |
+
case 'WP_Taxonomy':
|
460 |
+
$object_type = isset( $args['object_type'] ) ? $args['object_type'] : 'post';
|
461 |
+
$object = new WP_Taxonomy( $key, $object_type );
|
462 |
+
break;
|
463 |
+
|
464 |
+
case 'WP_Term':
|
465 |
+
$taxonomy = isset( $args['taxonomy'] ) ? $args['taxonomy'] : null;
|
466 |
+
$object = WP_Term::get_instance( $key, $taxonomy );
|
467 |
+
break;
|
468 |
+
|
469 |
+
case 'WP_User':
|
470 |
+
$name = isset( $args['user_login'] ) ? $args['user_login'] : '';
|
471 |
+
$site_id = isset( $args['site_id'] ) ? $args['site_id'] : '';
|
472 |
+
$object = new WP_User( $key, $name, $site_id );
|
473 |
+
break;
|
474 |
+
}
|
475 |
+
|
476 |
+
return $object;
|
477 |
+
}
|
478 |
+
|
479 |
+
/**
|
480 |
+
* Get Slug
|
481 |
+
*
|
482 |
+
* @since 3.4.0
|
483 |
+
*
|
484 |
+
* @return string
|
485 |
+
*/
|
486 |
+
public function get_slug() {
|
487 |
+
$slug = '';
|
488 |
+
$wp_obj = self::get_object( $this->context_type, $this->context_key, $this->wp_props );
|
489 |
+
switch ( $this->context_type ) {
|
490 |
+
case 'var_site':
|
491 |
+
break;
|
492 |
+
case 'WP_Post':
|
493 |
+
$slug = $wp_obj->post_name;
|
494 |
+
break;
|
495 |
+
case 'WP_Taxonomy':
|
496 |
+
$slug = $wp_obj->name;
|
497 |
+
break;
|
498 |
+
case 'WP_Term':
|
499 |
+
$slug = $wp_obj->slug;
|
500 |
+
break;
|
501 |
+
case 'WP_User':
|
502 |
+
$slug = $wp_obj->user_login;
|
503 |
+
break;
|
504 |
+
}
|
505 |
+
|
506 |
+
return $slug;
|
507 |
+
}
|
508 |
+
|
509 |
+
public function get_nicename() {}
|
510 |
+
|
511 |
+
/**
|
512 |
+
* Get Display Name
|
513 |
+
*
|
514 |
+
* @since 3.4.0
|
515 |
+
*
|
516 |
+
* @return string
|
517 |
+
*/
|
518 |
+
public function get_display_name() {
|
519 |
+
$display_name = '';
|
520 |
+
switch ( $this->context_type ) {
|
521 |
+
case 'var_site':
|
522 |
+
$display_name = get_bloginfo( 'name' );
|
523 |
+
break;
|
524 |
+
|
525 |
+
case 'WP_Site':
|
526 |
+
$wp_obj = self::get_object( $this->context_type, $this->context_key );
|
527 |
+
$display_name = $wp_obj->blogname;
|
528 |
+
break;
|
529 |
+
|
530 |
+
case 'WP_Post':
|
531 |
+
$wp_obj = self::get_object( $this->context_type, $this->context_key );
|
532 |
+
$display_name = $wp_obj->post_title;
|
533 |
+
break;
|
534 |
+
|
535 |
+
case 'WP_Term':
|
536 |
+
$wp_obj = self::get_object( $this->context_type, $this->context_key, $this->wp_props );
|
537 |
+
$display_name = $wp_obj->name;
|
538 |
+
break;
|
539 |
+
|
540 |
+
case 'WP_User':
|
541 |
+
$wp_obj = self::get_object( $this->context_type, $this->context_key, $this->wp_props );
|
542 |
+
$display_name = $wp_obj->display_name;
|
543 |
+
break;
|
544 |
+
|
545 |
+
case 'var_search':
|
546 |
+
$display_name = sprintf( __( 'Search results for \'%s\'', 'all-in-one-seo-pack' ), esc_html( get_search_query() ) );
|
547 |
+
break;
|
548 |
+
|
549 |
+
case 'var_date_year':
|
550 |
+
$display_name = sprintf( __( 'Year: %s', 'all-in-one-seo-pack' ), get_the_date( 'Y' ) );
|
551 |
+
break;
|
552 |
+
|
553 |
+
case 'var_date_month':
|
554 |
+
$display_name = sprintf( __( 'Month: %s', 'all-in-one-seo-pack' ), get_the_date( 'F Y' ) );
|
555 |
+
break;
|
556 |
+
|
557 |
+
case 'var_date_day':
|
558 |
+
case 'var_date':
|
559 |
+
$display_name = sprintf( __( 'Day: %s', 'all-in-one-seo-pack' ), get_the_date( 'F j, Y' ) );
|
560 |
+
break;
|
561 |
+
}
|
562 |
+
|
563 |
+
return $display_name;
|
564 |
+
}
|
565 |
+
|
566 |
+
/**
|
567 |
+
* Get URL (Page)
|
568 |
+
*
|
569 |
+
* Uses a static variable for performance faulty operations; only use with heavy operations.
|
570 |
+
*
|
571 |
+
* @since 3.4.0
|
572 |
+
*
|
573 |
+
* @return string
|
574 |
+
*/
|
575 |
+
public function get_url() {
|
576 |
+
static $s_url;
|
577 |
+
if ( is_null( $s_url ) ) {
|
578 |
+
$s_url = array();
|
579 |
+
}
|
580 |
+
if ( ! isset( $s_url[ $this->context_type ] ) || ! is_array( $s_url[ $this->context_type ] ) ) {
|
581 |
+
$s_url[ $this->context_type ] = array();
|
582 |
+
}
|
583 |
+
if ( ! empty( $s_url[ $this->context_type ][ $this->context_key ] ) ) {
|
584 |
+
return $s_url[ $this->context_type ][ $this->context_key ];
|
585 |
+
}
|
586 |
+
|
587 |
+
$url = '';
|
588 |
+
switch ( $this->context_type ) {
|
589 |
+
case 'var_site':
|
590 |
+
$url = home_url();
|
591 |
+
break;
|
592 |
+
|
593 |
+
case 'WP_Site':
|
594 |
+
$url = get_site_url( $this->context_key );
|
595 |
+
break;
|
596 |
+
|
597 |
+
case 'WP_Post':
|
598 |
+
$wp_obj = self::get_object( $this->context_type, $this->context_key );
|
599 |
+
|
600 |
+
if ( 'attachment' === $wp_obj->post_type ) {
|
601 |
+
// Source URL.
|
602 |
+
// May need to check setting for attachment redirect.
|
603 |
+
// Use $this->get_images() to get attachment link.
|
604 |
+
// $url = wp_get_attachment_url( $wp_obj->ID );
|
605 |
+
// (Attachment) Post URL.
|
606 |
+
$url = get_permalink( $wp_obj );
|
607 |
+
} else {
|
608 |
+
$url = wp_get_canonical_url( $wp_obj );
|
609 |
+
}
|
610 |
+
|
611 |
+
if ( false === $url ) {
|
612 |
+
$url = '';
|
613 |
+
}
|
614 |
+
|
615 |
+
$s_url[ $this->context_type ][ $this->context_key ] = $url;
|
616 |
+
break;
|
617 |
+
|
618 |
+
case 'WP_Taxonomy':
|
619 |
+
// Does not exist.
|
620 |
+
break;
|
621 |
+
|
622 |
+
case 'WP_Term':
|
623 |
+
$taxonomy = isset( $this->wp_props['taxonomy'] ) ? $this->wp_props['taxonomy'] : '';
|
624 |
+
$url = get_term_link( $this->context_key, $taxonomy );
|
625 |
+
|
626 |
+
$s_url[ $this->context_type ][ $this->context_key ] = $url;
|
627 |
+
break;
|
628 |
+
case 'WP_User':
|
629 |
+
$url = get_author_posts_url( $this->context_key );
|
630 |
+
break;
|
631 |
+
|
632 |
+
case 'var_search':
|
633 |
+
$url = get_search_link();
|
634 |
+
break;
|
635 |
+
|
636 |
+
case 'var_date_year':
|
637 |
+
$url = get_year_link( false );
|
638 |
+
break;
|
639 |
+
|
640 |
+
case 'var_date_month':
|
641 |
+
$url = get_month_link( false, false );
|
642 |
+
break;
|
643 |
+
|
644 |
+
case 'var_date_day':
|
645 |
+
case 'var_date':
|
646 |
+
$url = get_day_link( false, false, false );
|
647 |
+
break;
|
648 |
+
}
|
649 |
+
|
650 |
+
return $url;
|
651 |
+
}
|
652 |
+
|
653 |
+
/**
|
654 |
+
* Get Description
|
655 |
+
*
|
656 |
+
* @since 3.4.0
|
657 |
+
*
|
658 |
+
* @return string
|
659 |
+
*/
|
660 |
+
public function get_description() {
|
661 |
+
$desc = '';
|
662 |
+
|
663 |
+
switch ( $this->context_type ) {
|
664 |
+
case 'var_site':
|
665 |
+
$desc = get_bloginfo( 'description' );
|
666 |
+
break;
|
667 |
+
case 'WP_Term':
|
668 |
+
case 'WP_User':
|
669 |
+
$wp_obj = self::get_object( $this->context_type, $this->context_key, $this->wp_props );
|
670 |
+
$desc = $wp_obj->description;
|
671 |
+
break;
|
672 |
+
}
|
673 |
+
|
674 |
+
return $desc;
|
675 |
+
}
|
676 |
+
|
677 |
+
/**
|
678 |
+
* Get Image Context
|
679 |
+
*
|
680 |
+
* Returns Image ID (Context Key) if possible, and Image URL.
|
681 |
+
*
|
682 |
+
* This is used to get the Image WP_Post object via $context.
|
683 |
+
*
|
684 |
+
* attachment post parent.
|
685 |
+
* registered images to post.
|
686 |
+
* post content.
|
687 |
+
*
|
688 |
+
* @param string|array
|
689 |
+
* @return array {
|
690 |
+
* @type int|string $id
|
691 |
+
* @type string $url
|
692 |
+
* }
|
693 |
+
*/
|
694 |
+
public function get_images( $sources = 'all' ) {
|
695 |
+
$image = array();
|
696 |
+
switch ( $this->context_type ) {
|
697 |
+
case 'WP_Post':
|
698 |
+
$wp_obj = self::get_object( $this->context_type, $this->context_key );
|
699 |
+
if ( 'attachment' === $wp_obj->post_type ) {
|
700 |
+
$images['attachments'][] = array(
|
701 |
+
'id' => $wp_obj->ID,
|
702 |
+
'url' => wp_get_attachment_url( $wp_obj->ID ),
|
703 |
+
);
|
704 |
+
}
|
705 |
+
|
706 |
+
$media_list = get_attached_media( 'image', $wp_obj );
|
707 |
+
|
708 |
+
break;
|
709 |
+
}
|
710 |
+
}
|
711 |
+
|
712 |
+
/**
|
713 |
+
* Get Breadcrumb
|
714 |
+
*
|
715 |
+
* @since 3.4.0
|
716 |
+
*
|
717 |
+
* @return array {
|
718 |
+
* @type array $index {
|
719 |
+
* @type int $position
|
720 |
+
* @type string $title
|
721 |
+
* @type string $url
|
722 |
+
* }
|
723 |
+
* }
|
724 |
+
*/
|
725 |
+
public function get_breadcrumb() {
|
726 |
+
$rtn_list = array();
|
727 |
+
// WP_Post & WP_Terms could be merged once a parent_id() method is created.
|
728 |
+
$context = $this;
|
729 |
+
switch ( $this->context_type ) {
|
730 |
+
case 'var_site':
|
731 |
+
case 'WP_Site':
|
732 |
+
// Site data added at last.
|
733 |
+
break;
|
734 |
+
|
735 |
+
case 'WP_Post':
|
736 |
+
$object = self::get_object( $this->context_type, $this->context_key );
|
737 |
+
while ( ! empty( $object->post_parent ) ) {
|
738 |
+
array_unshift(
|
739 |
+
$rtn_list,
|
740 |
+
array(
|
741 |
+
'name' => $context->get_display_name(),
|
742 |
+
'url' => $context->get_url(),
|
743 |
+
)
|
744 |
+
);
|
745 |
+
|
746 |
+
$context = array(
|
747 |
+
'context_type' => $context->context_type,
|
748 |
+
'context_key' => $object->post_parent, // Create get_parent().
|
749 |
+
);
|
750 |
+
$context = self::get_instance( $context );
|
751 |
+
$object = self::get_object( $context->context_type, $context->context_key );
|
752 |
+
}
|
753 |
+
array_unshift(
|
754 |
+
$rtn_list,
|
755 |
+
array(
|
756 |
+
'name' => $context->get_display_name(),
|
757 |
+
'url' => $context->get_url(),
|
758 |
+
)
|
759 |
+
);
|
760 |
+
break;
|
761 |
+
|
762 |
+
case 'WP_Taxonomy':
|
763 |
+
// No URL destination exists to trigger this.
|
764 |
+
break;
|
765 |
+
|
766 |
+
case 'WP_Term':
|
767 |
+
$object = self::get_object( $context->context_type, $context->context_key, $context->wp_props );
|
768 |
+
while ( ! empty( $object->parent ) ) {
|
769 |
+
array_unshift(
|
770 |
+
$rtn_list,
|
771 |
+
array(
|
772 |
+
'name' => $context->get_display_name(),
|
773 |
+
'url' => $context->get_url(),
|
774 |
+
)
|
775 |
+
);
|
776 |
+
|
777 |
+
$context = array(
|
778 |
+
'context_type' => $context->context_type,
|
779 |
+
'context_key' => $object->parent, // Create get_parent().
|
780 |
+
'wp_props' => $context->wp_props,
|
781 |
+
);
|
782 |
+
$context = self::get_instance( $context );
|
783 |
+
$object = self::get_object( $context->context_type, $context->context_key, $context->wp_props );
|
784 |
+
}
|
785 |
+
array_unshift(
|
786 |
+
$rtn_list,
|
787 |
+
array(
|
788 |
+
'name' => $context->get_display_name(),
|
789 |
+
'url' => $context->get_url(),
|
790 |
+
)
|
791 |
+
);
|
792 |
+
break;
|
793 |
+
|
794 |
+
case 'var_date':
|
795 |
+
case 'var_date_day':
|
796 |
+
array_unshift(
|
797 |
+
$rtn_list,
|
798 |
+
array(
|
799 |
+
'name' => $context->get_display_name(),
|
800 |
+
'url' => $context->get_url(),
|
801 |
+
)
|
802 |
+
);
|
803 |
+
$context = array(
|
804 |
+
'context_type' => 'var_date_month',
|
805 |
+
'context_key' => 0,
|
806 |
+
);
|
807 |
+
$context = AIOSEOP_Context::get_instance( $context );
|
808 |
+
// Fall through.
|
809 |
+
case 'var_date_month':
|
810 |
+
array_unshift(
|
811 |
+
$rtn_list,
|
812 |
+
array(
|
813 |
+
'name' => $context->get_display_name(),
|
814 |
+
'url' => $context->get_url(),
|
815 |
+
)
|
816 |
+
);
|
817 |
+
$context = array(
|
818 |
+
'context_type' => 'var_date_year',
|
819 |
+
'context_key' => 0,
|
820 |
+
);
|
821 |
+
$context = AIOSEOP_Context::get_instance( $context );
|
822 |
+
// Fall through.
|
823 |
+
case 'var_date_year':
|
824 |
+
case 'WP_User':
|
825 |
+
case 'var_search':
|
826 |
+
array_unshift(
|
827 |
+
$rtn_list,
|
828 |
+
array(
|
829 |
+
'name' => $context->get_display_name(),
|
830 |
+
'url' => $context->get_url(),
|
831 |
+
)
|
832 |
+
);
|
833 |
+
break;
|
834 |
+
}
|
835 |
+
|
836 |
+
// Add Homepage as root/base.
|
837 |
+
$site_context = array();
|
838 |
+
if ( is_multisite() ) {
|
839 |
+
$site_context['context_type'] = 'WP_Site';
|
840 |
+
$site_context['context_key'] = get_current_blog_id();
|
841 |
+
} else {
|
842 |
+
$site_context['context_type'] = 'var_site';
|
843 |
+
$site_context['context_key'] = 0;
|
844 |
+
}
|
845 |
+
$site_context = self::get_instance( $site_context );
|
846 |
+
|
847 |
+
global $aioseop_options;
|
848 |
+
$title = $aioseop_options['aiosp_home_title'];
|
849 |
+
if ( empty( $title ) ) {
|
850 |
+
$title = $site_context->get_display_name();
|
851 |
+
}
|
852 |
+
if ( empty( $title ) ) {
|
853 |
+
preg_match(
|
854 |
+
'/^(?:https|http)(?:\:\/\/)(?:www\.)?([a-zA-Z0-9-]+\.)?([a-zA-Z0-9-]+)(?:\.[a-z]+\/|\.[a-z]+)$/',
|
855 |
+
$site_context->get_url(),
|
856 |
+
$matches
|
857 |
+
);
|
858 |
+
$title = $matches[1] . $matches[2];
|
859 |
+
}
|
860 |
+
|
861 |
+
array_unshift(
|
862 |
+
$rtn_list,
|
863 |
+
array(
|
864 |
+
'name' => $title,
|
865 |
+
'url' => $site_context->get_url() . '/',
|
866 |
+
)
|
867 |
+
);
|
868 |
+
|
869 |
+
// Add position values.
|
870 |
+
foreach ( $rtn_list as $index => &$item ) {
|
871 |
+
$item['position'] = $index + 1;
|
872 |
+
}
|
873 |
+
|
874 |
+
return $rtn_list;
|
875 |
+
}
|
876 |
+
|
877 |
+
}
|
inc/schema/graphs/graph-breadcrumblist.php
ADDED
@@ -0,0 +1,150 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Schema Graph BreadcrumbList Class
|
4 |
+
*
|
5 |
+
* Acts as the Breadcrumb List class for Schema BreadcrumbList.
|
6 |
+
*
|
7 |
+
* @package All_in_One_SEO_Pack
|
8 |
+
*/
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Class AIOSEOP_Graph_BreadcrumbList
|
12 |
+
*
|
13 |
+
* @see Schema BreadcrumbList
|
14 |
+
* @link https://schema.org/BreadcrumbList
|
15 |
+
*/
|
16 |
+
class AIOSEOP_Graph_BreadcrumbList extends AIOSEOP_Graph_ItemList {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Get Graph Slug.
|
20 |
+
*
|
21 |
+
* @since 3.4.0
|
22 |
+
*
|
23 |
+
* @return string
|
24 |
+
*/
|
25 |
+
protected function get_slug() {
|
26 |
+
return 'BreadcrumbList';
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Get Graph Name.
|
31 |
+
*
|
32 |
+
* Intended for frontend use when displaying which schema graphs are available.
|
33 |
+
*
|
34 |
+
* @since 3.4.0
|
35 |
+
*
|
36 |
+
* @return string
|
37 |
+
*/
|
38 |
+
protected function get_name() {
|
39 |
+
return 'Breadcrumb List';
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Prepare data.
|
44 |
+
*
|
45 |
+
* @since 3.4.0
|
46 |
+
*
|
47 |
+
* @return array
|
48 |
+
*/
|
49 |
+
protected function prepare( $data = array() ) {
|
50 |
+
$context = AIOSEOP_Context::get_instance();
|
51 |
+
$rtn_data = array(
|
52 |
+
'@type' => $this->slug,
|
53 |
+
'@id' => $context->get_url() . '#' . strtolower( $this->slug ),
|
54 |
+
'itemListElement' => array(),
|
55 |
+
);
|
56 |
+
|
57 |
+
$breadcrumb_list = $context->get_breadcrumb();
|
58 |
+
foreach ( $breadcrumb_list as $list_item ) {
|
59 |
+
$list_item_data = array(
|
60 |
+
'position' => $list_item['position'],
|
61 |
+
'item' => array(
|
62 |
+
'url' => $list_item['url'],
|
63 |
+
'name' => $list_item['name'],
|
64 |
+
),
|
65 |
+
);
|
66 |
+
|
67 |
+
$rtn_data['itemListElement'][] = $this->prepare_listitem( $list_item_data );
|
68 |
+
}
|
69 |
+
|
70 |
+
return $rtn_data;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* ListItem Defaults.
|
75 |
+
*
|
76 |
+
* @since 3.4.0
|
77 |
+
*
|
78 |
+
* @return array
|
79 |
+
*/
|
80 |
+
protected function listitem_defaults() {
|
81 |
+
return array(
|
82 |
+
'position' => 1,
|
83 |
+
'item' => array(),
|
84 |
+
);
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Item Defaults.
|
89 |
+
*
|
90 |
+
* @since 3.4.0
|
91 |
+
*
|
92 |
+
* @return array
|
93 |
+
*/
|
94 |
+
protected function item_defaults() {
|
95 |
+
return array(
|
96 |
+
'url' => '',
|
97 |
+
'name' => '',
|
98 |
+
);
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Prepare ListItem Schema.
|
103 |
+
*
|
104 |
+
* @since 3.4.0
|
105 |
+
*
|
106 |
+
* @param array $list_item_data
|
107 |
+
* @return array
|
108 |
+
*/
|
109 |
+
protected function prepare_listitem( $list_item_data ) {
|
110 |
+
$rtn_data = array(
|
111 |
+
'@type' => 'ListItem',
|
112 |
+
);
|
113 |
+
|
114 |
+
// Only use valid variables from defaults.
|
115 |
+
foreach ( array_keys( $this->listitem_defaults() ) as $key ) {
|
116 |
+
if ( 'item' === $key ) {
|
117 |
+
$list_item_data[ $key ] = $this->prepare_item( $list_item_data[ $key ], 'WebPage', $list_item_data['item']['url'] );
|
118 |
+
}
|
119 |
+
if ( isset( $list_item_data[ $key ] ) ) {
|
120 |
+
$rtn_data[ $key ] = $list_item_data[ $key ];
|
121 |
+
}
|
122 |
+
}
|
123 |
+
|
124 |
+
return $rtn_data;
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Prepare Item Schema.
|
129 |
+
*
|
130 |
+
* @since 3.4.0
|
131 |
+
*
|
132 |
+
* @param array $item_data
|
133 |
+
* @param string $schema_type
|
134 |
+
* @param int|string $schema_id
|
135 |
+
* @return array
|
136 |
+
*/
|
137 |
+
protected function prepare_item( $item_data, $schema_type, $schema_id ) {
|
138 |
+
$rtn_data = array(
|
139 |
+
'@type' => $schema_type,
|
140 |
+
'@id' => $schema_id,
|
141 |
+
);
|
142 |
+
foreach ( array_keys( $this->item_defaults() ) as $key ) {
|
143 |
+
if ( isset( $item_data[ $key ] ) ) {
|
144 |
+
$rtn_data[ $key ] = $item_data[ $key ];
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
return $rtn_data;
|
149 |
+
}
|
150 |
+
}
|
inc/schema/graphs/graph-itemlist.php
ADDED
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Schema Graph ItemList Class
|
4 |
+
*
|
5 |
+
* Acts as the Item List class for Schema ItemList.
|
6 |
+
*
|
7 |
+
* @package All_in_One_SEO_Pack
|
8 |
+
*/
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Class AIOSEOP_Graph_ItemList
|
12 |
+
*
|
13 |
+
* @see Schema ItemList
|
14 |
+
* @link https://schema.org/ItemList
|
15 |
+
*/
|
16 |
+
class AIOSEOP_Graph_ItemList extends AIOSEOP_Graph {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Get Graph Slug.
|
20 |
+
*
|
21 |
+
* @since 3.4.0
|
22 |
+
*
|
23 |
+
* @return string
|
24 |
+
*/
|
25 |
+
protected function get_slug() {
|
26 |
+
return 'ItemList';
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Get Graph Name.
|
31 |
+
*
|
32 |
+
* Intended for frontend use when displaying which schema graphs are available.
|
33 |
+
*
|
34 |
+
* @since 3.4.0
|
35 |
+
*
|
36 |
+
* @return string
|
37 |
+
*/
|
38 |
+
protected function get_name() {
|
39 |
+
return 'Item List';
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Prepare data.
|
44 |
+
*
|
45 |
+
* @since 3.4.0
|
46 |
+
*
|
47 |
+
* @return array
|
48 |
+
*/
|
49 |
+
protected function prepare() {
|
50 |
+
return parent::prepare();
|
51 |
+
}
|
52 |
+
}
|
inc/schema/graphs/graph-webpage.php
CHANGED
@@ -51,6 +51,8 @@ class AIOSEOP_Graph_WebPage extends AIOSEOP_Graph_Creativework {
|
|
51 |
global $post;
|
52 |
global $aioseop_options;
|
53 |
|
|
|
|
|
54 |
$current_url = '';
|
55 |
$current_name = '';
|
56 |
$current_desc = '';
|
@@ -75,6 +77,26 @@ class AIOSEOP_Graph_WebPage extends AIOSEOP_Graph_Creativework {
|
|
75 |
$current_url = home_url() . '/';
|
76 |
$current_name = get_the_title();
|
77 |
$current_desc = $this->get_post_description( $post );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
} elseif ( is_singular() || is_single() ) {
|
79 |
$current_url = wp_get_canonical_url( $post );
|
80 |
$current_name = get_the_title();
|
@@ -118,11 +140,17 @@ class AIOSEOP_Graph_WebPage extends AIOSEOP_Graph_Creativework {
|
|
118 |
'isPartOf' => array(
|
119 |
'@id' => home_url() . '/#website',
|
120 |
),
|
121 |
-
|
|
|
|
|
122 |
);
|
123 |
|
124 |
// Handles pages.
|
125 |
if ( is_singular() || is_single() ) {
|
|
|
|
|
|
|
|
|
126 |
if ( has_post_thumbnail( $post ) ) {
|
127 |
$image_id = get_post_thumbnail_id();
|
128 |
|
51 |
global $post;
|
52 |
global $aioseop_options;
|
53 |
|
54 |
+
$context = AIOSEOP_Context::get_instance();
|
55 |
+
|
56 |
$current_url = '';
|
57 |
$current_name = '';
|
58 |
$current_desc = '';
|
77 |
$current_url = home_url() . '/';
|
78 |
$current_name = get_the_title();
|
79 |
$current_desc = $this->get_post_description( $post );
|
80 |
+
} elseif ( is_post_type_archive() ) {
|
81 |
+
if (
|
82 |
+
function_exists( 'is_shop' ) &&
|
83 |
+
function_exists( 'wc_get_page_id' ) &&
|
84 |
+
is_shop()
|
85 |
+
) {
|
86 |
+
// WooCommerce - Shop Page.
|
87 |
+
$shop_page = get_post( wc_get_page_id( 'shop' ) );
|
88 |
+
|
89 |
+
$current_url = wp_get_canonical_url( $shop_page );
|
90 |
+
$current_name = get_the_title( $shop_page );
|
91 |
+
$current_desc = $this->get_post_description( $shop_page );
|
92 |
+
} else {
|
93 |
+
// WP - Post Type.
|
94 |
+
$wp_obj = get_queried_object();
|
95 |
+
|
96 |
+
$current_url = get_post_type_archive_link( $post );
|
97 |
+
$current_name = $wp_obj->label;
|
98 |
+
$current_desc = $wp_obj->description;
|
99 |
+
}
|
100 |
} elseif ( is_singular() || is_single() ) {
|
101 |
$current_url = wp_get_canonical_url( $post );
|
102 |
$current_name = get_the_title();
|
140 |
'isPartOf' => array(
|
141 |
'@id' => home_url() . '/#website',
|
142 |
),
|
143 |
+
'breadcrumb' => array(
|
144 |
+
'@id' => $context->get_url() . '#breadcrumblist',
|
145 |
+
),
|
146 |
);
|
147 |
|
148 |
// Handles pages.
|
149 |
if ( is_singular() || is_single() ) {
|
150 |
+
if ( is_attachment() ) {
|
151 |
+
unset( $rtn_data['breadcrumb'] );
|
152 |
+
}
|
153 |
+
|
154 |
if ( has_post_thumbnail( $post ) ) {
|
155 |
$image_id = get_post_thumbnail_id();
|
156 |
|
inc/schema/graphs/graph.php
CHANGED
@@ -152,7 +152,7 @@ abstract class AIOSEOP_Graph {
|
|
152 |
|
153 |
// Encode to json string, and remove string type around shortcodes.
|
154 |
if ( version_compare( PHP_VERSION, '5.4', '>=' ) ) {
|
155 |
-
$schema_data = wp_json_encode( (object) $schema_data, JSON_UNESCAPED_SLASHES ); // phpcs:ignore PHPCompatibility.Constants.NewConstants
|
156 |
} else {
|
157 |
// PHP <= 5.3 compatibility.
|
158 |
$schema_data = wp_json_encode( (object) $schema_data );
|
152 |
|
153 |
// Encode to json string, and remove string type around shortcodes.
|
154 |
if ( version_compare( PHP_VERSION, '5.4', '>=' ) ) {
|
155 |
+
$schema_data = wp_json_encode( (object) $schema_data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ); // phpcs:ignore PHPCompatibility.Constants.NewConstants
|
156 |
} else {
|
157 |
// PHP <= 5.3 compatibility.
|
158 |
$schema_data = wp_json_encode( (object) $schema_data );
|
inc/schema/schema-builder.php
CHANGED
@@ -44,6 +44,9 @@ class AIOSEOP_Schema_Builder {
|
|
44 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-organization.php';
|
45 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-person.php';
|
46 |
|
|
|
|
|
|
|
47 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-creativework.php';
|
48 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-article.php';
|
49 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-website.php';
|
@@ -53,9 +56,12 @@ class AIOSEOP_Schema_Builder {
|
|
53 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-profilepage.php';
|
54 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-searchresultspage.php';
|
55 |
|
|
|
|
|
56 |
$graphs = array(
|
57 |
// Keys/Slugs follow Schema's @type format.
|
58 |
'Article' => new AIOSEOP_Graph_Article(),
|
|
|
59 |
'CollectionPage' => new AIOSEOP_Graph_CollectionPage(),
|
60 |
'Organization' => new AIOSEOP_Graph_Organization(),
|
61 |
'Person' => new AIOSEOP_Graph_Person(),
|
@@ -70,7 +76,7 @@ class AIOSEOP_Schema_Builder {
|
|
70 |
*
|
71 |
* @since 3.2
|
72 |
*
|
73 |
-
* @param $graphs
|
74 |
*/
|
75 |
$graphs = apply_filters( 'aioseop_register_schema_objects', $graphs );
|
76 |
|
@@ -109,20 +115,25 @@ class AIOSEOP_Schema_Builder {
|
|
109 |
// TODO Add layout customizations to settings.
|
110 |
if ( is_front_page() || is_home() ) {
|
111 |
array_push( $layout['@graph'], '[aioseop_schema_WebPage]' );
|
|
|
112 |
} elseif ( is_archive() ) {
|
113 |
if ( is_author() ) {
|
114 |
array_push( $layout['@graph'], '[aioseop_schema_ProfilePage]' );
|
115 |
array_push( $layout['@graph'], '[aioseop_schema_Person]' );
|
|
|
116 |
} elseif ( is_post_type_archive() ) {
|
117 |
array_push( $layout['@graph'], '[aioseop_schema_CollectionPage]' );
|
|
|
118 |
} elseif ( is_tax() || is_category() || is_tag() ) {
|
119 |
array_push( $layout['@graph'], '[aioseop_schema_CollectionPage]' );
|
|
|
120 |
// Remove when Custom Taxonomies is supported.
|
121 |
if ( is_tax() ) {
|
122 |
$layout = array();
|
123 |
}
|
124 |
} elseif ( is_date() ) {
|
125 |
array_push( $layout['@graph'], '[aioseop_schema_CollectionPage]' );
|
|
|
126 |
}
|
127 |
} elseif ( is_singular() || is_single() ) {
|
128 |
global $post;
|
@@ -134,6 +145,7 @@ class AIOSEOP_Schema_Builder {
|
|
134 |
array_push( $layout['@graph'], '[aioseop_schema_Article]' );
|
135 |
array_push( $layout['@graph'], '[aioseop_schema_Person]' );
|
136 |
}
|
|
|
137 |
|
138 |
// Remove when CPT is supported.
|
139 |
if ( ! in_array( get_post_type( $post ), array( 'post', 'page' ) ) ) {
|
@@ -141,6 +153,7 @@ class AIOSEOP_Schema_Builder {
|
|
141 |
}
|
142 |
} elseif ( is_search() ) {
|
143 |
array_push( $layout['@graph'], '[aioseop_schema_SearchResultsPage]' );
|
|
|
144 |
} elseif ( is_404() ) {
|
145 |
// Do 404 page.
|
146 |
}
|
44 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-organization.php';
|
45 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-person.php';
|
46 |
|
47 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-itemlist.php';
|
48 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-breadcrumblist.php';
|
49 |
+
|
50 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-creativework.php';
|
51 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-article.php';
|
52 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-website.php';
|
56 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-profilepage.php';
|
57 |
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/graphs/graph-searchresultspage.php';
|
58 |
|
59 |
+
require_once AIOSEOP_PLUGIN_DIR . 'inc/schema/aioseop-context.php';
|
60 |
+
|
61 |
$graphs = array(
|
62 |
// Keys/Slugs follow Schema's @type format.
|
63 |
'Article' => new AIOSEOP_Graph_Article(),
|
64 |
+
'BreadcrumbList' => new AIOSEOP_Graph_BreadcrumbList(),
|
65 |
'CollectionPage' => new AIOSEOP_Graph_CollectionPage(),
|
66 |
'Organization' => new AIOSEOP_Graph_Organization(),
|
67 |
'Person' => new AIOSEOP_Graph_Person(),
|
76 |
*
|
77 |
* @since 3.2
|
78 |
*
|
79 |
+
* @param $graphs array containing schema objects that are currently active.
|
80 |
*/
|
81 |
$graphs = apply_filters( 'aioseop_register_schema_objects', $graphs );
|
82 |
|
115 |
// TODO Add layout customizations to settings.
|
116 |
if ( is_front_page() || is_home() ) {
|
117 |
array_push( $layout['@graph'], '[aioseop_schema_WebPage]' );
|
118 |
+
array_push( $layout['@graph'], '[aioseop_schema_BreadcrumbList]' );
|
119 |
} elseif ( is_archive() ) {
|
120 |
if ( is_author() ) {
|
121 |
array_push( $layout['@graph'], '[aioseop_schema_ProfilePage]' );
|
122 |
array_push( $layout['@graph'], '[aioseop_schema_Person]' );
|
123 |
+
array_push( $layout['@graph'], '[aioseop_schema_BreadcrumbList]' );
|
124 |
} elseif ( is_post_type_archive() ) {
|
125 |
array_push( $layout['@graph'], '[aioseop_schema_CollectionPage]' );
|
126 |
+
array_push( $layout['@graph'], '[aioseop_schema_BreadcrumbList]' );
|
127 |
} elseif ( is_tax() || is_category() || is_tag() ) {
|
128 |
array_push( $layout['@graph'], '[aioseop_schema_CollectionPage]' );
|
129 |
+
array_push( $layout['@graph'], '[aioseop_schema_BreadcrumbList]' );
|
130 |
// Remove when Custom Taxonomies is supported.
|
131 |
if ( is_tax() ) {
|
132 |
$layout = array();
|
133 |
}
|
134 |
} elseif ( is_date() ) {
|
135 |
array_push( $layout['@graph'], '[aioseop_schema_CollectionPage]' );
|
136 |
+
array_push( $layout['@graph'], '[aioseop_schema_BreadcrumbList]' );
|
137 |
}
|
138 |
} elseif ( is_singular() || is_single() ) {
|
139 |
global $post;
|
145 |
array_push( $layout['@graph'], '[aioseop_schema_Article]' );
|
146 |
array_push( $layout['@graph'], '[aioseop_schema_Person]' );
|
147 |
}
|
148 |
+
array_push( $layout['@graph'], '[aioseop_schema_BreadcrumbList]' );
|
149 |
|
150 |
// Remove when CPT is supported.
|
151 |
if ( ! in_array( get_post_type( $post ), array( 'post', 'page' ) ) ) {
|
153 |
}
|
154 |
} elseif ( is_search() ) {
|
155 |
array_push( $layout['@graph'], '[aioseop_schema_SearchResultsPage]' );
|
156 |
+
array_push( $layout['@graph'], '[aioseop_schema_BreadcrumbList]' );
|
157 |
} elseif ( is_404() ) {
|
158 |
// Do 404 page.
|
159 |
}
|
js/admin/aioseop-about.js
ADDED
@@ -0,0 +1,139 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var aioseopAbout;
|
2 |
+
|
3 |
+
jQuery(function ($) {
|
4 |
+
|
5 |
+
aioseopAbout = {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Initializes the code.
|
9 |
+
*
|
10 |
+
* @since 3.4.0
|
11 |
+
*/
|
12 |
+
init: function () {
|
13 |
+
aioseopAbout.addEventListeners();
|
14 |
+
},
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Adds the required event listener to the addon buttons.
|
18 |
+
*
|
19 |
+
* @since 3.4.0
|
20 |
+
*/
|
21 |
+
addEventListeners: function () {
|
22 |
+
if (!$('#aioseop-admin-addons').length) {
|
23 |
+
return;
|
24 |
+
}
|
25 |
+
|
26 |
+
$( '.addon-item .details' ).matchHeight( { byrow: false, property: 'height' } );
|
27 |
+
|
28 |
+
$(document).on('click', '#aioseop-admin-addons .addon-item button', function (event) {
|
29 |
+
event.preventDefault();
|
30 |
+
|
31 |
+
if ($(this).hasClass('disabled')) {
|
32 |
+
return false;
|
33 |
+
}
|
34 |
+
|
35 |
+
aioseopAbout.addonToggle($(this));
|
36 |
+
});
|
37 |
+
},
|
38 |
+
|
39 |
+
addonToggle: function (button) {
|
40 |
+
|
41 |
+
let pluginContainer = button.closest('.addon-item');
|
42 |
+
let downloadUrl = button.attr('data-plugin');
|
43 |
+
let action,
|
44 |
+
cssClass,
|
45 |
+
statusText,
|
46 |
+
successText,
|
47 |
+
successButtonText,
|
48 |
+
errorText,
|
49 |
+
errorButtonText;
|
50 |
+
|
51 |
+
if (button.hasClass('status-go-to-url')) {
|
52 |
+
window.open(button.attr('data-plugin'), '_blank');
|
53 |
+
return;
|
54 |
+
}
|
55 |
+
|
56 |
+
button.prop('disabled', true).addClass('loading');
|
57 |
+
button.text(aioseopAboutData.aioseopL10n.wait);
|
58 |
+
|
59 |
+
if (button.hasClass('status-download')) {
|
60 |
+
action = 'aioseop_install_plugin';
|
61 |
+
cssClass = 'status-active button disabled';
|
62 |
+
|
63 |
+
statusText = aioseopAboutData.aioseopL10n.active;
|
64 |
+
successButtonText = aioseopAboutData.aioseopL10n.activated;
|
65 |
+
|
66 |
+
errorText = aioseopAboutData.aioseopL10n.install_failed;
|
67 |
+
errorButtonText = aioseopAboutData.aioseopL10n.install;
|
68 |
+
}
|
69 |
+
|
70 |
+
else if( button.hasClass('status-inactive')) {
|
71 |
+
action = 'aioseop_activate_plugin';
|
72 |
+
cssClass = 'status-active button disabled';
|
73 |
+
|
74 |
+
statusText = aioseopAboutData.aioseopL10n.active;
|
75 |
+
successButtonText = aioseopAboutData.aioseopL10n.activated;
|
76 |
+
|
77 |
+
errorText = aioseopAboutData.aioseopL10n.activation_failed;
|
78 |
+
errorButtonText = aioseopAboutData.aioseopL10n.activate;
|
79 |
+
}
|
80 |
+
|
81 |
+
else {
|
82 |
+
return;
|
83 |
+
}
|
84 |
+
|
85 |
+
$.ajax(
|
86 |
+
{
|
87 |
+
type: "POST",
|
88 |
+
url: aioseopAboutData.requestUrl,
|
89 |
+
data: {
|
90 |
+
action: action,
|
91 |
+
_ajax_nonce: aioseopAboutData.nonce,
|
92 |
+
plugin: downloadUrl,
|
93 |
+
},
|
94 |
+
success: function (response) {
|
95 |
+
if (response.success) {
|
96 |
+
successText = response.data.msg;
|
97 |
+
|
98 |
+
if ('aioseop_install_plugin' === action) {
|
99 |
+
button.attr('data-plugin', response.data.basename);
|
100 |
+
|
101 |
+
if (!response.data.is_activated) {
|
102 |
+
cssClass = 'status-inactive button';
|
103 |
+
statusText = aioseopAboutData.aioseopL10n.inactive;
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
pluginContainer.find('.actions').append('<div class="msg success">' + successText + '</div>');
|
108 |
+
pluginContainer.find('span.status-label')
|
109 |
+
.removeClass('status-active status-inactive status-download')
|
110 |
+
.addClass(cssClass)
|
111 |
+
.removeClass('button button-primary button-secondary disabled')
|
112 |
+
.text(statusText);
|
113 |
+
button
|
114 |
+
.removeClass('status-active status-inactive status-download')
|
115 |
+
.removeClass('button button-primary button-secondary disabled')
|
116 |
+
.addClass(cssClass).html(successButtonText);
|
117 |
+
} else {
|
118 |
+
pluginContainer.find('.actions').append('<div class="msg error">' + errorText + '</div>');
|
119 |
+
button.text(errorButtonText);
|
120 |
+
}
|
121 |
+
|
122 |
+
button.prop('disabled', false).removeClass('loading');
|
123 |
+
|
124 |
+
// Clear messages after 3 seconds.
|
125 |
+
setTimeout(function () {
|
126 |
+
$('.addon-item .msg').remove();
|
127 |
+
}, 3000);
|
128 |
+
},
|
129 |
+
error: function () {
|
130 |
+
console.log("Couldn't download or install add-on.");
|
131 |
+
}
|
132 |
+
}
|
133 |
+
);
|
134 |
+
}
|
135 |
+
}
|
136 |
+
|
137 |
+
aioseopAbout.init();
|
138 |
+
|
139 |
+
});
|
js/admin/aioseop-count-chars-old.js
CHANGED
@@ -4,8 +4,7 @@
|
|
4 |
* @summary Binds input elements and counts characters for Title and Description on Post Edit, Post New,
|
5 |
* & AIOSEOP General Settings screens.
|
6 |
*
|
7 |
-
* @author
|
8 |
-
* @author Semper Fi Web Design.
|
9 |
* @copyright https://semperplugins.com
|
10 |
* @version 2.9.2
|
11 |
*/
|
4 |
* @summary Binds input elements and counts characters for Title and Description on Post Edit, Post New,
|
5 |
* & AIOSEOP General Settings screens.
|
6 |
*
|
7 |
+
* @author All in One SEO Team.
|
|
|
8 |
* @copyright https://semperplugins.com
|
9 |
* @version 2.9.2
|
10 |
*/
|
js/admin/aioseop-flyout.js
ADDED
@@ -0,0 +1,74 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var aioseopFlyout;
|
2 |
+
|
3 |
+
jQuery(function($) {
|
4 |
+
|
5 |
+
aioseopFlyout = {
|
6 |
+
|
7 |
+
init: function() {
|
8 |
+
|
9 |
+
// Flyout Menu Elements.
|
10 |
+
var $flyoutMenu = $( '#aioseop-flyout' );
|
11 |
+
|
12 |
+
if ( $flyoutMenu.length === 0 ) {
|
13 |
+
return;
|
14 |
+
}
|
15 |
+
|
16 |
+
var $head = $flyoutMenu.find( '.aioseop-flyout-head' ),
|
17 |
+
$sullie = $head.find( 'img' ),
|
18 |
+
menu = {
|
19 |
+
state: 'inactive',
|
20 |
+
srcInactive: $sullie.attr( 'src' ),
|
21 |
+
srcActive: $sullie.data( 'active' ),
|
22 |
+
};
|
23 |
+
|
24 |
+
// Click on the menu head icon.
|
25 |
+
$head.on( 'click', function( e ) {
|
26 |
+
|
27 |
+
e.preventDefault();
|
28 |
+
|
29 |
+
if ( menu.state === 'active' ) {
|
30 |
+
$flyoutMenu.removeClass( 'opened' );
|
31 |
+
$sullie.attr( 'src', menu.srcInactive );
|
32 |
+
menu.state = 'inactive';
|
33 |
+
} else {
|
34 |
+
$flyoutMenu.addClass( 'opened' );
|
35 |
+
$sullie.attr( 'src', menu.srcActive );
|
36 |
+
menu.state = 'active';
|
37 |
+
}
|
38 |
+
} );
|
39 |
+
|
40 |
+
/*
|
41 |
+
|
42 |
+
// Page elements and other values.
|
43 |
+
var $wpfooter = $( '#wpfooter' );
|
44 |
+
|
45 |
+
if ( $wpfooter.length === 0 ) {
|
46 |
+
return;
|
47 |
+
}
|
48 |
+
|
49 |
+
var $overlap = $( '#aioseop-overview, #aioseop-entries-list' ),
|
50 |
+
wpfooterTop = $wpfooter.offset().top,
|
51 |
+
wpfooterBottom = wpfooterTop + $wpfooter.height(),
|
52 |
+
overlapBottom = $overlap.length > 0 ? $overlap.offset().top + $overlap.height() + 85 : 0;
|
53 |
+
|
54 |
+
// Hide menu if scrolled down to the bottom of the page.
|
55 |
+
$( window ).on( 'resize scroll', _.debounce( function( e ) {
|
56 |
+
|
57 |
+
var viewTop = $( window ).scrollTop(),
|
58 |
+
viewBottom = viewTop + $( window ).height();
|
59 |
+
|
60 |
+
if ( wpfooterBottom <= viewBottom && wpfooterTop >= viewTop && overlapBottom > viewBottom ) {
|
61 |
+
$flyoutMenu.addClass( 'out' );
|
62 |
+
} else {
|
63 |
+
$flyoutMenu.removeClass( 'out' );
|
64 |
+
}
|
65 |
+
}, 50 ) );
|
66 |
+
|
67 |
+
$( window ).trigger( 'scroll' );
|
68 |
+
|
69 |
+
*/
|
70 |
+
},
|
71 |
+
}
|
72 |
+
|
73 |
+
aioseopFlyout.init();
|
74 |
+
});
|
js/admin/aioseop-link-attributes-classic-editor.js
ADDED
@@ -0,0 +1,886 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// jshint ignore: start
|
2 |
+
/* eslint-disable */
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Allows users to add nofollow, sponsored and title attributes to links in the Classic Editor.
|
6 |
+
*
|
7 |
+
* @since 3.4.0
|
8 |
+
* @link https://github.com/WordPress/WordPress/blob/master/wp-includes/js/wplink.js
|
9 |
+
*/
|
10 |
+
|
11 |
+
(function ($, aioseopL10n, wp) {
|
12 |
+
var editor, searchTimer, River, Query, correctedURL,
|
13 |
+
emailRegexp = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,63}$/i,
|
14 |
+
urlRegexp = /^(https?|ftp):\/\/[A-Z0-9.-]+\.[A-Z]{2,63}[^ "]*$/i,
|
15 |
+
inputs = {},
|
16 |
+
rivers = {},
|
17 |
+
isTouch = ('ontouchend' in document);
|
18 |
+
|
19 |
+
function getLink() {
|
20 |
+
if (editor) {
|
21 |
+
return editor.$('a[data-wplink-edit="true"]');
|
22 |
+
}
|
23 |
+
|
24 |
+
return null;
|
25 |
+
}
|
26 |
+
|
27 |
+
window.wpLink = {
|
28 |
+
timeToTriggerRiver: 150,
|
29 |
+
minRiverAJAXDuration: 200,
|
30 |
+
riverBottomThreshold: 5,
|
31 |
+
keySensitivity: 100,
|
32 |
+
lastSearch: '',
|
33 |
+
textarea: '',
|
34 |
+
modalOpen: false,
|
35 |
+
|
36 |
+
init: function () {
|
37 |
+
// All in One SEO Pack - Begin
|
38 |
+
$("#wp-link .link-target").append('<br><label style="padding-left: 4px;"><span> </span><input type="checkbox" id="tanfl-add-nofollow">' + aioseopL10n.noFollow + "</label>");
|
39 |
+
$("#wp-link .link-target").append('<br><label style="padding-left: 4px;"><span> </span><input type="checkbox" id="tanfl-add-sponsored">' + aioseopL10n.sponsored + '</label><br>');
|
40 |
+
$(".wp-link-text-field").before('<div class="link-title-field"><label><span style="padding-left: 4px;">' + aioseopL10n.labelTitle + '</span><input id="wp-link-title" type="text" name="linktitle" /></label></div>');
|
41 |
+
$('<style type="text/css"> .has-text-field #wp-link .query-results { top: 256px !important; } #wp-link-wrap.search-panel-visible {height: 549px !important;}</style>').appendTo("head");
|
42 |
+
// All in One SEO Pack - End
|
43 |
+
|
44 |
+
inputs.wrap = $('#wp-link-wrap');
|
45 |
+
inputs.dialog = $('#wp-link');
|
46 |
+
inputs.backdrop = $('#wp-link-backdrop');
|
47 |
+
inputs.submit = $('#wp-link-submit');
|
48 |
+
inputs.close = $('#wp-link-close');
|
49 |
+
|
50 |
+
// All in One SEO Pack - Begin
|
51 |
+
inputs.tanfl = $('#tanfl-add-nofollow');
|
52 |
+
inputs.tanfl_sponsored = $('#tanfl-add-sponsored');
|
53 |
+
inputs.title = $('#wp-link-title');
|
54 |
+
// All in One SEO Pack - End
|
55 |
+
|
56 |
+
// Input.
|
57 |
+
inputs.text = $('#wp-link-text');
|
58 |
+
inputs.url = $('#wp-link-url');
|
59 |
+
inputs.nonce = $('#_ajax_linking_nonce');
|
60 |
+
inputs.openInNewTab = $('#wp-link-target');
|
61 |
+
inputs.search = $('#wp-link-search');
|
62 |
+
|
63 |
+
// Build rivers.
|
64 |
+
rivers.search = new River($('#search-results'));
|
65 |
+
rivers.recent = new River($('#most-recent-results'));
|
66 |
+
rivers.elements = inputs.dialog.find('.query-results');
|
67 |
+
|
68 |
+
// Get search notice text.
|
69 |
+
inputs.queryNotice = $('#query-notice-message');
|
70 |
+
inputs.queryNoticeTextDefault = inputs.queryNotice.find('.query-notice-default');
|
71 |
+
inputs.queryNoticeTextHint = inputs.queryNotice.find('.query-notice-hint');
|
72 |
+
|
73 |
+
// Bind event handlers.
|
74 |
+
inputs.dialog.keydown(wpLink.keydown);
|
75 |
+
inputs.dialog.keyup(wpLink.keyup);
|
76 |
+
inputs.submit.click(function (event) {
|
77 |
+
event.preventDefault();
|
78 |
+
wpLink.update();
|
79 |
+
});
|
80 |
+
|
81 |
+
inputs.close.add(inputs.backdrop).add('#wp-link-cancel button').click(function (event) {
|
82 |
+
event.preventDefault();
|
83 |
+
wpLink.close();
|
84 |
+
});
|
85 |
+
|
86 |
+
rivers.elements.on('river-select', wpLink.updateFields);
|
87 |
+
|
88 |
+
// Display 'hint' message when search field or 'query-results' box are focused.
|
89 |
+
inputs.search.on('focus.wplink', function () {
|
90 |
+
inputs.queryNoticeTextDefault.hide();
|
91 |
+
inputs.queryNoticeTextHint.removeClass('screen-reader-text').show();
|
92 |
+
}).on('blur.wplink', function () {
|
93 |
+
inputs.queryNoticeTextDefault.show();
|
94 |
+
inputs.queryNoticeTextHint.addClass('screen-reader-text').hide();
|
95 |
+
});
|
96 |
+
|
97 |
+
inputs.search.on('keyup input', function () {
|
98 |
+
window.clearTimeout(searchTimer);
|
99 |
+
searchTimer = window.setTimeout(function () {
|
100 |
+
wpLink.searchInternalLinks();
|
101 |
+
}, 500);
|
102 |
+
});
|
103 |
+
|
104 |
+
inputs.url.on('paste', function () {
|
105 |
+
setTimeout(wpLink.correctURL, 0);
|
106 |
+
});
|
107 |
+
|
108 |
+
inputs.url.on('blur', wpLink.correctURL);
|
109 |
+
},
|
110 |
+
|
111 |
+
// If URL wasn't corrected last time and doesn't start with http:, https:, ? # or /, prepend http://.
|
112 |
+
correctURL: function () {
|
113 |
+
var url = $.trim(inputs.url.val());
|
114 |
+
|
115 |
+
if (url && correctedURL !== url && ! /^(?:[a-z]+:|#|\?|\.|\/)/.test(url)) {
|
116 |
+
inputs.url.val('http://' + url);
|
117 |
+
correctedURL = url;
|
118 |
+
}
|
119 |
+
},
|
120 |
+
|
121 |
+
open: function (editorId, url, text) {
|
122 |
+
var ed,
|
123 |
+
$body = $(document.body);
|
124 |
+
|
125 |
+
$body.addClass('modal-open');
|
126 |
+
wpLink.modalOpen = true;
|
127 |
+
|
128 |
+
wpLink.range = null;
|
129 |
+
|
130 |
+
if (editorId) {
|
131 |
+
window.wpActiveEditor = editorId;
|
132 |
+
}
|
133 |
+
|
134 |
+
if (!window.wpActiveEditor) {
|
135 |
+
return;
|
136 |
+
}
|
137 |
+
|
138 |
+
this.textarea = $('#' + window.wpActiveEditor).get(0);
|
139 |
+
|
140 |
+
if (typeof window.tinymce !== 'undefined') {
|
141 |
+
// Make sure the link wrapper is the last element in the body,
|
142 |
+
// or the inline editor toolbar may show above the backdrop.
|
143 |
+
$body.append(inputs.backdrop, inputs.wrap);
|
144 |
+
|
145 |
+
ed = window.tinymce.get(window.wpActiveEditor);
|
146 |
+
|
147 |
+
if (ed && !ed.isHidden()) {
|
148 |
+
editor = ed;
|
149 |
+
} else {
|
150 |
+
editor = null;
|
151 |
+
}
|
152 |
+
}
|
153 |
+
|
154 |
+
if (!wpLink.isMCE() && document.selection) {
|
155 |
+
this.textarea.focus();
|
156 |
+
this.range = document.selection.createRange();
|
157 |
+
}
|
158 |
+
|
159 |
+
inputs.wrap.show();
|
160 |
+
inputs.backdrop.show();
|
161 |
+
|
162 |
+
wpLink.refresh(url, text);
|
163 |
+
|
164 |
+
$(document).trigger('wplink-open', inputs.wrap);
|
165 |
+
},
|
166 |
+
|
167 |
+
isMCE: function () {
|
168 |
+
return editor && !editor.isHidden();
|
169 |
+
},
|
170 |
+
|
171 |
+
refresh: function (url, text) {
|
172 |
+
var linkText = '';
|
173 |
+
|
174 |
+
// Refresh rivers (clear links, check visibility).
|
175 |
+
rivers.search.refresh();
|
176 |
+
rivers.recent.refresh();
|
177 |
+
|
178 |
+
if (wpLink.isMCE()) {
|
179 |
+
wpLink.mceRefresh(url, text);
|
180 |
+
} else {
|
181 |
+
// For the Text editor the "Link text" field is always shown.
|
182 |
+
if (!inputs.wrap.hasClass('has-text-field')) {
|
183 |
+
inputs.wrap.addClass('has-text-field');
|
184 |
+
}
|
185 |
+
|
186 |
+
if (document.selection) {
|
187 |
+
// Old IE.
|
188 |
+
linkText = document.selection.createRange().text || text || '';
|
189 |
+
} else if (typeof this.textarea.selectionStart !== 'undefined' &&
|
190 |
+
(this.textarea.selectionStart !== this.textarea.selectionEnd)) {
|
191 |
+
// W3C.
|
192 |
+
text = this.textarea.value.substring(this.textarea.selectionStart, this.textarea.selectionEnd) || text || '';
|
193 |
+
}
|
194 |
+
|
195 |
+
inputs.text.val(text);
|
196 |
+
wpLink.setDefaultValues();
|
197 |
+
}
|
198 |
+
|
199 |
+
if (isTouch) {
|
200 |
+
// Close the onscreen keyboard.
|
201 |
+
inputs.url.focus().blur();
|
202 |
+
} else {
|
203 |
+
/*
|
204 |
+
* Focus the URL field and highlight its contents.
|
205 |
+
* If this is moved above the selection changes,
|
206 |
+
* IE will show a flashing cursor over the dialog.
|
207 |
+
*/
|
208 |
+
window.setTimeout(function () {
|
209 |
+
inputs.url[0].select();
|
210 |
+
inputs.url.focus();
|
211 |
+
});
|
212 |
+
}
|
213 |
+
|
214 |
+
// Load the most recent results if this is the first time opening the panel.
|
215 |
+
if (!rivers.recent.ul.children().length) {
|
216 |
+
rivers.recent.ajax();
|
217 |
+
}
|
218 |
+
|
219 |
+
correctedURL = inputs.url.val().replace(/^http:\/\//, '');
|
220 |
+
|
221 |
+
// All in One SEO Pack - Begin
|
222 |
+
jQuery('.has-text-field #wp-link .query-results').css('margin-top', 25);
|
223 |
+
// All in One SEO Pack - End
|
224 |
+
},
|
225 |
+
|
226 |
+
hasSelectedText: function (linkNode) {
|
227 |
+
var node, nodes, i, html = editor.selection.getContent();
|
228 |
+
|
229 |
+
// Partial html and not a fully selected anchor element.
|
230 |
+
if (/</.test(html) && (! /^<a [^>]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) {
|
231 |
+
return false;
|
232 |
+
}
|
233 |
+
|
234 |
+
if (linkNode.length) {
|
235 |
+
nodes = linkNode[0].childNodes;
|
236 |
+
|
237 |
+
if (!nodes || !nodes.length) {
|
238 |
+
return false;
|
239 |
+
}
|
240 |
+
|
241 |
+
for (i = nodes.length - 1; i >= 0; i--) {
|
242 |
+
node = nodes[i];
|
243 |
+
|
244 |
+
if (node.nodeType != 3 && !window.tinymce.dom.BookmarkManager.isBookmarkNode(node)) {
|
245 |
+
return false;
|
246 |
+
}
|
247 |
+
}
|
248 |
+
}
|
249 |
+
|
250 |
+
return true;
|
251 |
+
},
|
252 |
+
|
253 |
+
mceRefresh: function (searchStr, text) {
|
254 |
+
var linkText, href,
|
255 |
+
linkNode = getLink(),
|
256 |
+
onlyText = this.hasSelectedText(linkNode);
|
257 |
+
|
258 |
+
if (linkNode.length) {
|
259 |
+
linkText = linkNode.text();
|
260 |
+
href = linkNode.attr('href');
|
261 |
+
|
262 |
+
if (!$.trim(linkText)) {
|
263 |
+
linkText = text || '';
|
264 |
+
}
|
265 |
+
|
266 |
+
if (searchStr && (urlRegexp.test(searchStr) || emailRegexp.test(searchStr))) {
|
267 |
+
href = searchStr;
|
268 |
+
}
|
269 |
+
|
270 |
+
if (href !== '_wp_link_placeholder') {
|
271 |
+
inputs.url.val(href);
|
272 |
+
inputs.openInNewTab.prop('checked', '_blank' === linkNode.attr('target'));
|
273 |
+
inputs.submit.val(aioseopL10n.update);
|
274 |
+
} else {
|
275 |
+
this.setDefaultValues(linkText);
|
276 |
+
}
|
277 |
+
|
278 |
+
if (searchStr && searchStr !== href) {
|
279 |
+
// All in One SEO Pack - Begin
|
280 |
+
inputs.url.val(searchStr);
|
281 |
+
// All in One SEO Pack - End
|
282 |
+
// The user has typed something in the inline dialog. Trigger a search with it.
|
283 |
+
inputs.search.val(searchStr);
|
284 |
+
} else {
|
285 |
+
inputs.search.val('');
|
286 |
+
}
|
287 |
+
|
288 |
+
// All in One SEO Pack - Begin
|
289 |
+
if (editor.dom.getAttrib(linkNode, 'rel').indexOf("nofollow") >= 0) {
|
290 |
+
inputs.tanfl.prop('checked', true);
|
291 |
+
} else {
|
292 |
+
inputs.tanfl.prop('checked', false);
|
293 |
+
}
|
294 |
+
if (editor.dom.getAttrib(linkNode, 'rel').indexOf("sponsored") >= 0) {
|
295 |
+
inputs.tanfl_sponsored.prop('checked', true);
|
296 |
+
} else {
|
297 |
+
inputs.tanfl_sponsored.prop('checked', false);
|
298 |
+
}
|
299 |
+
inputs.title.val(editor.dom.getAttrib(linkNode, 'title'));
|
300 |
+
// All in One SEO Pack - End
|
301 |
+
|
302 |
+
// Always reset the search.
|
303 |
+
window.setTimeout(function () {
|
304 |
+
wpLink.searchInternalLinks();
|
305 |
+
});
|
306 |
+
} else {
|
307 |
+
linkText = editor.selection.getContent({ format: 'text' }) || text || '';
|
308 |
+
this.setDefaultValues(linkText);
|
309 |
+
// All in One SEO Pack - Begin
|
310 |
+
inputs.url.val(searchStr);
|
311 |
+
// All in One SEO Pack - End
|
312 |
+
}
|
313 |
+
|
314 |
+
if (onlyText) {
|
315 |
+
inputs.text.val(linkText);
|
316 |
+
inputs.wrap.addClass('has-text-field');
|
317 |
+
} else {
|
318 |
+
inputs.text.val('');
|
319 |
+
inputs.wrap.removeClass('has-text-field');
|
320 |
+
}
|
321 |
+
},
|
322 |
+
|
323 |
+
close: function (reset) {
|
324 |
+
$(document.body).removeClass('modal-open');
|
325 |
+
wpLink.modalOpen = false;
|
326 |
+
|
327 |
+
if (reset !== 'noReset') {
|
328 |
+
if (!wpLink.isMCE()) {
|
329 |
+
wpLink.textarea.focus();
|
330 |
+
|
331 |
+
if (wpLink.range) {
|
332 |
+
wpLink.range.moveToBookmark(wpLink.range.getBookmark());
|
333 |
+
wpLink.range.select();
|
334 |
+
}
|
335 |
+
} else {
|
336 |
+
if (editor.plugins.wplink) {
|
337 |
+
editor.plugins.wplink.close();
|
338 |
+
}
|
339 |
+
|
340 |
+
editor.focus();
|
341 |
+
}
|
342 |
+
}
|
343 |
+
|
344 |
+
inputs.backdrop.hide();
|
345 |
+
inputs.wrap.hide();
|
346 |
+
|
347 |
+
correctedURL = false;
|
348 |
+
|
349 |
+
$(document).trigger('wplink-close', inputs.wrap);
|
350 |
+
},
|
351 |
+
|
352 |
+
getAttrs: function () {
|
353 |
+
wpLink.correctURL();
|
354 |
+
|
355 |
+
// All in One SEO Pack - Begin
|
356 |
+
var tanfl_value = '';
|
357 |
+
if (inputs.tanfl.prop('checked')) {
|
358 |
+
tanfl_value += 'nofollow ';
|
359 |
+
}
|
360 |
+
if (inputs.tanfl_sponsored.prop('checked')) {
|
361 |
+
tanfl_value += 'sponsored';
|
362 |
+
}
|
363 |
+
// All in One SEO Pack - End
|
364 |
+
|
365 |
+
return {
|
366 |
+
href: $.trim(inputs.url.val()),
|
367 |
+
target: inputs.openInNewTab.prop('checked') ? '_blank' : null,
|
368 |
+
// All in One SEO Pack - Begin
|
369 |
+
rel: '' !== tanfl_value ? tanfl_value : null,
|
370 |
+
title: '' !== inputs.title.val() ? $.trim(inputs.title.val()) : null
|
371 |
+
// All in One SEO Pack - End
|
372 |
+
};
|
373 |
+
},
|
374 |
+
|
375 |
+
buildHtml: function (attrs) {
|
376 |
+
var html = '<a href="' + attrs.href + '"';
|
377 |
+
|
378 |
+
// All in One SEO Pack - Begin
|
379 |
+
if (attrs.title) {
|
380 |
+
title = attrs.title.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
381 |
+
html += ' title="' + title + '"';
|
382 |
+
}
|
383 |
+
|
384 |
+
if (attrs.target) {
|
385 |
+
if (attrs.rel) {
|
386 |
+
html += ' rel="noopener ' + attrs.rel + '" target="' + attrs.target + '"';
|
387 |
+
}
|
388 |
+
else {
|
389 |
+
html += ' rel="noopener" target="' + attrs.target + '"';
|
390 |
+
}
|
391 |
+
} else {
|
392 |
+
if (attrs.rel) {
|
393 |
+
html += ' rel="' + attrs.rel + '"';
|
394 |
+
}
|
395 |
+
}
|
396 |
+
// All in One SEO Pack - End
|
397 |
+
|
398 |
+
return html + '>';
|
399 |
+
},
|
400 |
+
|
401 |
+
update: function () {
|
402 |
+
if (wpLink.isMCE()) {
|
403 |
+
wpLink.mceUpdate();
|
404 |
+
} else {
|
405 |
+
wpLink.htmlUpdate();
|
406 |
+
}
|
407 |
+
},
|
408 |
+
|
409 |
+
htmlUpdate: function () {
|
410 |
+
var attrs, text, html, begin, end, cursor, selection,
|
411 |
+
textarea = wpLink.textarea;
|
412 |
+
|
413 |
+
if (!textarea) {
|
414 |
+
return;
|
415 |
+
}
|
416 |
+
|
417 |
+
attrs = wpLink.getAttrs();
|
418 |
+
text = inputs.text.val();
|
419 |
+
|
420 |
+
var parser = document.createElement('a');
|
421 |
+
parser.href = attrs.href;
|
422 |
+
|
423 |
+
if ('javascript:' === parser.protocol || 'data:' === parser.protocol) { // jshint ignore:line
|
424 |
+
attrs.href = '';
|
425 |
+
}
|
426 |
+
|
427 |
+
// If there's no href, return.
|
428 |
+
if (!attrs.href) {
|
429 |
+
return;
|
430 |
+
}
|
431 |
+
|
432 |
+
html = wpLink.buildHtml(attrs);
|
433 |
+
|
434 |
+
// Insert HTML.
|
435 |
+
if (document.selection && wpLink.range) {
|
436 |
+
// IE.
|
437 |
+
// Note: If no text is selected, IE will not place the cursor
|
438 |
+
// inside the closing tag.
|
439 |
+
textarea.focus();
|
440 |
+
wpLink.range.text = html + (text || wpLink.range.text) + '</a>';
|
441 |
+
wpLink.range.moveToBookmark(wpLink.range.getBookmark());
|
442 |
+
wpLink.range.select();
|
443 |
+
|
444 |
+
wpLink.range = null;
|
445 |
+
} else if (typeof textarea.selectionStart !== 'undefined') {
|
446 |
+
// W3C.
|
447 |
+
begin = textarea.selectionStart;
|
448 |
+
end = textarea.selectionEnd;
|
449 |
+
selection = text || textarea.value.substring(begin, end);
|
450 |
+
html = html + selection + '</a>';
|
451 |
+
cursor = begin + html.length;
|
452 |
+
|
453 |
+
// If no text is selected, place the cursor inside the closing tag.
|
454 |
+
if (begin === end && !selection) {
|
455 |
+
cursor -= 4;
|
456 |
+
}
|
457 |
+
|
458 |
+
textarea.value = (
|
459 |
+
textarea.value.substring(0, begin) +
|
460 |
+
html +
|
461 |
+
textarea.value.substring(end, textarea.value.length)
|
462 |
+
);
|
463 |
+
|
464 |
+
// Update cursor position.
|
465 |
+
textarea.selectionStart = textarea.selectionEnd = cursor;
|
466 |
+
}
|
467 |
+
|
468 |
+
wpLink.close();
|
469 |
+
textarea.focus();
|
470 |
+
$(textarea).trigger('change');
|
471 |
+
|
472 |
+
// Audible confirmation message when a link has been inserted in the Editor.
|
473 |
+
wp.a11y.speak(aioseopL10n.linkInserted);
|
474 |
+
},
|
475 |
+
|
476 |
+
mceUpdate: function () {
|
477 |
+
var attrs = wpLink.getAttrs(),
|
478 |
+
$link, text, hasText;
|
479 |
+
|
480 |
+
var parser = document.createElement('a');
|
481 |
+
parser.href = attrs.href;
|
482 |
+
|
483 |
+
if ('javascript:' === parser.protocol || 'data:' === parser.protocol) { // jshint ignore:line
|
484 |
+
attrs.href = '';
|
485 |
+
}
|
486 |
+
|
487 |
+
if (!attrs.href) {
|
488 |
+
editor.execCommand('unlink');
|
489 |
+
wpLink.close();
|
490 |
+
return;
|
491 |
+
}
|
492 |
+
|
493 |
+
$link = getLink();
|
494 |
+
|
495 |
+
editor.undoManager.transact(function () {
|
496 |
+
if (!$link.length) {
|
497 |
+
editor.execCommand('mceInsertLink', false, { href: '_wp_link_placeholder', 'data-wp-temp-link': 1 });
|
498 |
+
$link = editor.$('a[data-wp-temp-link="1"]').removeAttr('data-wp-temp-link');
|
499 |
+
hasText = $.trim($link.text());
|
500 |
+
}
|
501 |
+
|
502 |
+
if (!$link.length) {
|
503 |
+
editor.execCommand('unlink');
|
504 |
+
} else {
|
505 |
+
if (inputs.wrap.hasClass('has-text-field')) {
|
506 |
+
text = inputs.text.val();
|
507 |
+
|
508 |
+
if (text) {
|
509 |
+
$link.text(text);
|
510 |
+
} else if (!hasText) {
|
511 |
+
$link.text(attrs.href);
|
512 |
+
}
|
513 |
+
}
|
514 |
+
|
515 |
+
attrs['data-wplink-edit'] = null;
|
516 |
+
attrs['data-mce-href'] = attrs.href;
|
517 |
+
$link.attr(attrs);
|
518 |
+
}
|
519 |
+
});
|
520 |
+
|
521 |
+
// All in One SEO Pack - Begin
|
522 |
+
$link = editor.$('a[data-wplink-url-error="1"]').removeAttr('data-wplink-url-error');
|
523 |
+
// All in One SEO Pack - End
|
524 |
+
|
525 |
+
wpLink.close('noReset');
|
526 |
+
editor.focus();
|
527 |
+
|
528 |
+
if ($link.length) {
|
529 |
+
editor.selection.select($link[0]);
|
530 |
+
|
531 |
+
if (editor.plugins.wplink) {
|
532 |
+
editor.plugins.wplink.checkLink($link[0]);
|
533 |
+
}
|
534 |
+
}
|
535 |
+
|
536 |
+
editor.nodeChanged();
|
537 |
+
|
538 |
+
// Audible confirmation message when a link has been inserted in the Editor.
|
539 |
+
wp.a11y.speak(aioseopL10n.linkInserted);
|
540 |
+
},
|
541 |
+
|
542 |
+
updateFields: function (e, li) {
|
543 |
+
inputs.url.val(li.children('.item-permalink').val());
|
544 |
+
// All in One SEO Pack - Begin
|
545 |
+
inputs.title.val(li.hasClass('no-title') ? '' : li.children('.item-title').text());
|
546 |
+
// All in One SEO Pack - End
|
547 |
+
|
548 |
+
if (inputs.wrap.hasClass('has-text-field') && !inputs.text.val()) {
|
549 |
+
inputs.text.val(li.children('.item-title').text());
|
550 |
+
}
|
551 |
+
},
|
552 |
+
|
553 |
+
getUrlFromSelection: function (selection) {
|
554 |
+
if (!selection) {
|
555 |
+
if (this.isMCE()) {
|
556 |
+
selection = editor.selection.getContent({ format: 'text' });
|
557 |
+
} else if (document.selection && wpLink.range) {
|
558 |
+
selection = wpLink.range.text;
|
559 |
+
} else if (typeof this.textarea.selectionStart !== 'undefined') {
|
560 |
+
selection = this.textarea.value.substring(this.textarea.selectionStart, this.textarea.selectionEnd);
|
561 |
+
}
|
562 |
+
}
|
563 |
+
|
564 |
+
selection = $.trim(selection);
|
565 |
+
|
566 |
+
if (selection && emailRegexp.test(selection)) {
|
567 |
+
// Selection is email address.
|
568 |
+
return 'mailto:' + selection;
|
569 |
+
} else if (selection && urlRegexp.test(selection)) {
|
570 |
+
// Selection is URL.
|
571 |
+
return selection.replace(/&|�?38;/gi, '&');
|
572 |
+
}
|
573 |
+
|
574 |
+
return '';
|
575 |
+
},
|
576 |
+
|
577 |
+
setDefaultValues: function (selection) {
|
578 |
+
inputs.url.val(this.getUrlFromSelection(selection));
|
579 |
+
|
580 |
+
// All in One SEO Pack - Begin
|
581 |
+
inputs.title.val('');
|
582 |
+
inputs.openInNewTab.prop('checked', false);
|
583 |
+
inputs.tanfl.prop('checked', false);
|
584 |
+
inputs.tanfl_sponsored.prop('checked', false);
|
585 |
+
// All in One SEO Pack - End
|
586 |
+
|
587 |
+
// Empty the search field and swap the "rivers".
|
588 |
+
inputs.search.val('');
|
589 |
+
wpLink.searchInternalLinks();
|
590 |
+
|
591 |
+
// Update save prompt.
|
592 |
+
inputs.submit.val(aioseopL10n.save);
|
593 |
+
},
|
594 |
+
|
595 |
+
searchInternalLinks: function () {
|
596 |
+
var waiting,
|
597 |
+
search = inputs.search.val() || '',
|
598 |
+
minInputLength = parseInt(aioseopL10n.minInputLength, 10) || 3;
|
599 |
+
|
600 |
+
if (search.length >= minInputLength) {
|
601 |
+
rivers.recent.hide();
|
602 |
+
rivers.search.show();
|
603 |
+
|
604 |
+
// Don't search if the keypress didn't change the title.
|
605 |
+
if (wpLink.lastSearch == search)
|
606 |
+
return;
|
607 |
+
|
608 |
+
wpLink.lastSearch = search;
|
609 |
+
waiting = inputs.search.parent().find('.spinner').addClass('is-active');
|
610 |
+
|
611 |
+
rivers.search.change(search);
|
612 |
+
rivers.search.ajax(function () {
|
613 |
+
waiting.removeClass('is-active');
|
614 |
+
});
|
615 |
+
} else {
|
616 |
+
rivers.search.hide();
|
617 |
+
rivers.recent.show();
|
618 |
+
}
|
619 |
+
},
|
620 |
+
|
621 |
+
next: function () {
|
622 |
+
rivers.search.next();
|
623 |
+
rivers.recent.next();
|
624 |
+
},
|
625 |
+
|
626 |
+
prev: function () {
|
627 |
+
rivers.search.prev();
|
628 |
+
rivers.recent.prev();
|
629 |
+
},
|
630 |
+
|
631 |
+
keydown: function (event) {
|
632 |
+
var fn, id;
|
633 |
+
|
634 |
+
// Escape key.
|
635 |
+
if (27 === event.keyCode) {
|
636 |
+
wpLink.close();
|
637 |
+
event.stopImmediatePropagation();
|
638 |
+
// Tab key.
|
639 |
+
} else if (9 === event.keyCode) {
|
640 |
+
id = event.target.id;
|
641 |
+
|
642 |
+
// wp-link-submit must always be the last focusable element in the dialog.
|
643 |
+
// Following focusable elements will be skipped on keyboard navigation.
|
644 |
+
if (id === 'wp-link-submit' && !event.shiftKey) {
|
645 |
+
inputs.close.focus();
|
646 |
+
event.preventDefault();
|
647 |
+
} else if (id === 'wp-link-close' && event.shiftKey) {
|
648 |
+
inputs.submit.focus();
|
649 |
+
event.preventDefault();
|
650 |
+
}
|
651 |
+
}
|
652 |
+
|
653 |
+
// Up Arrow and Down Arrow keys.
|
654 |
+
if (event.shiftKey || (38 !== event.keyCode && 40 !== event.keyCode)) {
|
655 |
+
return;
|
656 |
+
}
|
657 |
+
|
658 |
+
if (document.activeElement &&
|
659 |
+
(document.activeElement.id === 'link-title-field' || document.activeElement.id === 'url-field')) {
|
660 |
+
return;
|
661 |
+
}
|
662 |
+
|
663 |
+
// Up Arrow key.
|
664 |
+
fn = 38 === event.keyCode ? 'prev' : 'next';
|
665 |
+
clearInterval(wpLink.keyInterval);
|
666 |
+
wpLink[fn]();
|
667 |
+
wpLink.keyInterval = setInterval(wpLink[fn], wpLink.keySensitivity);
|
668 |
+
event.preventDefault();
|
669 |
+
},
|
670 |
+
|
671 |
+
keyup: function (event) {
|
672 |
+
// Up Arrow and Down Arrow keys.
|
673 |
+
if (38 === event.keyCode || 40 === event.keyCode) {
|
674 |
+
clearInterval(wpLink.keyInterval);
|
675 |
+
event.preventDefault();
|
676 |
+
}
|
677 |
+
},
|
678 |
+
|
679 |
+
delayedCallback: function (func, delay) {
|
680 |
+
var timeoutTriggered, funcTriggered, funcArgs, funcContext;
|
681 |
+
|
682 |
+
if (!delay)
|
683 |
+
return func;
|
684 |
+
|
685 |
+
setTimeout(function () {
|
686 |
+
if (funcTriggered)
|
687 |
+
return func.apply(funcContext, funcArgs);
|
688 |
+
// Otherwise, wait.
|
689 |
+
timeoutTriggered = true;
|
690 |
+
}, delay);
|
691 |
+
|
692 |
+
return function () {
|
693 |
+
if (timeoutTriggered)
|
694 |
+
return func.apply(this, arguments);
|
695 |
+
// Otherwise, wait.
|
696 |
+
funcArgs = arguments;
|
697 |
+
funcContext = this;
|
698 |
+
funcTriggered = true;
|
699 |
+
};
|
700 |
+
}
|
701 |
+
};
|
702 |
+
|
703 |
+
River = function (element, search) {
|
704 |
+
var self = this;
|
705 |
+
this.element = element;
|
706 |
+
this.ul = element.children('ul');
|
707 |
+
this.contentHeight = element.children('#link-selector-height');
|
708 |
+
this.waiting = element.find('.river-waiting');
|
709 |
+
|
710 |
+
this.change(search);
|
711 |
+
this.refresh();
|
712 |
+
|
713 |
+
$('#wp-link .query-results, #wp-link #link-selector').scroll(function () {
|
714 |
+
self.maybeLoad();
|
715 |
+
});
|
716 |
+
element.on('click', 'li', function (event) {
|
717 |
+
self.select($(this), event);
|
718 |
+
});
|
719 |
+
};
|
720 |
+
|
721 |
+
$.extend(River.prototype, {
|
722 |
+
refresh: function () {
|
723 |
+
this.deselect();
|
724 |
+
this.visible = this.element.is(':visible');
|
725 |
+
},
|
726 |
+
show: function () {
|
727 |
+
if (!this.visible) {
|
728 |
+
this.deselect();
|
729 |
+
this.element.show();
|
730 |
+
this.visible = true;
|
731 |
+
}
|
732 |
+
},
|
733 |
+
hide: function () {
|
734 |
+
this.element.hide();
|
735 |
+
this.visible = false;
|
736 |
+
},
|
737 |
+
// Selects a list item and triggers the river-select event.
|
738 |
+
select: function (li, event) {
|
739 |
+
var liHeight, elHeight, liTop, elTop;
|
740 |
+
|
741 |
+
if (li.hasClass('unselectable') || li == this.selected)
|
742 |
+
return;
|
743 |
+
|
744 |
+
this.deselect();
|
745 |
+
this.selected = li.addClass('selected');
|
746 |
+
// Make sure the element is visible.
|
747 |
+
liHeight = li.outerHeight();
|
748 |
+
elHeight = this.element.height();
|
749 |
+
liTop = li.position().top;
|
750 |
+
elTop = this.element.scrollTop();
|
751 |
+
|
752 |
+
if (liTop < 0) // Make first visible element.
|
753 |
+
this.element.scrollTop(elTop + liTop);
|
754 |
+
else if (liTop + liHeight > elHeight) // Make last visible element.
|
755 |
+
this.element.scrollTop(elTop + liTop - elHeight + liHeight);
|
756 |
+
|
757 |
+
// Trigger the river-select event.
|
758 |
+
this.element.trigger('river-select', [li, event, this]);
|
759 |
+
},
|
760 |
+
deselect: function () {
|
761 |
+
if (this.selected)
|
762 |
+
this.selected.removeClass('selected');
|
763 |
+
this.selected = false;
|
764 |
+
},
|
765 |
+
prev: function () {
|
766 |
+
if (!this.visible)
|
767 |
+
return;
|
768 |
+
|
769 |
+
var to;
|
770 |
+
if (this.selected) {
|
771 |
+
to = this.selected.prev('li');
|
772 |
+
if (to.length)
|
773 |
+
this.select(to);
|
774 |
+
}
|
775 |
+
},
|
776 |
+
next: function () {
|
777 |
+
if (!this.visible)
|
778 |
+
return;
|
779 |
+
|
780 |
+
var to = this.selected ? this.selected.next('li') : $('li:not(.unselectable):first', this.element);
|
781 |
+
if (to.length)
|
782 |
+
this.select(to);
|
783 |
+
},
|
784 |
+
ajax: function (callback) {
|
785 |
+
var self = this,
|
786 |
+
delay = this.query.page == 1 ? 0 : wpLink.minRiverAJAXDuration,
|
787 |
+
response = wpLink.delayedCallback(function (results, params) {
|
788 |
+
self.process(results, params);
|
789 |
+
if (callback)
|
790 |
+
callback(results, params);
|
791 |
+
}, delay);
|
792 |
+
|
793 |
+
this.query.ajax(response);
|
794 |
+
},
|
795 |
+
change: function (search) {
|
796 |
+
if (this.query && this._search == search)
|
797 |
+
return;
|
798 |
+
|
799 |
+
this._search = search;
|
800 |
+
this.query = new Query(search);
|
801 |
+
this.element.scrollTop(0);
|
802 |
+
},
|
803 |
+
process: function (results, params) {
|
804 |
+
var list = '', alt = true, classes = '',
|
805 |
+
firstPage = params.page == 1;
|
806 |
+
|
807 |
+
if (!results) {
|
808 |
+
if (firstPage) {
|
809 |
+
list += '<li class="unselectable no-matches-found"><span class="item-title"><em>' +
|
810 |
+
aioseopL10n.noMatchesFound + '</em></span></li>';
|
811 |
+
}
|
812 |
+
} else {
|
813 |
+
$.each(results, function () {
|
814 |
+
classes = alt ? 'alternate' : '';
|
815 |
+
classes += this.title ? '' : ' no-title';
|
816 |
+
list += classes ? '<li class="' + classes + '">' : '<li>';
|
817 |
+
list += '<input type="hidden" class="item-permalink" value="' + this.permalink + '" />';
|
818 |
+
list += '<span class="item-title">';
|
819 |
+
list += this.title ? this.title : aioseopL10n.noTitle;
|
820 |
+
list += '</span><span class="item-info">' + this.info + '</span></li>';
|
821 |
+
alt = !alt;
|
822 |
+
});
|
823 |
+
}
|
824 |
+
|
825 |
+
this.ul[firstPage ? 'html' : 'append'](list);
|
826 |
+
},
|
827 |
+
maybeLoad: function () {
|
828 |
+
var self = this,
|
829 |
+
el = this.element,
|
830 |
+
bottom = el.scrollTop() + el.height();
|
831 |
+
|
832 |
+
if (!this.query.ready() || bottom < this.contentHeight.height() - wpLink.riverBottomThreshold)
|
833 |
+
return;
|
834 |
+
|
835 |
+
setTimeout(function () {
|
836 |
+
var newTop = el.scrollTop(),
|
837 |
+
newBottom = newTop + el.height();
|
838 |
+
|
839 |
+
if (!self.query.ready() || newBottom < self.contentHeight.height() - wpLink.riverBottomThreshold)
|
840 |
+
return;
|
841 |
+
|
842 |
+
self.waiting.addClass('is-active');
|
843 |
+
el.scrollTop(newTop + self.waiting.outerHeight());
|
844 |
+
|
845 |
+
self.ajax(function () {
|
846 |
+
self.waiting.removeClass('is-active');
|
847 |
+
});
|
848 |
+
}, wpLink.timeToTriggerRiver);
|
849 |
+
}
|
850 |
+
});
|
851 |
+
|
852 |
+
Query = function (search) {
|
853 |
+
this.page = 1;
|
854 |
+
this.allLoaded = false;
|
855 |
+
this.querying = false;
|
856 |
+
this.search = search;
|
857 |
+
};
|
858 |
+
|
859 |
+
$.extend(Query.prototype, {
|
860 |
+
ready: function () {
|
861 |
+
return !(this.querying || this.allLoaded);
|
862 |
+
},
|
863 |
+
ajax: function (callback) {
|
864 |
+
var self = this,
|
865 |
+
query = {
|
866 |
+
action: 'wp-link-ajax',
|
867 |
+
page: this.page,
|
868 |
+
'_ajax_linking_nonce': inputs.nonce.val()
|
869 |
+
};
|
870 |
+
|
871 |
+
if (this.search)
|
872 |
+
query.search = this.search;
|
873 |
+
|
874 |
+
this.querying = true;
|
875 |
+
|
876 |
+
$.post(window.ajaxurl, query, function (r) {
|
877 |
+
self.page++;
|
878 |
+
self.querying = false;
|
879 |
+
self.allLoaded = !r;
|
880 |
+
callback(r, query);
|
881 |
+
}, 'json');
|
882 |
+
}
|
883 |
+
});
|
884 |
+
|
885 |
+
$(document).ready(wpLink.init);
|
886 |
+
})(jQuery, window.aioseopL10n, window.wp);
|
js/admin/aioseop-preview-snippet.js
CHANGED
@@ -19,6 +19,7 @@ jQuery(function($){
|
|
19 |
let timeout = 0;
|
20 |
let autogenerateDescriptions = aioseop_preview_snippet.autogenerateDescriptions;
|
21 |
let skipExcerpt = aioseop_preview_snippet.skipExcerpt;
|
|
|
22 |
let isGutenbergEditor = aioseopIsGutenbergEditor();
|
23 |
|
24 |
$(window).on("load", function() {
|
@@ -40,18 +41,18 @@ jQuery(function($){
|
|
40 |
let postExcerpt = $('#excerpt');
|
41 |
|
42 |
inputFields.push(docTitle, postExcerpt);
|
43 |
-
aioseopAddPreviewSnippetEventListeners(inputFields)
|
44 |
|
45 |
aioseopSetClassicEditorTabSwitchEventListener(aioseopUpdatePreviewSnippet);
|
46 |
aioseopSetClassicEditorEventListener(aioseopUpdatePreviewSnippet);
|
47 |
|
48 |
-
$('#content_ifr').
|
49 |
aioseopUpdatePreviewSnippet();
|
50 |
});
|
51 |
}
|
52 |
else {
|
53 |
aioseopSetGutenbergEditorEventListener(aioseopUpdatePreviewSnippet);
|
54 |
-
aioseopAddPreviewSnippetEventListeners(inputFields)
|
55 |
aioseopUpdatePreviewSnippet();
|
56 |
}
|
57 |
}
|
@@ -138,7 +139,11 @@ jQuery(function($){
|
|
138 |
* @param string postContent
|
139 |
* @return string description
|
140 |
*/
|
141 |
-
function aioseopGetDescription(postContent) {
|
|
|
|
|
|
|
|
|
142 |
// Shorten content first to avoid performance drops.
|
143 |
let description = postContent.substring(0, 5000);
|
144 |
|
19 |
let timeout = 0;
|
20 |
let autogenerateDescriptions = aioseop_preview_snippet.autogenerateDescriptions;
|
21 |
let skipExcerpt = aioseop_preview_snippet.skipExcerpt;
|
22 |
+
let dontShortenDescriptions = aioseop_preview_snippet.dontTruncateDescriptions;
|
23 |
let isGutenbergEditor = aioseopIsGutenbergEditor();
|
24 |
|
25 |
$(window).on("load", function() {
|
41 |
let postExcerpt = $('#excerpt');
|
42 |
|
43 |
inputFields.push(docTitle, postExcerpt);
|
44 |
+
aioseopAddPreviewSnippetEventListeners(inputFields);
|
45 |
|
46 |
aioseopSetClassicEditorTabSwitchEventListener(aioseopUpdatePreviewSnippet);
|
47 |
aioseopSetClassicEditorEventListener(aioseopUpdatePreviewSnippet);
|
48 |
|
49 |
+
$('#content_ifr').ready(function() {
|
50 |
aioseopUpdatePreviewSnippet();
|
51 |
});
|
52 |
}
|
53 |
else {
|
54 |
aioseopSetGutenbergEditorEventListener(aioseopUpdatePreviewSnippet);
|
55 |
+
aioseopAddPreviewSnippetEventListeners(inputFields);
|
56 |
aioseopUpdatePreviewSnippet();
|
57 |
}
|
58 |
}
|
139 |
* @param string postContent
|
140 |
* @return string description
|
141 |
*/
|
142 |
+
function aioseopGetDescription(postContent) {
|
143 |
+
if( 'on' === dontShortenDescriptions ) {
|
144 |
+
return aioseopStripMarkup(postContent);
|
145 |
+
}
|
146 |
+
|
147 |
// Shorten content first to avoid performance drops.
|
148 |
let description = postContent.substring(0, 5000);
|
149 |
|
js/admin/aioseop-quickedit.js
ADDED
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var aioseopQuickEdit;
|
2 |
+
|
3 |
+
(function ($) {
|
4 |
+
aioseopQuickEdit = {
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Generates the textarea element and buttons that are used to edit post meta via a column.
|
8 |
+
*
|
9 |
+
* @since 3.4.0 Refactored function.
|
10 |
+
*
|
11 |
+
* @param Integer postId The ID of the post.
|
12 |
+
* @param String columnName The name of the column/attribute.
|
13 |
+
* @param String nonce The nonce.
|
14 |
+
*/
|
15 |
+
aioseop_ajax_edit_meta_form: function (postId, columnName, nonce) {
|
16 |
+
let field = $(`#aioseop_${columnName}_${postId}`);
|
17 |
+
let dashicon = field.parent().find('.aioseop-quickedit-pencil').first();
|
18 |
+
let previousElements = field.html();
|
19 |
+
let value = field.text().trim();
|
20 |
+
|
21 |
+
let textarea = document.createElement('textarea');
|
22 |
+
textarea.id = `aioseop_new_${columnName}_${postId}`;
|
23 |
+
textarea.classList.add('aioseop-quickedit-input');
|
24 |
+
textarea.rows = 4;
|
25 |
+
textarea.cols = 32;
|
26 |
+
|
27 |
+
if( aioseopadmin.i18n.noValue !== value) {
|
28 |
+
textarea.innerText = value;
|
29 |
+
}
|
30 |
+
|
31 |
+
let buttons = document.createElement('div');
|
32 |
+
|
33 |
+
let btnSave = document.createElement('a');
|
34 |
+
btnSave.id = `aioseop_save_${columnName}_${postId}`;
|
35 |
+
btnSave.classList.add('dashicons', 'dashicons-yes-alt', 'aioseop-quickedit-input-save');
|
36 |
+
btnSave.href = 'javascript:void(0);';
|
37 |
+
btnSave.title = aioseopadmin.i18n.save;
|
38 |
+
|
39 |
+
btnSave.addEventListener('click', function () {
|
40 |
+
aioseopQuickEdit.handle_post_meta(postId, textarea.value, columnName, nonce, previousElements);
|
41 |
+
});
|
42 |
+
|
43 |
+
let btnCancel = document.createElement('a');
|
44 |
+
btnCancel.id = `aioseop_cancel_${columnName}_${postId}`;
|
45 |
+
btnCancel.classList.add('dashicons', 'dashicons-dismiss', 'aioseop-quickedit-input-cancel');
|
46 |
+
btnCancel.href = 'javascript:void(0);';
|
47 |
+
btnCancel.title = aioseopadmin.i18n.cancel;
|
48 |
+
|
49 |
+
btnCancel.addEventListener('click', function () {
|
50 |
+
dashicon.show();
|
51 |
+
field.html(previousElements);
|
52 |
+
});
|
53 |
+
|
54 |
+
buttons.append(btnSave, btnCancel);
|
55 |
+
|
56 |
+
dashicon.hide();
|
57 |
+
field.empty().append(textarea, buttons);
|
58 |
+
},
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Updates the post meta value via AJAX.
|
62 |
+
*
|
63 |
+
* @since 3.4.0 Refactored function.
|
64 |
+
*
|
65 |
+
* @param Integer postId The ID of the post.
|
66 |
+
* @param String value The new value of the attribute.
|
67 |
+
* @param String columnName The name of the column/attribute.
|
68 |
+
* @param String nonce The nonce.
|
69 |
+
* @param Object previousElements The initial column elements (dashicon + span).
|
70 |
+
*/
|
71 |
+
handle_post_meta: function (postId, value, columnName, nonce, previousElements) {
|
72 |
+
let field = $(`div#aioseop_${columnName}_${postId}`);
|
73 |
+
|
74 |
+
let message = document.createElement('span');
|
75 |
+
|
76 |
+
let spinner = document.createElement('img');
|
77 |
+
spinner.src = `${aioseopadmin.imgUrl}activity.gif`;
|
78 |
+
spinner.classList.add('aioseop-quickedit-spinner');
|
79 |
+
spinner.align = 'absmiddle';
|
80 |
+
|
81 |
+
let span = document.createElement('span');
|
82 |
+
span.innerText = aioseopadmin.i18n.wait;
|
83 |
+
span.style.float = 'left';
|
84 |
+
|
85 |
+
message.append(spinner, span);
|
86 |
+
|
87 |
+
field.fadeOut('fast', function () {
|
88 |
+
field.html(message);
|
89 |
+
|
90 |
+
field.fadeIn('fast', function () {
|
91 |
+
|
92 |
+
$.ajax({
|
93 |
+
type: "POST",
|
94 |
+
dataType: "json",
|
95 |
+
url: aioseopadmin.requestUrl,
|
96 |
+
data: {
|
97 |
+
action: "aioseop_ajax_save_meta",
|
98 |
+
post_id: postId,
|
99 |
+
value: value.trim(),
|
100 |
+
key: columnName,
|
101 |
+
_ajax_nonce: nonce
|
102 |
+
},
|
103 |
+
success: function () {
|
104 |
+
field.empty().append(previousElements);
|
105 |
+
|
106 |
+
if('image_title' === columnName) {
|
107 |
+
aioseopMediaColumns.updatePostTitle(postId, value);
|
108 |
+
}
|
109 |
+
|
110 |
+
if('' === value) {
|
111 |
+
value = `<strong>${aioseopadmin.i18n.noValue}</strong>`;
|
112 |
+
}
|
113 |
+
$(`#aioseop_${columnName}_${postId}_value`).html(value);
|
114 |
+
},
|
115 |
+
error: function () {
|
116 |
+
field.empty().append(previousElements);
|
117 |
+
console.log(`Request to update ${columnName} failed.`);
|
118 |
+
}
|
119 |
+
});
|
120 |
+
});
|
121 |
+
});
|
122 |
+
}
|
123 |
+
}
|
124 |
+
|
125 |
+
})(jQuery);
|
126 |
+
|
127 |
+
|
128 |
+
//TODO This needs to be moved to another file.
|
129 |
+
jQuery(document).on('click', '.visibility-notice', function () {
|
130 |
+
|
131 |
+
$.ajax({
|
132 |
+
url: ajaxurl,
|
133 |
+
data: {
|
134 |
+
action: 'aioseo_dismiss_visibility_notice'
|
135 |
+
}
|
136 |
+
});
|
137 |
+
|
138 |
+
});
|
139 |
+
|
140 |
+
jQuery(document).on('click', '.yst_notice', function () {
|
141 |
+
|
142 |
+
$.ajax({
|
143 |
+
url: ajaxurl,
|
144 |
+
data: {
|
145 |
+
action: 'aioseo_dismiss_yst_notice'
|
146 |
+
}
|
147 |
+
});
|
148 |
+
|
149 |
+
});
|
150 |
+
|
151 |
+
jQuery(document).on('click', '.woo-upgrade-notice', function () {
|
152 |
+
|
153 |
+
$.ajax({
|
154 |
+
url: ajaxurl,
|
155 |
+
data: {
|
156 |
+
action: 'aioseo_dismiss_woo_upgrade_notice'
|
157 |
+
}
|
158 |
+
});
|
159 |
+
|
160 |
+
});
|
161 |
+
|
162 |
+
jQuery(document).on('click', '.sitemap_max_urls_notice', function () {
|
163 |
+
|
164 |
+
$.ajax({
|
165 |
+
url: ajaxurl,
|
166 |
+
data: {
|
167 |
+
action: 'aioseo_dismiss_sitemap_max_url_notice'
|
168 |
+
}
|
169 |
+
});
|
170 |
+
|
171 |
+
});
|
js/admin/education/aioseop-deactivate-conflicting-plugins.js
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var aioseopDeactivateConflictingPlugins;
|
2 |
+
|
3 |
+
jQuery(function($) {
|
4 |
+
|
5 |
+
aioseopDeactivateConflictingPlugins = {
|
6 |
+
|
7 |
+
init: function() {
|
8 |
+
aioseopDeactivateConflictingPlugins.addEventListener();
|
9 |
+
},
|
10 |
+
|
11 |
+
addEventListener: function() {
|
12 |
+
let button = $('#aioseop-notice-delay-conflicting_plugin-0');
|
13 |
+
button.removeAttr("href");
|
14 |
+
|
15 |
+
button.on('click', function() {
|
16 |
+
$.ajax(
|
17 |
+
{
|
18 |
+
type: "GET",
|
19 |
+
url: aioseopDeactivateConflictingPluginsData.requestUrl,
|
20 |
+
data: {
|
21 |
+
action: "aioseop_deactivate_conflicting_plugins",
|
22 |
+
_ajax_nonce: aioseopDeactivateConflictingPluginsData.nonce
|
23 |
+
},
|
24 |
+
success: function (response) {
|
25 |
+
let isMatch = window.location.href.match(/.*plugins.php.*/g);
|
26 |
+
if(isMatch) {
|
27 |
+
window.location.reload();
|
28 |
+
}
|
29 |
+
},
|
30 |
+
error: function () {
|
31 |
+
console.log("Couldn't deactivate conflicting plugins.");
|
32 |
+
}
|
33 |
+
}
|
34 |
+
);
|
35 |
+
});
|
36 |
+
|
37 |
+
}
|
38 |
+
}
|
39 |
+
|
40 |
+
aioseopDeactivateConflictingPlugins.init();
|
41 |
+
});
|
js/admin/education/aioseop-license-box.js
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var aioseopLicenseBox;
|
2 |
+
|
3 |
+
jQuery(function ($) {
|
4 |
+
|
5 |
+
aioseopLicenseBox = {
|
6 |
+
|
7 |
+
licenseField: $('#aiosp_license_key_wrapper input'),
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Initializes the code.
|
11 |
+
*
|
12 |
+
* @since 3.4.0
|
13 |
+
*/
|
14 |
+
init: function () {
|
15 |
+
aioseopLicenseBox.hideLicenseField();
|
16 |
+
aioseopLicenseBox.getLicenseBox();
|
17 |
+
},
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Hides the license key field.
|
21 |
+
*
|
22 |
+
* @since 3.4.0
|
23 |
+
*/
|
24 |
+
hideLicenseField: function() {
|
25 |
+
aioseopLicenseBox.licenseField
|
26 |
+
.prop( "disabled", true )
|
27 |
+
.hide();
|
28 |
+
},
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Gets the license box markup from our AJAX endpoint.
|
32 |
+
*
|
33 |
+
* @since 3.4.0
|
34 |
+
*/
|
35 |
+
getLicenseBox: function () {
|
36 |
+
$.ajax(
|
37 |
+
{
|
38 |
+
type: "GET",
|
39 |
+
url: aioseopLicenseBoxData.requestUrl,
|
40 |
+
data: {
|
41 |
+
action: "aioseop_get_license_box",
|
42 |
+
_ajax_nonce: aioseopLicenseBoxData.nonce
|
43 |
+
},
|
44 |
+
success: function (response) {
|
45 |
+
aioseopLicenseBox.prependLicenseBox(response);
|
46 |
+
},
|
47 |
+
error: function () {
|
48 |
+
console.log("Couldn't fetch license box content from our endpoint.");
|
49 |
+
}
|
50 |
+
}
|
51 |
+
);
|
52 |
+
},
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Prepends the license box to the General Settings menu.
|
56 |
+
*
|
57 |
+
* @since 3.4.0
|
58 |
+
*/
|
59 |
+
prependLicenseBox: function (content) {
|
60 |
+
aioseopLicenseBox.licenseField.parent().append(content);
|
61 |
+
}
|
62 |
+
}
|
63 |
+
|
64 |
+
aioseopLicenseBox.init();
|
65 |
+
|
66 |
+
});
|
js/admin/education/aioseop-notice-bar.js
ADDED
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var aioseopNoticeBar;
|
2 |
+
|
3 |
+
jQuery(function ($) {
|
4 |
+
|
5 |
+
aioseopNoticeBar = {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Initializes the code.
|
9 |
+
*
|
10 |
+
* @since 3.4.0
|
11 |
+
*/
|
12 |
+
init: function () {
|
13 |
+
aioseopNoticeBar.getNoticeBar();
|
14 |
+
},
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Gets the notice bar markup from our endpoint.
|
18 |
+
*
|
19 |
+
* @since 3.4.0
|
20 |
+
*/
|
21 |
+
getNoticeBar: function () {
|
22 |
+
$.ajax(
|
23 |
+
{
|
24 |
+
type: "GET",
|
25 |
+
url: aioseopNoticeBarData.requestUrl,
|
26 |
+
data: {
|
27 |
+
action: "aioseop_get_notice_bar",
|
28 |
+
_ajax_nonce: aioseopNoticeBarData.nonce
|
29 |
+
},
|
30 |
+
success: function (response) {
|
31 |
+
if (0 === parseInt(response, 10)) {
|
32 |
+
return;
|
33 |
+
}
|
34 |
+
aioseopNoticeBar.prependNoticeBar(response);
|
35 |
+
},
|
36 |
+
error: function () {
|
37 |
+
console.log("Couldn't fetch notice bar content from our endpoint.");
|
38 |
+
}
|
39 |
+
}
|
40 |
+
);
|
41 |
+
},
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Prepends the notice bar to the current screen.
|
45 |
+
*
|
46 |
+
* @since 3.4.0
|
47 |
+
*/
|
48 |
+
prependNoticeBar: function (content) {
|
49 |
+
let wpBody = jQuery('#wpbody-content');
|
50 |
+
wpBody.prepend(content);
|
51 |
+
|
52 |
+
aioseopNoticeBar.addDismissEventListener();
|
53 |
+
},
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Adds the required event listener to the dismiss button.
|
57 |
+
*
|
58 |
+
* @since 3.4.0
|
59 |
+
*/
|
60 |
+
addDismissEventListener: function () {
|
61 |
+
$('#aioseop-notice-bar').on('click', '.dismiss', function () {
|
62 |
+
let noticeBar = $('#aioseop-notice-bar');
|
63 |
+
|
64 |
+
noticeBar.addClass('out');
|
65 |
+
setTimeout(
|
66 |
+
function () {
|
67 |
+
noticeBar.remove();
|
68 |
+
},
|
69 |
+
300
|
70 |
+
);
|
71 |
+
|
72 |
+
aioseopNoticeBar.dismissNoticeBar();
|
73 |
+
});
|
74 |
+
},
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Dismisses the notice bar via our endpoint.
|
78 |
+
*
|
79 |
+
* @since 3.4.0
|
80 |
+
*/
|
81 |
+
dismissNoticeBar: function () {
|
82 |
+
$.ajax({
|
83 |
+
type: "GET",
|
84 |
+
url: aioseopNoticeBarData.requestUrl,
|
85 |
+
data: {
|
86 |
+
action: "aioseop_dismiss_notice_bar",
|
87 |
+
_ajax_nonce: aioseopNoticeBarData.nonce
|
88 |
+
},
|
89 |
+
error: function () {
|
90 |
+
console.log("Couldn't dismiss notice bar.");
|
91 |
+
}
|
92 |
+
});
|
93 |
+
}
|
94 |
+
}
|
95 |
+
|
96 |
+
aioseopNoticeBar.init();
|
97 |
+
|
98 |
+
});
|
js/admin/education/aioseop-sitemap-prio-upsell.js
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var aioseopSitemapPrioUpsell;
|
2 |
+
|
3 |
+
jQuery(function($) {
|
4 |
+
|
5 |
+
aioseopSitemapPrioUpsell = {
|
6 |
+
|
7 |
+
init: function() {
|
8 |
+
aioseopSitemapPrioUpsell.getSitemapPrioUpsell();
|
9 |
+
},
|
10 |
+
|
11 |
+
getSitemapPrioUpsell: function() {
|
12 |
+
$.ajax(
|
13 |
+
{
|
14 |
+
type: "GET",
|
15 |
+
url: aioseopSitemapPrioUpsellData.requestUrl,
|
16 |
+
data: {
|
17 |
+
action: "aioseop_get_sitemap_prio_upsell",
|
18 |
+
_ajax_nonce: aioseopSitemapPrioUpsellData.nonce
|
19 |
+
},
|
20 |
+
success: function (response) {
|
21 |
+
let option = $('#aiosp_sitemap_priority_wrapper .aioseop_option_div').first();
|
22 |
+
option.append(response);
|
23 |
+
},
|
24 |
+
error: function () {
|
25 |
+
console.log("Couldn't get sitemap prio upsell content.");
|
26 |
+
}
|
27 |
+
}
|
28 |
+
);
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
aioseopSitemapPrioUpsell.init();
|
33 |
+
});
|
js/admin/education/aioseop-taxonomies-upsell.js
ADDED
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var aioseopTaxonomiesUpsell;
|
2 |
+
|
3 |
+
jQuery(function($) {
|
4 |
+
|
5 |
+
aioseopTaxonomiesUpsell = {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Initializes the code.
|
9 |
+
*
|
10 |
+
* @since 3.4.0
|
11 |
+
*/
|
12 |
+
init: function() {
|
13 |
+
aioseopTaxonomiesUpsell.getTaxonomiesUpsell();
|
14 |
+
},
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Gets the taxonomies upsell markup from our AJAX endpoint.
|
18 |
+
*
|
19 |
+
* @since 3.4.0
|
20 |
+
*/
|
21 |
+
getTaxonomiesUpsell: function() {
|
22 |
+
$.ajax({
|
23 |
+
type: "GET",
|
24 |
+
url: aioseopTaxonomiesUpsellData.requestUrl,
|
25 |
+
data: {
|
26 |
+
action: "aioseop_get_taxonomies_upsell",
|
27 |
+
_ajax_nonce: aioseopTaxonomiesUpsellData.nonce,
|
28 |
+
page_id: aioseopTaxonomiesUpsellData.pageId
|
29 |
+
},
|
30 |
+
success: function(response) {
|
31 |
+
if (0 === parseInt(response, 10) || '' === response) {
|
32 |
+
return;
|
33 |
+
}
|
34 |
+
aioseopTaxonomiesUpsell.appendUpsell(response);
|
35 |
+
},
|
36 |
+
error: function() {
|
37 |
+
console.log("Couldn't fetch taxonomies upsell content from our endpoint.");
|
38 |
+
}
|
39 |
+
});
|
40 |
+
},
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Hides the screen content and shows our upsell.
|
44 |
+
*
|
45 |
+
* @since 3.4.0
|
46 |
+
*/
|
47 |
+
appendUpsell: function(content) {
|
48 |
+
let wrapper = $('#wpcontent .wrap');
|
49 |
+
wrapper.append(content);
|
50 |
+
|
51 |
+
let metaboxPreview = wrapper.find('#poststuff');
|
52 |
+
metaboxPreview.find(':input').attr("disabled", true);
|
53 |
+
|
54 |
+
aioseopTaxonomiesUpsell.addDismissEventListener();
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
aioseopTaxonomiesUpsell.init();
|
59 |
+
});
|
js/admin/education/aioseop-video-sitemap-upsell.js
ADDED
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
var aioseopVideoSitemapUpsell;
|
2 |
+
|
3 |
+
jQuery(function($) {
|
4 |
+
|
5 |
+
aioseopVideoSitemapUpsell = {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Initializes the code.
|
9 |
+
*
|
10 |
+
* @since 3.4.0
|
11 |
+
*/
|
12 |
+
init: function() {
|
13 |
+
aioseopVideoSitemapUpsell.getVideoSitemapUpsell();
|
14 |
+
},
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Gets the video sitemap module upsell markup from our endpoint.
|
18 |
+
*
|
19 |
+
* @since 3.4.0
|
20 |
+
*/
|
21 |
+
getVideoSitemapUpsell: function() {
|
22 |
+
$.ajax({
|
23 |
+
type: "GET",
|
24 |
+
url: aioseopVideoSitemapUpsellData.requestUrl,
|
25 |
+
data: {
|
26 |
+
action: "aioseop_get_video_sitemap_upsell",
|
27 |
+
_ajax_nonce: aioseopVideoSitemapUpsellData.nonce
|
28 |
+
},
|
29 |
+
success: function(response) {
|
30 |
+
if (0 === parseInt(response, 10)) {
|
31 |
+
return;
|
32 |
+
}
|
33 |
+
aioseopVideoSitemapUpsell.appendVideoSitemapUpsell(response);
|
34 |
+
},
|
35 |
+
error: function() {
|
36 |
+
console.log("Couldn't fetch video sitemap upsell content from our endpoint.");
|
37 |
+
}
|
38 |
+
});
|
39 |
+
},
|
40 |
+
|
41 |
+
appendVideoSitemapUpsell: function(content) {
|
42 |
+
$('.submit').first().append(content);
|
43 |
+
aioseopVideoSitemapUpsell.addDismissEventListener();
|
44 |
+
},
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Adds the required event listener to the dismiss button.
|
48 |
+
*
|
49 |
+
* @since 3.4.0
|
50 |
+
*/
|
51 |
+
addDismissEventListener: function() {
|
52 |
+
$('#aioseop-video-sitemap-upsell').on('click', '.dismiss', function() {
|
53 |
+
let videoSitemapUpsell = $('#aioseop-video-sitemap-upsell');
|
54 |
+
|
55 |
+
setTimeout(
|
56 |
+
function() {
|
57 |
+
videoSitemapUpsell.remove();
|
58 |
+
},
|
59 |
+
300
|
60 |
+
);
|
61 |
+
|
62 |
+
aioseopVideoSitemapUpsell.dismissVideoSitemapUpsell();
|
63 |
+
});
|
64 |
+
},
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Dismisses the video sitemap upsell via our endpoint.
|
68 |
+
*
|
69 |
+
* @since 3.4.0
|
70 |
+
*/
|
71 |
+
dismissVideoSitemapUpsell: function() {
|
72 |
+
$.ajax({
|
73 |
+
type: "GET",
|
74 |
+
url: aioseopVideoSitemapUpsellData.requestUrl,
|
75 |
+
data: {
|
76 |
+
action: "aioseop_dismiss_video_sitemap_upsell",
|
77 |
+
_ajax_nonce: aioseopVideoSitemapUpsellData.nonce
|
78 |
+
},
|
79 |
+
error: function() {
|
80 |
+
console.log("Couldn't dismiss notice bar.");
|
81 |
+
}
|
82 |
+
});
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
aioseopVideoSitemapUpsell.init();
|
87 |
+
});
|
js/admin/selectize-v0.12.6/selectize.js
ADDED
@@ -0,0 +1,3891 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/**
|
2 |
+
* sifter.js
|
3 |
+
* Copyright (c) 2013 Brian Reavis & contributors
|
4 |
+
*
|
5 |
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
|
6 |
+
* file except in compliance with the License. You may obtain a copy of the License at:
|
7 |
+
* http://www.apache.org/licenses/LICENSE-2.0
|
8 |
+
*
|
9 |
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
10 |
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
11 |
+
* ANY KIND, either express or implied. See the License for the specific language
|
12 |
+
* governing permissions and limitations under the License.
|
13 |
+
*
|
14 |
+
* @author Brian Reavis <brian@thirdroute.com>
|
15 |
+
*/
|
16 |
+
|
17 |
+
(function(root, factory) {
|
18 |
+
if (typeof define === 'function' && define.amd) {
|
19 |
+
define('sifter', factory);
|
20 |
+
} else if (typeof exports === 'object') {
|
21 |
+
module.exports = factory();
|
22 |
+
} else {
|
23 |
+
root.Sifter = factory();
|
24 |
+
}
|
25 |
+
}(this, function() {
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Textually searches arrays and hashes of objects
|
29 |
+
* by property (or multiple properties). Designed
|
30 |
+
* specifically for autocomplete.
|
31 |
+
*
|
32 |
+
* @constructor
|
33 |
+
* @param {array|object} items
|
34 |
+
* @param {object} items
|
35 |
+
*/
|
36 |
+
var Sifter = function(items, settings) {
|
37 |
+
this.items = items;
|
38 |
+
this.settings = settings || {diacritics: true};
|
39 |
+
};
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Splits a search string into an array of individual
|
43 |
+
* regexps to be used to match results.
|
44 |
+
*
|
45 |
+
* @param {string} query
|
46 |
+
* @returns {array}
|
47 |
+
*/
|
48 |
+
Sifter.prototype.tokenize = function(query) {
|
49 |
+
query = trim(String(query || '').toLowerCase());
|
50 |
+
if (!query || !query.length) return [];
|
51 |
+
|
52 |
+
var i, n, regex, letter;
|
53 |
+
var tokens = [];
|
54 |
+
var words = query.split(/ +/);
|
55 |
+
|
56 |
+
for (i = 0, n = words.length; i < n; i++) {
|
57 |
+
regex = escape_regex(words[i]);
|
58 |
+
if (this.settings.diacritics) {
|
59 |
+
for (letter in DIACRITICS) {
|
60 |
+
if (DIACRITICS.hasOwnProperty(letter)) {
|
61 |
+
regex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]);
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
65 |
+
tokens.push({
|
66 |
+
string : words[i],
|
67 |
+
regex : new RegExp(regex, 'i')
|
68 |
+
});
|
69 |
+
}
|
70 |
+
|
71 |
+
return tokens;
|
72 |
+
};
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Iterates over arrays and hashes.
|
76 |
+
*
|
77 |
+
* ```
|
78 |
+
* this.iterator(this.items, function(item, id) {
|
79 |
+
* // invoked for each item
|
80 |
+
* });
|
81 |
+
* ```
|
82 |
+
*
|
83 |
+
* @param {array|object} object
|
84 |
+
*/
|
85 |
+
Sifter.prototype.iterator = function(object, callback) {
|
86 |
+
var iterator;
|
87 |
+
if (is_array(object)) {
|
88 |
+
iterator = Array.prototype.forEach || function(callback) {
|
89 |
+
for (var i = 0, n = this.length; i < n; i++) {
|
90 |
+
callback(this[i], i, this);
|
91 |
+
}
|
92 |
+
};
|
93 |
+
} else {
|
94 |
+
iterator = function(callback) {
|
95 |
+
for (var key in this) {
|
96 |
+
if (this.hasOwnProperty(key)) {
|
97 |
+
callback(this[key], key, this);
|
98 |
+
}
|
99 |
+
}
|
100 |
+
};
|
101 |
+
}
|
102 |
+
|
103 |
+
iterator.apply(object, [callback]);
|
104 |
+
};
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Returns a function to be used to score individual results.
|
108 |
+
*
|
109 |
+
* Good matches will have a higher score than poor matches.
|
110 |
+
* If an item is not a match, 0 will be returned by the function.
|
111 |
+
*
|
112 |
+
* @param {object|string} search
|
113 |
+
* @param {object} options (optional)
|
114 |
+
* @returns {function}
|
115 |
+
*/
|
116 |
+
Sifter.prototype.getScoreFunction = function(search, options) {
|
117 |
+
var self, fields, tokens, token_count, nesting;
|
118 |
+
|
119 |
+
self = this;
|
120 |
+
search = self.prepareSearch(search, options);
|
121 |
+
tokens = search.tokens;
|
122 |
+
fields = search.options.fields;
|
123 |
+
token_count = tokens.length;
|
124 |
+
nesting = search.options.nesting;
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Calculates how close of a match the
|
128 |
+
* given value is against a search token.
|
129 |
+
*
|
130 |
+
* @param {mixed} value
|
131 |
+
* @param {object} token
|
132 |
+
* @return {number}
|
133 |
+
*/
|
134 |
+
var scoreValue = function(value, token) {
|
135 |
+
var score, pos;
|
136 |
+
|
137 |
+
if (!value) return 0;
|
138 |
+
value = String(value || '');
|
139 |
+
pos = value.search(token.regex);
|
140 |
+
if (pos === -1) return 0;
|
141 |
+
score = token.string.length / value.length;
|
142 |
+
if (pos === 0) score += 0.5;
|
143 |
+
return score;
|
144 |
+
};
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Calculates the score of an object
|
148 |
+
* against the search query.
|
149 |
+
*
|
150 |
+
* @param {object} token
|
151 |
+
* @param {object} data
|
152 |
+
* @return {number}
|
153 |
+
*/
|
154 |
+
var scoreObject = (function() {
|
155 |
+
var field_count = fields.length;
|
156 |
+
if (!field_count) {
|
157 |
+
return function() { return 0; };
|
158 |
+
}
|
159 |
+
if (field_count === 1) {
|
160 |
+
return function(token, data) {
|
161 |
+
return scoreValue(getattr(data, fields[0], nesting), token);
|
162 |
+
};
|
163 |
+
}
|
164 |
+
return function(token, data) {
|
165 |
+
for (var i = 0, sum = 0; i < field_count; i++) {
|
166 |
+
sum += scoreValue(getattr(data, fields[i], nesting), token);
|
167 |
+
}
|
168 |
+
return sum / field_count;
|
169 |
+
};
|
170 |
+
})();
|
171 |
+
|
172 |
+
if (!token_count) {
|
173 |
+
return function() { return 0; };
|
174 |
+
}
|
175 |
+
if (token_count === 1) {
|
176 |
+
return function(data) {
|
177 |
+
return scoreObject(tokens[0], data);
|
178 |
+
};
|
179 |
+
}
|
180 |
+
|
181 |
+
if (search.options.conjunction === 'and') {
|
182 |
+
return function(data) {
|
183 |
+
var score;
|
184 |
+
for (var i = 0, sum = 0; i < token_count; i++) {
|
185 |
+
score = scoreObject(tokens[i], data);
|
186 |
+
if (score <= 0) return 0;
|
187 |
+
sum += score;
|
188 |
+
}
|
189 |
+
return sum / token_count;
|
190 |
+
};
|
191 |
+
} else {
|
192 |
+
return function(data) {
|
193 |
+
for (var i = 0, sum = 0; i < token_count; i++) {
|
194 |
+
sum += scoreObject(tokens[i], data);
|
195 |
+
}
|
196 |
+
return sum / token_count;
|
197 |
+
};
|
198 |
+
}
|
199 |
+
};
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Returns a function that can be used to compare two
|
203 |
+
* results, for sorting purposes. If no sorting should
|
204 |
+
* be performed, `null` will be returned.
|
205 |
+
*
|
206 |
+
* @param {string|object} search
|
207 |
+
* @param {object} options
|
208 |
+
* @return function(a,b)
|
209 |
+
*/
|
210 |
+
Sifter.prototype.getSortFunction = function(search, options) {
|
211 |
+
var i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort;
|
212 |
+
|
213 |
+
self = this;
|
214 |
+
search = self.prepareSearch(search, options);
|
215 |
+
sort = (!search.query && options.sort_empty) || options.sort;
|
216 |
+
|
217 |
+
/**
|
218 |
+
* Fetches the specified sort field value
|
219 |
+
* from a search result item.
|
220 |
+
*
|
221 |
+
* @param {string} name
|
222 |
+
* @param {object} result
|
223 |
+
* @return {mixed}
|
224 |
+
*/
|
225 |
+
get_field = function(name, result) {
|
226 |
+
if (name === '$score') return result.score;
|
227 |
+
return getattr(self.items[result.id], name, options.nesting);
|
228 |
+
};
|
229 |
+
|
230 |
+
// parse options
|
231 |
+
fields = [];
|
232 |
+
if (sort) {
|
233 |
+
for (i = 0, n = sort.length; i < n; i++) {
|
234 |
+
if (search.query || sort[i].field !== '$score') {
|
235 |
+
fields.push(sort[i]);
|
236 |
+
}
|
237 |
+
}
|
238 |
+
}
|
239 |
+
|
240 |
+
// the "$score" field is implied to be the primary
|
241 |
+
// sort field, unless it's manually specified
|
242 |
+
if (search.query) {
|
243 |
+
implicit_score = true;
|
244 |
+
for (i = 0, n = fields.length; i < n; i++) {
|
245 |
+
if (fields[i].field === '$score') {
|
246 |
+
implicit_score = false;
|
247 |
+
break;
|
248 |
+
}
|
249 |
+
}
|
250 |
+
if (implicit_score) {
|
251 |
+
fields.unshift({field: '$score', direction: 'desc'});
|
252 |
+
}
|
253 |
+
} else {
|
254 |
+
for (i = 0, n = fields.length; i < n; i++) {
|
255 |
+
if (fields[i].field === '$score') {
|
256 |
+
fields.splice(i, 1);
|
257 |
+
break;
|
258 |
+
}
|
259 |
+
}
|
260 |
+
}
|
261 |
+
|
262 |
+
multipliers = [];
|
263 |
+
for (i = 0, n = fields.length; i < n; i++) {
|
264 |
+
multipliers.push(fields[i].direction === 'desc' ? -1 : 1);
|
265 |
+
}
|
266 |
+
|
267 |
+
// build function
|
268 |
+
fields_count = fields.length;
|
269 |
+
if (!fields_count) {
|
270 |
+
return null;
|
271 |
+
} else if (fields_count === 1) {
|
272 |
+
field = fields[0].field;
|
273 |
+
multiplier = multipliers[0];
|
274 |
+
return function(a, b) {
|
275 |
+
return multiplier * cmp(
|
276 |
+
get_field(field, a),
|
277 |
+
get_field(field, b)
|
278 |
+
);
|
279 |
+
};
|
280 |
+
} else {
|
281 |
+
return function(a, b) {
|
282 |
+
var i, result, a_value, b_value, field;
|
283 |
+
for (i = 0; i < fields_count; i++) {
|
284 |
+
field = fields[i].field;
|
285 |
+
result = multipliers[i] * cmp(
|
286 |
+
get_field(field, a),
|
287 |
+
get_field(field, b)
|
288 |
+
);
|
289 |
+
if (result) return result;
|
290 |
+
}
|
291 |
+
return 0;
|
292 |
+
};
|
293 |
+
}
|
294 |
+
};
|
295 |
+
|
296 |
+
/**
|
297 |
+
* Parses a search query and returns an object
|
298 |
+
* with tokens and fields ready to be populated
|
299 |
+
* with results.
|
300 |
+
*
|
301 |
+
* @param {string} query
|
302 |
+
* @param {object} options
|
303 |
+
* @returns {object}
|
304 |
+
*/
|
305 |
+
Sifter.prototype.prepareSearch = function(query, options) {
|
306 |
+
if (typeof query === 'object') return query;
|
307 |
+
|
308 |
+
options = extend({}, options);
|
309 |
+
|
310 |
+
var option_fields = options.fields;
|
311 |
+
var option_sort = options.sort;
|
312 |
+
var option_sort_empty = options.sort_empty;
|
313 |
+
|
314 |
+
if (option_fields && !is_array(option_fields)) options.fields = [option_fields];
|
315 |
+
if (option_sort && !is_array(option_sort)) options.sort = [option_sort];
|
316 |
+
if (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty];
|
317 |
+
|
318 |
+
return {
|
319 |
+
options : options,
|
320 |
+
query : String(query || '').toLowerCase(),
|
321 |
+
tokens : this.tokenize(query),
|
322 |
+
total : 0,
|
323 |
+
items : []
|
324 |
+
};
|
325 |
+
};
|
326 |
+
|
327 |
+
/**
|
328 |
+
* Searches through all items and returns a sorted array of matches.
|
329 |
+
*
|
330 |
+
* The `options` parameter can contain:
|
331 |
+
*
|
332 |
+
* - fields {string|array}
|
333 |
+
* - sort {array}
|
334 |
+
* - score {function}
|
335 |
+
* - filter {bool}
|
336 |
+
* - limit {integer}
|
337 |
+
*
|
338 |
+
* Returns an object containing:
|
339 |
+
*
|
340 |
+
* - options {object}
|
341 |
+
* - query {string}
|
342 |
+
* - tokens {array}
|
343 |
+
* - total {int}
|
344 |
+
* - items {array}
|
345 |
+
*
|
346 |
+
* @param {string} query
|
347 |
+
* @param {object} options
|
348 |
+
* @returns {object}
|
349 |
+
*/
|
350 |
+
Sifter.prototype.search = function(query, options) {
|
351 |
+
var self = this, value, score, search, calculateScore;
|
352 |
+
var fn_sort;
|
353 |
+
var fn_score;
|
354 |
+
|
355 |
+
search = this.prepareSearch(query, options);
|
356 |
+
options = search.options;
|
357 |
+
query = search.query;
|
358 |
+
|
359 |
+
// generate result scoring function
|
360 |
+
fn_score = options.score || self.getScoreFunction(search);
|
361 |
+
|
362 |
+
// perform search and sort
|
363 |
+
if (query.length) {
|
364 |
+
self.iterator(self.items, function(item, id) {
|
365 |
+
score = fn_score(item);
|
366 |
+
if (options.filter === false || score > 0) {
|
367 |
+
search.items.push({'score': score, 'id': id});
|
368 |
+
}
|
369 |
+
});
|
370 |
+
} else {
|
371 |
+
self.iterator(self.items, function(item, id) {
|
372 |
+
search.items.push({'score': 1, 'id': id});
|
373 |
+
});
|
374 |
+
}
|
375 |
+
|
376 |
+
fn_sort = self.getSortFunction(search, options);
|
377 |
+
if (fn_sort) search.items.sort(fn_sort);
|
378 |
+
|
379 |
+
// apply limits
|
380 |
+
search.total = search.items.length;
|
381 |
+
if (typeof options.limit === 'number') {
|
382 |
+
search.items = search.items.slice(0, options.limit);
|
383 |
+
}
|
384 |
+
|
385 |
+
return search;
|
386 |
+
};
|
387 |
+
|
388 |
+
// utilities
|
389 |
+
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
390 |
+
|
391 |
+
var cmp = function(a, b) {
|
392 |
+
if (typeof a === 'number' && typeof b === 'number') {
|
393 |
+
return a > b ? 1 : (a < b ? -1 : 0);
|
394 |
+
}
|
395 |
+
a = asciifold(String(a || ''));
|
396 |
+
b = asciifold(String(b || ''));
|
397 |
+
if (a > b) return 1;
|
398 |
+
if (b > a) return -1;
|
399 |
+
return 0;
|
400 |
+
};
|
401 |
+
|
402 |
+
var extend = function(a, b) {
|
403 |
+
var i, n, k, object;
|
404 |
+
for (i = 1, n = arguments.length; i < n; i++) {
|
405 |
+
object = arguments[i];
|
406 |
+
if (!object) continue;
|
407 |
+
for (k in object) {
|
408 |
+
if (object.hasOwnProperty(k)) {
|
409 |
+
a[k] = object[k];
|
410 |
+
}
|
411 |
+
}
|
412 |
+
}
|
413 |
+
return a;
|
414 |
+
};
|
415 |
+
|
416 |
+
/**
|
417 |
+
* A property getter resolving dot-notation
|
418 |
+
* @param {Object} obj The root object to fetch property on
|
419 |
+
* @param {String} name The optionally dotted property name to fetch
|
420 |
+
* @param {Boolean} nesting Handle nesting or not
|
421 |
+
* @return {Object} The resolved property value
|
422 |
+
*/
|
423 |
+
var getattr = function(obj, name, nesting) {
|
424 |
+
if (!obj || !name) return;
|
425 |
+
if (!nesting) return obj[name];
|
426 |
+
var names = name.split(".");
|
427 |
+
while(names.length && (obj = obj[names.shift()]));
|
428 |
+
return obj;
|
429 |
+
};
|
430 |
+
|
431 |
+
var trim = function(str) {
|
432 |
+
return (str + '').replace(/^\s+|\s+$|/g, '');
|
433 |
+
};
|
434 |
+
|
435 |
+
var escape_regex = function(str) {
|
436 |
+
return (str + '').replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
|
437 |
+
};
|
438 |
+
|
439 |
+
var is_array = Array.isArray || (typeof $ !== 'undefined' && $.isArray) || function(object) {
|
440 |
+
return Object.prototype.toString.call(object) === '[object Array]';
|
441 |
+
};
|
442 |
+
|
443 |
+
var DIACRITICS = {
|
444 |
+
'a': '[aḀḁĂăÂâǍǎȺⱥȦȧẠạÄäÀàÁáĀāÃãÅåąĄÃąĄ]',
|
445 |
+
'b': '[b␢βΒB฿𐌁ᛒ]',
|
446 |
+
'c': '[cĆćĈĉČčĊċC̄c̄ÇçḈḉȻȼƇƈɕᴄCc]',
|
447 |
+
'd': '[dĎďḊḋḐḑḌḍḒḓḎḏĐđD̦d̦ƉɖƊɗƋƌᵭᶁᶑȡᴅDdð]',
|
448 |
+
'e': '[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀềỄễỂểḜḝḖḗḔḕȆȇẸẹỆệⱸᴇEeɘǝƏƐε]',
|
449 |
+
'f': '[fƑƒḞḟ]',
|
450 |
+
'g': '[gɢ₲ǤǥĜĝĞğĢģƓɠĠġ]',
|
451 |
+
'h': '[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]',
|
452 |
+
'i': '[iÍíÌìĬĭÎîǏǐÏïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪIi]',
|
453 |
+
'j': '[jȷĴĵɈɉʝɟʲ]',
|
454 |
+
'k': '[kƘƙꝀꝁḰḱǨǩḲḳḴḵκϰ₭]',
|
455 |
+
'l': '[lŁłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟLl]',
|
456 |
+
'n': '[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ƝɲȠƞᵰᶇɳȵɴNnŊŋ]',
|
457 |
+
'o': '[oØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌōÕõǪǫȌȍՕօ]',
|
458 |
+
'p': '[pṔṕṖṗⱣᵽƤƥᵱ]',
|
459 |
+
'q': '[qꝖꝗʠɊɋꝘꝙq̃]',
|
460 |
+
'r': '[rŔŕɌɍŘřŖŗṘṙȐȑȒȓṚṛⱤɽ]',
|
461 |
+
's': '[sŚśṠṡṢṣꞨꞩŜŝŠšŞşȘșS̈s̈]',
|
462 |
+
't': '[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]',
|
463 |
+
'u': '[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]',
|
464 |
+
'v': '[vṼṽṾṿƲʋꝞꝟⱱʋ]',
|
465 |
+
'w': '[wẂẃẀẁŴŵẄẅẆẇẈẉ]',
|
466 |
+
'x': '[xẌẍẊẋχ]',
|
467 |
+
'y': '[yÝýỲỳŶŷŸÿỸỹẎẏỴỵɎɏƳƴ]',
|
468 |
+
'z': '[zŹźẐẑŽžŻżẒẓẔẕƵƶ]'
|
469 |
+
};
|
470 |
+
|
471 |
+
var asciifold = (function() {
|
472 |
+
var i, n, k, chunk;
|
473 |
+
var foreignletters = '';
|
474 |
+
var lookup = {};
|
475 |
+
for (k in DIACRITICS) {
|
476 |
+
if (DIACRITICS.hasOwnProperty(k)) {
|
477 |
+
chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1);
|
478 |
+
foreignletters += chunk;
|
479 |
+
for (i = 0, n = chunk.length; i < n; i++) {
|
480 |
+
lookup[chunk.charAt(i)] = k;
|
481 |
+
}
|
482 |
+
}
|
483 |
+
}
|
484 |
+
var regexp = new RegExp('[' + foreignletters + ']', 'g');
|
485 |
+
return function(str) {
|
486 |
+
return str.replace(regexp, function(foreignletter) {
|
487 |
+
return lookup[foreignletter];
|
488 |
+
}).toLowerCase();
|
489 |
+
};
|
490 |
+
})();
|
491 |
+
|
492 |
+
|
493 |
+
// export
|
494 |
+
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
495 |
+
|
496 |
+
return Sifter;
|
497 |
+
}));
|
498 |
+
|
499 |
+
|
500 |
+
|
501 |
+
/**
|
502 |
+
* microplugin.js
|
503 |
+
* Copyright (c) 2013 Brian Reavis & contributors
|
504 |
+
*
|
505 |
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
|
506 |
+
* file except in compliance with the License. You may obtain a copy of the License at:
|
507 |
+
* http://www.apache.org/licenses/LICENSE-2.0
|
508 |
+
*
|
509 |
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
510 |
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
511 |
+
* ANY KIND, either express or implied. See the License for the specific language
|
512 |
+
* governing permissions and limitations under the License.
|
513 |
+
*
|
514 |
+
* @author Brian Reavis <brian@thirdroute.com>
|
515 |
+
*/
|
516 |
+
|
517 |
+
(function(root, factory) {
|
518 |
+
if (typeof define === 'function' && define.amd) {
|
519 |
+
define('microplugin', factory);
|
520 |
+
} else if (typeof exports === 'object') {
|
521 |
+
module.exports = factory();
|
522 |
+
} else {
|
523 |
+
root.MicroPlugin = factory();
|
524 |
+
}
|
525 |
+
}(this, function() {
|
526 |
+
var MicroPlugin = {};
|
527 |
+
|
528 |
+
MicroPlugin.mixin = function(Interface) {
|
529 |
+
Interface.plugins = {};
|
530 |
+
|
531 |
+
/**
|
532 |
+
* Initializes the listed plugins (with options).
|
533 |
+
* Acceptable formats:
|
534 |
+
*
|
535 |
+
* List (without options):
|
536 |
+
* ['a', 'b', 'c']
|
537 |
+
*
|
538 |
+
* List (with options):
|
539 |
+
* [{'name': 'a', options: {}}, {'name': 'b', options: {}}]
|
540 |
+
*
|
541 |
+
* Hash (with options):
|
542 |
+
* {'a': { ... }, 'b': { ... }, 'c': { ... }}
|
543 |
+
*
|
544 |
+
* @param {mixed} plugins
|
545 |
+
*/
|
546 |
+
Interface.prototype.initializePlugins = function(plugins) {
|
547 |
+
var i, n, key;
|
548 |
+
var self = this;
|
549 |
+
var queue = [];
|
550 |
+
|
551 |
+
self.plugins = {
|
552 |
+
names : [],
|
553 |
+
settings : {},
|
554 |
+
requested : {},
|
555 |
+
loaded : {}
|
556 |
+
};
|
557 |
+
|
558 |
+
if (utils.isArray(plugins)) {
|
559 |
+
for (i = 0, n = plugins.length; i < n; i++) {
|
560 |
+
if (typeof plugins[i] === 'string') {
|
561 |
+
queue.push(plugins[i]);
|
562 |
+
} else {
|
563 |
+
self.plugins.settings[plugins[i].name] = plugins[i].options;
|
564 |
+
queue.push(plugins[i].name);
|
565 |
+
}
|
566 |
+
}
|
567 |
+
} else if (plugins) {
|
568 |
+
for (key in plugins) {
|
569 |
+
if (plugins.hasOwnProperty(key)) {
|
570 |
+
self.plugins.settings[key] = plugins[key];
|
571 |
+
queue.push(key);
|
572 |
+
}
|
573 |
+
}
|
574 |
+
}
|
575 |
+
|
576 |
+
while (queue.length) {
|
577 |
+
self.require(queue.shift());
|
578 |
+
}
|
579 |
+
};
|
580 |
+
|
581 |
+
Interface.prototype.loadPlugin = function(name) {
|
582 |
+
var self = this;
|
583 |
+
var plugins = self.plugins;
|
584 |
+
var plugin = Interface.plugins[name];
|
585 |
+
|
586 |
+
if (!Interface.plugins.hasOwnProperty(name)) {
|
587 |
+
throw new Error('Unable to find "' + name + '" plugin');
|
588 |
+
}
|
589 |
+
|
590 |
+
plugins.requested[name] = true;
|
591 |
+
plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);
|
592 |
+
plugins.names.push(name);
|
593 |
+
};
|
594 |
+
|
595 |
+
/**
|
596 |
+
* Initializes a plugin.
|
597 |
+
*
|
598 |
+
* @param {string} name
|
599 |
+
*/
|
600 |
+
Interface.prototype.require = function(name) {
|
601 |
+
var self = this;
|
602 |
+
var plugins = self.plugins;
|
603 |
+
|
604 |
+
if (!self.plugins.loaded.hasOwnProperty(name)) {
|
605 |
+
if (plugins.requested[name]) {
|
606 |
+
throw new Error('Plugin has circular dependency ("' + name + '")');
|
607 |
+
}
|
608 |
+
self.loadPlugin(name);
|
609 |
+
}
|
610 |
+
|
611 |
+
return plugins.loaded[name];
|
612 |
+
};
|
613 |
+
|
614 |
+
/**
|
615 |
+
* Registers a plugin.
|
616 |
+
*
|
617 |
+
* @param {string} name
|
618 |
+
* @param {function} fn
|
619 |
+
*/
|
620 |
+
Interface.define = function(name, fn) {
|
621 |
+
Interface.plugins[name] = {
|
622 |
+
'name' : name,
|
623 |
+
'fn' : fn
|
624 |
+
};
|
625 |
+
};
|
626 |
+
};
|
627 |
+
|
628 |
+
var utils = {
|
629 |
+
isArray: Array.isArray || function(vArg) {
|
630 |
+
return Object.prototype.toString.call(vArg) === '[object Array]';
|
631 |
+
}
|
632 |
+
};
|
633 |
+
|
634 |
+
return MicroPlugin;
|
635 |
+
}));
|
636 |
+
|
637 |
+
/**
|
638 |
+
* selectize.js (v0.12.6)
|
639 |
+
* Copyright (c) 2013–2015 Brian Reavis & contributors
|
640 |
+
*
|
641 |
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
|
642 |
+
* file except in compliance with the License. You may obtain a copy of the License at:
|
643 |
+
* http://www.apache.org/licenses/LICENSE-2.0
|
644 |
+
*
|
645 |
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
646 |
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
647 |
+
* ANY KIND, either express or implied. See the License for the specific language
|
648 |
+
* governing permissions and limitations under the License.
|
649 |
+
*
|
650 |
+
* @author Brian Reavis <brian@thirdroute.com>
|
651 |
+
*/
|
652 |
+
|
653 |
+
/*jshint curly:false */
|
654 |
+
/*jshint browser:true */
|
655 |
+
|
656 |
+
(function(root, factory) {
|
657 |
+
if (typeof define === 'function' && define.amd) {
|
658 |
+
define('selectize', ['jquery','sifter','microplugin'], factory);
|
659 |
+
} else if (typeof exports === 'object') {
|
660 |
+
module.exports = factory(require('jquery'), require('sifter'), require('microplugin'));
|
661 |
+
} else {
|
662 |
+
root.Selectize = factory(root.jQuery, root.Sifter, root.MicroPlugin);
|
663 |
+
}
|
664 |
+
}(this, function($, Sifter, MicroPlugin) {
|
665 |
+
'use strict';
|
666 |
+
|
667 |
+
var highlight = function($element, pattern) {
|
668 |
+
if (typeof pattern === 'string' && !pattern.length) return;
|
669 |
+
var regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern;
|
670 |
+
|
671 |
+
var highlight = function(node) {
|
672 |
+
var skip = 0;
|
673 |
+
// Wrap matching part of text node with highlighting <span>, e.g.
|
674 |
+
// Soccer -> <span class="highlight">Soc</span>cer for regex = /soc/i
|
675 |
+
if (node.nodeType === 3) {
|
676 |
+
var pos = node.data.search(regex);
|
677 |
+
if (pos >= 0 && node.data.length > 0) {
|
678 |
+
var match = node.data.match(regex);
|
679 |
+
var spannode = document.createElement('span');
|
680 |
+
spannode.className = 'highlight';
|
681 |
+
var middlebit = node.splitText(pos);
|
682 |
+
var endbit = middlebit.splitText(match[0].length);
|
683 |
+
var middleclone = middlebit.cloneNode(true);
|
684 |
+
spannode.appendChild(middleclone);
|
685 |
+
middlebit.parentNode.replaceChild(spannode, middlebit);
|
686 |
+
skip = 1;
|
687 |
+
}
|
688 |
+
}
|
689 |
+
// Recurse element node, looking for child text nodes to highlight, unless element
|
690 |
+
// is childless, <script>, <style>, or already highlighted: <span class="hightlight">
|
691 |
+
else if (node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' )) {
|
692 |
+
for (var i = 0; i < node.childNodes.length; ++i) {
|
693 |
+
i += highlight(node.childNodes[i]);
|
694 |
+
}
|
695 |
+
}
|
696 |
+
return skip;
|
697 |
+
};
|
698 |
+
|
699 |
+
return $element.each(function() {
|
700 |
+
highlight(this);
|
701 |
+
});
|
702 |
+
};
|
703 |
+
|
704 |
+
/**
|
705 |
+
* removeHighlight fn copied from highlight v5 and
|
706 |
+
* edited to remove with() and pass js strict mode
|
707 |
+
*/
|
708 |
+
$.fn.removeHighlight = function() {
|
709 |
+
return this.find("span.highlight").each(function() {
|
710 |
+
this.parentNode.firstChild.nodeName;
|
711 |
+
var parent = this.parentNode;
|
712 |
+
parent.replaceChild(this.firstChild, this);
|
713 |
+
parent.normalize();
|
714 |
+
}).end();
|
715 |
+
};
|
716 |
+
|
717 |
+
|
718 |
+
var MicroEvent = function() {};
|
719 |
+
MicroEvent.prototype = {
|
720 |
+
on: function(event, fct){
|
721 |
+
this._events = this._events || {};
|
722 |
+
this._events[event] = this._events[event] || [];
|
723 |
+
this._events[event].push(fct);
|
724 |
+
},
|
725 |
+
off: function(event, fct){
|
726 |
+
var n = arguments.length;
|
727 |
+
if (n === 0) return delete this._events;
|
728 |
+
if (n === 1) return delete this._events[event];
|
729 |
+
|
730 |
+
this._events = this._events || {};
|
731 |
+
if (event in this._events === false) return;
|
732 |
+
this._events[event].splice(this._events[event].indexOf(fct), 1);
|
733 |
+
},
|
734 |
+
trigger: function(event /* , args... */){
|
735 |
+
this._events = this._events || {};
|
736 |
+
if (event in this._events === false) return;
|
737 |
+
for (var i = 0; i < this._events[event].length; i++){
|
738 |
+
this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));
|
739 |
+
}
|
740 |
+
}
|
741 |
+
};
|
742 |
+
|
743 |
+
/**
|
744 |
+
* Mixin will delegate all MicroEvent.js function in the destination object.
|
745 |
+
*
|
746 |
+
* - MicroEvent.mixin(Foobar) will make Foobar able to use MicroEvent
|
747 |
+
*
|
748 |
+
* @param {object} the object which will support MicroEvent
|
749 |
+
*/
|
750 |
+
MicroEvent.mixin = function(destObject){
|
751 |
+
var props = ['on', 'off', 'trigger'];
|
752 |
+
for (var i = 0; i < props.length; i++){
|
753 |
+
destObject.prototype[props[i]] = MicroEvent.prototype[props[i]];
|
754 |
+
}
|
755 |
+
};
|
756 |
+
|
757 |
+
var IS_MAC = /Mac/.test(navigator.userAgent);
|
758 |
+
|
759 |
+
var KEY_A = 65;
|
760 |
+
var KEY_COMMA = 188;
|
761 |
+
var KEY_RETURN = 13;
|
762 |
+
var KEY_ESC = 27;
|
763 |
+
var KEY_LEFT = 37;
|
764 |
+
var KEY_UP = 38;
|
765 |
+
var KEY_P = 80;
|
766 |
+
var KEY_RIGHT = 39;
|
767 |
+
var KEY_DOWN = 40;
|
768 |
+
var KEY_N = 78;
|
769 |
+
var KEY_BACKSPACE = 8;
|
770 |
+
var KEY_DELETE = 46;
|
771 |
+
var KEY_SHIFT = 16;
|
772 |
+
var KEY_CMD = IS_MAC ? 91 : 17;
|
773 |
+
var KEY_CTRL = IS_MAC ? 18 : 17;
|
774 |
+
var KEY_TAB = 9;
|
775 |
+
|
776 |
+
var TAG_SELECT = 1;
|
777 |
+
var TAG_INPUT = 2;
|
778 |
+
|
779 |
+
// for now, android support in general is too spotty to support validity
|
780 |
+
var SUPPORTS_VALIDITY_API = !/android/i.test(window.navigator.userAgent) && !!document.createElement('input').validity;
|
781 |
+
|
782 |
+
|
783 |
+
var isset = function(object) {
|
784 |
+
return typeof object !== 'undefined';
|
785 |
+
};
|
786 |
+
|
787 |
+
/**
|
788 |
+
* Converts a scalar to its best string representation
|
789 |
+
* for hash keys and HTML attribute values.
|
790 |
+
*
|
791 |
+
* Transformations:
|
792 |
+
* 'str' -> 'str'
|
793 |
+
* null -> ''
|
794 |
+
* undefined -> ''
|
795 |
+
* true -> '1'
|
796 |
+
* false -> '0'
|
797 |
+
* 0 -> '0'
|
798 |
+
* 1 -> '1'
|
799 |
+
*
|
800 |
+
* @param {string} value
|
801 |
+
* @returns {string|null}
|
802 |
+
*/
|
803 |
+
var hash_key = function(value) {
|
804 |
+
if (typeof value === 'undefined' || value === null) return null;
|
805 |
+
if (typeof value === 'boolean') return value ? '1' : '0';
|
806 |
+
return value + '';
|
807 |
+
};
|
808 |
+
|
809 |
+
/**
|
810 |
+
* Escapes a string for use within HTML.
|
811 |
+
*
|
812 |
+
* @param {string} str
|
813 |
+
* @returns {string}
|
814 |
+
*/
|
815 |
+
var escape_html = function(str) {
|
816 |
+
return (str + '')
|
817 |
+
.replace(/&/g, '&')
|
818 |
+
.replace(/</g, '<')
|
819 |
+
.replace(/>/g, '>')
|
820 |
+
.replace(/"/g, '"');
|
821 |
+
};
|
822 |
+
|
823 |
+
/**
|
824 |
+
* Escapes "$" characters in replacement strings.
|
825 |
+
*
|
826 |
+
* @param {string} str
|
827 |
+
* @returns {string}
|
828 |
+
*/
|
829 |
+
var escape_replace = function(str) {
|
830 |
+
return (str + '').replace(/\$/g, '$$$$');
|
831 |
+
};
|
832 |
+
|
833 |
+
var hook = {};
|
834 |
+
|
835 |
+
/**
|
836 |
+
* Wraps `method` on `self` so that `fn`
|
837 |
+
* is invoked before the original method.
|
838 |
+
*
|
839 |
+
* @param {object} self
|
840 |
+
* @param {string} method
|
841 |
+
* @param {function} fn
|
842 |
+
*/
|
843 |
+
hook.before = function(self, method, fn) {
|
844 |
+
var original = self[method];
|
845 |
+
self[method] = function() {
|
846 |
+
fn.apply(self, arguments);
|
847 |
+
return original.apply(self, arguments);
|
848 |
+
};
|
849 |
+
};
|
850 |
+
|
851 |
+
/**
|
852 |
+
* Wraps `method` on `self` so that `fn`
|
853 |
+
* is invoked after the original method.
|
854 |
+
*
|
855 |
+
* @param {object} self
|
856 |
+
* @param {string} method
|
857 |
+
* @param {function} fn
|
858 |
+
*/
|
859 |
+
hook.after = function(self, method, fn) {
|
860 |
+
var original = self[method];
|
861 |
+
self[method] = function() {
|
862 |
+
var result = original.apply(self, arguments);
|
863 |
+
fn.apply(self, arguments);
|
864 |
+
return result;
|
865 |
+
};
|
866 |
+
};
|
867 |
+
|
868 |
+
/**
|
869 |
+
* Wraps `fn` so that it can only be invoked once.
|
870 |
+
*
|
871 |
+
* @param {function} fn
|
872 |
+
* @returns {function}
|
873 |
+
*/
|
874 |
+
var once = function(fn) {
|
875 |
+
var called = false;
|
876 |
+
return function() {
|
877 |
+
if (called) return;
|
878 |
+
called = true;
|
879 |
+
fn.apply(this, arguments);
|
880 |
+
};
|
881 |
+
};
|
882 |
+
|
883 |
+
/**
|
884 |
+
* Wraps `fn` so that it can only be called once
|
885 |
+
* every `delay` milliseconds (invoked on the falling edge).
|
886 |
+
*
|
887 |
+
* @param {function} fn
|
888 |
+
* @param {int} delay
|
889 |
+
* @returns {function}
|
890 |
+
*/
|
891 |
+
var debounce = function(fn, delay) {
|
892 |
+
var timeout;
|
893 |
+
return function() {
|
894 |
+
var self = this;
|
895 |
+
var args = arguments;
|
896 |
+
window.clearTimeout(timeout);
|
897 |
+
timeout = window.setTimeout(function() {
|
898 |
+
fn.apply(self, args);
|
899 |
+
}, delay);
|
900 |
+
};
|
901 |
+
};
|
902 |
+
|
903 |
+
/**
|
904 |
+
* Debounce all fired events types listed in `types`
|
905 |
+
* while executing the provided `fn`.
|
906 |
+
*
|
907 |
+
* @param {object} self
|
908 |
+
* @param {array} types
|
909 |
+
* @param {function} fn
|
910 |
+
*/
|
911 |
+
var debounce_events = function(self, types, fn) {
|
912 |
+
var type;
|
913 |
+
var trigger = self.trigger;
|
914 |
+
var event_args = {};
|
915 |
+
|
916 |
+
// override trigger method
|
917 |
+
self.trigger = function() {
|
918 |
+
var type = arguments[0];
|
919 |
+
if (types.indexOf(type) !== -1) {
|
920 |
+
event_args[type] = arguments;
|
921 |
+
} else {
|
922 |
+
return trigger.apply(self, arguments);
|
923 |
+
}
|
924 |
+
};
|
925 |
+
|
926 |
+
// invoke provided function
|
927 |
+
fn.apply(self, []);
|
928 |
+
self.trigger = trigger;
|
929 |
+
|
930 |
+
// trigger queued events
|
931 |
+
for (type in event_args) {
|
932 |
+
if (event_args.hasOwnProperty(type)) {
|
933 |
+
trigger.apply(self, event_args[type]);
|
934 |
+
}
|
935 |
+
}
|
936 |
+
};
|
937 |
+
|
938 |
+
/**
|
939 |
+
* A workaround for http://bugs.jquery.com/ticket/6696
|
940 |
+
*
|
941 |
+
* @param {object} $parent - Parent element to listen on.
|
942 |
+
* @param {string} event - Event name.
|
943 |
+
* @param {string} selector - Descendant selector to filter by.
|
944 |
+
* @param {function} fn - Event handler.
|
945 |
+
*/
|
946 |
+
var watchChildEvent = function($parent, event, selector, fn) {
|
947 |
+
$parent.on(event, selector, function(e) {
|
948 |
+
var child = e.target;
|
949 |
+
while (child && child.parentNode !== $parent[0]) {
|
950 |
+
child = child.parentNode;
|
951 |
+
}
|
952 |
+
e.currentTarget = child;
|
953 |
+
return fn.apply(this, [e]);
|
954 |
+
});
|
955 |
+
};
|
956 |
+
|
957 |
+
/**
|
958 |
+
* Determines the current selection within a text input control.
|
959 |
+
* Returns an object containing:
|
960 |
+
* - start
|
961 |
+
* - length
|
962 |
+
*
|
963 |
+
* @param {object} input
|
964 |
+
* @returns {object}
|
965 |
+
*/
|
966 |
+
var getSelection = function(input) {
|
967 |
+
var result = {};
|
968 |
+
if ('selectionStart' in input) {
|
969 |
+
result.start = input.selectionStart;
|
970 |
+
result.length = input.selectionEnd - result.start;
|
971 |
+
} else if (document.selection) {
|
972 |
+
input.focus();
|
973 |
+
var sel = document.selection.createRange();
|
974 |
+
var selLen = document.selection.createRange().text.length;
|
975 |
+
sel.moveStart('character', -input.value.length);
|
976 |
+
result.start = sel.text.length - selLen;
|
977 |
+
result.length = selLen;
|
978 |
+
}
|
979 |
+
return result;
|
980 |
+
};
|
981 |
+
|
982 |
+
/**
|
983 |
+
* Copies CSS properties from one element to another.
|
984 |
+
*
|
985 |
+
* @param {object} $from
|
986 |
+
* @param {object} $to
|
987 |
+
* @param {array} properties
|
988 |
+
*/
|
989 |
+
var transferStyles = function($from, $to, properties) {
|
990 |
+
var i, n, styles = {};
|
991 |
+
if (properties) {
|
992 |
+
for (i = 0, n = properties.length; i < n; i++) {
|
993 |
+
styles[properties[i]] = $from.css(properties[i]);
|
994 |
+
}
|
995 |
+
} else {
|
996 |
+
styles = $from.css();
|
997 |
+
}
|
998 |
+
$to.css(styles);
|
999 |
+
};
|
1000 |
+
|
1001 |
+
/**
|
1002 |
+
* Measures the width of a string within a
|
1003 |
+
* parent element (in pixels).
|
1004 |
+
*
|
1005 |
+
* @param {string} str
|
1006 |
+
* @param {object} $parent
|
1007 |
+
* @returns {int}
|
1008 |
+
*/
|
1009 |
+
var measureString = function(str, $parent) {
|
1010 |
+
if (!str) {
|
1011 |
+
return 0;
|
1012 |
+
}
|
1013 |
+
|
1014 |
+
if (!Selectize.$testInput) {
|
1015 |
+
Selectize.$testInput = $('<span />').css({
|
1016 |
+
position: 'absolute',
|
1017 |
+
top: -99999,
|
1018 |
+
left: -99999,
|
1019 |
+
width: 'auto',
|
1020 |
+
padding: 0,
|
1021 |
+
whiteSpace: 'pre'
|
1022 |
+
}).appendTo('body');
|
1023 |
+
}
|
1024 |
+
|
1025 |
+
Selectize.$testInput.text(str);
|
1026 |
+
|
1027 |
+
transferStyles($parent, Selectize.$testInput, [
|
1028 |
+
'letterSpacing',
|
1029 |
+
'fontSize',
|
1030 |
+
'fontFamily',
|
1031 |
+
'fontWeight',
|
1032 |
+
'textTransform'
|
1033 |
+
]);
|
1034 |
+
|
1035 |
+
return Selectize.$testInput.width();
|
1036 |
+
};
|
1037 |
+
|
1038 |
+
/**
|
1039 |
+
* Sets up an input to grow horizontally as the user
|
1040 |
+
* types. If the value is changed manually, you can
|
1041 |
+
* trigger the "update" handler to resize:
|
1042 |
+
*
|
1043 |
+
* $input.trigger('update');
|
1044 |
+
*
|
1045 |
+
* @param {object} $input
|
1046 |
+
*/
|
1047 |
+
var autoGrow = function($input) {
|
1048 |
+
var currentWidth = null;
|
1049 |
+
|
1050 |
+
var update = function(e, options) {
|
1051 |
+
var value, keyCode, printable, placeholder, width;
|
1052 |
+
var shift, character, selection;
|
1053 |
+
e = e || window.event || {};
|
1054 |
+
options = options || {};
|
1055 |
+
|
1056 |
+
if (e.metaKey || e.altKey) return;
|
1057 |
+
if (!options.force && $input.data('grow') === false) return;
|
1058 |
+
|
1059 |
+
value = $input.val();
|
1060 |
+
if (e.type && e.type.toLowerCase() === 'keydown') {
|
1061 |
+
keyCode = e.keyCode;
|
1062 |
+
printable = (
|
1063 |
+
(keyCode >= 48 && keyCode <= 57) || // 0-9
|
1064 |
+
(keyCode >= 65 && keyCode <= 90) || // a-z
|
1065 |
+
(keyCode >= 96 && keyCode <= 111) || // numpad 0-9, numeric operators
|
1066 |
+
(keyCode >= 186 && keyCode <= 222) || // semicolon, equal, comma, dash, etc.
|
1067 |
+
keyCode === 32 // space
|
1068 |
+
);
|
1069 |
+
|
1070 |
+
if (keyCode === KEY_DELETE || keyCode === KEY_BACKSPACE) {
|
1071 |
+
selection = getSelection($input[0]);
|
1072 |
+
if (selection.length) {
|
1073 |
+
value = value.substring(0, selection.start) + value.substring(selection.start + selection.length);
|
1074 |
+
} else if (keyCode === KEY_BACKSPACE && selection.start) {
|
1075 |
+
value = value.substring(0, selection.start - 1) + value.substring(selection.start + 1);
|
1076 |
+
} else if (keyCode === KEY_DELETE && typeof selection.start !== 'undefined') {
|
1077 |
+
value = value.substring(0, selection.start) + value.substring(selection.start + 1);
|
1078 |
+
}
|
1079 |
+
} else if (printable) {
|
1080 |
+
shift = e.shiftKey;
|
1081 |
+
character = String.fromCharCode(e.keyCode);
|
1082 |
+
if (shift) character = character.toUpperCase();
|
1083 |
+
else character = character.toLowerCase();
|
1084 |
+
value += character;
|
1085 |
+
}
|
1086 |
+
}
|
1087 |
+
|
1088 |
+
placeholder = $input.attr('placeholder');
|
1089 |
+
if (!value && placeholder) {
|
1090 |
+
value = placeholder;
|
1091 |
+
}
|
1092 |
+
|
1093 |
+
width = measureString(value, $input) + 4;
|
1094 |
+
if (width !== currentWidth) {
|
1095 |
+
currentWidth = width;
|
1096 |
+
$input.width(width);
|
1097 |
+
$input.triggerHandler('resize');
|
1098 |
+
}
|
1099 |
+
};
|
1100 |
+
|
1101 |
+
$input.on('keydown keyup update blur', update);
|
1102 |
+
update();
|
1103 |
+
};
|
1104 |
+
|
1105 |
+
var domToString = function(d) {
|
1106 |
+
var tmp = document.createElement('div');
|
1107 |
+
|
1108 |
+
tmp.appendChild(d.cloneNode(true));
|
1109 |
+
|
1110 |
+
return tmp.innerHTML;
|
1111 |
+
};
|
1112 |
+
|
1113 |
+
var logError = function(message, options){
|
1114 |
+
if(!options) options = {};
|
1115 |
+
var component = "Selectize";
|
1116 |
+
|
1117 |
+
console.error(component + ": " + message)
|
1118 |
+
|
1119 |
+
if(options.explanation){
|
1120 |
+
// console.group is undefined in <IE11
|
1121 |
+
if(console.group) console.group();
|
1122 |
+
console.error(options.explanation);
|
1123 |
+
if(console.group) console.groupEnd();
|
1124 |
+
}
|
1125 |
+
}
|
1126 |
+
|
1127 |
+
|
1128 |
+
var Selectize = function($input, settings) {
|
1129 |
+
var key, i, n, dir, input, self = this;
|
1130 |
+
input = $input[0];
|
1131 |
+
input.selectize = self;
|
1132 |
+
|
1133 |
+
// detect rtl environment
|
1134 |
+
var computedStyle = window.getComputedStyle && window.getComputedStyle(input, null);
|
1135 |
+
dir = computedStyle ? computedStyle.getPropertyValue('direction') : input.currentStyle && input.currentStyle.direction;
|
1136 |
+
dir = dir || $input.parents('[dir]:first').attr('dir') || '';
|
1137 |
+
|
1138 |
+
// setup default state
|
1139 |
+
$.extend(self, {
|
1140 |
+
order : 0,
|
1141 |
+
settings : settings,
|
1142 |
+
$input : $input,
|
1143 |
+
tabIndex : $input.attr('tabindex') || '',
|
1144 |
+
tagType : input.tagName.toLowerCase() === 'select' ? TAG_SELECT : TAG_INPUT,
|
1145 |
+
rtl : /rtl/i.test(dir),
|
1146 |
+
|
1147 |
+
eventNS : '.selectize' + (++Selectize.count),
|
1148 |
+
highlightedValue : null,
|
1149 |
+
isBlurring : false,
|
1150 |
+
isOpen : false,
|
1151 |
+
isDisabled : false,
|
1152 |
+
isRequired : $input.is('[required]'),
|
1153 |
+
isInvalid : false,
|
1154 |
+
isLocked : false,
|
1155 |
+
isFocused : false,
|
1156 |
+
isInputHidden : false,
|
1157 |
+
isSetup : false,
|
1158 |
+
isShiftDown : false,
|
1159 |
+
isCmdDown : false,
|
1160 |
+
isCtrlDown : false,
|
1161 |
+
ignoreFocus : false,
|
1162 |
+
ignoreBlur : false,
|
1163 |
+
ignoreHover : false,
|
1164 |
+
hasOptions : false,
|
1165 |
+
currentResults : null,
|
1166 |
+
lastValue : '',
|
1167 |
+
caretPos : 0,
|
1168 |
+
loading : 0,
|
1169 |
+
loadedSearches : {},
|
1170 |
+
|
1171 |
+
$activeOption : null,
|
1172 |
+
$activeItems : [],
|
1173 |
+
|
1174 |
+
optgroups : {},
|
1175 |
+
options : {},
|
1176 |
+
userOptions : {},
|
1177 |
+
items : [],
|
1178 |
+
renderCache : {},
|
1179 |
+
onSearchChange : settings.loadThrottle === null ? self.onSearchChange : debounce(self.onSearchChange, settings.loadThrottle)
|
1180 |
+
});
|
1181 |
+
|
1182 |
+
// search system
|
1183 |
+
self.sifter = new Sifter(this.options, {diacritics: settings.diacritics});
|
1184 |
+
|
1185 |
+
// build options table
|
1186 |
+
if (self.settings.options) {
|
1187 |
+
for (i = 0, n = self.settings.options.length; i < n; i++) {
|
1188 |
+
self.registerOption(self.settings.options[i]);
|
1189 |
+
}
|
1190 |
+
delete self.settings.options;
|
1191 |
+
}
|
1192 |
+
|
1193 |
+
// build optgroup table
|
1194 |
+
if (self.settings.optgroups) {
|
1195 |
+
for (i = 0, n = self.settings.optgroups.length; i < n; i++) {
|
1196 |
+
self.registerOptionGroup(self.settings.optgroups[i]);
|
1197 |
+
}
|
1198 |
+
delete self.settings.optgroups;
|
1199 |
+
}
|
1200 |
+
|
1201 |
+
// option-dependent defaults
|
1202 |
+
self.settings.mode = self.settings.mode || (self.settings.maxItems === 1 ? 'single' : 'multi');
|
1203 |
+
if (typeof self.settings.hideSelected !== 'boolean') {
|
1204 |
+
self.settings.hideSelected = self.settings.mode === 'multi';
|
1205 |
+
}
|
1206 |
+
|
1207 |
+
self.initializePlugins(self.settings.plugins);
|
1208 |
+
self.setupCallbacks();
|
1209 |
+
self.setupTemplates();
|
1210 |
+
self.setup();
|
1211 |
+
};
|
1212 |
+
|
1213 |
+
// mixins
|
1214 |
+
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
1215 |
+
|
1216 |
+
MicroEvent.mixin(Selectize);
|
1217 |
+
|
1218 |
+
if(typeof MicroPlugin !== "undefined"){
|
1219 |
+
MicroPlugin.mixin(Selectize);
|
1220 |
+
}else{
|
1221 |
+
logError("Dependency MicroPlugin is missing",
|
1222 |
+
{explanation:
|
1223 |
+
"Make sure you either: (1) are using the \"standalone\" "+
|
1224 |
+
"version of Selectize, or (2) require MicroPlugin before you "+
|
1225 |
+
"load Selectize."}
|
1226 |
+
);
|
1227 |
+
}
|
1228 |
+
|
1229 |
+
|
1230 |
+
// methods
|
1231 |
+
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
1232 |
+
|
1233 |
+
$.extend(Selectize.prototype, {
|
1234 |
+
|
1235 |
+
/**
|
1236 |
+
* Creates all elements and sets up event bindings.
|
1237 |
+
*/
|
1238 |
+
setup: function() {
|
1239 |
+
var self = this;
|
1240 |
+
var settings = self.settings;
|
1241 |
+
var eventNS = self.eventNS;
|
1242 |
+
var $window = $(window);
|
1243 |
+
var $document = $(document);
|
1244 |
+
var $input = self.$input;
|
1245 |
+
|
1246 |
+
var $wrapper;
|
1247 |
+
var $control;
|
1248 |
+
var $control_input;
|
1249 |
+
var $dropdown;
|
1250 |
+
var $dropdown_content;
|
1251 |
+
var $dropdown_parent;
|
1252 |
+
var inputMode;
|
1253 |
+
var timeout_blur;
|
1254 |
+
var timeout_focus;
|
1255 |
+
var classes;
|
1256 |
+
var classes_plugins;
|
1257 |
+
var inputId;
|
1258 |
+
|
1259 |
+
inputMode = self.settings.mode;
|
1260 |
+
classes = $input.attr('class') || '';
|
1261 |
+
|
1262 |
+
$wrapper = $('<div>').addClass(settings.wrapperClass).addClass(classes).addClass(inputMode);
|
1263 |
+
$control = $('<div>').addClass(settings.inputClass).addClass('items').appendTo($wrapper);
|
1264 |
+
$control_input = $('<input type="text" autocomplete="off" />').appendTo($control).attr('tabindex', $input.is(':disabled') ? '-1' : self.tabIndex);
|
1265 |
+
$dropdown_parent = $(settings.dropdownParent || $wrapper);
|
1266 |
+
$dropdown = $('<div>').addClass(settings.dropdownClass).addClass(inputMode).hide().appendTo($dropdown_parent);
|
1267 |
+
$dropdown_content = $('<div>').addClass(settings.dropdownContentClass).appendTo($dropdown);
|
1268 |
+
|
1269 |
+
if(inputId = $input.attr('id')) {
|
1270 |
+
$control_input.attr('id', inputId + '-selectized');
|
1271 |
+
$("label[for='"+inputId+"']").attr('for', inputId + '-selectized');
|
1272 |
+
}
|
1273 |
+
|
1274 |
+
if(self.settings.copyClassesToDropdown) {
|
1275 |
+
$dropdown.addClass(classes);
|
1276 |
+
}
|
1277 |
+
|
1278 |
+
$wrapper.css({
|
1279 |
+
width: $input[0].style.width
|
1280 |
+
});
|
1281 |
+
|
1282 |
+
if (self.plugins.names.length) {
|
1283 |
+
classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');
|
1284 |
+
$wrapper.addClass(classes_plugins);
|
1285 |
+
$dropdown.addClass(classes_plugins);
|
1286 |
+
}
|
1287 |
+
|
1288 |
+
if ((settings.maxItems === null || settings.maxItems > 1) && self.tagType === TAG_SELECT) {
|
1289 |
+
$input.attr('multiple', 'multiple');
|
1290 |
+
}
|
1291 |
+
|
1292 |
+
if (self.settings.placeholder) {
|
1293 |
+
$control_input.attr('placeholder', settings.placeholder);
|
1294 |
+
}
|
1295 |
+
|
1296 |
+
// if splitOn was not passed in, construct it from the delimiter to allow pasting universally
|
1297 |
+
if (!self.settings.splitOn && self.settings.delimiter) {
|
1298 |
+
var delimiterEscaped = self.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
|
1299 |
+
self.settings.splitOn = new RegExp('\\s*' + delimiterEscaped + '+\\s*');
|
1300 |
+
}
|
1301 |
+
|
1302 |
+
if ($input.attr('autocorrect')) {
|
1303 |
+
$control_input.attr('autocorrect', $input.attr('autocorrect'));
|
1304 |
+
}
|
1305 |
+
|
1306 |
+
if ($input.attr('autocapitalize')) {
|
1307 |
+
$control_input.attr('autocapitalize', $input.attr('autocapitalize'));
|
1308 |
+
}
|
1309 |
+
$control_input[0].type = $input[0].type;
|
1310 |
+
|
1311 |
+
self.$wrapper = $wrapper;
|
1312 |
+
self.$control = $control;
|
1313 |
+
self.$control_input = $control_input;
|
1314 |
+
self.$dropdown = $dropdown;
|
1315 |
+
self.$dropdown_content = $dropdown_content;
|
1316 |
+
|
1317 |
+
$dropdown.on('mouseenter mousedown click', '[data-disabled]>[data-selectable]', function(e) { e.stopImmediatePropagation(); });
|
1318 |
+
$dropdown.on('mouseenter', '[data-selectable]', function() { return self.onOptionHover.apply(self, arguments); });
|
1319 |
+
$dropdown.on('mousedown click', '[data-selectable]', function() { return self.onOptionSelect.apply(self, arguments); });
|
1320 |
+
watchChildEvent($control, 'mousedown', '*:not(input)', function() { return self.onItemSelect.apply(self, arguments); });
|
1321 |
+
autoGrow($control_input);
|
1322 |
+
|
1323 |
+
$control.on({
|
1324 |
+
mousedown : function() { return self.onMouseDown.apply(self, arguments); },
|
1325 |
+
click : function() { return self.onClick.apply(self, arguments); }
|
1326 |
+
});
|
1327 |
+
|
1328 |
+
$control_input.on({
|
1329 |
+
mousedown : function(e) { e.stopPropagation(); },
|
1330 |
+
keydown : function() { return self.onKeyDown.apply(self, arguments); },
|
1331 |
+
keyup : function() { return self.onKeyUp.apply(self, arguments); },
|
1332 |
+
keypress : function() { return self.onKeyPress.apply(self, arguments); },
|
1333 |
+
resize : function() { self.positionDropdown.apply(self, []); },
|
1334 |
+
blur : function() { return self.onBlur.apply(self, arguments); },
|
1335 |
+
focus : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); },
|
1336 |
+
paste : function() { return self.onPaste.apply(self, arguments); }
|
1337 |
+
});
|
1338 |
+
|
1339 |
+
$document.on('keydown' + eventNS, function(e) {
|
1340 |
+
self.isCmdDown = e[IS_MAC ? 'metaKey' : 'ctrlKey'];
|
1341 |
+
self.isCtrlDown = e[IS_MAC ? 'altKey' : 'ctrlKey'];
|
1342 |
+
self.isShiftDown = e.shiftKey;
|
1343 |
+
});
|
1344 |
+
|
1345 |
+
$document.on('keyup' + eventNS, function(e) {
|
1346 |
+
if (e.keyCode === KEY_CTRL) self.isCtrlDown = false;
|
1347 |
+
if (e.keyCode === KEY_SHIFT) self.isShiftDown = false;
|
1348 |
+
if (e.keyCode === KEY_CMD) self.isCmdDown = false;
|
1349 |
+
});
|
1350 |
+
|
1351 |
+
$document.on('mousedown' + eventNS, function(e) {
|
1352 |
+
if (self.isFocused) {
|
1353 |
+
// prevent events on the dropdown scrollbar from causing the control to blur
|
1354 |
+
if (e.target === self.$dropdown[0] || e.target.parentNode === self.$dropdown[0]) {
|
1355 |
+
return false;
|
1356 |
+
}
|
1357 |
+
// blur on click outside
|
1358 |
+
if (!self.$control.has(e.target).length && e.target !== self.$control[0]) {
|
1359 |
+
self.blur(e.target);
|
1360 |
+
}
|
1361 |
+
}
|
1362 |
+
});
|
1363 |
+
|
1364 |
+
$window.on(['scroll' + eventNS, 'resize' + eventNS].join(' '), function() {
|
1365 |
+
if (self.isOpen) {
|
1366 |
+
self.positionDropdown.apply(self, arguments);
|
1367 |
+
}
|
1368 |
+
});
|
1369 |
+
$window.on('mousemove' + eventNS, function() {
|
1370 |
+
self.ignoreHover = false;
|
1371 |
+
});
|
1372 |
+
|
1373 |
+
// store original children and tab index so that they can be
|
1374 |
+
// restored when the destroy() method is called.
|
1375 |
+
this.revertSettings = {
|
1376 |
+
$children : $input.children().detach(),
|
1377 |
+
tabindex : $input.attr('tabindex')
|
1378 |
+
};
|
1379 |
+
|
1380 |
+
$input.attr('tabindex', -1).hide().after(self.$wrapper);
|
1381 |
+
|
1382 |
+
if ($.isArray(settings.items)) {
|
1383 |
+
self.setValue(settings.items);
|
1384 |
+
delete settings.items;
|
1385 |
+
}
|
1386 |
+
|
1387 |
+
// feature detect for the validation API
|
1388 |
+
if (SUPPORTS_VALIDITY_API) {
|
1389 |
+
$input.on('invalid' + eventNS, function(e) {
|
1390 |
+
e.preventDefault();
|
1391 |
+
self.isInvalid = true;
|
1392 |
+
self.refreshState();
|
1393 |
+
});
|
1394 |
+
}
|
1395 |
+
|
1396 |
+
self.updateOriginalInput();
|
1397 |
+
self.refreshItems();
|
1398 |
+
self.refreshState();
|
1399 |
+
self.updatePlaceholder();
|
1400 |
+
self.isSetup = true;
|
1401 |
+
|
1402 |
+
if ($input.is(':disabled')) {
|
1403 |
+
self.disable();
|
1404 |
+
}
|
1405 |
+
|
1406 |
+
self.on('change', this.onChange);
|
1407 |
+
|
1408 |
+
$input.data('selectize', self);
|
1409 |
+
$input.addClass('selectized');
|
1410 |
+
self.trigger('initialize');
|
1411 |
+
|
1412 |
+
// preload options
|
1413 |
+
if (settings.preload === true) {
|
1414 |
+
self.onSearchChange('');
|
1415 |
+
}
|
1416 |
+
|
1417 |
+
},
|
1418 |
+
|
1419 |
+
/**
|
1420 |
+
* Sets up default rendering functions.
|
1421 |
+
*/
|
1422 |
+
setupTemplates: function() {
|
1423 |
+
var self = this;
|
1424 |
+
var field_label = self.settings.labelField;
|
1425 |
+
var field_optgroup = self.settings.optgroupLabelField;
|
1426 |
+
|
1427 |
+
var templates = {
|
1428 |
+
'optgroup': function(data) {
|
1429 |
+
return '<div class="optgroup">' + data.html + '</div>';
|
1430 |
+
},
|
1431 |
+
'optgroup_header': function(data, escape) {
|
1432 |
+
return '<div class="optgroup-header">' + escape(data[field_optgroup]) + '</div>';
|
1433 |
+
},
|
1434 |
+
'option': function(data, escape) {
|
1435 |
+
return '<div class="option">' + escape(data[field_label]) + '</div>';
|
1436 |
+
},
|
1437 |
+
'item': function(data, escape) {
|
1438 |
+
return '<div class="item">' + escape(data[field_label]) + '</div>';
|
1439 |
+
},
|
1440 |
+
'option_create': function(data, escape) {
|
1441 |
+
return '<div class="create">Add <strong>' + escape(data.input) + '</strong>…</div>';
|
1442 |
+
}
|
1443 |
+
};
|
1444 |
+
|
1445 |
+
self.settings.render = $.extend({}, templates, self.settings.render);
|
1446 |
+
},
|
1447 |
+
|
1448 |
+
/**
|
1449 |
+
* Maps fired events to callbacks provided
|
1450 |
+
* in the settings used when creating the control.
|
1451 |
+
*/
|
1452 |
+
setupCallbacks: function() {
|
1453 |
+
var key, fn, callbacks = {
|
1454 |
+
'initialize' : 'onInitialize',
|
1455 |
+
'change' : 'onChange',
|
1456 |
+
'item_add' : 'onItemAdd',
|
1457 |
+
'item_remove' : 'onItemRemove',
|
1458 |
+
'clear' : 'onClear',
|
1459 |
+
'option_add' : 'onOptionAdd',
|
1460 |
+
'option_remove' : 'onOptionRemove',
|
1461 |
+
'option_clear' : 'onOptionClear',
|
1462 |
+
'optgroup_add' : 'onOptionGroupAdd',
|
1463 |
+
'optgroup_remove' : 'onOptionGroupRemove',
|
1464 |
+
'optgroup_clear' : 'onOptionGroupClear',
|
1465 |
+
'dropdown_open' : 'onDropdownOpen',
|
1466 |
+
'dropdown_close' : 'onDropdownClose',
|
1467 |
+
'type' : 'onType',
|
1468 |
+
'load' : 'onLoad',
|
1469 |
+
'focus' : 'onFocus',
|
1470 |
+
'blur' : 'onBlur'
|
1471 |
+
};
|
1472 |
+
|
1473 |
+
for (key in callbacks) {
|
1474 |
+
if (callbacks.hasOwnProperty(key)) {
|
1475 |
+
fn = this.settings[callbacks[key]];
|
1476 |
+
if (fn) this.on(key, fn);
|
1477 |
+
}
|
1478 |
+
}
|
1479 |
+
},
|
1480 |
+
|
1481 |
+
/**
|
1482 |
+
* Triggered when the main control element
|
1483 |
+
* has a click event.
|
1484 |
+
*
|
1485 |
+
* @param {object} e
|
1486 |
+
* @return {boolean}
|
1487 |
+
*/
|
1488 |
+
onClick: function(e) {
|
1489 |
+
var self = this;
|
1490 |
+
|
1491 |
+
// necessary for mobile webkit devices (manual focus triggering
|
1492 |
+
// is ignored unless invoked within a click event)
|
1493 |
+
// also necessary to reopen a dropdown that has been closed by
|
1494 |
+
// closeAfterSelect
|
1495 |
+
if (!self.isFocused || !self.isOpen) {
|
1496 |
+
self.focus();
|
1497 |
+
e.preventDefault();
|
1498 |
+
}
|
1499 |
+
},
|
1500 |
+
|
1501 |
+
/**
|
1502 |
+
* Triggered when the main control element
|
1503 |
+
* has a mouse down event.
|
1504 |
+
*
|
1505 |
+
* @param {object} e
|
1506 |
+
* @return {boolean}
|
1507 |
+
*/
|
1508 |
+
onMouseDown: function(e) {
|
1509 |
+
var self = this;
|
1510 |
+
var defaultPrevented = e.isDefaultPrevented();
|
1511 |
+
var $target = $(e.target);
|
1512 |
+
|
1513 |
+
if (self.isFocused) {
|
1514 |
+
// retain focus by preventing native handling. if the
|
1515 |
+
// event target is the input it should not be modified.
|
1516 |
+
// otherwise, text selection within the input won't work.
|
1517 |
+
if (e.target !== self.$control_input[0]) {
|
1518 |
+
if (self.settings.mode === 'single') {
|
1519 |
+
// toggle dropdown
|
1520 |
+
self.isOpen ? self.close() : self.open();
|
1521 |
+
} else if (!defaultPrevented) {
|
1522 |
+
self.setActiveItem(null);
|
1523 |
+
}
|
1524 |
+
return false;
|
1525 |
+
}
|
1526 |
+
} else {
|
1527 |
+
// give control focus
|
1528 |
+
if (!defaultPrevented) {
|
1529 |
+
window.setTimeout(function() {
|
1530 |
+
self.focus();
|
1531 |
+
}, 0);
|
1532 |
+
}
|
1533 |
+
}
|
1534 |
+
},
|
1535 |
+
|
1536 |
+
/**
|
1537 |
+
* Triggered when the value of the control has been changed.
|
1538 |
+
* This should propagate the event to the original DOM
|
1539 |
+
* input / select element.
|
1540 |
+
*/
|
1541 |
+
onChange: function() {
|
1542 |
+
this.$input.trigger('change');
|
1543 |
+
},
|
1544 |
+
|
1545 |
+
/**
|
1546 |
+
* Triggered on <input> paste.
|
1547 |
+
*
|
1548 |
+
* @param {object} e
|
1549 |
+
* @returns {boolean}
|
1550 |
+
*/
|
1551 |
+
onPaste: function(e) {
|
1552 |
+
var self = this;
|
1553 |
+
|
1554 |
+
if (self.isFull() || self.isInputHidden || self.isLocked) {
|
1555 |
+
e.preventDefault();
|
1556 |
+
return;
|
1557 |
+
}
|
1558 |
+
|
1559 |
+
// If a regex or string is included, this will split the pasted
|
1560 |
+
// input and create Items for each separate value
|
1561 |
+
if (self.settings.splitOn) {
|
1562 |
+
|
1563 |
+
// Wait for pasted text to be recognized in value
|
1564 |
+
setTimeout(function() {
|
1565 |
+
var pastedText = self.$control_input.val();
|
1566 |
+
if(!pastedText.match(self.settings.splitOn)){ return }
|
1567 |
+
|
1568 |
+
var splitInput = $.trim(pastedText).split(self.settings.splitOn);
|
1569 |
+
for (var i = 0, n = splitInput.length; i < n; i++) {
|
1570 |
+
self.createItem(splitInput[i]);
|
1571 |
+
}
|
1572 |
+
}, 0);
|
1573 |
+
}
|
1574 |
+
},
|
1575 |
+
|
1576 |
+
/**
|
1577 |
+
* Triggered on <input> keypress.
|
1578 |
+
*
|
1579 |
+
* @param {object} e
|
1580 |
+
* @returns {boolean}
|
1581 |
+
*/
|
1582 |
+
onKeyPress: function(e) {
|
1583 |
+
if (this.isLocked) return e && e.preventDefault();
|
1584 |
+
var character = String.fromCharCode(e.keyCode || e.which);
|
1585 |
+
if (this.settings.create && this.settings.mode === 'multi' && character === this.settings.delimiter) {
|
1586 |
+
this.createItem();
|
1587 |
+
e.preventDefault();
|
1588 |
+
return false;
|
1589 |
+
}
|
1590 |
+
},
|
1591 |
+
|
1592 |
+
/**
|
1593 |
+
* Triggered on <input> keydown.
|
1594 |
+
*
|
1595 |
+
* @param {object} e
|
1596 |
+
* @returns {boolean}
|
1597 |
+
*/
|
1598 |
+
onKeyDown: function(e) {
|
1599 |
+
var isInput = e.target === this.$control_input[0];
|
1600 |
+
var self = this;
|
1601 |
+
|
1602 |
+
if (self.isLocked) {
|
1603 |
+
if (e.keyCode !== KEY_TAB) {
|
1604 |
+
e.preventDefault();
|
1605 |
+
}
|
1606 |
+
return;
|
1607 |
+
}
|
1608 |
+
|
1609 |
+
switch (e.keyCode) {
|
1610 |
+
case KEY_A:
|
1611 |
+
if (self.isCmdDown) {
|
1612 |
+
self.selectAll();
|
1613 |
+
return;
|
1614 |
+
}
|
1615 |
+
break;
|
1616 |
+
case KEY_ESC:
|
1617 |
+
if (self.isOpen) {
|
1618 |
+
e.preventDefault();
|
1619 |
+
e.stopPropagation();
|
1620 |
+
self.close();
|
1621 |
+
}
|
1622 |
+
return;
|
1623 |
+
case KEY_N:
|
1624 |
+
if (!e.ctrlKey || e.altKey) break;
|
1625 |
+
case KEY_DOWN:
|
1626 |
+
if (!self.isOpen && self.hasOptions) {
|
1627 |
+
self.open();
|
1628 |
+
} else if (self.$activeOption) {
|
1629 |
+
self.ignoreHover = true;
|
1630 |
+
var $next = self.getAdjacentOption(self.$activeOption, 1);
|
1631 |
+
if ($next.length) self.setActiveOption($next, true, true);
|
1632 |
+
}
|
1633 |
+
e.preventDefault();
|
1634 |
+
return;
|
1635 |
+
case KEY_P:
|
1636 |
+
if (!e.ctrlKey || e.altKey) break;
|
1637 |
+
case KEY_UP:
|
1638 |
+
if (self.$activeOption) {
|
1639 |
+
self.ignoreHover = true;
|
1640 |
+
var $prev = self.getAdjacentOption(self.$activeOption, -1);
|
1641 |
+
if ($prev.length) self.setActiveOption($prev, true, true);
|
1642 |
+
}
|
1643 |
+
e.preventDefault();
|
1644 |
+
return;
|
1645 |
+
case KEY_RETURN:
|
1646 |
+
if (self.isOpen && self.$activeOption) {
|
1647 |
+
self.onOptionSelect({currentTarget: self.$activeOption});
|
1648 |
+
e.preventDefault();
|
1649 |
+
}
|
1650 |
+
return;
|
1651 |
+
case KEY_LEFT:
|
1652 |
+
self.advanceSelection(-1, e);
|
1653 |
+
return;
|
1654 |
+
case KEY_RIGHT:
|
1655 |
+
self.advanceSelection(1, e);
|
1656 |
+
return;
|
1657 |
+
case KEY_TAB:
|
1658 |
+
if (self.settings.selectOnTab && self.isOpen && self.$activeOption) {
|
1659 |
+
self.onOptionSelect({currentTarget: self.$activeOption});
|
1660 |
+
|
1661 |
+
// Default behaviour is to jump to the next field, we only want this
|
1662 |
+
// if the current field doesn't accept any more entries
|
1663 |
+
if (!self.isFull()) {
|
1664 |
+
e.preventDefault();
|
1665 |
+
}
|
1666 |
+
}
|
1667 |
+
if (self.settings.create && self.createItem()) {
|
1668 |
+
e.preventDefault();
|
1669 |
+
}
|
1670 |
+
return;
|
1671 |
+
case KEY_BACKSPACE:
|
1672 |
+
case KEY_DELETE:
|
1673 |
+
self.deleteSelection(e);
|
1674 |
+
return;
|
1675 |
+
}
|
1676 |
+
|
1677 |
+
if ((self.isFull() || self.isInputHidden) && !(IS_MAC ? e.metaKey : e.ctrlKey)) {
|
1678 |
+
e.preventDefault();
|
1679 |
+
return;
|
1680 |
+
}
|
1681 |
+
},
|
1682 |
+
|
1683 |
+
/**
|
1684 |
+
* Triggered on <input> keyup.
|
1685 |
+
*
|
1686 |
+
* @param {object} e
|
1687 |
+
* @returns {boolean}
|
1688 |
+
*/
|
1689 |
+
onKeyUp: function(e) {
|
1690 |
+
var self = this;
|
1691 |
+
|
1692 |
+
if (self.isLocked) return e && e.preventDefault();
|
1693 |
+
var value = self.$control_input.val() || '';
|
1694 |
+
if (self.lastValue !== value) {
|
1695 |
+
self.lastValue = value;
|
1696 |
+
self.onSearchChange(value);
|
1697 |
+
self.refreshOptions();
|
1698 |
+
self.trigger('type', value);
|
1699 |
+
}
|
1700 |
+
},
|
1701 |
+
|
1702 |
+
/**
|
1703 |
+
* Invokes the user-provide option provider / loader.
|
1704 |
+
*
|
1705 |
+
* Note: this function is debounced in the Selectize
|
1706 |
+
* constructor (by `settings.loadThrottle` milliseconds)
|
1707 |
+
*
|
1708 |
+
* @param {string} value
|
1709 |
+
*/
|
1710 |
+
onSearchChange: function(value) {
|
1711 |
+
var self = this;
|
1712 |
+
var fn = self.settings.load;
|
1713 |
+
if (!fn) return;
|
1714 |
+
if (self.loadedSearches.hasOwnProperty(value)) return;
|
1715 |
+
self.loadedSearches[value] = true;
|
1716 |
+
self.load(function(callback) {
|
1717 |
+
fn.apply(self, [value, callback]);
|
1718 |
+
});
|
1719 |
+
},
|
1720 |
+
|
1721 |
+
/**
|
1722 |
+
* Triggered on <input> focus.
|
1723 |
+
*
|
1724 |
+
* @param {object} e (optional)
|
1725 |
+
* @returns {boolean}
|
1726 |
+
*/
|
1727 |
+
onFocus: function(e) {
|
1728 |
+
var self = this;
|
1729 |
+
var wasFocused = self.isFocused;
|
1730 |
+
|
1731 |
+
if (self.isDisabled) {
|
1732 |
+
self.blur();
|
1733 |
+
e && e.preventDefault();
|
1734 |
+
return false;
|
1735 |
+
}
|
1736 |
+
|
1737 |
+
if (self.ignoreFocus) return;
|
1738 |
+
self.isFocused = true;
|
1739 |
+
if (self.settings.preload === 'focus') self.onSearchChange('');
|
1740 |
+
|
1741 |
+
if (!wasFocused) self.trigger('focus');
|
1742 |
+
|
1743 |
+
if (!self.$activeItems.length) {
|
1744 |
+
self.showInput();
|
1745 |
+
self.setActiveItem(null);
|
1746 |
+
self.refreshOptions(!!self.settings.openOnFocus);
|
1747 |
+
}
|
1748 |
+
|
1749 |
+
self.refreshState();
|
1750 |
+
},
|
1751 |
+
|
1752 |
+
/**
|
1753 |
+
* Triggered on <input> blur.
|
1754 |
+
*
|
1755 |
+
* @param {object} e
|
1756 |
+
* @param {Element} dest
|
1757 |
+
*/
|
1758 |
+
onBlur: function(e, dest) {
|
1759 |
+
var self = this;
|
1760 |
+
if (!self.isFocused) return;
|
1761 |
+
self.isFocused = false;
|
1762 |
+
|
1763 |
+
if (self.ignoreFocus) {
|
1764 |
+
return;
|
1765 |
+
} else if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) {
|
1766 |
+
// necessary to prevent IE closing the dropdown when the scrollbar is clicked
|
1767 |
+
self.ignoreBlur = true;
|
1768 |
+
self.onFocus(e);
|
1769 |
+
return;
|
1770 |
+
}
|
1771 |
+
|
1772 |
+
var deactivate = function() {
|
1773 |
+
self.close();
|
1774 |
+
self.setTextboxValue('');
|
1775 |
+
self.setActiveItem(null);
|
1776 |
+
self.setActiveOption(null);
|
1777 |
+
self.setCaret(self.items.length);
|
1778 |
+
self.refreshState();
|
1779 |
+
|
1780 |
+
// IE11 bug: element still marked as active
|
1781 |
+
dest && dest.focus && dest.focus();
|
1782 |
+
|
1783 |
+
self.isBlurring = false;
|
1784 |
+
self.ignoreFocus = false;
|
1785 |
+
self.trigger('blur');
|
1786 |
+
};
|
1787 |
+
|
1788 |
+
self.isBlurring = true;
|
1789 |
+
self.ignoreFocus = true;
|
1790 |
+
if (self.settings.create && self.settings.createOnBlur) {
|
1791 |
+
self.createItem(null, false, deactivate);
|
1792 |
+
} else {
|
1793 |
+
deactivate();
|
1794 |
+
}
|
1795 |
+
},
|
1796 |
+
|
1797 |
+
/**
|
1798 |
+
* Triggered when the user rolls over
|
1799 |
+
* an option in the autocomplete dropdown menu.
|
1800 |
+
*
|
1801 |
+
* @param {object} e
|
1802 |
+
* @returns {boolean}
|
1803 |
+
*/
|
1804 |
+
onOptionHover: function(e) {
|
1805 |
+
if (this.ignoreHover) return;
|
1806 |
+
this.setActiveOption(e.currentTarget, false);
|
1807 |
+
},
|
1808 |
+
|
1809 |
+
/**
|
1810 |
+
* Triggered when the user clicks on an option
|
1811 |
+
* in the autocomplete dropdown menu.
|
1812 |
+
*
|
1813 |
+
* @param {object} e
|
1814 |
+
* @returns {boolean}
|
1815 |
+
*/
|
1816 |
+
onOptionSelect: function(e) {
|
1817 |
+
var value, $target, $option, self = this;
|
1818 |
+
|
1819 |
+
if (e.preventDefault) {
|
1820 |
+
e.preventDefault();
|
1821 |
+
e.stopPropagation();
|
1822 |
+
}
|
1823 |
+
|
1824 |
+
$target = $(e.currentTarget);
|
1825 |
+
if ($target.hasClass('create')) {
|
1826 |
+
self.createItem(null, function() {
|
1827 |
+
if (self.settings.closeAfterSelect) {
|
1828 |
+
self.close();
|
1829 |
+
}
|
1830 |
+
});
|
1831 |
+
} else {
|
1832 |
+
value = $target.attr('data-value');
|
1833 |
+
if (typeof value !== 'undefined') {
|
1834 |
+
self.lastQuery = null;
|
1835 |
+
self.setTextboxValue('');
|
1836 |
+
self.addItem(value);
|
1837 |
+
if (self.settings.closeAfterSelect) {
|
1838 |
+
self.close();
|
1839 |
+
} else if (!self.settings.hideSelected && e.type && /mouse/.test(e.type)) {
|
1840 |
+
self.setActiveOption(self.getOption(value));
|
1841 |
+
}
|
1842 |
+
}
|
1843 |
+
}
|
1844 |
+
},
|
1845 |
+
|
1846 |
+
/**
|
1847 |
+
* Triggered when the user clicks on an item
|
1848 |
+
* that has been selected.
|
1849 |
+
*
|
1850 |
+
* @param {object} e
|
1851 |
+
* @returns {boolean}
|
1852 |
+
*/
|
1853 |
+
onItemSelect: function(e) {
|
1854 |
+
var self = this;
|
1855 |
+
|
1856 |
+
if (self.isLocked) return;
|
1857 |
+
if (self.settings.mode === 'multi') {
|
1858 |
+
e.preventDefault();
|
1859 |
+
self.setActiveItem(e.currentTarget, e);
|
1860 |
+
}
|
1861 |
+
},
|
1862 |
+
|
1863 |
+
/**
|
1864 |
+
* Invokes the provided method that provides
|
1865 |
+
* results to a callback---which are then added
|
1866 |
+
* as options to the control.
|
1867 |
+
*
|
1868 |
+
* @param {function} fn
|
1869 |
+
*/
|
1870 |
+
load: function(fn) {
|
1871 |
+
var self = this;
|
1872 |
+
var $wrapper = self.$wrapper.addClass(self.settings.loadingClass);
|
1873 |
+
|
1874 |
+
self.loading++;
|
1875 |
+
fn.apply(self, [function(results) {
|
1876 |
+
self.loading = Math.max(self.loading - 1, 0);
|
1877 |
+
if (results && results.length) {
|
1878 |
+
self.addOption(results);
|
1879 |
+
self.refreshOptions(self.isFocused && !self.isInputHidden);
|
1880 |
+
}
|
1881 |
+
if (!self.loading) {
|
1882 |
+
$wrapper.removeClass(self.settings.loadingClass);
|
1883 |
+
}
|
1884 |
+
self.trigger('load', results);
|
1885 |
+
}]);
|
1886 |
+
},
|
1887 |
+
|
1888 |
+
/**
|
1889 |
+
* Sets the input field of the control to the specified value.
|
1890 |
+
*
|
1891 |
+
* @param {string} value
|
1892 |
+
*/
|
1893 |
+
setTextboxValue: function(value) {
|
1894 |
+
var $input = this.$control_input;
|
1895 |
+
var changed = $input.val() !== value;
|
1896 |
+
if (changed) {
|
1897 |
+
$input.val(value).triggerHandler('update');
|
1898 |
+
this.lastValue = value;
|
1899 |
+
}
|
1900 |
+
},
|
1901 |
+
|
1902 |
+
/**
|
1903 |
+
* Returns the value of the control. If multiple items
|
1904 |
+
* can be selected (e.g. <select multiple>), this returns
|
1905 |
+
* an array. If only one item can be selected, this
|
1906 |
+
* returns a string.
|
1907 |
+
*
|
1908 |
+
* @returns {mixed}
|
1909 |
+
*/
|
1910 |
+
getValue: function() {
|
1911 |
+
if (this.tagType === TAG_SELECT && this.$input.attr('multiple')) {
|
1912 |
+
return this.items;
|
1913 |
+
} else {
|
1914 |
+
return this.items.join(this.settings.delimiter);
|
1915 |
+
}
|
1916 |
+
},
|
1917 |
+
|
1918 |
+
/**
|
1919 |
+
* Resets the selected items to the given value.
|
1920 |
+
*
|
1921 |
+
* @param {mixed} value
|
1922 |
+
*/
|
1923 |
+
setValue: function(value, silent) {
|
1924 |
+
var events = silent ? [] : ['change'];
|
1925 |
+
|
1926 |
+
debounce_events(this, events, function() {
|
1927 |
+
this.clear(silent);
|
1928 |
+
this.addItems(value, silent);
|
1929 |
+
});
|
1930 |
+
},
|
1931 |
+
|
1932 |
+
/**
|
1933 |
+
* Sets the selected item.
|
1934 |
+
*
|
1935 |
+
* @param {object} $item
|
1936 |
+
* @param {object} e (optional)
|
1937 |
+
*/
|
1938 |
+
setActiveItem: function($item, e) {
|
1939 |
+
var self = this;
|
1940 |
+
var eventName;
|
1941 |
+
var i, idx, begin, end, item, swap;
|
1942 |
+
var $last;
|
1943 |
+
|
1944 |
+
if (self.settings.mode === 'single') return;
|
1945 |
+
$item = $($item);
|
1946 |
+
|
1947 |
+
// clear the active selection
|
1948 |
+
if (!$item.length) {
|
1949 |
+
$(self.$activeItems).removeClass('active');
|
1950 |
+
self.$activeItems = [];
|
1951 |
+
if (self.isFocused) {
|
1952 |
+
self.showInput();
|
1953 |
+
}
|
1954 |
+
return;
|
1955 |
+
}
|
1956 |
+
|
1957 |
+
// modify selection
|
1958 |
+
eventName = e && e.type.toLowerCase();
|
1959 |
+
|
1960 |
+
if (eventName === 'mousedown' && self.isShiftDown && self.$activeItems.length) {
|
1961 |
+
$last = self.$control.children('.active:last');
|
1962 |
+
begin = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$last[0]]);
|
1963 |
+
end = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$item[0]]);
|
1964 |
+
if (begin > end) {
|
1965 |
+
swap = begin;
|
1966 |
+
begin = end;
|
1967 |
+
end = swap;
|
1968 |
+
}
|
1969 |
+
for (i = begin; i <= end; i++) {
|
1970 |
+
item = self.$control[0].childNodes[i];
|
1971 |
+
if (self.$activeItems.indexOf(item) === -1) {
|
1972 |
+
$(item).addClass('active');
|
1973 |
+
self.$activeItems.push(item);
|
1974 |
+
}
|
1975 |
+
}
|
1976 |
+
e.preventDefault();
|
1977 |
+
} else if ((eventName === 'mousedown' && self.isCtrlDown) || (eventName === 'keydown' && this.isShiftDown)) {
|
1978 |
+
if ($item.hasClass('active')) {
|
1979 |
+
idx = self.$activeItems.indexOf($item[0]);
|
1980 |
+
self.$activeItems.splice(idx, 1);
|
1981 |
+
$item.removeClass('active');
|
1982 |
+
} else {
|
1983 |
+
self.$activeItems.push($item.addClass('active')[0]);
|
1984 |
+
}
|
1985 |
+
} else {
|
1986 |
+
$(self.$activeItems).removeClass('active');
|
1987 |
+
self.$activeItems = [$item.addClass('active')[0]];
|
1988 |
+
}
|
1989 |
+
|
1990 |
+
// ensure control has focus
|
1991 |
+
self.hideInput();
|
1992 |
+
if (!this.isFocused) {
|
1993 |
+
self.focus();
|
1994 |
+
}
|
1995 |
+
},
|
1996 |
+
|
1997 |
+
/**
|
1998 |
+
* Sets the selected item in the dropdown menu
|
1999 |
+
* of available options.
|
2000 |
+
*
|
2001 |
+
* @param {object} $object
|
2002 |
+
* @param {boolean} scroll
|
2003 |
+
* @param {boolean} animate
|
2004 |
+
*/
|
2005 |
+
setActiveOption: function($option, scroll, animate) {
|
2006 |
+
var height_menu, height_item, y;
|
2007 |
+
var scroll_top, scroll_bottom;
|
2008 |
+
var self = this;
|
2009 |
+
|
2010 |
+
if (self.$activeOption) self.$activeOption.removeClass('active');
|
2011 |
+
self.$activeOption = null;
|
2012 |
+
|
2013 |
+
$option = $($option);
|
2014 |
+
if (!$option.length) return;
|
2015 |
+
|
2016 |
+
self.$activeOption = $option.addClass('active');
|
2017 |
+
|
2018 |
+
if (scroll || !isset(scroll)) {
|
2019 |
+
|
2020 |
+
height_menu = self.$dropdown_content.height();
|
2021 |
+
height_item = self.$activeOption.outerHeight(true);
|
2022 |
+
scroll = self.$dropdown_content.scrollTop() || 0;
|
2023 |
+
y = self.$activeOption.offset().top - self.$dropdown_content.offset().top + scroll;
|
2024 |
+
scroll_top = y;
|
2025 |
+
scroll_bottom = y - height_menu + height_item;
|
2026 |
+
|
2027 |
+
if (y + height_item > height_menu + scroll) {
|
2028 |
+
self.$dropdown_content.stop().animate({scrollTop: scroll_bottom}, animate ? self.settings.scrollDuration : 0);
|
2029 |
+
} else if (y < scroll) {
|
2030 |
+
self.$dropdown_content.stop().animate({scrollTop: scroll_top}, animate ? self.settings.scrollDuration : 0);
|
2031 |
+
}
|
2032 |
+
|
2033 |
+
}
|
2034 |
+
},
|
2035 |
+
|
2036 |
+
/**
|
2037 |
+
* Selects all items (CTRL + A).
|
2038 |
+
*/
|
2039 |
+
selectAll: function() {
|
2040 |
+
var self = this;
|
2041 |
+
if (self.settings.mode === 'single') return;
|
2042 |
+
|
2043 |
+
self.$activeItems = Array.prototype.slice.apply(self.$control.children(':not(input)').addClass('active'));
|
2044 |
+
if (self.$activeItems.length) {
|
2045 |
+
self.hideInput();
|
2046 |
+
self.close();
|
2047 |
+
}
|
2048 |
+
self.focus();
|
2049 |
+
},
|
2050 |
+
|
2051 |
+
/**
|
2052 |
+
* Hides the input element out of view, while
|
2053 |
+
* retaining its focus.
|
2054 |
+
*/
|
2055 |
+
hideInput: function() {
|
2056 |
+
var self = this;
|
2057 |
+
|
2058 |
+
self.setTextboxValue('');
|
2059 |
+
self.$control_input.css({opacity: 0, position: 'absolute', left: self.rtl ? 10000 : -10000});
|
2060 |
+
self.isInputHidden = true;
|
2061 |
+
},
|
2062 |
+
|
2063 |
+
/**
|
2064 |
+
* Restores input visibility.
|
2065 |
+
*/
|
2066 |
+
showInput: function() {
|
2067 |
+
this.$control_input.css({opacity: 1, position: 'relative', left: 0});
|
2068 |
+
this.isInputHidden = false;
|
2069 |
+
},
|
2070 |
+
|
2071 |
+
/**
|
2072 |
+
* Gives the control focus.
|
2073 |
+
*/
|
2074 |
+
focus: function() {
|
2075 |
+
var self = this;
|
2076 |
+
if (self.isDisabled) return;
|
2077 |
+
|
2078 |
+
self.ignoreFocus = true;
|
2079 |
+
self.$control_input[0].focus();
|
2080 |
+
window.setTimeout(function() {
|
2081 |
+
self.ignoreFocus = false;
|
2082 |
+
self.onFocus();
|
2083 |
+
}, 0);
|
2084 |
+
},
|
2085 |
+
|
2086 |
+
/**
|
2087 |
+
* Forces the control out of focus.
|
2088 |
+
*
|
2089 |
+
* @param {Element} dest
|
2090 |
+
*/
|
2091 |
+
blur: function(dest) {
|
2092 |
+
this.$control_input[0].blur();
|
2093 |
+
this.onBlur(null, dest);
|
2094 |
+
},
|
2095 |
+
|
2096 |
+
/**
|
2097 |
+
* Returns a function that scores an object
|
2098 |
+
* to show how good of a match it is to the
|
2099 |
+
* provided query.
|
2100 |
+
*
|
2101 |
+
* @param {string} query
|
2102 |
+
* @param {object} options
|
2103 |
+
* @return {function}
|
2104 |
+
*/
|
2105 |
+
getScoreFunction: function(query) {
|
2106 |
+
return this.sifter.getScoreFunction(query, this.getSearchOptions());
|
2107 |
+
},
|
2108 |
+
|
2109 |
+
/**
|
2110 |
+
* Returns search options for sifter (the system
|
2111 |
+
* for scoring and sorting results).
|
2112 |
+
*
|
2113 |
+
* @see https://github.com/brianreavis/sifter.js
|
2114 |
+
* @return {object}
|
2115 |
+
*/
|
2116 |
+
getSearchOptions: function() {
|
2117 |
+
var settings = this.settings;
|
2118 |
+
var sort = settings.sortField;
|
2119 |
+
if (typeof sort === 'string') {
|
2120 |
+
sort = [{field: sort}];
|
2121 |
+
}
|
2122 |
+
|
2123 |
+
return {
|
2124 |
+
fields : settings.searchField,
|
2125 |
+
conjunction : settings.searchConjunction,
|
2126 |
+
sort : sort,
|
2127 |
+
nesting : settings.nesting
|
2128 |
+
};
|
2129 |
+
},
|
2130 |
+
|
2131 |
+
/**
|
2132 |
+
* Searches through available options and returns
|
2133 |
+
* a sorted array of matches.
|
2134 |
+
*
|
2135 |
+
* Returns an object containing:
|
2136 |
+
*
|
2137 |
+
* - query {string}
|
2138 |
+
* - tokens {array}
|
2139 |
+
* - total {int}
|
2140 |
+
* - items {array}
|
2141 |
+
*
|
2142 |
+
* @param {string} query
|
2143 |
+
* @returns {object}
|
2144 |
+
*/
|
2145 |
+
search: function(query) {
|
2146 |
+
var i, value, score, result, calculateScore;
|
2147 |
+
var self = this;
|
2148 |
+
var settings = self.settings;
|
2149 |
+
var options = this.getSearchOptions();
|
2150 |
+
|
2151 |
+
// validate user-provided result scoring function
|
2152 |
+
if (settings.score) {
|
2153 |
+
calculateScore = self.settings.score.apply(this, [query]);
|
2154 |
+
if (typeof calculateScore !== 'function') {
|
2155 |
+
throw new Error('Selectize "score" setting must be a function that returns a function');
|
2156 |
+
}
|
2157 |
+
}
|
2158 |
+
|
2159 |
+
// perform search
|
2160 |
+
if (query !== self.lastQuery) {
|
2161 |
+
self.lastQuery = query;
|
2162 |
+
result = self.sifter.search(query, $.extend(options, {score: calculateScore}));
|
2163 |
+
self.currentResults = result;
|
2164 |
+
} else {
|
2165 |
+
result = $.extend(true, {}, self.currentResults);
|
2166 |
+
}
|
2167 |
+
|
2168 |
+
// filter out selected items
|
2169 |
+
if (settings.hideSelected) {
|
2170 |
+
for (i = result.items.length - 1; i >= 0; i--) {
|
2171 |
+
if (self.items.indexOf(hash_key(result.items[i].id)) !== -1) {
|
2172 |
+
result.items.splice(i, 1);
|
2173 |
+
}
|
2174 |
+
}
|
2175 |
+
}
|
2176 |
+
|
2177 |
+
return result;
|
2178 |
+
},
|
2179 |
+
|
2180 |
+
/**
|
2181 |
+
* Refreshes the list of available options shown
|
2182 |
+
* in the autocomplete dropdown menu.
|
2183 |
+
*
|
2184 |
+
* @param {boolean} triggerDropdown
|
2185 |
+
*/
|
2186 |
+
refreshOptions: function(triggerDropdown) {
|
2187 |
+
var i, j, k, n, groups, groups_order, option, option_html, optgroup, optgroups, html, html_children, has_create_option;
|
2188 |
+
var $active, $active_before, $create;
|
2189 |
+
|
2190 |
+
if (typeof triggerDropdown === 'undefined') {
|
2191 |
+
triggerDropdown = true;
|
2192 |
+
}
|
2193 |
+
|
2194 |
+
var self = this;
|
2195 |
+
var query = $.trim(self.$control_input.val());
|
2196 |
+
var results = self.search(query);
|
2197 |
+
var $dropdown_content = self.$dropdown_content;
|
2198 |
+
var active_before = self.$activeOption && hash_key(self.$activeOption.attr('data-value'));
|
2199 |
+
|
2200 |
+
// build markup
|
2201 |
+
n = results.items.length;
|
2202 |
+
if (typeof self.settings.maxOptions === 'number') {
|
2203 |
+
n = Math.min(n, self.settings.maxOptions);
|
2204 |
+
}
|
2205 |
+
|
2206 |
+
// render and group available options individually
|
2207 |
+
groups = {};
|
2208 |
+
groups_order = [];
|
2209 |
+
|
2210 |
+
for (i = 0; i < n; i++) {
|
2211 |
+
option = self.options[results.items[i].id];
|
2212 |
+
option_html = self.render('option', option);
|
2213 |
+
optgroup = option[self.settings.optgroupField] || '';
|
2214 |
+
optgroups = $.isArray(optgroup) ? optgroup : [optgroup];
|
2215 |
+
|
2216 |
+
for (j = 0, k = optgroups && optgroups.length; j < k; j++) {
|
2217 |
+
optgroup = optgroups[j];
|
2218 |
+
if (!self.optgroups.hasOwnProperty(optgroup)) {
|
2219 |
+
optgroup = '';
|
2220 |
+
}
|
2221 |
+
if (!groups.hasOwnProperty(optgroup)) {
|
2222 |
+
groups[optgroup] = document.createDocumentFragment();
|
2223 |
+
groups_order.push(optgroup);
|
2224 |
+
}
|
2225 |
+
groups[optgroup].appendChild(option_html);
|
2226 |
+
}
|
2227 |
+
}
|
2228 |
+
|
2229 |
+
// sort optgroups
|
2230 |
+
if (this.settings.lockOptgroupOrder) {
|
2231 |
+
groups_order.sort(function(a, b) {
|
2232 |
+
var a_order = self.optgroups[a].$order || 0;
|
2233 |
+
var b_order = self.optgroups[b].$order || 0;
|
2234 |
+
return a_order - b_order;
|
2235 |
+
});
|
2236 |
+
}
|
2237 |
+
|
2238 |
+
// render optgroup headers & join groups
|
2239 |
+
html = document.createDocumentFragment();
|
2240 |
+
for (i = 0, n = groups_order.length; i < n; i++) {
|
2241 |
+
optgroup = groups_order[i];
|
2242 |
+
if (self.optgroups.hasOwnProperty(optgroup) && groups[optgroup].childNodes.length) {
|
2243 |
+
// render the optgroup header and options within it,
|
2244 |
+
// then pass it to the wrapper template
|
2245 |
+
html_children = document.createDocumentFragment();
|
2246 |
+
html_children.appendChild(self.render('optgroup_header', self.optgroups[optgroup]));
|
2247 |
+
html_children.appendChild(groups[optgroup]);
|
2248 |
+
|
2249 |
+
html.appendChild(self.render('optgroup', $.extend({}, self.optgroups[optgroup], {
|
2250 |
+
html: domToString(html_children),
|
2251 |
+
dom: html_children
|
2252 |
+
})));
|
2253 |
+
} else {
|
2254 |
+
html.appendChild(groups[optgroup]);
|
2255 |
+
}
|
2256 |
+
}
|
2257 |
+
|
2258 |
+
$dropdown_content.html(html);
|
2259 |
+
|
2260 |
+
// highlight matching terms inline
|
2261 |
+
if (self.settings.highlight) {
|
2262 |
+
$dropdown_content.removeHighlight();
|
2263 |
+
if (results.query.length && results.tokens.length) {
|
2264 |
+
for (i = 0, n = results.tokens.length; i < n; i++) {
|
2265 |
+
highlight($dropdown_content, results.tokens[i].regex);
|
2266 |
+
}
|
2267 |
+
}
|
2268 |
+
}
|
2269 |
+
|
2270 |
+
// add "selected" class to selected options
|
2271 |
+
if (!self.settings.hideSelected) {
|
2272 |
+
for (i = 0, n = self.items.length; i < n; i++) {
|
2273 |
+
self.getOption(self.items[i]).addClass('selected');
|
2274 |
+
}
|
2275 |
+
}
|
2276 |
+
|
2277 |
+
// add create option
|
2278 |
+
has_create_option = self.canCreate(query);
|
2279 |
+
if (has_create_option) {
|
2280 |
+
$dropdown_content.prepend(self.render('option_create', {input: query}));
|
2281 |
+
$create = $($dropdown_content[0].childNodes[0]);
|
2282 |
+
}
|
2283 |
+
|
2284 |
+
// activate
|
2285 |
+
self.hasOptions = results.items.length > 0 || has_create_option;
|
2286 |
+
if (self.hasOptions) {
|
2287 |
+
if (results.items.length > 0) {
|
2288 |
+
$active_before = active_before && self.getOption(active_before);
|
2289 |
+
if ($active_before && $active_before.length) {
|
2290 |
+
$active = $active_before;
|
2291 |
+
} else if (self.settings.mode === 'single' && self.items.length) {
|
2292 |
+
$active = self.getOption(self.items[0]);
|
2293 |
+
}
|
2294 |
+
if (!$active || !$active.length) {
|
2295 |
+
if ($create && !self.settings.addPrecedence) {
|
2296 |
+
$active = self.getAdjacentOption($create, 1);
|
2297 |
+
} else {
|
2298 |
+
$active = $dropdown_content.find('[data-selectable]:first');
|
2299 |
+
}
|
2300 |
+
}
|
2301 |
+
} else {
|
2302 |
+
$active = $create;
|
2303 |
+
}
|
2304 |
+
self.setActiveOption($active);
|
2305 |
+
if (triggerDropdown && !self.isOpen) { self.open(); }
|
2306 |
+
} else {
|
2307 |
+
self.setActiveOption(null);
|
2308 |
+
if (triggerDropdown && self.isOpen) { self.close(); }
|
2309 |
+
}
|
2310 |
+
},
|
2311 |
+
|
2312 |
+
/**
|
2313 |
+
* Adds an available option. If it already exists,
|
2314 |
+
* nothing will happen. Note: this does not refresh
|
2315 |
+
* the options list dropdown (use `refreshOptions`
|
2316 |
+
* for that).
|
2317 |
+
*
|
2318 |
+
* Usage:
|
2319 |
+
*
|
2320 |
+
* this.addOption(data)
|
2321 |
+
*
|
2322 |
+
* @param {object|array} data
|
2323 |
+
*/
|
2324 |
+
addOption: function(data) {
|
2325 |
+
var i, n, value, self = this;
|
2326 |
+
|
2327 |
+
if ($.isArray(data)) {
|
2328 |
+
for (i = 0, n = data.length; i < n; i++) {
|
2329 |
+
self.addOption(data[i]);
|
2330 |
+
}
|
2331 |
+
return;
|
2332 |
+
}
|
2333 |
+
|
2334 |
+
if (value = self.registerOption(data)) {
|
2335 |
+
self.userOptions[value] = true;
|
2336 |
+
self.lastQuery = null;
|
2337 |
+
self.trigger('option_add', value, data);
|
2338 |
+
}
|
2339 |
+
},
|
2340 |
+
|
2341 |
+
/**
|
2342 |
+
* Registers an option to the pool of options.
|
2343 |
+
*
|
2344 |
+
* @param {object} data
|
2345 |
+
* @return {boolean|string}
|
2346 |
+
*/
|
2347 |
+
registerOption: function(data) {
|
2348 |
+
var key = hash_key(data[this.settings.valueField]);
|
2349 |
+
if (typeof key === 'undefined' || key === null || this.options.hasOwnProperty(key)) return false;
|
2350 |
+
data.$order = data.$order || ++this.order;
|
2351 |
+
this.options[key] = data;
|
2352 |
+
return key;
|
2353 |
+
},
|
2354 |
+
|
2355 |
+
/**
|
2356 |
+
* Registers an option group to the pool of option groups.
|
2357 |
+
*
|
2358 |
+
* @param {object} data
|
2359 |
+
* @return {boolean|string}
|
2360 |
+
*/
|
2361 |
+
registerOptionGroup: function(data) {
|
2362 |
+
var key = hash_key(data[this.settings.optgroupValueField]);
|
2363 |
+
if (!key) return false;
|
2364 |
+
|
2365 |
+
data.$order = data.$order || ++this.order;
|
2366 |
+
this.optgroups[key] = data;
|
2367 |
+
return key;
|
2368 |
+
},
|
2369 |
+
|
2370 |
+
/**
|
2371 |
+
* Registers a new optgroup for options
|
2372 |
+
* to be bucketed into.
|
2373 |
+
*
|
2374 |
+
* @param {string} id
|
2375 |
+
* @param {object} data
|
2376 |
+
*/
|
2377 |
+
addOptionGroup: function(id, data) {
|
2378 |
+
data[this.settings.optgroupValueField] = id;
|
2379 |
+
if (id = this.registerOptionGroup(data)) {
|
2380 |
+
this.trigger('optgroup_add', id, data);
|
2381 |
+
}
|
2382 |
+
},
|
2383 |
+
|
2384 |
+
/**
|
2385 |
+
* Removes an existing option group.
|
2386 |
+
*
|
2387 |
+
* @param {string} id
|
2388 |
+
*/
|
2389 |
+
removeOptionGroup: function(id) {
|
2390 |
+
if (this.optgroups.hasOwnProperty(id)) {
|
2391 |
+
delete this.optgroups[id];
|
2392 |
+
this.renderCache = {};
|
2393 |
+
this.trigger('optgroup_remove', id);
|
2394 |
+
}
|
2395 |
+
},
|
2396 |
+
|
2397 |
+
/**
|
2398 |
+
* Clears all existing option groups.
|
2399 |
+
*/
|
2400 |
+
clearOptionGroups: function() {
|
2401 |
+
this.optgroups = {};
|
2402 |
+
this.renderCache = {};
|
2403 |
+
this.trigger('optgroup_clear');
|
2404 |
+
},
|
2405 |
+
|
2406 |
+
/**
|
2407 |
+
* Updates an option available for selection. If
|
2408 |
+
* it is visible in the selected items or options
|
2409 |
+
* dropdown, it will be re-rendered automatically.
|
2410 |
+
*
|
2411 |
+
* @param {string} value
|
2412 |
+
* @param {object} data
|
2413 |
+
*/
|
2414 |
+
updateOption: function(value, data) {
|
2415 |
+
var self = this;
|
2416 |
+
var $item, $item_new;
|
2417 |
+
var value_new, index_item, cache_items, cache_options, order_old;
|
2418 |
+
|
2419 |
+
value = hash_key(value);
|
2420 |
+
value_new = hash_key(data[self.settings.valueField]);
|
2421 |
+
|
2422 |
+
// sanity checks
|
2423 |
+
if (value === null) return;
|
2424 |
+
if (!self.options.hasOwnProperty(value)) return;
|
2425 |
+
if (typeof value_new !== 'string') throw new Error('Value must be set in option data');
|
2426 |
+
|
2427 |
+
order_old = self.options[value].$order;
|
2428 |
+
|
2429 |
+
// update references
|
2430 |
+
if (value_new !== value) {
|
2431 |
+
delete self.options[value];
|
2432 |
+
index_item = self.items.indexOf(value);
|
2433 |
+
if (index_item !== -1) {
|
2434 |
+
self.items.splice(index_item, 1, value_new);
|
2435 |
+
}
|
2436 |
+
}
|
2437 |
+
data.$order = data.$order || order_old;
|
2438 |
+
self.options[value_new] = data;
|
2439 |
+
|
2440 |
+
// invalidate render cache
|
2441 |
+
cache_items = self.renderCache['item'];
|
2442 |
+
cache_options = self.renderCache['option'];
|
2443 |
+
|
2444 |
+
if (cache_items) {
|
2445 |
+
delete cache_items[value];
|
2446 |
+
delete cache_items[value_new];
|
2447 |
+
}
|
2448 |
+
if (cache_options) {
|
2449 |
+
delete cache_options[value];
|
2450 |
+
delete cache_options[value_new];
|
2451 |
+
}
|
2452 |
+
|
2453 |
+
// update the item if it's selected
|
2454 |
+
if (self.items.indexOf(value_new) !== -1) {
|
2455 |
+
$item = self.getItem(value);
|
2456 |
+
$item_new = $(self.render('item', data));
|
2457 |
+
if ($item.hasClass('active')) $item_new.addClass('active');
|
2458 |
+
$item.replaceWith($item_new);
|
2459 |
+
}
|
2460 |
+
|
2461 |
+
// invalidate last query because we might have updated the sortField
|
2462 |
+
self.lastQuery = null;
|
2463 |
+
|
2464 |
+
// update dropdown contents
|
2465 |
+
if (self.isOpen) {
|
2466 |
+
self.refreshOptions(false);
|
2467 |
+
}
|
2468 |
+
},
|
2469 |
+
|
2470 |
+
/**
|
2471 |
+
* Removes a single option.
|
2472 |
+
*
|
2473 |
+
* @param {string} value
|
2474 |
+
* @param {boolean} silent
|
2475 |
+
*/
|
2476 |
+
removeOption: function(value, silent) {
|
2477 |
+
var self = this;
|
2478 |
+
value = hash_key(value);
|
2479 |
+
|
2480 |
+
var cache_items = self.renderCache['item'];
|
2481 |
+
var cache_options = self.renderCache['option'];
|
2482 |
+
if (cache_items) delete cache_items[value];
|
2483 |
+
if (cache_options) delete cache_options[value];
|
2484 |
+
|
2485 |
+
delete self.userOptions[value];
|
2486 |
+
delete self.options[value];
|
2487 |
+
self.lastQuery = null;
|
2488 |
+
self.trigger('option_remove', value);
|
2489 |
+
self.removeItem(value, silent);
|
2490 |
+
},
|
2491 |
+
|
2492 |
+
/**
|
2493 |
+
* Clears all options.
|
2494 |
+
*/
|
2495 |
+
clearOptions: function() {
|
2496 |
+
var self = this;
|
2497 |
+
|
2498 |
+
self.loadedSearches = {};
|
2499 |
+
self.userOptions = {};
|
2500 |
+
self.renderCache = {};
|
2501 |
+
var options = self.options;
|
2502 |
+
$.each(self.options, function(key, value) {
|
2503 |
+
if(self.items.indexOf(key) == -1) {
|
2504 |
+
delete options[key];
|
2505 |
+
}
|
2506 |
+
});
|
2507 |
+
self.options = self.sifter.items = options;
|
2508 |
+
self.lastQuery = null;
|
2509 |
+
self.trigger('option_clear');
|
2510 |
+
},
|
2511 |
+
|
2512 |
+
/**
|
2513 |
+
* Returns the jQuery element of the option
|
2514 |
+
* matching the given value.
|
2515 |
+
*
|
2516 |
+
* @param {string} value
|
2517 |
+
* @returns {object}
|
2518 |
+
*/
|
2519 |
+
getOption: function(value) {
|
2520 |
+
return this.getElementWithValue(value, this.$dropdown_content.find('[data-selectable]'));
|
2521 |
+
},
|
2522 |
+
|
2523 |
+
/**
|
2524 |
+
* Returns the jQuery element of the next or
|
2525 |
+
* previous selectable option.
|
2526 |
+
*
|
2527 |
+
* @param {object} $option
|
2528 |
+
* @param {int} direction can be 1 for next or -1 for previous
|
2529 |
+
* @return {object}
|
2530 |
+
*/
|
2531 |
+
getAdjacentOption: function($option, direction) {
|
2532 |
+
var $options = this.$dropdown.find('[data-selectable]');
|
2533 |
+
var index = $options.index($option) + direction;
|
2534 |
+
|
2535 |
+
return index >= 0 && index < $options.length ? $options.eq(index) : $();
|
2536 |
+
},
|
2537 |
+
|
2538 |
+
/**
|
2539 |
+
* Finds the first element with a "data-value" attribute
|
2540 |
+
* that matches the given value.
|
2541 |
+
*
|
2542 |
+
* @param {mixed} value
|
2543 |
+
* @param {object} $els
|
2544 |
+
* @return {object}
|
2545 |
+
*/
|
2546 |
+
getElementWithValue: function(value, $els) {
|
2547 |
+
value = hash_key(value);
|
2548 |
+
|
2549 |
+
if (typeof value !== 'undefined' && value !== null) {
|
2550 |
+
for (var i = 0, n = $els.length; i < n; i++) {
|
2551 |
+
if ($els[i].getAttribute('data-value') === value) {
|
2552 |
+
return $($els[i]);
|
2553 |
+
}
|
2554 |
+
}
|
2555 |
+
}
|
2556 |
+
|
2557 |
+
return $();
|
2558 |
+
},
|
2559 |
+
|
2560 |
+
/**
|
2561 |
+
* Returns the jQuery element of the item
|
2562 |
+
* matching the given value.
|
2563 |
+
*
|
2564 |
+
* @param {string} value
|
2565 |
+
* @returns {object}
|
2566 |
+
*/
|
2567 |
+
getItem: function(value) {
|
2568 |
+
return this.getElementWithValue(value, this.$control.children());
|
2569 |
+
},
|
2570 |
+
|
2571 |
+
/**
|
2572 |
+
* "Selects" multiple items at once. Adds them to the list
|
2573 |
+
* at the current caret position.
|
2574 |
+
*
|
2575 |
+
* @param {string} value
|
2576 |
+
* @param {boolean} silent
|
2577 |
+
*/
|
2578 |
+
addItems: function(values, silent) {
|
2579 |
+
this.buffer = document.createDocumentFragment();
|
2580 |
+
|
2581 |
+
var childNodes = this.$control[0].childNodes;
|
2582 |
+
for (var i = 0; i < childNodes.length; i++) {
|
2583 |
+
this.buffer.appendChild(childNodes[i]);
|
2584 |
+
}
|
2585 |
+
|
2586 |
+
var items = $.isArray(values) ? values : [values];
|
2587 |
+
for (var i = 0, n = items.length; i < n; i++) {
|
2588 |
+
this.isPending = (i < n - 1);
|
2589 |
+
this.addItem(items[i], silent);
|
2590 |
+
}
|
2591 |
+
|
2592 |
+
var control = this.$control[0];
|
2593 |
+
control.insertBefore(this.buffer, control.firstChild);
|
2594 |
+
|
2595 |
+
this.buffer = null;
|
2596 |
+
},
|
2597 |
+
|
2598 |
+
/**
|
2599 |
+
* "Selects" an item. Adds it to the list
|
2600 |
+
* at the current caret position.
|
2601 |
+
*
|
2602 |
+
* @param {string} value
|
2603 |
+
* @param {boolean} silent
|
2604 |
+
*/
|
2605 |
+
addItem: function(value, silent) {
|
2606 |
+
var events = silent ? [] : ['change'];
|
2607 |
+
|
2608 |
+
debounce_events(this, events, function() {
|
2609 |
+
var $item, $option, $options;
|
2610 |
+
var self = this;
|
2611 |
+
var inputMode = self.settings.mode;
|
2612 |
+
var i, active, value_next, wasFull;
|
2613 |
+
value = hash_key(value);
|
2614 |
+
|
2615 |
+
if (self.items.indexOf(value) !== -1) {
|
2616 |
+
if (inputMode === 'single') self.close();
|
2617 |
+
return;
|
2618 |
+
}
|
2619 |
+
|
2620 |
+
if (!self.options.hasOwnProperty(value)) return;
|
2621 |
+
if (inputMode === 'single') self.clear(silent);
|
2622 |
+
if (inputMode === 'multi' && self.isFull()) return;
|
2623 |
+
|
2624 |
+
$item = $(self.render('item', self.options[value]));
|
2625 |
+
wasFull = self.isFull();
|
2626 |
+
self.items.splice(self.caretPos, 0, value);
|
2627 |
+
self.insertAtCaret($item);
|
2628 |
+
if (!self.isPending || (!wasFull && self.isFull())) {
|
2629 |
+
self.refreshState();
|
2630 |
+
}
|
2631 |
+
|
2632 |
+
if (self.isSetup) {
|
2633 |
+
$options = self.$dropdown_content.find('[data-selectable]');
|
2634 |
+
|
2635 |
+
// update menu / remove the option (if this is not one item being added as part of series)
|
2636 |
+
if (!self.isPending) {
|
2637 |
+
$option = self.getOption(value);
|
2638 |
+
value_next = self.getAdjacentOption($option, 1).attr('data-value');
|
2639 |
+
self.refreshOptions(self.isFocused && inputMode !== 'single');
|
2640 |
+
if (value_next) {
|
2641 |
+
self.setActiveOption(self.getOption(value_next));
|
2642 |
+
}
|
2643 |
+
}
|
2644 |
+
|
2645 |
+
// hide the menu if the maximum number of items have been selected or no options are left
|
2646 |
+
if (!$options.length || self.isFull()) {
|
2647 |
+
self.close();
|
2648 |
+
} else if (!self.isPending) {
|
2649 |
+
self.positionDropdown();
|
2650 |
+
}
|
2651 |
+
|
2652 |
+
self.updatePlaceholder();
|
2653 |
+
self.trigger('item_add', value, $item);
|
2654 |
+
|
2655 |
+
if (!self.isPending) {
|
2656 |
+
self.updateOriginalInput({silent: silent});
|
2657 |
+
}
|
2658 |
+
}
|
2659 |
+
});
|
2660 |
+
},
|
2661 |
+
|
2662 |
+
/**
|
2663 |
+
* Removes the selected item matching
|
2664 |
+
* the provided value.
|
2665 |
+
*
|
2666 |
+
* @param {string} value
|
2667 |
+
*/
|
2668 |
+
removeItem: function(value, silent) {
|
2669 |
+
var self = this;
|
2670 |
+
var $item, i, idx;
|
2671 |
+
|
2672 |
+
$item = (value instanceof $) ? value : self.getItem(value);
|
2673 |
+
value = hash_key($item.attr('data-value'));
|
2674 |
+
i = self.items.indexOf(value);
|
2675 |
+
|
2676 |
+
if (i !== -1) {
|
2677 |
+
$item.remove();
|
2678 |
+
if ($item.hasClass('active')) {
|
2679 |
+
idx = self.$activeItems.indexOf($item[0]);
|
2680 |
+
self.$activeItems.splice(idx, 1);
|
2681 |
+
}
|
2682 |
+
|
2683 |
+
self.items.splice(i, 1);
|
2684 |
+
self.lastQuery = null;
|
2685 |
+
if (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {
|
2686 |
+
self.removeOption(value, silent);
|
2687 |
+
}
|
2688 |
+
|
2689 |
+
if (i < self.caretPos) {
|
2690 |
+
self.setCaret(self.caretPos - 1);
|
2691 |
+
}
|
2692 |
+
|
2693 |
+
self.refreshState();
|
2694 |
+
self.updatePlaceholder();
|
2695 |
+
self.updateOriginalInput({silent: silent});
|
2696 |
+
self.positionDropdown();
|
2697 |
+
self.trigger('item_remove', value, $item);
|
2698 |
+
}
|
2699 |
+
},
|
2700 |
+
|
2701 |
+
/**
|
2702 |
+
* Invokes the `create` method provided in the
|
2703 |
+
* selectize options that should provide the data
|
2704 |
+
* for the new item, given the user input.
|
2705 |
+
*
|
2706 |
+
* Once this completes, it will be added
|
2707 |
+
* to the item list.
|
2708 |
+
*
|
2709 |
+
* @param {string} value
|
2710 |
+
* @param {boolean} [triggerDropdown]
|
2711 |
+
* @param {function} [callback]
|
2712 |
+
* @return {boolean}
|
2713 |
+
*/
|
2714 |
+
createItem: function(input, triggerDropdown) {
|
2715 |
+
var self = this;
|
2716 |
+
var caret = self.caretPos;
|
2717 |
+
input = input || $.trim(self.$control_input.val() || '');
|
2718 |
+
|
2719 |
+
var callback = arguments[arguments.length - 1];
|
2720 |
+
if (typeof callback !== 'function') callback = function() {};
|
2721 |
+
|
2722 |
+
if (typeof triggerDropdown !== 'boolean') {
|
2723 |
+
triggerDropdown = true;
|
2724 |
+
}
|
2725 |
+
|
2726 |
+
if (!self.canCreate(input)) {
|
2727 |
+
callback();
|
2728 |
+
return false;
|
2729 |
+
}
|
2730 |
+
|
2731 |
+
self.lock();
|
2732 |
+
|
2733 |
+
var setup = (typeof self.settings.create === 'function') ? this.settings.create : function(input) {
|
2734 |
+
var data = {};
|
2735 |
+
data[self.settings.labelField] = input;
|
2736 |
+
data[self.settings.valueField] = input;
|
2737 |
+
return data;
|
2738 |
+
};
|
2739 |
+
|
2740 |
+
var create = once(function(data) {
|
2741 |
+
self.unlock();
|
2742 |
+
|
2743 |
+
if (!data || typeof data !== 'object') return callback();
|
2744 |
+
var value = hash_key(data[self.settings.valueField]);
|
2745 |
+
if (typeof value !== 'string') return callback();
|
2746 |
+
|
2747 |
+
self.setTextboxValue('');
|
2748 |
+
self.addOption(data);
|
2749 |
+
self.setCaret(caret);
|
2750 |
+
self.addItem(value);
|
2751 |
+
self.refreshOptions(triggerDropdown && self.settings.mode !== 'single');
|
2752 |
+
callback(data);
|
2753 |
+
});
|
2754 |
+
|
2755 |
+
var output = setup.apply(this, [input, create]);
|
2756 |
+
if (typeof output !== 'undefined') {
|
2757 |
+
create(output);
|
2758 |
+
}
|
2759 |
+
|
2760 |
+
return true;
|
2761 |
+
},
|
2762 |
+
|
2763 |
+
/**
|
2764 |
+
* Re-renders the selected item lists.
|
2765 |
+
*/
|
2766 |
+
refreshItems: function() {
|
2767 |
+
this.lastQuery = null;
|
2768 |
+
|
2769 |
+
if (this.isSetup) {
|
2770 |
+
this.addItem(this.items);
|
2771 |
+
}
|
2772 |
+
|
2773 |
+
this.refreshState();
|
2774 |
+
this.updateOriginalInput();
|
2775 |
+
},
|
2776 |
+
|
2777 |
+
/**
|
2778 |
+
* Updates all state-dependent attributes
|
2779 |
+
* and CSS classes.
|
2780 |
+
*/
|
2781 |
+
refreshState: function() {
|
2782 |
+
this.refreshValidityState();
|
2783 |
+
this.refreshClasses();
|
2784 |
+
},
|
2785 |
+
|
2786 |
+
/**
|
2787 |
+
* Update the `required` attribute of both input and control input.
|
2788 |
+
*
|
2789 |
+
* The `required` property needs to be activated on the control input
|
2790 |
+
* for the error to be displayed at the right place. `required` also
|
2791 |
+
* needs to be temporarily deactivated on the input since the input is
|
2792 |
+
* hidden and can't show errors.
|
2793 |
+
*/
|
2794 |
+
refreshValidityState: function() {
|
2795 |
+
if (!this.isRequired) return false;
|
2796 |
+
|
2797 |
+
var invalid = !this.items.length;
|
2798 |
+
|
2799 |
+
this.isInvalid = invalid;
|
2800 |
+
this.$control_input.prop('required', invalid);
|
2801 |
+
this.$input.prop('required', !invalid);
|
2802 |
+
},
|
2803 |
+
|
2804 |
+
/**
|
2805 |
+
* Updates all state-dependent CSS classes.
|
2806 |
+
*/
|
2807 |
+
refreshClasses: function() {
|
2808 |
+
var self = this;
|
2809 |
+
var isFull = self.isFull();
|
2810 |
+
var isLocked = self.isLocked;
|
2811 |
+
|
2812 |
+
self.$wrapper
|
2813 |
+
.toggleClass('rtl', self.rtl);
|
2814 |
+
|
2815 |
+
self.$control
|
2816 |
+
.toggleClass('focus', self.isFocused)
|
2817 |
+
.toggleClass('disabled', self.isDisabled)
|
2818 |
+
.toggleClass('required', self.isRequired)
|
2819 |
+
.toggleClass('invalid', self.isInvalid)
|
2820 |
+
.toggleClass('locked', isLocked)
|
2821 |
+
.toggleClass('full', isFull).toggleClass('not-full', !isFull)
|
2822 |
+
.toggleClass('input-active', self.isFocused && !self.isInputHidden)
|
2823 |
+
.toggleClass('dropdown-active', self.isOpen)
|
2824 |
+
.toggleClass('has-options', !$.isEmptyObject(self.options))
|
2825 |
+
.toggleClass('has-items', self.items.length > 0);
|
2826 |
+
|
2827 |
+
self.$control_input.data('grow', !isFull && !isLocked);
|
2828 |
+
},
|
2829 |
+
|
2830 |
+
/**
|
2831 |
+
* Determines whether or not more items can be added
|
2832 |
+
* to the control without exceeding the user-defined maximum.
|
2833 |
+
*
|
2834 |
+
* @returns {boolean}
|
2835 |
+
*/
|
2836 |
+
isFull: function() {
|
2837 |
+
return this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;
|
2838 |
+
},
|
2839 |
+
|
2840 |
+
/**
|
2841 |
+
* Refreshes the original <select> or <input>
|
2842 |
+
* element to reflect the current state.
|
2843 |
+
*/
|
2844 |
+
updateOriginalInput: function(opts) {
|
2845 |
+
var i, n, options, label, self = this;
|
2846 |
+
opts = opts || {};
|
2847 |
+
|
2848 |
+
if (self.tagType === TAG_SELECT) {
|
2849 |
+
options = [];
|
2850 |
+
for (i = 0, n = self.items.length; i < n; i++) {
|
2851 |
+
label = self.options[self.items[i]][self.settings.labelField] || '';
|
2852 |
+
options.push('<option value="' + escape_html(self.items[i]) + '" selected="selected">' + escape_html(label) + '</option>');
|
2853 |
+
}
|
2854 |
+
if (!options.length && !this.$input.attr('multiple')) {
|
2855 |
+
options.push('<option value="" selected="selected"></option>');
|
2856 |
+
}
|
2857 |
+
self.$input.html(options.join(''));
|
2858 |
+
} else {
|
2859 |
+
self.$input.val(self.getValue());
|
2860 |
+
self.$input.attr('value',self.$input.val());
|
2861 |
+
}
|
2862 |
+
|
2863 |
+
if (self.isSetup) {
|
2864 |
+
if (!opts.silent) {
|
2865 |
+
self.trigger('change', self.$input.val());
|
2866 |
+
}
|
2867 |
+
}
|
2868 |
+
},
|
2869 |
+
|
2870 |
+
/**
|
2871 |
+
* Shows/hide the input placeholder depending
|
2872 |
+
* on if there items in the list already.
|
2873 |
+
*/
|
2874 |
+
updatePlaceholder: function() {
|
2875 |
+
if (!this.settings.placeholder) return;
|
2876 |
+
var $input = this.$control_input;
|
2877 |
+
|
2878 |
+
if (this.items.length) {
|
2879 |
+
$input.removeAttr('placeholder');
|
2880 |
+
} else {
|
2881 |
+
$input.attr('placeholder', this.settings.placeholder);
|
2882 |
+
}
|
2883 |
+
$input.triggerHandler('update', {force: true});
|
2884 |
+
},
|
2885 |
+
|
2886 |
+
/**
|
2887 |
+
* Shows the autocomplete dropdown containing
|
2888 |
+
* the available options.
|
2889 |
+
*/
|
2890 |
+
open: function() {
|
2891 |
+
var self = this;
|
2892 |
+
|
2893 |
+
if (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;
|
2894 |
+
self.focus();
|
2895 |
+
self.isOpen = true;
|
2896 |
+
self.refreshState();
|
2897 |
+
self.$dropdown.css({visibility: 'hidden', display: 'block'});
|
2898 |
+
self.positionDropdown();
|
2899 |
+
self.$dropdown.css({visibility: 'visible'});
|
2900 |
+
self.trigger('dropdown_open', self.$dropdown);
|
2901 |
+
},
|
2902 |
+
|
2903 |
+
/**
|
2904 |
+
* Closes the autocomplete dropdown menu.
|
2905 |
+
*/
|
2906 |
+
close: function() {
|
2907 |
+
var self = this;
|
2908 |
+
var trigger = self.isOpen;
|
2909 |
+
|
2910 |
+
if (self.settings.mode === 'single' && self.items.length) {
|
2911 |
+
self.hideInput();
|
2912 |
+
|
2913 |
+
// Do not trigger blur while inside a blur event,
|
2914 |
+
// this fixes some weird tabbing behavior in FF and IE.
|
2915 |
+
// See #1164
|
2916 |
+
if (!self.isBlurring) {
|
2917 |
+
self.$control_input.blur(); // close keyboard on iOS
|
2918 |
+
}
|
2919 |
+
}
|
2920 |
+
|
2921 |
+
self.isOpen = false;
|
2922 |
+
self.$dropdown.hide();
|
2923 |
+
self.setActiveOption(null);
|
2924 |
+
self.refreshState();
|
2925 |
+
|
2926 |
+
if (trigger) self.trigger('dropdown_close', self.$dropdown);
|
2927 |
+
},
|
2928 |
+
|
2929 |
+
/**
|
2930 |
+
* Calculates and applies the appropriate
|
2931 |
+
* position of the dropdown.
|
2932 |
+
*/
|
2933 |
+
positionDropdown: function() {
|
2934 |
+
var $control = this.$control;
|
2935 |
+
var offset = this.settings.dropdownParent === 'body' ? $control.offset() : $control.position();
|
2936 |
+
offset.top += $control.outerHeight(true);
|
2937 |
+
|
2938 |
+
this.$dropdown.css({
|
2939 |
+
width : $control[0].getBoundingClientRect().width,
|
2940 |
+
top : offset.top,
|
2941 |
+
left : offset.left
|
2942 |
+
});
|
2943 |
+
},
|
2944 |
+
|
2945 |
+
/**
|
2946 |
+
* Resets / clears all selected items
|
2947 |
+
* from the control.
|
2948 |
+
*
|
2949 |
+
* @param {boolean} silent
|
2950 |
+
*/
|
2951 |
+
clear: function(silent) {
|
2952 |
+
var self = this;
|
2953 |
+
|
2954 |
+
if (!self.items.length) return;
|
2955 |
+
self.$control.children(':not(input)').remove();
|
2956 |
+
self.items = [];
|
2957 |
+
self.lastQuery = null;
|
2958 |
+
self.setCaret(0);
|
2959 |
+
self.setActiveItem(null);
|
2960 |
+
self.updatePlaceholder();
|
2961 |
+
self.updateOriginalInput({silent: silent});
|
2962 |
+
self.refreshState();
|
2963 |
+
self.showInput();
|
2964 |
+
self.trigger('clear');
|
2965 |
+
},
|
2966 |
+
|
2967 |
+
/**
|
2968 |
+
* A helper method for inserting an element
|
2969 |
+
* at the current caret position.
|
2970 |
+
*
|
2971 |
+
* @param {object} $el
|
2972 |
+
*/
|
2973 |
+
insertAtCaret: function($el) {
|
2974 |
+
var caret = Math.min(this.caretPos, this.items.length);
|
2975 |
+
var el = $el[0];
|
2976 |
+
var target = this.buffer || this.$control[0];
|
2977 |
+
|
2978 |
+
if (caret === 0) {
|
2979 |
+
target.insertBefore(el, target.firstChild);
|
2980 |
+
} else {
|
2981 |
+
target.insertBefore(el, target.childNodes[caret]);
|
2982 |
+
}
|
2983 |
+
|
2984 |
+
this.setCaret(caret + 1);
|
2985 |
+
},
|
2986 |
+
|
2987 |
+
/**
|
2988 |
+
* Removes the current selected item(s).
|
2989 |
+
*
|
2990 |
+
* @param {object} e (optional)
|
2991 |
+
* @returns {boolean}
|
2992 |
+
*/
|
2993 |
+
deleteSelection: function(e) {
|
2994 |
+
var i, n, direction, selection, values, caret, option_select, $option_select, $tail;
|
2995 |
+
var self = this;
|
2996 |
+
|
2997 |
+
direction = (e && e.keyCode === KEY_BACKSPACE) ? -1 : 1;
|
2998 |
+
selection = getSelection(self.$control_input[0]);
|
2999 |
+
|
3000 |
+
if (self.$activeOption && !self.settings.hideSelected) {
|
3001 |
+
option_select = self.getAdjacentOption(self.$activeOption, -1).attr('data-value');
|
3002 |
+
}
|
3003 |
+
|
3004 |
+
// determine items that will be removed
|
3005 |
+
values = [];
|
3006 |
+
|
3007 |
+
if (self.$activeItems.length) {
|
3008 |
+
$tail = self.$control.children('.active:' + (direction > 0 ? 'last' : 'first'));
|
3009 |
+
caret = self.$control.children(':not(input)').index($tail);
|
3010 |
+
if (direction > 0) { caret++; }
|
3011 |
+
|
3012 |
+
for (i = 0, n = self.$activeItems.length; i < n; i++) {
|
3013 |
+
values.push($(self.$activeItems[i]).attr('data-value'));
|
3014 |
+
}
|
3015 |
+
if (e) {
|
3016 |
+
e.preventDefault();
|
3017 |
+
e.stopPropagation();
|
3018 |
+
}
|
3019 |
+
} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {
|
3020 |
+
if (direction < 0 && selection.start === 0 && selection.length === 0) {
|
3021 |
+
values.push(self.items[self.caretPos - 1]);
|
3022 |
+
} else if (direction > 0 && selection.start === self.$control_input.val().length) {
|
3023 |
+
values.push(self.items[self.caretPos]);
|
3024 |
+
}
|
3025 |
+
}
|
3026 |
+
|
3027 |
+
// allow the callback to abort
|
3028 |
+
if (!values.length || (typeof self.settings.onDelete === 'function' && self.settings.onDelete.apply(self, [values]) === false)) {
|
3029 |
+
return false;
|
3030 |
+
}
|
3031 |
+
|
3032 |
+
// perform removal
|
3033 |
+
if (typeof caret !== 'undefined') {
|
3034 |
+
self.setCaret(caret);
|
3035 |
+
}
|
3036 |
+
while (values.length) {
|
3037 |
+
self.removeItem(values.pop());
|
3038 |
+
}
|
3039 |
+
|
3040 |
+
self.showInput();
|
3041 |
+
self.positionDropdown();
|
3042 |
+
self.refreshOptions(true);
|
3043 |
+
|
3044 |
+
// select previous option
|
3045 |
+
if (option_select) {
|
3046 |
+
$option_select = self.getOption(option_select);
|
3047 |
+
if ($option_select.length) {
|
3048 |
+
self.setActiveOption($option_select);
|
3049 |
+
}
|
3050 |
+
}
|
3051 |
+
|
3052 |
+
return true;
|
3053 |
+
},
|
3054 |
+
|
3055 |
+
/**
|
3056 |
+
* Selects the previous / next item (depending
|
3057 |
+
* on the `direction` argument).
|
3058 |
+
*
|
3059 |
+
* > 0 - right
|
3060 |
+
* < 0 - left
|
3061 |
+
*
|
3062 |
+
* @param {int} direction
|
3063 |
+
* @param {object} e (optional)
|
3064 |
+
*/
|
3065 |
+
advanceSelection: function(direction, e) {
|
3066 |
+
var tail, selection, idx, valueLength, cursorAtEdge, $tail;
|
3067 |
+
var self = this;
|
3068 |
+
|
3069 |
+
if (direction === 0) return;
|
3070 |
+
if (self.rtl) direction *= -1;
|
3071 |
+
|
3072 |
+
tail = direction > 0 ? 'last' : 'first';
|
3073 |
+
selection = getSelection(self.$control_input[0]);
|
3074 |
+
|
3075 |
+
if (self.isFocused && !self.isInputHidden) {
|
3076 |
+
valueLength = self.$control_input.val().length;
|
3077 |
+
cursorAtEdge = direction < 0
|
3078 |
+
? selection.start === 0 && selection.length === 0
|
3079 |
+
: selection.start === valueLength;
|
3080 |
+
|
3081 |
+
if (cursorAtEdge && !valueLength) {
|
3082 |
+
self.advanceCaret(direction, e);
|
3083 |
+
}
|
3084 |
+
} else {
|
3085 |
+
$tail = self.$control.children('.active:' + tail);
|
3086 |
+
if ($tail.length) {
|
3087 |
+
idx = self.$control.children(':not(input)').index($tail);
|
3088 |
+
self.setActiveItem(null);
|
3089 |
+
self.setCaret(direction > 0 ? idx + 1 : idx);
|
3090 |
+
}
|
3091 |
+
}
|
3092 |
+
},
|
3093 |
+
|
3094 |
+
/**
|
3095 |
+
* Moves the caret left / right.
|
3096 |
+
*
|
3097 |
+
* @param {int} direction
|
3098 |
+
* @param {object} e (optional)
|
3099 |
+
*/
|
3100 |
+
advanceCaret: function(direction, e) {
|
3101 |
+
var self = this, fn, $adj;
|
3102 |
+
|
3103 |
+
if (direction === 0) return;
|
3104 |
+
|
3105 |
+
fn = direction > 0 ? 'next' : 'prev';
|
3106 |
+
if (self.isShiftDown) {
|
3107 |
+
$adj = self.$control_input[fn]();
|
3108 |
+
if ($adj.length) {
|
3109 |
+
self.hideInput();
|
3110 |
+
self.setActiveItem($adj);
|
3111 |
+
e && e.preventDefault();
|
3112 |
+
}
|
3113 |
+
} else {
|
3114 |
+
self.setCaret(self.caretPos + direction);
|
3115 |
+
}
|
3116 |
+
},
|
3117 |
+
|
3118 |
+
/**
|
3119 |
+
* Moves the caret to the specified index.
|
3120 |
+
*
|
3121 |
+
* @param {int} i
|
3122 |
+
*/
|
3123 |
+
setCaret: function(i) {
|
3124 |
+
var self = this;
|
3125 |
+
|
3126 |
+
if (self.settings.mode === 'single') {
|
3127 |
+
i = self.items.length;
|
3128 |
+
} else {
|
3129 |
+
i = Math.max(0, Math.min(self.items.length, i));
|
3130 |
+
}
|
3131 |
+
|
3132 |
+
if(!self.isPending) {
|
3133 |
+
// the input must be moved by leaving it in place and moving the
|
3134 |
+
// siblings, due to the fact that focus cannot be restored once lost
|
3135 |
+
// on mobile webkit devices
|
3136 |
+
var j, n, fn, $children, $child;
|
3137 |
+
$children = self.$control.children(':not(input)');
|
3138 |
+
for (j = 0, n = $children.length; j < n; j++) {
|
3139 |
+
$child = $($children[j]).detach();
|
3140 |
+
if (j < i) {
|
3141 |
+
self.$control_input.before($child);
|
3142 |
+
} else {
|
3143 |
+
self.$control.append($child);
|
3144 |
+
}
|
3145 |
+
}
|
3146 |
+
}
|
3147 |
+
|
3148 |
+
self.caretPos = i;
|
3149 |
+
},
|
3150 |
+
|
3151 |
+
/**
|
3152 |
+
* Disables user input on the control. Used while
|
3153 |
+
* items are being asynchronously created.
|
3154 |
+
*/
|
3155 |
+
lock: function() {
|
3156 |
+
this.close();
|
3157 |
+
this.isLocked = true;
|
3158 |
+
this.refreshState();
|
3159 |
+
},
|
3160 |
+
|
3161 |
+
/**
|
3162 |
+
* Re-enables user input on the control.
|
3163 |
+
*/
|
3164 |
+
unlock: function() {
|
3165 |
+
this.isLocked = false;
|
3166 |
+
this.refreshState();
|
3167 |
+
},
|
3168 |
+
|
3169 |
+
/**
|
3170 |
+
* Disables user input on the control completely.
|
3171 |
+
* While disabled, it cannot receive focus.
|
3172 |
+
*/
|
3173 |
+
disable: function() {
|
3174 |
+
var self = this;
|
3175 |
+
self.$input.prop('disabled', true);
|
3176 |
+
self.$control_input.prop('disabled', true).prop('tabindex', -1);
|
3177 |
+
self.isDisabled = true;
|
3178 |
+
self.lock();
|
3179 |
+
},
|
3180 |
+
|
3181 |
+
/**
|
3182 |
+
* Enables the control so that it can respond
|
3183 |
+
* to focus and user input.
|
3184 |
+
*/
|
3185 |
+
enable: function() {
|
3186 |
+
var self = this;
|
3187 |
+
self.$input.prop('disabled', false);
|
3188 |
+
self.$control_input.prop('disabled', false).prop('tabindex', self.tabIndex);
|
3189 |
+
self.isDisabled = false;
|
3190 |
+
self.unlock();
|
3191 |
+
},
|
3192 |
+
|
3193 |
+
/**
|
3194 |
+
* Completely destroys the control and
|
3195 |
+
* unbinds all event listeners so that it can
|
3196 |
+
* be garbage collected.
|
3197 |
+
*/
|
3198 |
+
destroy: function() {
|
3199 |
+
var self = this;
|
3200 |
+
var eventNS = self.eventNS;
|
3201 |
+
var revertSettings = self.revertSettings;
|
3202 |
+
|
3203 |
+
self.trigger('destroy');
|
3204 |
+
self.off();
|
3205 |
+
self.$wrapper.remove();
|
3206 |
+
self.$dropdown.remove();
|
3207 |
+
|
3208 |
+
self.$input
|
3209 |
+
.html('')
|
3210 |
+
.append(revertSettings.$children)
|
3211 |
+
.removeAttr('tabindex')
|
3212 |
+
.removeClass('selectized')
|
3213 |
+
.attr({tabindex: revertSettings.tabindex})
|
3214 |
+
.show();
|
3215 |
+
|
3216 |
+
self.$control_input.removeData('grow');
|
3217 |
+
self.$input.removeData('selectize');
|
3218 |
+
|
3219 |
+
if (--Selectize.count == 0 && Selectize.$testInput) {
|
3220 |
+
Selectize.$testInput.remove();
|
3221 |
+
Selectize.$testInput = undefined;
|
3222 |
+
}
|
3223 |
+
|
3224 |
+
$(window).off(eventNS);
|
3225 |
+
$(document).off(eventNS);
|
3226 |
+
$(document.body).off(eventNS);
|
3227 |
+
|
3228 |
+
delete self.$input[0].selectize;
|
3229 |
+
},
|
3230 |
+
|
3231 |
+
/**
|
3232 |
+
* A helper method for rendering "item" and
|
3233 |
+
* "option" templates, given the data.
|
3234 |
+
*
|
3235 |
+
* @param {string} templateName
|
3236 |
+
* @param {object} data
|
3237 |
+
* @returns {string}
|
3238 |
+
*/
|
3239 |
+
render: function(templateName, data) {
|
3240 |
+
var value, id, label;
|
3241 |
+
var html = '';
|
3242 |
+
var cache = false;
|
3243 |
+
var self = this;
|
3244 |
+
var regex_tag = /^[\t \r\n]*<([a-z][a-z0-9\-_]*(?:\:[a-z][a-z0-9\-_]*)?)/i;
|
3245 |
+
|
3246 |
+
if (templateName === 'option' || templateName === 'item') {
|
3247 |
+
value = hash_key(data[self.settings.valueField]);
|
3248 |
+
cache = !!value;
|
3249 |
+
}
|
3250 |
+
|
3251 |
+
// pull markup from cache if it exists
|
3252 |
+
if (cache) {
|
3253 |
+
if (!isset(self.renderCache[templateName])) {
|
3254 |
+
self.renderCache[templateName] = {};
|
3255 |
+
}
|
3256 |
+
if (self.renderCache[templateName].hasOwnProperty(value)) {
|
3257 |
+
return self.renderCache[templateName][value];
|
3258 |
+
}
|
3259 |
+
}
|
3260 |
+
|
3261 |
+
// render markup
|
3262 |
+
html = $(self.settings.render[templateName].apply(this, [data, escape_html]));
|
3263 |
+
|
3264 |
+
// add mandatory attributes
|
3265 |
+
if (templateName === 'option' || templateName === 'option_create') {
|
3266 |
+
if (!data[self.settings.disabledField]) {
|
3267 |
+
html.attr('data-selectable', '');
|
3268 |
+
}
|
3269 |
+
}
|
3270 |
+
else if (templateName === 'optgroup') {
|
3271 |
+
id = data[self.settings.optgroupValueField] || '';
|
3272 |
+
html.attr('data-group', id);
|
3273 |
+
if(data[self.settings.disabledField]) {
|
3274 |
+
html.attr('data-disabled', '');
|
3275 |
+
}
|
3276 |
+
}
|
3277 |
+
if (templateName === 'option' || templateName === 'item') {
|
3278 |
+
html.attr('data-value', value || '');
|
3279 |
+
}
|
3280 |
+
|
3281 |
+
// update cache
|
3282 |
+
if (cache) {
|
3283 |
+
self.renderCache[templateName][value] = html[0];
|
3284 |
+
}
|
3285 |
+
|
3286 |
+
return html[0];
|
3287 |
+
},
|
3288 |
+
|
3289 |
+
/**
|
3290 |
+
* Clears the render cache for a template. If
|
3291 |
+
* no template is given, clears all render
|
3292 |
+
* caches.
|
3293 |
+
*
|
3294 |
+
* @param {string} templateName
|
3295 |
+
*/
|
3296 |
+
clearCache: function(templateName) {
|
3297 |
+
var self = this;
|
3298 |
+
if (typeof templateName === 'undefined') {
|
3299 |
+
self.renderCache = {};
|
3300 |
+
} else {
|
3301 |
+
delete self.renderCache[templateName];
|
3302 |
+
}
|
3303 |
+
},
|
3304 |
+
|
3305 |
+
/**
|
3306 |
+
* Determines whether or not to display the
|
3307 |
+
* create item prompt, given a user input.
|
3308 |
+
*
|
3309 |
+
* @param {string} input
|
3310 |
+
* @return {boolean}
|
3311 |
+
*/
|
3312 |
+
canCreate: function(input) {
|
3313 |
+
var self = this;
|
3314 |
+
if (!self.settings.create) return false;
|
3315 |
+
var filter = self.settings.createFilter;
|
3316 |
+
return input.length
|
3317 |
+
&& (typeof filter !== 'function' || filter.apply(self, [input]))
|
3318 |
+
&& (typeof filter !== 'string' || new RegExp(filter).test(input))
|
3319 |
+
&& (!(filter instanceof RegExp) || filter.test(input));
|
3320 |
+
}
|
3321 |
+
|
3322 |
+
});
|
3323 |
+
|
3324 |
+
|
3325 |
+
Selectize.count = 0;
|
3326 |
+
Selectize.defaults = {
|
3327 |
+
options: [],
|
3328 |
+
optgroups: [],
|
3329 |
+
|
3330 |
+
plugins: [],
|
3331 |
+
delimiter: ',',
|
3332 |
+
splitOn: null, // regexp or string for splitting up values from a paste command
|
3333 |
+
persist: true,
|
3334 |
+
diacritics: true,
|
3335 |
+
create: false,
|
3336 |
+
createOnBlur: false,
|
3337 |
+
createFilter: null,
|
3338 |
+
highlight: true,
|
3339 |
+
openOnFocus: true,
|
3340 |
+
maxOptions: 1000,
|
3341 |
+
maxItems: null,
|
3342 |
+
hideSelected: null,
|
3343 |
+
addPrecedence: false,
|
3344 |
+
selectOnTab: false,
|
3345 |
+
preload: false,
|
3346 |
+
allowEmptyOption: false,
|
3347 |
+
closeAfterSelect: false,
|
3348 |
+
|
3349 |
+
scrollDuration: 60,
|
3350 |
+
loadThrottle: 300,
|
3351 |
+
loadingClass: 'loading',
|
3352 |
+
|
3353 |
+
dataAttr: 'data-data',
|
3354 |
+
optgroupField: 'optgroup',
|
3355 |
+
valueField: 'value',
|
3356 |
+
labelField: 'text',
|
3357 |
+
disabledField: 'disabled',
|
3358 |
+
optgroupLabelField: 'label',
|
3359 |
+
optgroupValueField: 'value',
|
3360 |
+
lockOptgroupOrder: false,
|
3361 |
+
|
3362 |
+
sortField: '$order',
|
3363 |
+
searchField: ['text'],
|
3364 |
+
searchConjunction: 'and',
|
3365 |
+
|
3366 |
+
mode: null,
|
3367 |
+
wrapperClass: 'selectize-control',
|
3368 |
+
inputClass: 'selectize-input',
|
3369 |
+
dropdownClass: 'selectize-dropdown',
|
3370 |
+
dropdownContentClass: 'selectize-dropdown-content',
|
3371 |
+
|
3372 |
+
dropdownParent: null,
|
3373 |
+
|
3374 |
+
copyClassesToDropdown: true,
|
3375 |
+
|
3376 |
+
/*
|
3377 |
+
load : null, // function(query, callback) { ... }
|
3378 |
+
score : null, // function(search) { ... }
|
3379 |
+
onInitialize : null, // function() { ... }
|
3380 |
+
onChange : null, // function(value) { ... }
|
3381 |
+
onItemAdd : null, // function(value, $item) { ... }
|
3382 |
+
onItemRemove : null, // function(value) { ... }
|
3383 |
+
onClear : null, // function() { ... }
|
3384 |
+
onOptionAdd : null, // function(value, data) { ... }
|
3385 |
+
onOptionRemove : null, // function(value) { ... }
|
3386 |
+
onOptionClear : null, // function() { ... }
|
3387 |
+
onOptionGroupAdd : null, // function(id, data) { ... }
|
3388 |
+
onOptionGroupRemove : null, // function(id) { ... }
|
3389 |
+
onOptionGroupClear : null, // function() { ... }
|
3390 |
+
onDropdownOpen : null, // function($dropdown) { ... }
|
3391 |
+
onDropdownClose : null, // function($dropdown) { ... }
|
3392 |
+
onType : null, // function(str) { ... }
|
3393 |
+
onDelete : null, // function(values) { ... }
|
3394 |
+
*/
|
3395 |
+
|
3396 |
+
render: {
|
3397 |
+
/*
|
3398 |
+
item: null,
|
3399 |
+
optgroup: null,
|
3400 |
+
optgroup_header: null,
|
3401 |
+
option: null,
|
3402 |
+
option_create: null
|
3403 |
+
*/
|
3404 |
+
}
|
3405 |
+
};
|
3406 |
+
|
3407 |
+
|
3408 |
+
$.fn.selectize = function(settings_user) {
|
3409 |
+
var defaults = $.fn.selectize.defaults;
|
3410 |
+
var settings = $.extend({}, defaults, settings_user);
|
3411 |
+
var attr_data = settings.dataAttr;
|
3412 |
+
var field_label = settings.labelField;
|
3413 |
+
var field_value = settings.valueField;
|
3414 |
+
var field_disabled = settings.disabledField;
|
3415 |
+
var field_optgroup = settings.optgroupField;
|
3416 |
+
var field_optgroup_label = settings.optgroupLabelField;
|
3417 |
+
var field_optgroup_value = settings.optgroupValueField;
|
3418 |
+
|
3419 |
+
/**
|
3420 |
+
* Initializes selectize from a <input type="text"> element.
|
3421 |
+
*
|
3422 |
+
* @param {object} $input
|
3423 |
+
* @param {object} settings_element
|
3424 |
+
*/
|
3425 |
+
var init_textbox = function($input, settings_element) {
|
3426 |
+
var i, n, values, option;
|
3427 |
+
|
3428 |
+
var data_raw = $input.attr(attr_data);
|
3429 |
+
|
3430 |
+
if (!data_raw) {
|
3431 |
+
var value = $.trim($input.val() || '');
|
3432 |
+
if (!settings.allowEmptyOption && !value.length) return;
|
3433 |
+
values = value.split(settings.delimiter);
|
3434 |
+
for (i = 0, n = values.length; i < n; i++) {
|
3435 |
+
option = {};
|
3436 |
+
option[field_label] = values[i];
|
3437 |
+
option[field_value] = values[i];
|
3438 |
+
settings_element.options.push(option);
|
3439 |
+
}
|
3440 |
+
settings_element.items = values;
|
3441 |
+
} else {
|
3442 |
+
settings_element.options = JSON.parse(data_raw);
|
3443 |
+
for (i = 0, n = settings_element.options.length; i < n; i++) {
|
3444 |
+
settings_element.items.push(settings_element.options[i][field_value]);
|
3445 |
+
}
|
3446 |
+
}
|
3447 |
+
};
|
3448 |
+
|
3449 |
+
/**
|
3450 |
+
* Initializes selectize from a <select> element.
|
3451 |
+
*
|
3452 |
+
* @param {object} $input
|
3453 |
+
* @param {object} settings_element
|
3454 |
+
*/
|
3455 |
+
var init_select = function($input, settings_element) {
|
3456 |
+
var i, n, tagName, $children, order = 0;
|
3457 |
+
var options = settings_element.options;
|
3458 |
+
var optionsMap = {};
|
3459 |
+
|
3460 |
+
var readData = function($el) {
|
3461 |
+
var data = attr_data && $el.attr(attr_data);
|
3462 |
+
if (typeof data === 'string' && data.length) {
|
3463 |
+
return JSON.parse(data);
|
3464 |
+
}
|
3465 |
+
return null;
|
3466 |
+
};
|
3467 |
+
|
3468 |
+
var addOption = function($option, group) {
|
3469 |
+
$option = $($option);
|
3470 |
+
|
3471 |
+
var value = hash_key($option.val());
|
3472 |
+
if (!value && !settings.allowEmptyOption) return;
|
3473 |
+
|
3474 |
+
// if the option already exists, it's probably been
|
3475 |
+
// duplicated in another optgroup. in this case, push
|
3476 |
+
// the current group to the "optgroup" property on the
|
3477 |
+
// existing option so that it's rendered in both places.
|
3478 |
+
if (optionsMap.hasOwnProperty(value)) {
|
3479 |
+
if (group) {
|
3480 |
+
var arr = optionsMap[value][field_optgroup];
|
3481 |
+
if (!arr) {
|
3482 |
+
optionsMap[value][field_optgroup] = group;
|
3483 |
+
} else if (!$.isArray(arr)) {
|
3484 |
+
optionsMap[value][field_optgroup] = [arr, group];
|
3485 |
+
} else {
|
3486 |
+
arr.push(group);
|
3487 |
+
}
|
3488 |
+
}
|
3489 |
+
return;
|
3490 |
+
}
|
3491 |
+
|
3492 |
+
var option = readData($option) || {};
|
3493 |
+
option[field_label] = option[field_label] || $option.text();
|
3494 |
+
option[field_value] = option[field_value] || value;
|
3495 |
+
option[field_disabled] = option[field_disabled] || $option.prop('disabled');
|
3496 |
+
option[field_optgroup] = option[field_optgroup] || group;
|
3497 |
+
|
3498 |
+
optionsMap[value] = option;
|
3499 |
+
options.push(option);
|
3500 |
+
|
3501 |
+
if ($option.is(':selected')) {
|
3502 |
+
settings_element.items.push(value);
|
3503 |
+
}
|
3504 |
+
};
|
3505 |
+
|
3506 |
+
var addGroup = function($optgroup) {
|
3507 |
+
var i, n, id, optgroup, $options;
|
3508 |
+
|
3509 |
+
$optgroup = $($optgroup);
|
3510 |
+
id = $optgroup.attr('label');
|
3511 |
+
|
3512 |
+
if (id) {
|
3513 |
+
optgroup = readData($optgroup) || {};
|
3514 |
+
optgroup[field_optgroup_label] = id;
|
3515 |
+
optgroup[field_optgroup_value] = id;
|
3516 |
+
optgroup[field_disabled] = $optgroup.prop('disabled');
|
3517 |
+
settings_element.optgroups.push(optgroup);
|
3518 |
+
}
|
3519 |
+
|
3520 |
+
$options = $('option', $optgroup);
|
3521 |
+
for (i = 0, n = $options.length; i < n; i++) {
|
3522 |
+
addOption($options[i], id);
|
3523 |
+
}
|
3524 |
+
};
|
3525 |
+
|
3526 |
+
settings_element.maxItems = $input.attr('multiple') ? null : 1;
|
3527 |
+
|
3528 |
+
$children = $input.children();
|
3529 |
+
for (i = 0, n = $children.length; i < n; i++) {
|
3530 |
+
tagName = $children[i].tagName.toLowerCase();
|
3531 |
+
if (tagName === 'optgroup') {
|
3532 |
+
addGroup($children[i]);
|
3533 |
+
} else if (tagName === 'option') {
|
3534 |
+
addOption($children[i]);
|
3535 |
+
}
|
3536 |
+
}
|
3537 |
+
};
|
3538 |
+
|
3539 |
+
return this.each(function() {
|
3540 |
+
if (this.selectize) return;
|
3541 |
+
|
3542 |
+
var instance;
|
3543 |
+
var $input = $(this);
|
3544 |
+
var tag_name = this.tagName.toLowerCase();
|
3545 |
+
var placeholder = $input.attr('placeholder') || $input.attr('data-placeholder');
|
3546 |
+
if (!placeholder && !settings.allowEmptyOption) {
|
3547 |
+
placeholder = $input.children('option[value=""]').text();
|
3548 |
+
}
|
3549 |
+
|
3550 |
+
var settings_element = {
|
3551 |
+
'placeholder' : placeholder,
|
3552 |
+
'options' : [],
|
3553 |
+
'optgroups' : [],
|
3554 |
+
'items' : []
|
3555 |
+
};
|
3556 |
+
|
3557 |
+
if (tag_name === 'select') {
|
3558 |
+
init_select($input, settings_element);
|
3559 |
+
} else {
|
3560 |
+
init_textbox($input, settings_element);
|
3561 |
+
}
|
3562 |
+
|
3563 |
+
instance = new Selectize($input, $.extend(true, {}, defaults, settings_element, settings_user));
|
3564 |
+
});
|
3565 |
+
};
|
3566 |
+
|
3567 |
+
$.fn.selectize.defaults = Selectize.defaults;
|
3568 |
+
$.fn.selectize.support = {
|
3569 |
+
validity: SUPPORTS_VALIDITY_API
|
3570 |
+
};
|
3571 |
+
|
3572 |
+
|
3573 |
+
Selectize.define('drag_drop', function(options) {
|
3574 |
+
if (!$.fn.sortable) throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');
|
3575 |
+
if (this.settings.mode !== 'multi') return;
|
3576 |
+
var self = this;
|
3577 |
+
|
3578 |
+
self.lock = (function() {
|
3579 |
+
var original = self.lock;
|
3580 |
+
return function() {
|
3581 |
+
var sortable = self.$control.data('sortable');
|
3582 |
+
if (sortable) sortable.disable();
|
3583 |
+
return original.apply(self, arguments);
|
3584 |
+
};
|
3585 |
+
})();
|
3586 |
+
|
3587 |
+
self.unlock = (function() {
|
3588 |
+
var original = self.unlock;
|
3589 |
+
return function() {
|
3590 |
+
var sortable = self.$control.data('sortable');
|
3591 |
+
if (sortable) sortable.enable();
|
3592 |
+
return original.apply(self, arguments);
|
3593 |
+
};
|
3594 |
+
})();
|
3595 |
+
|
3596 |
+
self.setup = (function() {
|
3597 |
+
var original = self.setup;
|
3598 |
+
return function() {
|
3599 |
+
original.apply(this, arguments);
|
3600 |
+
|
3601 |
+
var $control = self.$control.sortable({
|
3602 |
+
items: '[data-value]',
|
3603 |
+
forcePlaceholderSize: true,
|
3604 |
+
disabled: self.isLocked,
|
3605 |
+
start: function(e, ui) {
|
3606 |
+
ui.placeholder.css('width', ui.helper.css('width'));
|
3607 |
+
$control.css({overflow: 'visible'});
|
3608 |
+
},
|
3609 |
+
stop: function() {
|
3610 |
+
$control.css({overflow: 'hidden'});
|
3611 |
+
var active = self.$activeItems ? self.$activeItems.slice() : null;
|
3612 |
+
var values = [];
|
3613 |
+
$control.children('[data-value]').each(function() {
|
3614 |
+
values.push($(this).attr('data-value'));
|
3615 |
+
});
|
3616 |
+
self.setValue(values);
|
3617 |
+
self.setActiveItem(active);
|
3618 |
+
}
|
3619 |
+
});
|
3620 |
+
};
|
3621 |
+
})();
|
3622 |
+
|
3623 |
+
});
|
3624 |
+
|
3625 |
+
Selectize.define('dropdown_header', function(options) {
|
3626 |
+
var self = this;
|
3627 |
+
|
3628 |
+
options = $.extend({
|
3629 |
+
title : 'Untitled',
|
3630 |
+
headerClass : 'selectize-dropdown-header',
|
3631 |
+
titleRowClass : 'selectize-dropdown-header-title',
|
3632 |
+
labelClass : 'selectize-dropdown-header-label',
|
3633 |
+
closeClass : 'selectize-dropdown-header-close',
|
3634 |
+
|
3635 |
+
html: function(data) {
|
3636 |
+
return (
|
3637 |
+
'<div class="' + data.headerClass + '">' +
|
3638 |
+
'<div class="' + data.titleRowClass + '">' +
|
3639 |
+
'<span class="' + data.labelClass + '">' + data.title + '</span>' +
|
3640 |
+
'<a href="javascript:void(0)" class="' + data.closeClass + '">×</a>' +
|
3641 |
+
'</div>' +
|
3642 |
+
'</div>'
|
3643 |
+
);
|
3644 |
+
}
|
3645 |
+
}, options);
|
3646 |
+
|
3647 |
+
self.setup = (function() {
|
3648 |
+
var original = self.setup;
|
3649 |
+
return function() {
|
3650 |
+
original.apply(self, arguments);
|
3651 |
+
self.$dropdown_header = $(options.html(options));
|
3652 |
+
self.$dropdown.prepend(self.$dropdown_header);
|
3653 |
+
};
|
3654 |
+
})();
|
3655 |
+
|
3656 |
+
});
|
3657 |
+
|
3658 |
+
Selectize.define('optgroup_columns', function(options) {
|
3659 |
+
var self = this;
|
3660 |
+
|
3661 |
+
options = $.extend({
|
3662 |
+
equalizeWidth : true,
|
3663 |
+
equalizeHeight : true
|
3664 |
+
}, options);
|
3665 |
+
|
3666 |
+
this.getAdjacentOption = function($option, direction) {
|
3667 |
+
var $options = $option.closest('[data-group]').find('[data-selectable]');
|
3668 |
+
var index = $options.index($option) + direction;
|
3669 |
+
|
3670 |
+
return index >= 0 && index < $options.length ? $options.eq(index) : $();
|
3671 |
+
};
|
3672 |
+
|
3673 |
+
this.onKeyDown = (function() {
|
3674 |
+
var original = self.onKeyDown;
|
3675 |
+
return function(e) {
|
3676 |
+
var index, $option, $options, $optgroup;
|
3677 |
+
|
3678 |
+
if (this.isOpen && (e.keyCode === KEY_LEFT || e.keyCode === KEY_RIGHT)) {
|
3679 |
+
self.ignoreHover = true;
|
3680 |
+
$optgroup = this.$activeOption.closest('[data-group]');
|
3681 |
+
index = $optgroup.find('[data-selectable]').index(this.$activeOption);
|
3682 |
+
|
3683 |
+
if(e.keyCode === KEY_LEFT) {
|
3684 |
+
$optgroup = $optgroup.prev('[data-group]');
|
3685 |
+
} else {
|
3686 |
+
$optgroup = $optgroup.next('[data-group]');
|
3687 |
+
}
|
3688 |
+
|
3689 |
+
$options = $optgroup.find('[data-selectable]');
|
3690 |
+
$option = $options.eq(Math.min($options.length - 1, index));
|
3691 |
+
if ($option.length) {
|
3692 |
+
this.setActiveOption($option);
|
3693 |
+
}
|
3694 |
+
return;
|
3695 |
+
}
|
3696 |
+
|
3697 |
+
return original.apply(this, arguments);
|
3698 |
+
};
|
3699 |
+
})();
|
3700 |
+
|
3701 |
+
var getScrollbarWidth = function() {
|
3702 |
+
var div;
|
3703 |
+
var width = getScrollbarWidth.width;
|
3704 |
+
var doc = document;
|
3705 |
+
|
3706 |
+
if (typeof width === 'undefined') {
|
3707 |
+
div = doc.createElement('div');
|
3708 |
+
div.innerHTML = '<div style="width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;"><div style="width:1px;height:100px;"></div></div>';
|
3709 |
+
div = div.firstChild;
|
3710 |
+
doc.body.appendChild(div);
|
3711 |
+
width = getScrollbarWidth.width = div.offsetWidth - div.clientWidth;
|
3712 |
+
doc.body.removeChild(div);
|
3713 |
+
}
|
3714 |
+
return width;
|
3715 |
+
};
|
3716 |
+
|
3717 |
+
var equalizeSizes = function() {
|
3718 |
+
var i, n, height_max, width, width_last, width_parent, $optgroups;
|
3719 |
+
|
3720 |
+
$optgroups = $('[data-group]', self.$dropdown_content);
|
3721 |
+
n = $optgroups.length;
|
3722 |
+
if (!n || !self.$dropdown_content.width()) return;
|
3723 |
+
|
3724 |
+
if (options.equalizeHeight) {
|
3725 |
+
height_max = 0;
|
3726 |
+
for (i = 0; i < n; i++) {
|
3727 |
+
height_max = Math.max(height_max, $optgroups.eq(i).height());
|
3728 |
+
}
|
3729 |
+
$optgroups.css({height: height_max});
|
3730 |
+
}
|
3731 |
+
|
3732 |
+
if (options.equalizeWidth) {
|
3733 |
+
width_parent = self.$dropdown_content.innerWidth() - getScrollbarWidth();
|
3734 |
+
width = Math.round(width_parent / n);
|
3735 |
+
$optgroups.css({width: width});
|
3736 |
+
if (n > 1) {
|
3737 |
+
width_last = width_parent - width * (n - 1);
|
3738 |
+
$optgroups.eq(n - 1).css({width: width_last});
|
3739 |
+
}
|
3740 |
+
}
|
3741 |
+
};
|
3742 |
+
|
3743 |
+
if (options.equalizeHeight || options.equalizeWidth) {
|
3744 |
+
hook.after(this, 'positionDropdown', equalizeSizes);
|
3745 |
+
hook.after(this, 'refreshOptions', equalizeSizes);
|
3746 |
+
}
|
3747 |
+
|
3748 |
+
|
3749 |
+
});
|
3750 |
+
|
3751 |
+
Selectize.define('remove_button', function(options) {
|
3752 |
+
options = $.extend({
|
3753 |
+
label : '×',
|
3754 |
+
title : 'Remove',
|
3755 |
+
className : 'remove',
|
3756 |
+
append : true
|
3757 |
+
}, options);
|
3758 |
+
|
3759 |
+
var singleClose = function(thisRef, options) {
|
3760 |
+
|
3761 |
+
options.className = 'remove-single';
|
3762 |
+
|
3763 |
+
var self = thisRef;
|
3764 |
+
var html = '<a href="javascript:void(0)" class="' + options.className + '" tabindex="-1" title="' + escape_html(options.title) + '">' + options.label + '</a>';
|
3765 |
+
|
3766 |
+
/**
|
3767 |
+
* Appends an element as a child (with raw HTML).
|
3768 |
+
*
|
3769 |
+
* @param {string} html_container
|
3770 |
+
* @param {string} html_element
|
3771 |
+
* @return {string}
|
3772 |
+
*/
|
3773 |
+
var append = function(html_container, html_element) {
|
3774 |
+
return $('<span>').append(html_container)
|
3775 |
+
.append(html_element);
|
3776 |
+
};
|
3777 |
+
|
3778 |
+
thisRef.setup = (function() {
|
3779 |
+
var original = self.setup;
|
3780 |
+
return function() {
|
3781 |
+
// override the item rendering method to add the button to each
|
3782 |
+
if (options.append) {
|
3783 |
+
var id = $(self.$input.context).attr('id');
|
3784 |
+
var selectizer = $('#'+id);
|
3785 |
+
|
3786 |
+
var render_item = self.settings.render.item;
|
3787 |
+
self.settings.render.item = function(data) {
|
3788 |
+
return append(render_item.apply(thisRef, arguments), html);
|
3789 |
+
};
|
3790 |
+
}
|
3791 |
+
|
3792 |
+
original.apply(thisRef, arguments);
|
3793 |
+
|
3794 |
+
// add event listener
|
3795 |
+
thisRef.$control.on('click', '.' + options.className, function(e) {
|
3796 |
+
e.preventDefault();
|
3797 |
+
if (self.isLocked) return;
|
3798 |
+
|
3799 |
+
self.clear();
|
3800 |
+
});
|
3801 |
+
|
3802 |
+
};
|
3803 |
+
})();
|
3804 |
+
};
|
3805 |
+
|
3806 |
+
var multiClose = function(thisRef, options) {
|
3807 |
+
|
3808 |
+
var self = thisRef;
|
3809 |
+
var html = '<a href="javascript:void(0)" class="' + options.className + '" tabindex="-1" title="' + escape_html(options.title) + '">' + options.label + '</a>';
|
3810 |
+
|
3811 |
+
/**
|
3812 |
+
* Appends an element as a child (with raw HTML).
|
3813 |
+
*
|
3814 |
+
* @param {string} html_container
|
3815 |
+
* @param {string} html_element
|
3816 |
+
* @return {string}
|
3817 |
+
*/
|
3818 |
+
var append = function(html_container, html_element) {
|
3819 |
+
var pos = html_container.search(/(<\/[^>]+>\s*)$/);
|
3820 |
+
return html_container.substring(0, pos) + html_element + html_container.substring(pos);
|
3821 |
+
};
|
3822 |
+
|
3823 |
+
thisRef.setup = (function() {
|
3824 |
+
var original = self.setup;
|
3825 |
+
return function() {
|
3826 |
+
// override the item rendering method to add the button to each
|
3827 |
+
if (options.append) {
|
3828 |
+
var render_item = self.settings.render.item;
|
3829 |
+
self.settings.render.item = function(data) {
|
3830 |
+
return append(render_item.apply(thisRef, arguments), html);
|
3831 |
+
};
|
3832 |
+
}
|
3833 |
+
|
3834 |
+
original.apply(thisRef, arguments);
|
3835 |
+
|
3836 |
+
// add event listener
|
3837 |
+
thisRef.$control.on('click', '.' + options.className, function(e) {
|
3838 |
+
e.preventDefault();
|
3839 |
+
if (self.isLocked) return;
|
3840 |
+
|
3841 |
+
var $item = $(e.currentTarget).parent();
|
3842 |
+
self.setActiveItem($item);
|
3843 |
+
if (self.deleteSelection()) {
|
3844 |
+
self.setCaret(self.items.length);
|
3845 |
+
}
|
3846 |
+
});
|
3847 |
+
|
3848 |
+
};
|
3849 |
+
})();
|
3850 |
+
};
|
3851 |
+
|
3852 |
+
if (this.settings.mode === 'single') {
|
3853 |
+
singleClose(this, options);
|
3854 |
+
return;
|
3855 |
+
} else {
|
3856 |
+
multiClose(this, options);
|
3857 |
+
}
|
3858 |
+
});
|
3859 |
+
|
3860 |
+
|
3861 |
+
Selectize.define('restore_on_backspace', function(options) {
|
3862 |
+
var self = this;
|
3863 |
+
|
3864 |
+
options.text = options.text || function(option) {
|
3865 |
+
return option[this.settings.labelField];
|
3866 |
+
};
|
3867 |
+
|
3868 |
+
this.onKeyDown = (function() {
|
3869 |
+
var original = self.onKeyDown;
|
3870 |
+
return function(e) {
|
3871 |
+
var index, option;
|
3872 |
+
if (e.keyCode === KEY_BACKSPACE && this.$control_input.val() === '' && !this.$activeItems.length) {
|
3873 |
+
index = this.caretPos - 1;
|
3874 |
+
if (index >= 0 && index < this.items.length) {
|
3875 |
+
option = this.options[this.items[index]];
|
3876 |
+
if (this.deleteSelection(e)) {
|
3877 |
+
this.setTextboxValue(options.text.apply(this, [option]));
|
3878 |
+
this.refreshOptions(true);
|
3879 |
+
}
|
3880 |
+
e.preventDefault();
|
3881 |
+
return;
|
3882 |
+
}
|
3883 |
+
}
|
3884 |
+
return original.apply(this, arguments);
|
3885 |
+
};
|
3886 |
+
})();
|
3887 |
+
});
|
3888 |
+
|
3889 |
+
|
3890 |
+
return Selectize;
|
3891 |
+
}));
|
js/admin/selectize-v0.12.6/selectize.min.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
/*! selectize.js - v0.12.6 | https://github.com/selectize/selectize.js | Apache License (v2) */
|
2 |
+
|
3 |
+
!function(a,b){"function"==typeof define&&define.amd?define("sifter",b):"object"==typeof exports?module.exports=b():a.Sifter=b()}(this,function(){var a=function(a,b){this.items=a,this.settings=b||{diacritics:!0}};a.prototype.tokenize=function(a){if(!(a=e(String(a||"").toLowerCase()))||!a.length)return[];var b,c,d,g,i=[],j=a.split(/ +/);for(b=0,c=j.length;b<c;b++){if(d=f(j[b]),this.settings.diacritics)for(g in h)h.hasOwnProperty(g)&&(d=d.replace(new RegExp(g,"g"),h[g]));i.push({string:j[b],regex:new RegExp(d,"i")})}return i},a.prototype.iterator=function(a,b){var c;c=g(a)?Array.prototype.forEach||function(a){for(var b=0,c=this.length;b<c;b++)a(this[b],b,this)}:function(a){for(var b in this)this.hasOwnProperty(b)&&a(this[b],b,this)},c.apply(a,[b])},a.prototype.getScoreFunction=function(a,b){var c,e,f,g,h;c=this,a=c.prepareSearch(a,b),f=a.tokens,e=a.options.fields,g=f.length,h=a.options.nesting;var i=function(a,b){var c,d;return a?(a=String(a||""),-1===(d=a.search(b.regex))?0:(c=b.string.length/a.length,0===d&&(c+=.5),c)):0},j=function(){var a=e.length;return a?1===a?function(a,b){return i(d(b,e[0],h),a)}:function(b,c){for(var f=0,g=0;f<a;f++)g+=i(d(c,e[f],h),b);return g/a}:function(){return 0}}();return g?1===g?function(a){return j(f[0],a)}:"and"===a.options.conjunction?function(a){for(var b,c=0,d=0;c<g;c++){if((b=j(f[c],a))<=0)return 0;d+=b}return d/g}:function(a){for(var b=0,c=0;b<g;b++)c+=j(f[b],a);return c/g}:function(){return 0}},a.prototype.getSortFunction=function(a,c){var e,f,g,h,i,j,k,l,m,n,o;if(g=this,a=g.prepareSearch(a,c),o=!a.query&&c.sort_empty||c.sort,m=function(a,b){return"$score"===a?b.score:d(g.items[b.id],a,c.nesting)},i=[],o)for(e=0,f=o.length;e<f;e++)(a.query||"$score"!==o[e].field)&&i.push(o[e]);if(a.query){for(n=!0,e=0,f=i.length;e<f;e++)if("$score"===i[e].field){n=!1;break}n&&i.unshift({field:"$score",direction:"desc"})}else for(e=0,f=i.length;e<f;e++)if("$score"===i[e].field){i.splice(e,1);break}for(l=[],e=0,f=i.length;e<f;e++)l.push("desc"===i[e].direction?-1:1);return j=i.length,j?1===j?(h=i[0].field,k=l[0],function(a,c){return k*b(m(h,a),m(h,c))}):function(a,c){var d,e,f;for(d=0;d<j;d++)if(f=i[d].field,e=l[d]*b(m(f,a),m(f,c)))return e;return 0}:null},a.prototype.prepareSearch=function(a,b){if("object"==typeof a)return a;b=c({},b);var d=b.fields,e=b.sort,f=b.sort_empty;return d&&!g(d)&&(b.fields=[d]),e&&!g(e)&&(b.sort=[e]),f&&!g(f)&&(b.sort_empty=[f]),{options:b,query:String(a||"").toLowerCase(),tokens:this.tokenize(a),total:0,items:[]}},a.prototype.search=function(a,b){var c,d,e,f,g=this;return d=this.prepareSearch(a,b),b=d.options,a=d.query,f=b.score||g.getScoreFunction(d),a.length?g.iterator(g.items,function(a,e){c=f(a),(!1===b.filter||c>0)&&d.items.push({score:c,id:e})}):g.iterator(g.items,function(a,b){d.items.push({score:1,id:b})}),e=g.getSortFunction(d,b),e&&d.items.sort(e),d.total=d.items.length,"number"==typeof b.limit&&(d.items=d.items.slice(0,b.limit)),d};var b=function(a,b){return"number"==typeof a&&"number"==typeof b?a>b?1:a<b?-1:0:(a=i(String(a||"")),b=i(String(b||"")),a>b?1:b>a?-1:0)},c=function(a,b){var c,d,e,f;for(c=1,d=arguments.length;c<d;c++)if(f=arguments[c])for(e in f)f.hasOwnProperty(e)&&(a[e]=f[e]);return a},d=function(a,b,c){if(a&&b){if(!c)return a[b];for(var d=b.split(".");d.length&&(a=a[d.shift()]););return a}},e=function(a){return(a+"").replace(/^\s+|\s+$|/g,"")},f=function(a){return(a+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")},g=Array.isArray||"undefined"!=typeof $&&$.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},h={a:"[aḀḁĂăÂâǍǎȺⱥȦȧẠạÄäÀàÁáĀāÃãÅåąĄÃąĄ]",b:"[b␢βΒB฿𐌁ᛒ]",c:"[cĆćĈĉČčĊċC̄c̄ÇçḈḉȻȼƇƈɕᴄCc]",d:"[dĎďḊḋḐḑḌḍḒḓḎḏĐđD̦d̦ƉɖƊɗƋƌᵭᶁᶑȡᴅDdð]",e:"[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀềỄễỂểḜḝḖḗḔḕȆȇẸẹỆệⱸᴇEeɘǝƏƐε]",f:"[fƑƒḞḟ]",g:"[gɢ₲ǤǥĜĝĞğĢģƓɠĠġ]",h:"[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]",i:"[iÍíÌìĬĭÎîǏǐÏïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬḭƗɨɨ̆ᵻᶖİiIıɪIi]",j:"[jȷĴĵɈɉʝɟʲ]",k:"[kƘƙꝀꝁḰḱǨǩḲḳḴḵκϰ₭]",l:"[lŁłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅɭȴʟLl]",n:"[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ƝɲȠƞᵰᶇɳȵɴNnŊŋ]",o:"[oØøÖöÓóÒòÔôǑǒŐőŎŏȮȯỌọƟɵƠơỎỏŌōÕõǪǫȌȍՕօ]",p:"[pṔṕṖṗⱣᵽƤƥᵱ]",q:"[qꝖꝗʠɊɋꝘꝙq̃]",r:"[rŔŕɌɍŘřŖŗṘṙȐȑȒȓṚṛⱤɽ]",s:"[sŚśṠṡṢṣꞨꞩŜŝŠšŞşȘșS̈s̈]",t:"[tŤťṪṫŢţṬṭƮʈȚțṰṱṮṯƬƭ]",u:"[uŬŭɄʉỤụÜüÚúÙùÛûǓǔŰűŬŭƯưỦủŪūŨũŲųȔȕ∪]",v:"[vṼṽṾṿƲʋꝞꝟⱱʋ]",w:"[wẂẃẀẁŴŵẄẅẆẇẈẉ]",x:"[xẌẍẊẋχ]",y:"[yÝýỲỳŶŷŸÿỸỹẎẏỴỵɎɏƳƴ]",z:"[zŹźẐẑŽžŻżẒẓẔẕƵƶ]"},i=function(){var a,b,c,d,e="",f={};for(c in h)if(h.hasOwnProperty(c))for(d=h[c].substring(2,h[c].length-1),e+=d,a=0,b=d.length;a<b;a++)f[d.charAt(a)]=c;var g=new RegExp("["+e+"]","g");return function(a){return a.replace(g,function(a){return f[a]}).toLowerCase()}}();return a}),function(a,b){"function"==typeof define&&define.amd?define("microplugin",b):"object"==typeof exports?module.exports=b():a.MicroPlugin=b()}(this,function(){var a={};a.mixin=function(a){a.plugins={},a.prototype.initializePlugins=function(a){var c,d,e,f=this,g=[];if(f.plugins={names:[],settings:{},requested:{},loaded:{}},b.isArray(a))for(c=0,d=a.length;c<d;c++)"string"==typeof a[c]?g.push(a[c]):(f.plugins.settings[a[c].name]=a[c].options,g.push(a[c].name));else if(a)for(e in a)a.hasOwnProperty(e)&&(f.plugins.settings[e]=a[e],g.push(e));for(;g.length;)f.require(g.shift())},a.prototype.loadPlugin=function(b){var c=this,d=c.plugins,e=a.plugins[b];if(!a.plugins.hasOwnProperty(b))throw new Error('Unable to find "'+b+'" plugin');d.requested[b]=!0,d.loaded[b]=e.fn.apply(c,[c.plugins.settings[b]||{}]),d.names.push(b)},a.prototype.require=function(a){var b=this,c=b.plugins;if(!b.plugins.loaded.hasOwnProperty(a)){if(c.requested[a])throw new Error('Plugin has circular dependency ("'+a+'")');b.loadPlugin(a)}return c.loaded[a]},a.define=function(b,c){a.plugins[b]={name:b,fn:c}}};var b={isArray:Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)}};return a}),function(a,b){"function"==typeof define&&define.amd?define("selectize",["jquery","sifter","microplugin"],b):"object"==typeof exports?module.exports=b(require("jquery"),require("sifter"),require("microplugin")):a.Selectize=b(a.jQuery,a.Sifter,a.MicroPlugin)}(this,function(a,b,c){"use strict";var d=function(a,b){if("string"!=typeof b||b.length){var c="string"==typeof b?new RegExp(b,"i"):b,d=function(a){var b=0;if(3===a.nodeType){var e=a.data.search(c);if(e>=0&&a.data.length>0){var f=a.data.match(c),g=document.createElement("span");g.className="highlight";var h=a.splitText(e),i=(h.splitText(f[0].length),h.cloneNode(!0));g.appendChild(i),h.parentNode.replaceChild(g,h),b=1}}else if(1===a.nodeType&&a.childNodes&&!/(script|style)/i.test(a.tagName)&&("highlight"!==a.className||"SPAN"!==a.tagName))for(var j=0;j<a.childNodes.length;++j)j+=d(a.childNodes[j]);return b};return a.each(function(){d(this)})}};a.fn.removeHighlight=function(){return this.find("span.highlight").each(function(){this.parentNode.firstChild.nodeName;var a=this.parentNode;a.replaceChild(this.firstChild,this),a.normalize()}).end()};var e=function(){};e.prototype={on:function(a,b){this._events=this._events||{},this._events[a]=this._events[a]||[],this._events[a].push(b)},off:function(a,b){var c=arguments.length;return 0===c?delete this._events:1===c?delete this._events[a]:(this._events=this._events||{},void(a in this._events!=!1&&this._events[a].splice(this._events[a].indexOf(b),1)))},trigger:function(a){if(this._events=this._events||{},a in this._events!=!1)for(var b=0;b<this._events[a].length;b++)this._events[a][b].apply(this,Array.prototype.slice.call(arguments,1))}},e.mixin=function(a){for(var b=["on","off","trigger"],c=0;c<b.length;c++)a.prototype[b[c]]=e.prototype[b[c]]};var f=/Mac/.test(navigator.userAgent),g=f?91:17,h=f?18:17,i=!/android/i.test(window.navigator.userAgent)&&!!document.createElement("input").validity,j=function(a){return void 0!==a},k=function(a){return void 0===a||null===a?null:"boolean"==typeof a?a?"1":"0":a+""},l=function(a){return(a+"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},m={};m.before=function(a,b,c){var d=a[b];a[b]=function(){return c.apply(a,arguments),d.apply(a,arguments)}},m.after=function(a,b,c){var d=a[b];a[b]=function(){var b=d.apply(a,arguments);return c.apply(a,arguments),b}};var n=function(a){var b=!1;return function(){b||(b=!0,a.apply(this,arguments))}},o=function(a,b){var c;return function(){var d=this,e=arguments;window.clearTimeout(c),c=window.setTimeout(function(){a.apply(d,e)},b)}},p=function(a,b,c){var d,e=a.trigger,f={};a.trigger=function(){var c=arguments[0];if(-1===b.indexOf(c))return e.apply(a,arguments);f[c]=arguments},c.apply(a,[]),a.trigger=e;for(d in f)f.hasOwnProperty(d)&&e.apply(a,f[d])},q=function(a,b,c,d){a.on(b,c,function(b){for(var c=b.target;c&&c.parentNode!==a[0];)c=c.parentNode;return b.currentTarget=c,d.apply(this,[b])})},r=function(a){var b={};if("selectionStart"in a)b.start=a.selectionStart,b.length=a.selectionEnd-b.start;else if(document.selection){a.focus();var c=document.selection.createRange(),d=document.selection.createRange().text.length;c.moveStart("character",-a.value.length),b.start=c.text.length-d,b.length=d}return b},s=function(a,b,c){var d,e,f={};if(c)for(d=0,e=c.length;d<e;d++)f[c[d]]=a.css(c[d]);else f=a.css();b.css(f)},t=function(b,c){return b?(w.$testInput||(w.$testInput=a("<span />").css({position:"absolute",top:-99999,left:-99999,width:"auto",padding:0,whiteSpace:"pre"}).appendTo("body")),w.$testInput.text(b),s(c,w.$testInput,["letterSpacing","fontSize","fontFamily","fontWeight","textTransform"]),w.$testInput.width()):0},u=function(a){var b=null,c=function(c,d){var e,f,g,h,i,j,k,l;c=c||window.event||{},d=d||{},c.metaKey||c.altKey||(d.force||!1!==a.data("grow"))&&(e=a.val(),c.type&&"keydown"===c.type.toLowerCase()&&(f=c.keyCode,g=f>=48&&f<=57||f>=65&&f<=90||f>=96&&f<=111||f>=186&&f<=222||32===f,46===f||8===f?(l=r(a[0]),l.length?e=e.substring(0,l.start)+e.substring(l.start+l.length):8===f&&l.start?e=e.substring(0,l.start-1)+e.substring(l.start+1):46===f&&void 0!==l.start&&(e=e.substring(0,l.start)+e.substring(l.start+1))):g&&(j=c.shiftKey,k=String.fromCharCode(c.keyCode),k=j?k.toUpperCase():k.toLowerCase(),e+=k)),h=a.attr("placeholder"),!e&&h&&(e=h),(i=t(e,a)+4)!==b&&(b=i,a.width(i),a.triggerHandler("resize")))};a.on("keydown keyup update blur",c),c()},v=function(a){var b=document.createElement("div");return b.appendChild(a.cloneNode(!0)),b.innerHTML},w=function(c,d){var e,f,g,h,i=this;h=c[0],h.selectize=i;var j=window.getComputedStyle&&window.getComputedStyle(h,null);if(g=j?j.getPropertyValue("direction"):h.currentStyle&&h.currentStyle.direction,g=g||c.parents("[dir]:first").attr("dir")||"",a.extend(i,{order:0,settings:d,$input:c,tabIndex:c.attr("tabindex")||"",tagType:"select"===h.tagName.toLowerCase()?1:2,rtl:/rtl/i.test(g),eventNS:".selectize"+ ++w.count,highlightedValue:null,isBlurring:!1,isOpen:!1,isDisabled:!1,isRequired:c.is("[required]"),isInvalid:!1,isLocked:!1,isFocused:!1,isInputHidden:!1,isSetup:!1,isShiftDown:!1,isCmdDown:!1,isCtrlDown:!1,ignoreFocus:!1,ignoreBlur:!1,ignoreHover:!1,hasOptions:!1,currentResults:null,lastValue:"",caretPos:0,loading:0,loadedSearches:{},$activeOption:null,$activeItems:[],optgroups:{},options:{},userOptions:{},items:[],renderCache:{},onSearchChange:null===d.loadThrottle?i.onSearchChange:o(i.onSearchChange,d.loadThrottle)}),i.sifter=new b(this.options,{diacritics:d.diacritics}),i.settings.options){for(e=0,f=i.settings.options.length;e<f;e++)i.registerOption(i.settings.options[e]);delete i.settings.options}if(i.settings.optgroups){for(e=0,f=i.settings.optgroups.length;e<f;e++)i.registerOptionGroup(i.settings.optgroups[e]);delete i.settings.optgroups}i.settings.mode=i.settings.mode||(1===i.settings.maxItems?"single":"multi"),"boolean"!=typeof i.settings.hideSelected&&(i.settings.hideSelected="multi"===i.settings.mode),i.initializePlugins(i.settings.plugins),i.setupCallbacks(),i.setupTemplates(),i.setup()};return e.mixin(w),void 0!==c?c.mixin(w):function(a,b){b||(b={});console.error("Selectize: "+a),b.explanation&&(console.group&&console.group(),console.error(b.explanation),console.group&&console.groupEnd())}("Dependency MicroPlugin is missing",{explanation:'Make sure you either: (1) are using the "standalone" version of Selectize, or (2) require MicroPlugin before you load Selectize.'}),a.extend(w.prototype,{setup:function(){var b,c,d,e,j,k,l,m,n,o,p=this,r=p.settings,s=p.eventNS,t=a(window),v=a(document),w=p.$input;if(l=p.settings.mode,m=w.attr("class")||"",b=a("<div>").addClass(r.wrapperClass).addClass(m).addClass(l),c=a("<div>").addClass(r.inputClass).addClass("items").appendTo(b),d=a('<input type="text" autocomplete="off" />').appendTo(c).attr("tabindex",w.is(":disabled")?"-1":p.tabIndex),k=a(r.dropdownParent||b),e=a("<div>").addClass(r.dropdownClass).addClass(l).hide().appendTo(k),j=a("<div>").addClass(r.dropdownContentClass).appendTo(e),(o=w.attr("id"))&&(d.attr("id",o+"-selectized"),a("label[for='"+o+"']").attr("for",o+"-selectized")),p.settings.copyClassesToDropdown&&e.addClass(m),b.css({width:w[0].style.width}),p.plugins.names.length&&(n="plugin-"+p.plugins.names.join(" plugin-"),b.addClass(n),e.addClass(n)),(null===r.maxItems||r.maxItems>1)&&1===p.tagType&&w.attr("multiple","multiple"),p.settings.placeholder&&d.attr("placeholder",r.placeholder),!p.settings.splitOn&&p.settings.delimiter){var x=p.settings.delimiter.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");p.settings.splitOn=new RegExp("\\s*"+x+"+\\s*")}w.attr("autocorrect")&&d.attr("autocorrect",w.attr("autocorrect")),w.attr("autocapitalize")&&d.attr("autocapitalize",w.attr("autocapitalize")),d[0].type=w[0].type,p.$wrapper=b,p.$control=c,p.$control_input=d,p.$dropdown=e,p.$dropdown_content=j,e.on("mouseenter mousedown click","[data-disabled]>[data-selectable]",function(a){a.stopImmediatePropagation()}),e.on("mouseenter","[data-selectable]",function(){return p.onOptionHover.apply(p,arguments)}),e.on("mousedown click","[data-selectable]",function(){return p.onOptionSelect.apply(p,arguments)}),q(c,"mousedown","*:not(input)",function(){return p.onItemSelect.apply(p,arguments)}),u(d),c.on({mousedown:function(){return p.onMouseDown.apply(p,arguments)},click:function(){return p.onClick.apply(p,arguments)}}),d.on({mousedown:function(a){a.stopPropagation()},keydown:function(){return p.onKeyDown.apply(p,arguments)},keyup:function(){return p.onKeyUp.apply(p,arguments)},keypress:function(){return p.onKeyPress.apply(p,arguments)},resize:function(){p.positionDropdown.apply(p,[])},blur:function(){return p.onBlur.apply(p,arguments)},focus:function(){return p.ignoreBlur=!1,p.onFocus.apply(p,arguments)},paste:function(){return p.onPaste.apply(p,arguments)}}),v.on("keydown"+s,function(a){p.isCmdDown=a[f?"metaKey":"ctrlKey"],p.isCtrlDown=a[f?"altKey":"ctrlKey"],p.isShiftDown=a.shiftKey}),v.on("keyup"+s,function(a){a.keyCode===h&&(p.isCtrlDown=!1),16===a.keyCode&&(p.isShiftDown=!1),a.keyCode===g&&(p.isCmdDown=!1)}),v.on("mousedown"+s,function(a){if(p.isFocused){if(a.target===p.$dropdown[0]||a.target.parentNode===p.$dropdown[0])return!1;p.$control.has(a.target).length||a.target===p.$control[0]||p.blur(a.target)}}),t.on(["scroll"+s,"resize"+s].join(" "),function(){p.isOpen&&p.positionDropdown.apply(p,arguments)}),t.on("mousemove"+s,function(){p.ignoreHover=!1}),this.revertSettings={$children:w.children().detach(),tabindex:w.attr("tabindex")},w.attr("tabindex",-1).hide().after(p.$wrapper),a.isArray(r.items)&&(p.setValue(r.items),delete r.items),i&&w.on("invalid"+s,function(a){a.preventDefault(),p.isInvalid=!0,p.refreshState()}),p.updateOriginalInput(),p.refreshItems(),p.refreshState(),p.updatePlaceholder(),p.isSetup=!0,w.is(":disabled")&&p.disable(),p.on("change",this.onChange),w.data("selectize",p),w.addClass("selectized"),p.trigger("initialize"),!0===r.preload&&p.onSearchChange("")},setupTemplates:function(){var b=this,c=b.settings.labelField,d=b.settings.optgroupLabelField,e={optgroup:function(a){return'<div class="optgroup">'+a.html+"</div>"},optgroup_header:function(a,b){return'<div class="optgroup-header">'+b(a[d])+"</div>"},option:function(a,b){return'<div class="option">'+b(a[c])+"</div>"},item:function(a,b){return'<div class="item">'+b(a[c])+"</div>"},option_create:function(a,b){return'<div class="create">Add <strong>'+b(a.input)+"</strong>…</div>"}};b.settings.render=a.extend({},e,b.settings.render)},setupCallbacks:function(){var a,b,c={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(a in c)c.hasOwnProperty(a)&&(b=this.settings[c[a]])&&this.on(a,b)},onClick:function(a){var b=this;b.isFocused&&b.isOpen||(b.focus(),a.preventDefault())},onMouseDown:function(b){var c=this,d=b.isDefaultPrevented();a(b.target);if(c.isFocused){if(b.target!==c.$control_input[0])return"single"===c.settings.mode?c.isOpen?c.close():c.open():d||c.setActiveItem(null),!1}else d||window.setTimeout(function(){c.focus()},0)},onChange:function(){this.$input.trigger("change")},onPaste:function(b){var c=this;if(c.isFull()||c.isInputHidden||c.isLocked)return void b.preventDefault();c.settings.splitOn&&setTimeout(function(){var b=c.$control_input.val();if(b.match(c.settings.splitOn))for(var d=a.trim(b).split(c.settings.splitOn),e=0,f=d.length;e<f;e++)c.createItem(d[e])},0)},onKeyPress:function(a){if(this.isLocked)return a&&a.preventDefault();var b=String.fromCharCode(a.keyCode||a.which);return this.settings.create&&"multi"===this.settings.mode&&b===this.settings.delimiter?(this.createItem(),a.preventDefault(),!1):void 0},onKeyDown:function(a){var b=(a.target,this.$control_input[0],this);if(b.isLocked)return void(9!==a.keyCode&&a.preventDefault());switch(a.keyCode){case 65:if(b.isCmdDown)return void b.selectAll();break;case 27:return void(b.isOpen&&(a.preventDefault(),a.stopPropagation(),b.close()));case 78:if(!a.ctrlKey||a.altKey)break;case 40:if(!b.isOpen&&b.hasOptions)b.open();else if(b.$activeOption){b.ignoreHover=!0;var c=b.getAdjacentOption(b.$activeOption,1);c.length&&b.setActiveOption(c,!0,!0)}return void a.preventDefault();case 80:if(!a.ctrlKey||a.altKey)break;case 38:if(b.$activeOption){b.ignoreHover=!0;var d=b.getAdjacentOption(b.$activeOption,-1);d.length&&b.setActiveOption(d,!0,!0)}return void a.preventDefault();case 13:return void(b.isOpen&&b.$activeOption&&(b.onOptionSelect({currentTarget:b.$activeOption}),a.preventDefault()));case 37:return void b.advanceSelection(-1,a);case 39:return void b.advanceSelection(1,a);case 9:return b.settings.selectOnTab&&b.isOpen&&b.$activeOption&&(b.onOptionSelect({currentTarget:b.$activeOption}),b.isFull()||a.preventDefault()),void(b.settings.create&&b.createItem()&&a.preventDefault());case 8:case 46:return void b.deleteSelection(a)}return!b.isFull()&&!b.isInputHidden||(f?a.metaKey:a.ctrlKey)?void 0:void a.preventDefault()},onKeyUp:function(a){var b=this;if(b.isLocked)return a&&a.preventDefault();var c=b.$control_input.val()||"";b.lastValue!==c&&(b.lastValue=c,b.onSearchChange(c),b.refreshOptions(),b.trigger("type",c))},onSearchChange:function(a){var b=this,c=b.settings.load;c&&(b.loadedSearches.hasOwnProperty(a)||(b.loadedSearches[a]=!0,b.load(function(d){c.apply(b,[a,d])})))},onFocus:function(a){var b=this,c=b.isFocused;if(b.isDisabled)return b.blur(),a&&a.preventDefault(),!1;b.ignoreFocus||(b.isFocused=!0,"focus"===b.settings.preload&&b.onSearchChange(""),c||b.trigger("focus"),b.$activeItems.length||(b.showInput(),b.setActiveItem(null),b.refreshOptions(!!b.settings.openOnFocus)),b.refreshState())},onBlur:function(a,b){var c=this;if(c.isFocused&&(c.isFocused=!1,!c.ignoreFocus)){if(!c.ignoreBlur&&document.activeElement===c.$dropdown_content[0])return c.ignoreBlur=!0,void c.onFocus(a);var d=function(){c.close(),c.setTextboxValue(""),c.setActiveItem(null),c.setActiveOption(null),c.setCaret(c.items.length),c.refreshState(),b&&b.focus&&b.focus(),c.isBlurring=!1,c.ignoreFocus=!1,c.trigger("blur")};c.isBlurring=!0,c.ignoreFocus=!0,c.settings.create&&c.settings.createOnBlur?c.createItem(null,!1,d):d()}},onOptionHover:function(a){this.ignoreHover||this.setActiveOption(a.currentTarget,!1)},onOptionSelect:function(b){var c,d,e=this;b.preventDefault&&(b.preventDefault(),b.stopPropagation()),d=a(b.currentTarget),d.hasClass("create")?e.createItem(null,function(){e.settings.closeAfterSelect&&e.close()}):void 0!==(c=d.attr("data-value"))&&(e.lastQuery=null,e.setTextboxValue(""),e.addItem(c),e.settings.closeAfterSelect?e.close():!e.settings.hideSelected&&b.type&&/mouse/.test(b.type)&&e.setActiveOption(e.getOption(c)))},onItemSelect:function(a){var b=this;b.isLocked||"multi"===b.settings.mode&&(a.preventDefault(),b.setActiveItem(a.currentTarget,a))},load:function(a){var b=this,c=b.$wrapper.addClass(b.settings.loadingClass);b.loading++,a.apply(b,[function(a){b.loading=Math.max(b.loading-1,0),a&&a.length&&(b.addOption(a),b.refreshOptions(b.isFocused&&!b.isInputHidden)),b.loading||c.removeClass(b.settings.loadingClass),b.trigger("load",a)}])},setTextboxValue:function(a){var b=this.$control_input;b.val()!==a&&(b.val(a).triggerHandler("update"),this.lastValue=a)},getValue:function(){return 1===this.tagType&&this.$input.attr("multiple")?this.items:this.items.join(this.settings.delimiter)},setValue:function(a,b){p(this,b?[]:["change"],function(){this.clear(b),this.addItems(a,b)})},setActiveItem:function(b,c){var d,e,f,g,h,i,j,k,l=this;if("single"!==l.settings.mode){if(b=a(b),!b.length)return a(l.$activeItems).removeClass("active"),l.$activeItems=[],void(l.isFocused&&l.showInput());if("mousedown"===(d=c&&c.type.toLowerCase())&&l.isShiftDown&&l.$activeItems.length){for(k=l.$control.children(".active:last"),g=Array.prototype.indexOf.apply(l.$control[0].childNodes,[k[0]]),h=Array.prototype.indexOf.apply(l.$control[0].childNodes,[b[0]]),g>h&&(j=g,g=h,h=j),e=g;e<=h;e++)i=l.$control[0].childNodes[e],-1===l.$activeItems.indexOf(i)&&(a(i).addClass("active"),l.$activeItems.push(i));c.preventDefault()}else"mousedown"===d&&l.isCtrlDown||"keydown"===d&&this.isShiftDown?b.hasClass("active")?(f=l.$activeItems.indexOf(b[0]),l.$activeItems.splice(f,1),b.removeClass("active")):l.$activeItems.push(b.addClass("active")[0]):(a(l.$activeItems).removeClass("active"),l.$activeItems=[b.addClass("active")[0]]);l.hideInput(),this.isFocused||l.focus()}},setActiveOption:function(b,c,d){var e,f,g,h,i,k=this;k.$activeOption&&k.$activeOption.removeClass("active"),k.$activeOption=null,b=a(b),b.length&&(k.$activeOption=b.addClass("active"),!c&&j(c)||(e=k.$dropdown_content.height(),f=k.$activeOption.outerHeight(!0),c=k.$dropdown_content.scrollTop()||0,g=k.$activeOption.offset().top-k.$dropdown_content.offset().top+c,h=g,i=g-e+f,g+f>e+c?k.$dropdown_content.stop().animate({scrollTop:i},d?k.settings.scrollDuration:0):g<c&&k.$dropdown_content.stop().animate({scrollTop:h},d?k.settings.scrollDuration:0)))},selectAll:function(){var a=this;"single"!==a.settings.mode&&(a.$activeItems=Array.prototype.slice.apply(a.$control.children(":not(input)").addClass("active")),a.$activeItems.length&&(a.hideInput(),a.close()),a.focus())},hideInput:function(){var a=this;a.setTextboxValue(""),a.$control_input.css({opacity:0,position:"absolute",left:a.rtl?1e4:-1e4}),a.isInputHidden=!0},showInput:function(){this.$control_input.css({opacity:1,position:"relative",left:0}),this.isInputHidden=!1},focus:function(){var a=this;a.isDisabled||(a.ignoreFocus=!0,a.$control_input[0].focus(),window.setTimeout(function(){a.ignoreFocus=!1,a.onFocus()},0))},blur:function(a){this.$control_input[0].blur(),this.onBlur(null,a)},getScoreFunction:function(a){return this.sifter.getScoreFunction(a,this.getSearchOptions())},getSearchOptions:function(){var a=this.settings,b=a.sortField;return"string"==typeof b&&(b=[{field:b}]),{fields:a.searchField,conjunction:a.searchConjunction,sort:b,nesting:a.nesting}},search:function(b){var c,d,e,f=this,g=f.settings,h=this.getSearchOptions();if(g.score&&"function"!=typeof(e=f.settings.score.apply(this,[b])))throw new Error('Selectize "score" setting must be a function that returns a function');if(b!==f.lastQuery?(f.lastQuery=b,d=f.sifter.search(b,a.extend(h,{score:e})),f.currentResults=d):d=a.extend(!0,{},f.currentResults),g.hideSelected)for(c=d.items.length-1;c>=0;c--)-1!==f.items.indexOf(k(d.items[c].id))&&d.items.splice(c,1);return d},refreshOptions:function(b){var c,e,f,g,h,i,j,l,m,n,o,p,q,r,s,t;void 0===b&&(b=!0);var u=this,w=a.trim(u.$control_input.val()),x=u.search(w),y=u.$dropdown_content,z=u.$activeOption&&k(u.$activeOption.attr("data-value"));for(g=x.items.length,"number"==typeof u.settings.maxOptions&&(g=Math.min(g,u.settings.maxOptions)),h={},i=[],c=0;c<g;c++)for(j=u.options[x.items[c].id],l=u.render("option",j),m=j[u.settings.optgroupField]||"",n=a.isArray(m)?m:[m],e=0,f=n&&n.length;e<f;e++)m=n[e],u.optgroups.hasOwnProperty(m)||(m=""),h.hasOwnProperty(m)||(h[m]=document.createDocumentFragment(),i.push(m)),h[m].appendChild(l);for(this.settings.lockOptgroupOrder&&i.sort(function(a,b){return(u.optgroups[a].$order||0)-(u.optgroups[b].$order||0)}),o=document.createDocumentFragment(),c=0,g=i.length;c<g;c++)m=i[c],u.optgroups.hasOwnProperty(m)&&h[m].childNodes.length?(p=document.createDocumentFragment(),p.appendChild(u.render("optgroup_header",u.optgroups[m])),p.appendChild(h[m]),o.appendChild(u.render("optgroup",a.extend({},u.optgroups[m],{html:v(p),dom:p})))):o.appendChild(h[m]);if(y.html(o),u.settings.highlight&&(y.removeHighlight(),x.query.length&&x.tokens.length))for(c=0,g=x.tokens.length;c<g;c++)d(y,x.tokens[c].regex);if(!u.settings.hideSelected)for(c=0,g=u.items.length;c<g;c++)u.getOption(u.items[c]).addClass("selected");q=u.canCreate(w),q&&(y.prepend(u.render("option_create",{input:w})),t=a(y[0].childNodes[0])),u.hasOptions=x.items.length>0||q,u.hasOptions?(x.items.length>0?(s=z&&u.getOption(z),s&&s.length?r=s:"single"===u.settings.mode&&u.items.length&&(r=u.getOption(u.items[0])),r&&r.length||(r=t&&!u.settings.addPrecedence?u.getAdjacentOption(t,1):y.find("[data-selectable]:first"))):r=t,u.setActiveOption(r),b&&!u.isOpen&&u.open()):(u.setActiveOption(null),b&&u.isOpen&&u.close())},addOption:function(b){var c,d,e,f=this;if(a.isArray(b))for(c=0,d=b.length;c<d;c++)f.addOption(b[c]);else(e=f.registerOption(b))&&(f.userOptions[e]=!0,f.lastQuery=null,f.trigger("option_add",e,b))},registerOption:function(a){var b=k(a[this.settings.valueField]);return void 0!==b&&null!==b&&!this.options.hasOwnProperty(b)&&(a.$order=a.$order||++this.order,this.options[b]=a,b)},registerOptionGroup:function(a){var b=k(a[this.settings.optgroupValueField]);return!!b&&(a.$order=a.$order||++this.order,this.optgroups[b]=a,b)},addOptionGroup:function(a,b){b[this.settings.optgroupValueField]=a,(a=this.registerOptionGroup(b))&&this.trigger("optgroup_add",a,b)},removeOptionGroup:function(a){this.optgroups.hasOwnProperty(a)&&(delete this.optgroups[a],this.renderCache={},this.trigger("optgroup_remove",a))},clearOptionGroups:function(){this.optgroups={},this.renderCache={},this.trigger("optgroup_clear")},updateOption:function(b,c){var d,e,f,g,h,i,j,l=this;if(b=k(b),f=k(c[l.settings.valueField]),null!==b&&l.options.hasOwnProperty(b)){if("string"!=typeof f)throw new Error("Value must be set in option data");j=l.options[b].$order,f!==b&&(delete l.options[b],-1!==(g=l.items.indexOf(b))&&l.items.splice(g,1,f)),c.$order=c.$order||j,l.options[f]=c,h=l.renderCache.item,i=l.renderCache.option,h&&(delete h[b],delete h[f]),i&&(delete i[b],delete i[f]),-1!==l.items.indexOf(f)&&(d=l.getItem(b),e=a(l.render("item",c)),d.hasClass("active")&&e.addClass("active"),d.replaceWith(e)),l.lastQuery=null,l.isOpen&&l.refreshOptions(!1)}},removeOption:function(a,b){var c=this;a=k(a);var d=c.renderCache.item,e=c.renderCache.option;d&&delete d[a],e&&delete e[a],delete c.userOptions[a],delete c.options[a],c.lastQuery=null,c.trigger("option_remove",a),c.removeItem(a,b)},clearOptions:function(){var b=this;b.loadedSearches={},b.userOptions={},b.renderCache={};var c=b.options;a.each(b.options,function(a,d){-1==b.items.indexOf(a)&&delete c[a]}),b.options=b.sifter.items=c,b.lastQuery=null,b.trigger("option_clear")},getOption:function(a){return this.getElementWithValue(a,this.$dropdown_content.find("[data-selectable]"))},getAdjacentOption:function(b,c){var d=this.$dropdown.find("[data-selectable]"),e=d.index(b)+c;return e>=0&&e<d.length?d.eq(e):a()},getElementWithValue:function(b,c){if(void 0!==(b=k(b))&&null!==b)for(var d=0,e=c.length;d<e;d++)if(c[d].getAttribute("data-value")===b)return a(c[d]);return a()},getItem:function(a){return this.getElementWithValue(a,this.$control.children())},addItems:function(b,c){this.buffer=document.createDocumentFragment();for(var d=this.$control[0].childNodes,e=0;e<d.length;e++)this.buffer.appendChild(d[e]);for(var f=a.isArray(b)?b:[b],e=0,g=f.length;e<g;e++)this.isPending=e<g-1,this.addItem(f[e],c);var h=this.$control[0];h.insertBefore(this.buffer,h.firstChild),this.buffer=null},addItem:function(b,c){p(this,c?[]:["change"],function(){var d,e,f,g,h,i=this,j=i.settings.mode;if(b=k(b),-1!==i.items.indexOf(b))return void("single"===j&&i.close());i.options.hasOwnProperty(b)&&("single"===j&&i.clear(c),"multi"===j&&i.isFull()||(d=a(i.render("item",i.options[b])),h=i.isFull(),i.items.splice(i.caretPos,0,b),i.insertAtCaret(d),(!i.isPending||!h&&i.isFull())&&i.refreshState(),i.isSetup&&(f=i.$dropdown_content.find("[data-selectable]"),i.isPending||(e=i.getOption(b),g=i.getAdjacentOption(e,1).attr("data-value"),i.refreshOptions(i.isFocused&&"single"!==j),g&&i.setActiveOption(i.getOption(g))),!f.length||i.isFull()?i.close():i.isPending||i.positionDropdown(),i.updatePlaceholder(),i.trigger("item_add",b,d),i.isPending||i.updateOriginalInput({silent:c}))))})},removeItem:function(b,c){var d,e,f,g=this;d=b instanceof a?b:g.getItem(b),b=k(d.attr("data-value")),-1!==(e=g.items.indexOf(b))&&(d.remove(),d.hasClass("active")&&(f=g.$activeItems.indexOf(d[0]),g.$activeItems.splice(f,1)),g.items.splice(e,1),g.lastQuery=null,!g.settings.persist&&g.userOptions.hasOwnProperty(b)&&g.removeOption(b,c),e<g.caretPos&&g.setCaret(g.caretPos-1),g.refreshState(),g.updatePlaceholder(),g.updateOriginalInput({silent:c}),g.positionDropdown(),g.trigger("item_remove",b,d))},createItem:function(b,c){var d=this,e=d.caretPos;b=b||a.trim(d.$control_input.val()||"");var f=arguments[arguments.length-1];if("function"!=typeof f&&(f=function(){}),"boolean"!=typeof c&&(c=!0),!d.canCreate(b))return f(),!1;d.lock();var g="function"==typeof d.settings.create?this.settings.create:function(a){var b={};return b[d.settings.labelField]=a,b[d.settings.valueField]=a,b},h=n(function(a){if(d.unlock(),!a||"object"!=typeof a)return f();var b=k(a[d.settings.valueField]);if("string"!=typeof b)return f();d.setTextboxValue(""),d.addOption(a),d.setCaret(e),d.addItem(b),d.refreshOptions(c&&"single"!==d.settings.mode),f(a)}),i=g.apply(this,[b,h]);return void 0!==i&&h(i),!0},refreshItems:function(){this.lastQuery=null,this.isSetup&&this.addItem(this.items),this.refreshState(),this.updateOriginalInput()},refreshState:function(){this.refreshValidityState(),this.refreshClasses()},refreshValidityState:function(){if(!this.isRequired)return!1;var a=!this.items.length;this.isInvalid=a,this.$control_input.prop("required",a),this.$input.prop("required",!a)},refreshClasses:function(){var b=this,c=b.isFull(),d=b.isLocked;b.$wrapper.toggleClass("rtl",b.rtl),b.$control.toggleClass("focus",b.isFocused).toggleClass("disabled",b.isDisabled).toggleClass("required",b.isRequired).toggleClass("invalid",b.isInvalid).toggleClass("locked",d).toggleClass("full",c).toggleClass("not-full",!c).toggleClass("input-active",b.isFocused&&!b.isInputHidden).toggleClass("dropdown-active",b.isOpen).toggleClass("has-options",!a.isEmptyObject(b.options)).toggleClass("has-items",b.items.length>0),b.$control_input.data("grow",!c&&!d)},isFull:function(){
|
4 |
+
return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems},updateOriginalInput:function(a){var b,c,d,e,f=this;if(a=a||{},1===f.tagType){for(d=[],b=0,c=f.items.length;b<c;b++)e=f.options[f.items[b]][f.settings.labelField]||"",d.push('<option value="'+l(f.items[b])+'" selected="selected">'+l(e)+"</option>");d.length||this.$input.attr("multiple")||d.push('<option value="" selected="selected"></option>'),f.$input.html(d.join(""))}else f.$input.val(f.getValue()),f.$input.attr("value",f.$input.val());f.isSetup&&(a.silent||f.trigger("change",f.$input.val()))},updatePlaceholder:function(){if(this.settings.placeholder){var a=this.$control_input;this.items.length?a.removeAttr("placeholder"):a.attr("placeholder",this.settings.placeholder),a.triggerHandler("update",{force:!0})}},open:function(){var a=this;a.isLocked||a.isOpen||"multi"===a.settings.mode&&a.isFull()||(a.focus(),a.isOpen=!0,a.refreshState(),a.$dropdown.css({visibility:"hidden",display:"block"}),a.positionDropdown(),a.$dropdown.css({visibility:"visible"}),a.trigger("dropdown_open",a.$dropdown))},close:function(){var a=this,b=a.isOpen;"single"===a.settings.mode&&a.items.length&&(a.hideInput(),a.isBlurring||a.$control_input.blur()),a.isOpen=!1,a.$dropdown.hide(),a.setActiveOption(null),a.refreshState(),b&&a.trigger("dropdown_close",a.$dropdown)},positionDropdown:function(){var a=this.$control,b="body"===this.settings.dropdownParent?a.offset():a.position();b.top+=a.outerHeight(!0),this.$dropdown.css({width:a[0].getBoundingClientRect().width,top:b.top,left:b.left})},clear:function(a){var b=this;b.items.length&&(b.$control.children(":not(input)").remove(),b.items=[],b.lastQuery=null,b.setCaret(0),b.setActiveItem(null),b.updatePlaceholder(),b.updateOriginalInput({silent:a}),b.refreshState(),b.showInput(),b.trigger("clear"))},insertAtCaret:function(a){var b=Math.min(this.caretPos,this.items.length),c=a[0],d=this.buffer||this.$control[0];0===b?d.insertBefore(c,d.firstChild):d.insertBefore(c,d.childNodes[b]),this.setCaret(b+1)},deleteSelection:function(b){var c,d,e,f,g,h,i,j,k,l=this;if(e=b&&8===b.keyCode?-1:1,f=r(l.$control_input[0]),l.$activeOption&&!l.settings.hideSelected&&(i=l.getAdjacentOption(l.$activeOption,-1).attr("data-value")),g=[],l.$activeItems.length){for(k=l.$control.children(".active:"+(e>0?"last":"first")),h=l.$control.children(":not(input)").index(k),e>0&&h++,c=0,d=l.$activeItems.length;c<d;c++)g.push(a(l.$activeItems[c]).attr("data-value"));b&&(b.preventDefault(),b.stopPropagation())}else(l.isFocused||"single"===l.settings.mode)&&l.items.length&&(e<0&&0===f.start&&0===f.length?g.push(l.items[l.caretPos-1]):e>0&&f.start===l.$control_input.val().length&&g.push(l.items[l.caretPos]));if(!g.length||"function"==typeof l.settings.onDelete&&!1===l.settings.onDelete.apply(l,[g]))return!1;for(void 0!==h&&l.setCaret(h);g.length;)l.removeItem(g.pop());return l.showInput(),l.positionDropdown(),l.refreshOptions(!0),i&&(j=l.getOption(i),j.length&&l.setActiveOption(j)),!0},advanceSelection:function(a,b){var c,d,e,f,g,h=this;0!==a&&(h.rtl&&(a*=-1),c=a>0?"last":"first",d=r(h.$control_input[0]),h.isFocused&&!h.isInputHidden?(f=h.$control_input.val().length,(a<0?0===d.start&&0===d.length:d.start===f)&&!f&&h.advanceCaret(a,b)):(g=h.$control.children(".active:"+c),g.length&&(e=h.$control.children(":not(input)").index(g),h.setActiveItem(null),h.setCaret(a>0?e+1:e))))},advanceCaret:function(a,b){var c,d,e=this;0!==a&&(c=a>0?"next":"prev",e.isShiftDown?(d=e.$control_input[c](),d.length&&(e.hideInput(),e.setActiveItem(d),b&&b.preventDefault())):e.setCaret(e.caretPos+a))},setCaret:function(b){var c=this;if(b="single"===c.settings.mode?c.items.length:Math.max(0,Math.min(c.items.length,b)),!c.isPending){var d,e,f,g;for(f=c.$control.children(":not(input)"),d=0,e=f.length;d<e;d++)g=a(f[d]).detach(),d<b?c.$control_input.before(g):c.$control.append(g)}c.caretPos=b},lock:function(){this.close(),this.isLocked=!0,this.refreshState()},unlock:function(){this.isLocked=!1,this.refreshState()},disable:function(){var a=this;a.$input.prop("disabled",!0),a.$control_input.prop("disabled",!0).prop("tabindex",-1),a.isDisabled=!0,a.lock()},enable:function(){var a=this;a.$input.prop("disabled",!1),a.$control_input.prop("disabled",!1).prop("tabindex",a.tabIndex),a.isDisabled=!1,a.unlock()},destroy:function(){var b=this,c=b.eventNS,d=b.revertSettings;b.trigger("destroy"),b.off(),b.$wrapper.remove(),b.$dropdown.remove(),b.$input.html("").append(d.$children).removeAttr("tabindex").removeClass("selectized").attr({tabindex:d.tabindex}).show(),b.$control_input.removeData("grow"),b.$input.removeData("selectize"),0==--w.count&&w.$testInput&&(w.$testInput.remove(),w.$testInput=void 0),a(window).off(c),a(document).off(c),a(document.body).off(c),delete b.$input[0].selectize},render:function(b,c){var d,e,f="",g=!1,h=this;return"option"!==b&&"item"!==b||(d=k(c[h.settings.valueField]),g=!!d),g&&(j(h.renderCache[b])||(h.renderCache[b]={}),h.renderCache[b].hasOwnProperty(d))?h.renderCache[b][d]:(f=a(h.settings.render[b].apply(this,[c,l])),"option"===b||"option_create"===b?c[h.settings.disabledField]||f.attr("data-selectable",""):"optgroup"===b&&(e=c[h.settings.optgroupValueField]||"",f.attr("data-group",e),c[h.settings.disabledField]&&f.attr("data-disabled","")),"option"!==b&&"item"!==b||f.attr("data-value",d||""),g&&(h.renderCache[b][d]=f[0]),f[0])},clearCache:function(a){var b=this;void 0===a?b.renderCache={}:delete b.renderCache[a]},canCreate:function(a){var b=this;if(!b.settings.create)return!1;var c=b.settings.createFilter;return a.length&&("function"!=typeof c||c.apply(b,[a]))&&("string"!=typeof c||new RegExp(c).test(a))&&(!(c instanceof RegExp)||c.test(a))}}),w.count=0,w.defaults={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:!1,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,maxOptions:1e3,maxItems:null,hideSelected:null,addPrecedence:!1,selectOnTab:!1,preload:!1,allowEmptyOption:!1,closeAfterSelect:!1,scrollDuration:60,loadThrottle:300,loadingClass:"loading",dataAttr:"data-data",optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"selectize-control",inputClass:"selectize-input",dropdownClass:"selectize-dropdown",dropdownContentClass:"selectize-dropdown-content",dropdownParent:null,copyClassesToDropdown:!0,render:{}},a.fn.selectize=function(b){var c=a.fn.selectize.defaults,d=a.extend({},c,b),e=d.dataAttr,f=d.labelField,g=d.valueField,h=d.disabledField,i=d.optgroupField,j=d.optgroupLabelField,l=d.optgroupValueField,m=function(b,c){var h,i,j,k,l=b.attr(e);if(l)for(c.options=JSON.parse(l),h=0,i=c.options.length;h<i;h++)c.items.push(c.options[h][g]);else{var m=a.trim(b.val()||"");if(!d.allowEmptyOption&&!m.length)return;for(j=m.split(d.delimiter),h=0,i=j.length;h<i;h++)k={},k[f]=j[h],k[g]=j[h],c.options.push(k);c.items=j}},n=function(b,c){var m,n,o,p,q=c.options,r={},s=function(a){var b=e&&a.attr(e);return"string"==typeof b&&b.length?JSON.parse(b):null},t=function(b,e){b=a(b);var j=k(b.val());if(j||d.allowEmptyOption)if(r.hasOwnProperty(j)){if(e){var l=r[j][i];l?a.isArray(l)?l.push(e):r[j][i]=[l,e]:r[j][i]=e}}else{var m=s(b)||{};m[f]=m[f]||b.text(),m[g]=m[g]||j,m[h]=m[h]||b.prop("disabled"),m[i]=m[i]||e,r[j]=m,q.push(m),b.is(":selected")&&c.items.push(j)}};for(c.maxItems=b.attr("multiple")?null:1,p=b.children(),m=0,n=p.length;m<n;m++)o=p[m].tagName.toLowerCase(),"optgroup"===o?function(b){var d,e,f,g,i;for(b=a(b),f=b.attr("label"),f&&(g=s(b)||{},g[j]=f,g[l]=f,g[h]=b.prop("disabled"),c.optgroups.push(g)),i=a("option",b),d=0,e=i.length;d<e;d++)t(i[d],f)}(p[m]):"option"===o&&t(p[m])};return this.each(function(){if(!this.selectize){var e=a(this),f=this.tagName.toLowerCase(),g=e.attr("placeholder")||e.attr("data-placeholder");g||d.allowEmptyOption||(g=e.children('option[value=""]').text());var h={placeholder:g,options:[],optgroups:[],items:[]};"select"===f?n(e,h):m(e,h),new w(e,a.extend(!0,{},c,h,b))}})},a.fn.selectize.defaults=w.defaults,a.fn.selectize.support={validity:i},w.define("drag_drop",function(b){if(!a.fn.sortable)throw new Error('The "drag_drop" plugin requires jQuery UI "sortable".');if("multi"===this.settings.mode){var c=this;c.lock=function(){var a=c.lock;return function(){var b=c.$control.data("sortable");return b&&b.disable(),a.apply(c,arguments)}}(),c.unlock=function(){var a=c.unlock;return function(){var b=c.$control.data("sortable");return b&&b.enable(),a.apply(c,arguments)}}(),c.setup=function(){var b=c.setup;return function(){b.apply(this,arguments);var d=c.$control.sortable({items:"[data-value]",forcePlaceholderSize:!0,disabled:c.isLocked,start:function(a,b){b.placeholder.css("width",b.helper.css("width")),d.css({overflow:"visible"})},stop:function(){d.css({overflow:"hidden"});var b=c.$activeItems?c.$activeItems.slice():null,e=[];d.children("[data-value]").each(function(){e.push(a(this).attr("data-value"))}),c.setValue(e),c.setActiveItem(b)}})}}()}}),w.define("dropdown_header",function(b){var c=this;b=a.extend({title:"Untitled",headerClass:"selectize-dropdown-header",titleRowClass:"selectize-dropdown-header-title",labelClass:"selectize-dropdown-header-label",closeClass:"selectize-dropdown-header-close",html:function(a){return'<div class="'+a.headerClass+'"><div class="'+a.titleRowClass+'"><span class="'+a.labelClass+'">'+a.title+'</span><a href="javascript:void(0)" class="'+a.closeClass+'">×</a></div></div>'}},b),c.setup=function(){var d=c.setup;return function(){d.apply(c,arguments),c.$dropdown_header=a(b.html(b)),c.$dropdown.prepend(c.$dropdown_header)}}()}),w.define("optgroup_columns",function(b){var c=this;b=a.extend({equalizeWidth:!0,equalizeHeight:!0},b),this.getAdjacentOption=function(b,c){var d=b.closest("[data-group]").find("[data-selectable]"),e=d.index(b)+c;return e>=0&&e<d.length?d.eq(e):a()},this.onKeyDown=function(){var a=c.onKeyDown;return function(b){var d,e,f,g;return!this.isOpen||37!==b.keyCode&&39!==b.keyCode?a.apply(this,arguments):(c.ignoreHover=!0,g=this.$activeOption.closest("[data-group]"),d=g.find("[data-selectable]").index(this.$activeOption),g=37===b.keyCode?g.prev("[data-group]"):g.next("[data-group]"),f=g.find("[data-selectable]"),e=f.eq(Math.min(f.length-1,d)),void(e.length&&this.setActiveOption(e)))}}();var d=function(){var a,b=d.width,c=document;return void 0===b&&(a=c.createElement("div"),a.innerHTML='<div style="width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;"><div style="width:1px;height:100px;"></div></div>',a=a.firstChild,c.body.appendChild(a),b=d.width=a.offsetWidth-a.clientWidth,c.body.removeChild(a)),b},e=function(){var e,f,g,h,i,j,k;if(k=a("[data-group]",c.$dropdown_content),(f=k.length)&&c.$dropdown_content.width()){if(b.equalizeHeight){for(g=0,e=0;e<f;e++)g=Math.max(g,k.eq(e).height());k.css({height:g})}b.equalizeWidth&&(j=c.$dropdown_content.innerWidth()-d(),h=Math.round(j/f),k.css({width:h}),f>1&&(i=j-h*(f-1),k.eq(f-1).css({width:i})))}};(b.equalizeHeight||b.equalizeWidth)&&(m.after(this,"positionDropdown",e),m.after(this,"refreshOptions",e))}),w.define("remove_button",function(b){b=a.extend({label:"×",title:"Remove",className:"remove",append:!0},b);if("single"===this.settings.mode)return void function(b,c){c.className="remove-single";var d=b,e='<a href="javascript:void(0)" class="'+c.className+'" tabindex="-1" title="'+l(c.title)+'">'+c.label+"</a>",f=function(b,c){return a("<span>").append(b).append(c)};b.setup=function(){var g=d.setup;return function(){if(c.append){var h=a(d.$input.context).attr("id"),i=(a("#"+h),d.settings.render.item);d.settings.render.item=function(a){return f(i.apply(b,arguments),e)}}g.apply(b,arguments),b.$control.on("click","."+c.className,function(a){a.preventDefault(),d.isLocked||d.clear()})}}()}(this,b);!function(b,c){var d=b,e='<a href="javascript:void(0)" class="'+c.className+'" tabindex="-1" title="'+l(c.title)+'">'+c.label+"</a>",f=function(a,b){var c=a.search(/(<\/[^>]+>\s*)$/);return a.substring(0,c)+b+a.substring(c)};b.setup=function(){var g=d.setup;return function(){if(c.append){var h=d.settings.render.item;d.settings.render.item=function(a){return f(h.apply(b,arguments),e)}}g.apply(b,arguments),b.$control.on("click","."+c.className,function(b){if(b.preventDefault(),!d.isLocked){var c=a(b.currentTarget).parent();d.setActiveItem(c),d.deleteSelection()&&d.setCaret(d.items.length)}})}}()}(this,b)}),w.define("restore_on_backspace",function(a){var b=this;a.text=a.text||function(a){return a[this.settings.labelField]},this.onKeyDown=function(){var c=b.onKeyDown;return function(b){var d,e;return 8===b.keyCode&&""===this.$control_input.val()&&!this.$activeItems.length&&(d=this.caretPos-1)>=0&&d<this.items.length?(e=this.options[this.items[d]],this.deleteSelection(b)&&(this.setTextbo
|